No description
  • TypeScript 47.8%
  • CSS 27.2%
  • Python 23.5%
  • Shell 1.1%
  • HTML 0.4%
Find a file
2026-05-10 13:29:39 +02:00
.cursor/rules Cursor fixed a bunch of stuff, all station were gone. Also fixed the scrapper, RTK2GO banned us, see if that clears out 2026-05-10 13:29:39 +02:00
backend Cursor fixed a bunch of stuff, all station were gone. Also fixed the scrapper, RTK2GO banned us, see if that clears out 2026-05-10 13:29:39 +02:00
docs Cursor fixed a bunch of stuff, all station were gone. Also fixed the scrapper, RTK2GO banned us, see if that clears out 2026-05-10 13:29:39 +02:00
frontend Cursor fixed a bunch of stuff, all station were gone. Also fixed the scrapper, RTK2GO banned us, see if that clears out 2026-05-10 13:29:39 +02:00
infra Cursor fixed a bunch of stuff, all station were gone. Also fixed the scrapper, RTK2GO banned us, see if that clears out 2026-05-10 13:29:39 +02:00
.env.example Cursor fixed a bunch of stuff, all station were gone. Also fixed the scrapper, RTK2GO banned us, see if that clears out 2026-05-10 13:29:39 +02:00
.gitignore Cursor fixed a bunch of stuff, all station were gone. Also fixed the scrapper, RTK2GO banned us, see if that clears out 2026-05-10 13:29:39 +02:00
README.md Cursor fixed a bunch of stuff, all station were gone. Also fixed the scrapper, RTK2GO banned us, see if that clears out 2026-05-10 13:29:39 +02:00

SurvSupport.com

Mapfirst web app for discovering public surveying and GNSS infrastructure layers. The home page renders a Leaflet map of NTRIP base stations grouped by country, sourced from public NTRIP casters around the world.

Live site: https://survsupport.com

Stack

  • Backend FastAPI + SQLAlchemy + APScheduler (Python 3.13)
  • Database PostgreSQL (currently 17, served by the system postgresql package)
  • Frontend React 18 + TypeScript + Vite + Leaflet
  • Reverse proxy nginx with Let's Encrypt TLS

Repository layout

.
├── backend/           FastAPI app (see backend/README.md)
├── frontend/          React/Vite SPA (see frontend/README.md)
├── infra/
│   ├── nginx/         Production nginx config (deployed to /etc/nginx)
│   ├── systemd/       systemd unit files (deployed to /etc/systemd/system)
│   └── cleanup.sh     Idempotent consolidation/repair script (sudo)
├── docs/              All design + operational documentation (start here)
└── .env.example       Template for the runtime config

Documentation

Read these in order:

  1. docs/architecture.md components and data flow
  2. docs/data-model.md database schema
  3. docs/api.md HTTP API reference
  4. docs/ntrip.md NTRIP protocol quirks (read this before touching ntrip_fetcher.py / ntrip_parser.py)
  5. docs/operations.md runbook (add/refresh/inspect networks, troubleshoot)
  6. docs/deployment.md production setup
  7. docs/development.md local dev loop

Production layout (single source of truth)

Everything lives under /var/www/gnsspro.com/html/:

What Where
Backend code /var/www/gnsspro.com/html/backend/
Backend service survsupport-api.service (systemd, port 8000)
Backend env /var/www/gnsspro.com/html/.env
Frontend source /var/www/gnsspro.com/html/frontend/
Frontend bundle /var/www/gnsspro.com/html/frontend/dist/
nginx config /etc/nginx/sites-available/survsupport.conf (mirrored from infra/nginx/survsupport.conf)
Database survsupport database on local PostgreSQL

There is one — and only one — copy of each. If you find duplicate trees (e.g. /home/julian/survsupport/), run sudo bash infra/cleanup.sh to reconsolidate.

Keeping these docs current

Whenever you change code, update the corresponding doc in the same change. A Cursor rule (.cursor/rules/keep-docs-current.mdc) reminds the AI agent to do this; please do it manually too. The mapping from code → doc is listed in that rule.