Hold politicians to the platform they ran on.
OpenCandidate is a Next.js demo and concept site for a simple political commitment mechanism: turn a campaign platform into a public governing system, apply it to real decisions with AI, and let the public compare the recommendation to what the politician actually does.
A campaign platform usually stops mattering once governing starts.
OpenCandidate is built to make that harder.
A candidate publishes the platform they ran on as explicit decision rules:
- governing priorities
- fiscal approach
- accepted tradeoffs
- rejected tradeoffs
- public voice and reasoning frame
That platform becomes a public governing system. Bills, budgets, zoning votes, procurement choices, and other major decisions can be run through it. The officeholder stays in charge. Overrides stay possible. The difference is that overrides become part of the public record.
The point is not that AI is morally superior to people. The point is that politicians drift under pressure, and a public system is easier to audit than private influence.
The site is organized around one message:
- Homepage: what this is, why it exists, what runs through it, and how alignment works
- Candidate pages: fictional candidates whose campaign platforms have been turned into public governing systems
- Brief: concept memo explaining the mechanism
- Create: demo interface for drafting a campaign platform and decision rules
- Updates: project notes and framing
- Involve: ways to advise, fund, or run
app/page.tsx— homepagecomponents/Hero.tsx— homepage heroapp/candidate/[slug]/page.tsx— candidate detail pagesapp/brief/page.tsx— web briefscripts/brief.html— source for the downloadable PDF briefscripts/generate-pdf.mjs— Puppeteer script to regeneratepublic/opencandidate-brief.pdfapp/create/page.tsx— candidate / governing system builderapp/involve/page.tsx— involvement pageapp/updates/page.tsx— updates pagelib/candidates.ts— demo candidate data and AI system prompt assembly
Install dependencies and run locally:
npm install
npm run devBuild the site:
npm run buildRegenerate the brief PDF:
node scripts/generate-pdf.mjsThis repo still uses the internal variable name civicPrompt in a few places. That is implementation detail. User-facing copy should refer to:
- campaign platform
- public governing system
- decision rules
- alignment
- override
- public record