Plain English in. Builder-ready spec out.
Calgary Cursor — May 2026 buildathon · calgary-cursor-2026-may
| Surface | URL |
|---|---|
| Production | https://calgary-cursor-2026-may.vercel.app |
| Stakeholder intake | https://calgary-cursor-2026-may.vercel.app/request |
| Developer Inbox | https://calgary-cursor-2026-may.vercel.app/inbox |
Deployed on Vercel (Express @vercel/node, framework preset Other). Request data on serverless uses ephemeral /tmp storage — fine for demo; durable storage is out of scope for v1.
The entire buildathon submission — product scope, UI, Express API, tests, specs, and deploy config — was authored with Cursor only. No Claude Code, Codex, GitHub Copilot, Cline, Kilo Code, Antigravity, Kiro, or other agentic coding harness was used to build this repository.
| Criterion | How this project addresses it |
|---|---|
| Everyday pain point | Vague, typo-ridden stakeholder asks hide scope before any code is written. |
| AI-native | Output is a minified PRD + ADR + Cursor prompt block, not prose for humans only. |
| Cursor fit | Stakeholders never touch GitHub; builders Copy for Cursor from the inbox. |
| Working demo | Live URLs above; core loop testable in under two minutes (see below). |
| Quality | npm test — 16 Vitest tests (normalization, spec writer, API). |
Developers lose time before implementation: messy language, missing success criteria, and context trapped in chat or email. Plain Jane's Task Ask converts that intake into a spec-shaped, agent-ready brief stakeholders can submit without learning GitHub.
- Request form (
/request) — three steps, plain English, optional screenshot, optional Polish with AI (OpenRouteropenrouter/freewhenOPENROUTER_API_KEYis set). - Normalization — rules-based cleanup (typos, goal minification, vagueness flags); optional LLM polish on the same pipeline.
- Spec file —
.spec-workflow/specs/requests/<id>.mdwith PRD (minified), ADR, Cursor prompt (minified), verbatim raw intake, GitHub issue draft. - Developer Inbox (
/inbox) — numbered requests, preview, Copy for Cursor, status (new→in-cursor→done).
Example input: sales need to exprot dashbord to csv asap → cleaned goal, scoped open questions, paste-ready Cursor block.
- Open /request — complete all steps (try intentionally messy text).
- Open /inbox — confirm the new request appears with a stable
#number. - Preview the spec — verify PRD, ADR, and Cursor prompt sections (not just raw text).
- Copy for Cursor — clipboard should contain the minified agent brief.
- (Optional) Run locally:
npm install && npm test && npm start(Node 24+, see.nvmrc).
/request → POST /api/requests → *.md spec on disk → /inbox → Cursor
Stack: Node 24 · Express · static HTML/CSS/JS · Vitest · Clay design tokens (DESIGN.md)
Deep dive (agents & implementers): AGENTS.md — API routes, spec schema, file map, conventions.
See .env.example. None required for the rules-only demo. Optional: OPENROUTER_API_KEY (+ OPENROUTER_SITE_URL on Vercel) for the AI polish toggle.
Apache License 2.0 — see LICENSE.