尚未检测到更新。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.