A workspace-scoped people-location mapping application. Map your people and places across mobile and web from a single codebase.
| Layer | Technology |
|---|---|
| API | Elysia on Bun |
| Database | PostGIS 16 (Docker) |
| Mobile | React Native 0.80 + NativeWind |
| Web | react-native-web via Webpack |
| Map | MapLibre GL JS / MapLibre RN |
| Client SDK | Eden Treaty — fully typed, auto-generated |
| Basemap | Planetiler → PMTiles |
| Quality | Biome (format + lint) + TypeScript |
- Bun ≥ 1.2
- Docker Desktop (for PostGIS)
cp .env.example .env # configure database credentials
bun install # install all dependencies
bun run db:up # start PostGIS
bun run db:migrate # apply SQL migrations
bun run db:seed # load Portland dev databun run dev:server # http://localhost:3000bun run dev:mobile # Metro bundler (for iOS/Android)
bun run dev:web # Webpack dev server → http://localhost:3001
bun run ios # launch iOS simulatorbun run basemap:refresh # generate Oregon PMTiles via Planetiler Dockerdoors/
├── apps/
│ ├── server/ # Elysia API — routes, middleware, DB queries
│ └── mobile/ # React Native app (iOS/Android/Web)
├── packages/
│ └── api/ # Eden Treaty client & shared type schemas
├── data/ # Planetiler output (gitignored)
├── docker-compose.yml # PostGIS service
├── biome.json # Lint + format config
└── tsconfig.base.json # Shared TypeScript config
All data routes are versioned under /v1 and require the X-Workspace-Id header.
| Method | Path | Description |
|---|---|---|
GET |
/health |
Service health |
GET |
/v1/locations |
List locations |
GET |
/v1/people |
List people |
GET |
/v1/map/people |
GeoJSON FeatureCollection for map viewport |
GET |
/v1/stats/* |
Histogram stats (location type, etc.) |
bun run check # format + lint + safe fixes
bun run typecheck # TypeScript across all workspaces
bun run ci # read-only Biome check (CI)bun run db:up/bun run db:down— start/stop PostGISbun run db:migrate— run SQL migrationsbun run db:seed— seed Portland sample databun run db:reseed— clear dev workspace data and reseed
The seeded workspace ID is exported as DEV_WORKSPACE_ID from @doors/api.