尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Civicly Chennai — report potholes and road issues in Chennai, live on a public map.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Mobile-first PWA for reporting potholes and road issues in the Chennai Metropolitan
Area, shown live on a public map.
• Design spec: docs/superpowers/specs/2026-09-21-chennai-road-grievance-mvp-design.md
• Contributor/agent guidance: CLAUDE.md
Local Supabase needs Docker Desktop: npm run db:start, then npm run db:reset.
Alternatively point .env.local at a hosted Supabase dev project.
Deployed on Vercel (project name: civicly-chennai), backed by a hosted Supabase
project. Vercel runs next build on every push — there's no server to manage.查看完整 README ↗Mobile-first PWA for reporting potholes and road issues in the Chennai Metropolitan Area, shown live on a public map.
docs/superpowers/specs/2026-09-21-chennai-road-grievance-mvp-design.mdCLAUDE.mdnpm install
cp .env.example .env.local # fill in values
npm run dev # http://localhost:3000
Local Supabase needs Docker Desktop: npm run db:start, then npm run db:reset.
Alternatively point .env.local at a hosted Supabase dev project.
| Script | Purpose |
|---|---|
npm run dev / build / start | Next.js |
npm run lint / typecheck | ESLint / TypeScript |
npm test | Vitest unit tests |
npm run test:e2e | Playwright end-to-end tests |
npm run db:start / db:reset / db:test | Local Supabase, migrations + seed, pgTAP |
npm run db:types | Regenerate Supabase TypeScript types |
/admin is the private queue for filing reports with GCC by hand and recording the GCC
complaint ID. Only [email protected] is an admin; it's hard-coded in
public.is_admin(), so changing it means a new migration.
/admin, then
open the emailed link in the same browser (the PKCE verifier lives there). The
session is remembered afterwards./admin redirect URLs are already allowed in supabase/config.toml (restart Supabase
after changing auth config).https://<your-domain>/admin under Authentication → URL Configuration →
Redirect URLs. The default email sender is rate-limited to a few emails an hour, which
is fine for one admin.Deployed on Vercel (project name: civicly-chennai), backed by a hosted Supabase
project. Vercel runs next build on every push — there's no server to manage.
Supabase production project — create one at supabase.com (separate from your local dev project), then apply migrations and seed data to it:
npx supabase link --project-ref <production-project-ref>
npx supabase db push --include-seed --linked
--include-seed matters: it loads supabase/seed.sql, which seeds
public.cmda_boundary. Without it, the OUTSIDE_CMDA boundary check has nothing
to check against and every report submission fails.
Vercel project — either npx vercel link from the repo root, or connect the
GitHub repo directly in the Vercel dashboard (Import Project → this repo). Name
the project civicly-chennai. No vercel.json is needed; this is a standard
Next.js App Router app.
Environment variables — add every variable from .env.example to the Vercel
project (Settings → Environment Variables), scoped to Production:
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY
— from the production Supabase project's API settings. Never add the
NEXT_PUBLIC_ prefix to the service role key.NEXT_PUBLIC_MAP_STYLE_URL — a MapTiler style URL (with key) or a self-hosted
Protomaps style.NEXT_PUBLIC_TURNSTILE_SITE_KEY — a real Cloudflare Turnstile site key. The
local dev fallback (1x00000000000000000000AA) always renders a visible
"for testing only" widget — don't ship that key to production.NEXT_PUBLIC_GOOGLE_CLIENT_ID — for Google One Tap sign-in.NEXT_PUBLIC_VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, PUSH_WEBHOOK_SECRET — from
npx web-push generate-vapid-keys.NEXT_PUBLIC_* values are inlined into the client bundle at build time, so set
them before the first deploy; adding one afterward needs a redeploy to take
effect.
Deploy — push to main, or click Deploy in the Vercel dashboard. Every push
to main redeploys production; every pull request gets its own preview URL.
.github/workflows/ci.yml runs lint, typecheck, and the Vitest suite on every push
and pull request. It intentionally skips the Playwright e2e suite (needs a local
Supabase instance) — Vercel's own git integration handles the production build.