3.1 KiB
3.1 KiB
Copilot Instructions for line-of-sight
Purpose
This repository is a full-stack geospatial app:
frontend/: React + Vite + MapLibre UIbackend/: Express API with PostGIS queriesdocker/anddocker-compose.yml: local orchestration and DB initialization
Prefer small, focused changes that keep frontend/backend contracts stable.
First Commands to Know
Use these commands first when validating changes.
Docker-first workflow (preferred)
- Start stack:
docker-compose up --build - Stop stack:
docker-compose down - Backend tests:
docker-compose exec backend npm test - Frontend unit tests:
docker-compose exec frontend npm test -- --run - Frontend E2E tests:
docker-compose exec frontend npm run test:e2e - Seed geodata:
docker-compose exec backend npm run seed-data
Local workflow (without Docker)
- Root Node version:
nvm use(uses.nvmrc, currently Node 24) - Backend dev:
cd backend && npm install && npm run dev - Frontend dev:
cd frontend && npm install && npm run start
Architecture and Boundaries
- Backend API entrypoint:
backend/app/server.js- Defines
GET /api/line-of-sightandGET /api/health - Performs destination/path generation and PostGIS querying
- Defines
- Frontend app entrypoint:
frontend/src/App.jsx- Owns map lifecycle, animation, and UI state
- Calls backend via
frontend/src/services/api.js
- Database bootstrap:
docker/init.sql- Enables PostGIS and creates
citieswith spatial index
- Enables PostGIS and creates
When changing behavior, prefer backend geospatial logic over duplicating calculations in the frontend.
Project Conventions
- Keep geospatial coordinates in WGS84 (
SRID 4326) and preserve existing lat/lon parameter naming. - Keep API responses JSON-compatible and backward compatible unless explicitly requested.
- Keep frontend styles in
frontend/src/styles/(project uses custom CSS, not utility CSS frameworks). - Avoid broad refactors in
App.jsxunless task requires it; map lifecycle and refs are tightly coupled.
Testing Expectations
- Backend tests live in
backend/tests/and use Jest + Supertest. - Frontend unit tests live in
frontend/src/__tests__/and use Vitest + Testing Library. - E2E tests live in
frontend/e2e/and use Playwright. - For feature changes:
- Run the closest unit tests first.
- Run E2E tests when user flows or map interactions are changed.
Common Pitfalls
- PostGIS must be available before backend geospatial endpoints are exercised.
docker-compose.ymlpins Postgres service tolinux/arm64; this can affect non-ARM hosts.- Data import script (
backend/scripts/import_cities.js) depends onwgetandunzipavailability. README.mdcontains roadmap/history notes; trust current scripts/config in source files first.
CI Notes
CI config is in .gitea/workflows/test.yml.
- Backend and frontend tests run on Node 24.
- Frontend unit tests run with
npm test -- --run. - E2E runs in Playwright container.
Link, Do Not Duplicate
For detailed setup and product context, reference:
README.mdGEMINI.md
Keep this file focused on actionable agent guidance and repo-specific guardrails.