Personal Spatial CRM for curated Google Maps place bookmarks with public sharing via map + KML export.
- Web: Vite + React + TanStack Router (file-based routing)
- API: Hono on Cloudflare Workers
- Database: Supabase PostgreSQL with PostGIS, Drizzle ORM
- Maps: Mapbox GL JS
- Monorepo: Turborepo
- Linting/Formatting: Biome
@placeshub/web: Vite + React frontend@placeshub/api: Hono API on Cloudflare Workers@placeshub/db: Drizzle ORM schema and migrations@repo/ui: Shared React components@repo/typescript-config: Shared tsconfig
pnpm installpnpm devThis starts the web app (port 3001) and API server (port 4000) concurrently.
pnpm buildpnpm check # Biome check
pnpm format # Biome format
pnpm check-types # TypeScript type-checkCopy .env.example to .env in each app and configure:
- Supabase project URL and anon key
- Google Places API key
- Mapbox access token
- Web: Cloudflare Pages
- API: Cloudflare Workers