AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證This is a collaborative testing platform where developers can upload their web applications to be tested and also in turn test other developers applications.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
What is Twnhall?
Twnhall is a collaborative testing platform where developers can submit
their web applications to be tested by other developers in exchange for
testing others in return. It bridges the gap for startups and solo
developers who need real-world QA feedback but don't have the budget
for a dedicated QA team.檢視完整 README ↗Twnhall is a collaborative testing platform where developers can submit their web applications to be tested by other developers in exchange for testing others in return. It bridges the gap for startups and solo developers who need real-world QA feedback but don't have the budget for a dedicated QA team.
Most early-stage developers and startups ship features without proper real-world testing. Hiring a QA engineer is expensive and out of reach for solo developers and small teams. Twnhall creates a community-driven alternative where testing is reciprocal — you test others to get tested.
Submit a project — A developer submits their web application under a category, then creates a mission: a structured test case of action/expected-result steps, built from scratch or from a template, targeted at mobile, desktop, or both.
Test other projects — Developers pick up missions from other projects and work through the test case step by step. For each step they see the builder's instruction verbatim and record what actually happened, marking it pass, fail, or blocked — with a summary and reproduction steps when it fails. Screenshots and a free-text note round the submission off.
AI-powered insights — Twnhall uses Gemini AI to analyse the audit log and generate a user-friendly breakdown of the findings. Because it knows which steps failed and how, it leads with those rather than paraphrasing a comment — making raw feedback actionable even for non-technical project owners.
git clone https://github.com/Chrisemeka/town_hall.git
cd townhall
npm install
Create a .env.local file in the root directory:
# Supabase — project settings → API
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
# Service role. Bypasses RLS — server-side only, never exposed to the browser.
SUPABASE_SERVICE_ROLE_KEY=
# Gemini, from https://aistudio.google.com/
GEMINI_API_KEY=
# Resend — the app's own transactional mail (emails/). NOT the auth mail; see
# "Supabase Auth email" below.
RESEND_API_KEY=
# Absolute origin, used to build OAuth and email-confirmation redirect URLs.
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Shared secrets for the submission webhook and the cron endpoints.
WEBHOOK_SECRET=
CRON_SECRET=
Confirmation and password-reset mail does not come from emails/. Those
React Email templates are the app's own transactional mail. Supabase Auth sends
its own mail, through its own SMTP, using templates stored in the Supabase
dashboard — so the copy for "Confirm your signup" and "Reset your password"
lives there, not in this codebase. Editing emails/ will never change them.
Two things have to be configured in the Supabase dashboard before email signup works in production:
Settings the app assumes, all under Authentication:
| Setting | Required | Why |
|---|---|---|
| Confirm email | On | signUp() must not return a live session for an unproven address |
| Minimum password length | ≤ 8 | lib/validation/schemas.ts requires 8; a higher project minimum would reject a password the form accepted |
| Per-user min interval between emails | ≥ 60s | This is the resend cooldown on /confirm-email — the app surfaces the refusal, GoTrue enforces it |
npm run dev
townhall/
├── actions/ # Server actions for mutations (auth, missions, projects, submissions)
├── app/ # Next.js App Router root
│ ├── (developer)/ # Route group for developer-facing pages
│ ├── (tester)/ # Route group for tester-facing pages
│ ├── api/ # API routes
│ └── globals.css # Global styles
├── components/ # Reusable React components (forms, UI cards, nav)
├── lib/ # Utility functions and shared libraries (AI, Supabase client)
├── public/ # Static assets
└── middleware.ts # Next.js middleware