尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A neighbourhood decision engine for people moving to London. CommuteTimeMap shows where you can get to in N minutes — this app tells you which neighbourhoods inside that area you should consider living in.
Read STRATEGY.md first — it explains the product framing, architecture, and staged roadmap. This README only covers running the code.檢視完整 README ↗A neighbourhood decision engine for people moving to London. CommuteTimeMap shows where you can get to in N minutes — this app tells you which neighbourhoods inside that area you should consider living in.
Read
STRATEGY.mdfirst — it explains the product framing, architecture, and staged roadmap. This README only covers running the code.
A working Next.js + TypeScript + MapLibre app with:
The default commute provider uses a reviewed static matrix plus clearly labelled distance estimates, so the public site stays fast and does not overwhelm TfL's Journey Planner. TfL routing remains an opt-in deployment setting. Rent values are static neighbourhood-level estimates reviewed for discovery use, with room values derived from listing-sample regional averages and the same base rent model.
# 1. Install dependencies
npm install
# 2. (Optional) Get a MapTiler API key for nicer map tiles
# Sign up free at https://www.maptiler.com/cloud/
# Then:
cp .env.local.example .env.local
# Edit .env.local and paste your key into NEXT_PUBLIC_MAPTILER_KEY.
# You CAN skip this — the app falls back to a no-key demo style.
# 3. Run the dev server
npm run dev
# 4. Open http://localhost:3000
[User inputs] ─┐
▼
lib/store.ts (Zustand)
│
├──▶ ControlPanel (left)
├──▶ NeighbourhoodList (left)
├──▶ Map (right)
└──▶ DetailDrawer (bottom)
lib/data/neighbourhoods.ts ──┐
lib/data/destinations.ts ────┤
▼
lib/scoring.ts
lib/commute.ts (RoutingProvider)
lib/affordability.ts
For the full architecture rationale, see STRATEGY.md §3.
This app is public-transport-first. Driving estimates are intentionally not supported.
By default, /api/commute uses the reviewed static matrix and a distance-based estimate so every neighbourhood receives a fast result with a visible source. Set ROUTING_PROVIDER=tfl to opt into live Journey Planner calls; individual failures still fall back to the same estimate model. Route summaries distinguish access, public transport, interchange and final walk, and do not invent exact line-by-line instructions where the system lacks reliable route legs. The sampled isochrone combines neighbourhood results with a network-free grid, which keeps the visual shape aligned with the ranking without creating hundreds of public API requests per visit.
For an isolated local preview, npm run dev:static starts Next on port 3001 with the same network-free routing provider.
The map renders official London borough boundaries from ONS Local Authority Districts May 2024 ultra-generalised clipped boundaries. Borough search highlights the selected borough boundary on the satellite map.
Neighbourhoods use launch footprints from lib/data/polygons.ts. If a neighbourhood later gets a hand-drawn or LSOA-derived Neighbourhood.polygon, the map will use that explicit geometry first.
Rent assumptions are centralised in lib/data/rent-market.ts, with the review workflow in docs/rent-data-maintenance.md.
The optional GA4 product funnel and the human-reviewed shortlist request flow
are both disabled by default. Their environment variables, privacy constraints,
event names, test procedure, launch gate, and weekly checks are documented in
docs/measurement-and-shortlist-experiment.md.
The shortlist flow intentionally has no checkout or payment collection. Do not
enable it until a private receiver is configured and the production hosting
plan permits commercial use. Referral providers in lib/monetisation.ts also
remain inactive until a provider and disclosure have been approved.
npm install convexnpx convex dev — it prints a deployment URL.NEXT_PUBLIC_CONVEX_URL in .env.local.convex/schema.ts. See convex/README.md for next steps.app/ Next.js App Router pages and API routes
components/ React components (Map, ControlPanel, etc.)
lib/ Domain logic — types, data, scoring, commute, affordability
lib/data/ Source-backed launch data (neighbourhoods, destinations)
convex/ Inactive until Stage 4
STRATEGY.md Product spec, architecture, roadmap. READ FIRST.
The cleanest path is Vercel:
AdSense has rejected this site three times for "Low value content", each time because of pages generated from one template. Before ticking "I confirm I have fixed the issues":
npm run build, then npx next start -p 3210), and run npm run audit:content -- http://localhost:3210. It must exit cleanly: no sitemap cluster over 60% shared text, no page under 200 words of its own, no internal link that redirects or 404s.lib/published-city-sections.json until their pages carry writing of their own.This project is structured to be readable end-to-end. If a file is confusing, search for it in STRATEGY.md — most architectural choices are explained there with their rationale. When in doubt, start at app/page.tsx and follow the imports.