A map-first job explorer: company offices on the map, real open positions, and an AI agent that can search, fly the camera, and open JDs.
Work mode reads an imported recruitment catalog from Postgres (no offline seed fallback). Domain mode is a general POI map. Data comes only from reviewed sources (campus-hire radar snapshot, official career pages, reviewed ATS JSON). Direct scraping of BOSS / 牛客 / 小红书 / 实习僧 is not supported.
Needs Node 20+, Docker (PostGIS), and an AMap JS API key for the map.
# 1. Local database
make db-up
make db-migrate # needs DATABASE_URL, see server/.env.example
# 2. App
cd server
cp .env.example .env.local
# fill NEXT_PUBLIC_AMAP_KEY + NEXT_PUBLIC_AMAP_SECURITY_CODE
npm install
npm run import:seed:apply
npm run devOpen http://localhost:3000.
Optional: Tencent / Baidu JS keys in .env.local for other basemaps; AMAP_WEB_KEY (with Baidu / Tencent REST fallbacks) for office geocoding. Never print or commit .env.local.
JobMap/
├── server/ # Next.js app (UI + /api/*)
├── crawler/ # Python importer (radar / official career / ATS)
├── db/ # PostGIS migrations + apply scripts
├── tests/ # database integration tests
├── Makefile # db-up, migrate, importer tests, …
└── docker-compose.yml # local PostGIS only
make help # supported make targets
make db-up # start PostGIS
make db-migrate # apply SQL migrations
make test-unit # crawler unit tests
cd server && npm test # app tests
cd server && npm run typecheckMIT License © 2026 Yincan Huang