No description
- TypeScript 46.4%
- Python 28%
- HTML 17.8%
- CSS 6.9%
- JavaScript 0.7%
- Other 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Der geteilte quiz.ts-Runner zog jede Frage rein zufällig, sodass sich Wörter in einer 10er-Runde wiederholen konnten. Question bekommt jetzt einen optionalen `key`; der Runner meidet Keys, die in dieser Runde schon dran waren (begrenzte Retries, damit ein kleiner Pool nie endlos schleift). Keys gesetzt für Eloquenz (Wort), Vokabeln (DE-Wort) und Kennzeichen (Code). Bekannte Zahlen und Verkehrsschilder hatten bereits ein eigenes No-Repeat-Deck. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017YNQ1XZ3R8X7xrMq95gyhY |
||
| .forgejo/workflows | ||
| backend | ||
| design | ||
| docs | ||
| enrichment-playbooks | ||
| frontend | ||
| games | ||
| work-items | ||
| .gitignore | ||
| CLAUDE.md | ||
| enrichment-at.md | ||
| enrichment-be.md | ||
| enrichment-ch.md | ||
| enrichment-countries.md | ||
| enrichment-fr.md | ||
| enrichment-it.md | ||
| enrichment-lu.md | ||
| enrichment-nl.md | ||
| enrichment.md | ||
| README.md | ||
| TODO.md | ||
off-the-path
A web app for family road trips: enter a start and end (driving only for now), and it shows kid-friendly attractions along the route on a map. Starts with Germany (Mecklenburg-Vorpommern seed data), built to expand across Europe.
Stack
- Backend: FastAPI + SQLAlchemy 2.0 + GeoAlchemy2, PostgreSQL + PostGIS.
Attractions "along the route" are found with a PostGIS corridor query
(
ST_DWithin+ order byST_LineLocatePoint). Routing/geocoding via OpenRouteService (driving-car), kept behind our own API so it can be swapped or self-hosted later. Until an ORS key is set,/routeuses a straight line between the two points and start/end must be given aslat,lon(no geocoding). - Frontend: (planned) Vite + React + MapLibre GL.
- API: auto OpenAPI/Swagger at
/docs— the basis for the future phone app.
Backend — run locally
Needs a PostGIS database and an OpenRouteService API key.
cd backend
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # set DATABASE_URL + ORS_API_KEY
uvicorn app.main:app --reload
Postgres with PostGIS for local dev:
docker run -d --name otp-db -e POSTGRES_USER=offthepath -e POSTGRES_PASSWORD=offthepath \
-e POSTGRES_DB=offthepath -p 5432:5432 postgis/postgis:17-3.5
On first start the app enables PostGIS, creates the schema, and seeds the initial attractions.
Endpoints
GET /api/healthGET /api/attractions?country=DE&age=6GET /api/route?start=52.52,13.40&end=54.31,13.09&radius_km=20&age=6(start/end arelat,lon; once an ORS key is set they also accept place names)
Deployment
Deployed from the mf-server repo (Ansible): a container behind Caddy at
off-the-path.martinfaust.com, using the shared PostGIS instance (ensure_db),
frontend served static with /api reverse-proxied to this backend.
Notes / TODO
- Websites for the seed attractions are not filled in yet.
- Add Alembic migrations once the schema settles.
- Cache computed routes to stay within the ORS free-tier quota.