Turn your app idea into work your team can finish.
Open Cairn · Live usage evidence · Competition · Architecture · Daily execution · Usage method · Competition improvements · Release checklist
Cairn is a Nimiq Pay mini app for indie builders and small product teams who lose good ideas inside AI chats and static planning documents. It turns an app idea into an editable execution plan, daily priorities, and a shared task board where wallet teammates can submit proof, receive approval, earn direct NIM rewards, and move the product to release.
Cairn is not only a plan generator. It keeps the plan connected to the work, evidence, team accountability, rewards, and release:
Idea → Plan → Focus → Execute → Check in → Validate → Report → Replan → Approve → Reward → Release
| Stage | What Cairn provides |
|---|---|
| Plan | An editable PRD, Visual PRD, user flow, MVP, milestones, risks, acceptance tests, and initial tasks |
| Focus | A Today workspace with progress signals, active blockers, reviews, experiments, and one recommended next task |
| Inbox | One wallet view for personal next moves, assigned team tasks, owner reviews, rewards, blockers, and signed activity across every route |
| Execute | A board and timeline with task status, dates, labels, dependencies, priorities, and private notes |
| Learn | Daily check-ins, a chronological build journal, and validation experiments that connect hypotheses to evidence and decisions |
| Report | Editable progress, milestone, validation, and stakeholder reports drafted from the route's real execution data |
| Adapt | Progress-aware AI replanning that proposes the smallest useful change without replacing completed work |
| Collaborate | Wallet-native team discovery, Viewer and Editor roles, assignments, My Tasks, completion proof, owner review, and a signed activity trail |
| Reward | Direct NIM rewards for approved work, locked to the assigned teammate and verified on the public network |
| Release | A readiness check and launch pack with product copy, social copy, demo outline, known issues, metrics, and release notes |
| Recover and share | JSON backup and restore, revocable read-only links, and protected Track-only team workspaces |
There are no Cairn accounts. A Nimiq wallet is the user's identity, team key, and reward address. The private plan stays on the device by default; Cairn sends only the data required for an action the user chooses.
The landing screen explains this loop in three steps before asking for any data: Plan once, Work daily, and Finish together. A sample route opens on Today without a wallet so the complete workflow is visible before signup or generation.
The first generation creates:
- a product requirements document — summary, problem, target user, core features, user stories, success criteria, and an explicit list of what it assumed and what it left out
- a Visual PRD — a one page canvas that shows the problem, user, promise, first release, proof, and guardrails in one scan
- a user-flow diagram — five to eight connected steps from first open to finished task, including one real decision point with both outcomes
- a Build plan — a small MVP scope, three milestones, risks, acceptance tests, and the next action
- a Today workspace — one recommended task, progress signals, daily check-ins, validation experiments, editable reports, a private build journal, and release mode
- a Track workspace — a local project board and timeline for milestones, task status, due dates, labels, priorities, notes, and simple blockers
- a Reality check — three prioritized concerns with the smallest test or fix
Every field is editable. Your plan is local by default. Cairn uses practical MVP planning rather than Scrum process. Plans and planner refinements are free. An optional protected team workspace lets the owner share only Track with named Nimiq wallets.
A cairn is a stack of stones left to mark the route for whoever comes next. That is what a PRD is for.
| General AI chat | Cairn |
|---|---|
| Produces a useful answer that becomes another document to manage | Produces one connected, editable product workspace |
| Requires the builder to invent the planning structure and prompts | Creates the PRD, visual map, user flow, MVP, milestones, risks, and tasks together |
| Ends when the response is complete | Continues into a daily execution loop, evidence, release preparation, and targeted replanning |
| Shares a conversation or copied text | Shares a read-only plan or wallet-protected Track workspace with Viewer and Editor roles |
| Depends on an account and cloud history | Keeps the private plan local by default and uses a Nimiq wallet for identity, teams, and teammate rewards |
The difference is not only generation. Cairn turns a response into a product system a builder and a named teammate can use after the prompt is over.
| Plan | Flow |
|---|---|
![]() |
![]() |
| Build | Track |
![]() |
![]() |
The gap between "I have an idea" and "I can start building" is a blank page. Filling it properly takes a product manager twenty minutes of structured thinking, and most ideas never get those twenty minutes — so they either die or get built without a plan.
Cairn brings that structured thinking to a phone with a signed Nimiq wallet session and no payment wall.
- Describe the idea in your own words. One field is required.
- Tap Generate plan. In Nimiq Pay, Cairn asks the injected wallet to connect and sign a short login challenge. In Chrome, Nimiq Hub opens the wallet for the same signature flow. This creates a short lived server session. The prompt happens on the action you already chose to take.
- Gemini writes the full builder pack. It takes about twenty seconds. If the first response is valid JSON but misses a required planning section, Cairn automatically regenerates it once with an explicit completion checklist.
- Open Today for the next useful task, progress, blockers, approvals, and active validation tests. Add a short check-in when reality changes.
- Open Routes and verify the connected wallet to load one cross-project action inbox. It shows personal next moves, assigned work, reviews, rewards, blockers, and recent signed team activity without creating a Cairn account.
- Edit anything. It autosaves to your device.
- Open Plan and choose Map for a one page view of the problem, user, promise, first release, proof, and guardrails.
- Open Track to update task status, dates, labels, blockers, and private notes. Changes save on this device.
- Choose Replan from progress after a check-in. Cairn uses the task state, blocker, and validation evidence to propose the smallest useful adjustment.
- Open Reports in Today to draft an editable progress update, milestone review, validation report, or stakeholder brief from the work already recorded.
- Use Release mode to check readiness and copy a launch pack with release notes, product copy, social copy, a demo outline, known issues, and metrics.
- Copy the plan as Markdown, share a public read only link, or create a protected team workspace for Track.
The Today tab is Cairn's return loop. It recommends one available task, summarizes progress and blockers, and stores short check-ins. Task transitions, check-ins, experiments, decisions, and releases form a chronological build journal. Validation experiments connect a hypothesis to a smallest test, a success target, evidence, and a continue/change/stop decision.
These records remain in the private local plan and its JSON backup. They are not added to public shares or protected team Track snapshots. Choosing Replan from progress sends a compact check-in summary plus task status, task due dates, and milestone blocker state to Gemini. It never sends private notes, priorities, dependencies, wallet assignments, or reward data.
The Reports section in Today turns the current route into a report without making the owner reconstruct the project from memory. Choose one of four formats:
| Report | Best used for |
|---|---|
| Progress update | A regular summary of completed work, evidence, blockers, changes, team activity, and next steps |
| Milestone review | Status and outcomes across the plan's milestones, including incomplete or blocked work |
| Validation report | Hypotheses, tests, observed evidence, decisions, and the next experiment |
| Stakeholder brief | A concise update for a client, sponsor, judge, or community |
Draft from progress uses only information already recorded in Cairn: task status, check-ins, validation results, blockers, decisions, next steps, assignments, approvals, and rewards. Private task notes are never inserted into the generated report.
The owner can edit the report type, title, audience, reporting period, and every word of the body. Copy report produces Markdown for an email, document, issue, or public update. Cairn does not publish or send it automatically.
The current draft remains in the private local route and is included in a JSON backup. It is excluded from public plan shares and protected Track-only team workspaces. It leaves the device only when the owner copies it.
The Build tab has four quick actions: cut MVP scope, break work into smaller tasks, find missing risks, and improve acceptance tests. You can also ask a custom question. Cairn shows targeted changes in a preview before applying them. Planner actions are free. Fair use rate limits and a daily service limit prevent unbounded AI cost. Task status, dates, labels, notes, and blockers stay on your device when a refinement keeps that task. Cairn sends only task text to Gemini.
The Track tab is a local owner workspace. Board view groups work into vertical milestone lanes. Timeline view shows milestone ranges and task due dates. Use the filters to see all, to do, in progress, done, or blocked work. A task becomes blocked when one of its selected dependencies is not done. A milestone is blocked only when you mark it blocked.
The first click on a task opens its editor. Status can also change directly from the lane. Dates are never invented by AI. Notes, priorities, and dependency details remain private to this device.
The owner can create one protected team workspace for a plan. The owner adds Nimiq wallet addresses and chooses a Viewer or Editor role for each one. Members must open the protected link with the wallet that was added. The link is only a locator. The Worker checks the signed wallet session on every request. There is no signup: no email, username, password, or profile is required. The Nimiq wallet address is the teammate's identity and permission key.
The landing screen separates wallet selection from authorization. Connect Nimiq wallet selects the address. Generating a plan—or opening a protected team invite—then asks that wallet to sign a one-time Cairn verification message. An invited teammate can therefore open Track directly without creating a plan.
Routes separates Personal work from Teammate work. After wallet verification, Cairn discovers that wallet's protected teams from the server on any device. Cairn also remembers recently opened locators on the current device. A route row never grants access: opening it requires the matching wallet signature. Owner-created plans remain in Personal work and can be exported as a JSON backup.
At the top of Routes, the Wallet action inbox combines the current device's personal next moves with every protected team available to the verified wallet. Editors see assigned work and requested changes. Owners see completion proof, approved tasks ready for a direct NIM reward, and blocked milestones. Reward history and signed team activity stay visible as proof. Selecting an inbox item opens the correct personal route or protected Track workspace directly.
Team members see and, when allowed, edit Track only. The shared snapshot contains milestones, task text, status, labels, dates, and the owner's milestone blocker flag. It does not contain the PRD, user flow, Build summary, private notes, priorities, or dependency details. Owner changes to the team board sync through a revision check, so a stale editor cannot overwrite a newer update. Public Share links remain separate and read only.
The owner assigns each task to an Editor wallet. Teammates can filter My tasks, submit completion proof, and wait for owner review. The owner approves the work or returns it with a short reason. Cairn records each protected action with the authenticated wallet and server time.
Only approved work can receive a NIM reward, and the recipient is locked to the task's assigned wallet. Cairn checks the public transaction, records its proof on the task, and never holds the funds. Slow confirmations keep polling automatically; resuming confirmation reuses the receipt and does not request a second payment. Owners can delete a workspace, revoke its link, and must reassign a teammate's open tasks before removing that wallet. See wallet-native teammate accountability for the product contract and acceptance criteria.
The deployed Worker serves a small information layer beside the mini app:
/case-studiescontains illustrative examples. They are not customer claims./faqanswers product, timing, free access, sharing, and privacy questions./privacyexplains data handling in plain language./thank-youis a simple completion page for links and demos.- Unknown routes show a branded 404 page.
The app has a clear response promise: most plans are ready in under 30 seconds.
The public pages use canonical URLs, Open Graph metadata, a social card,
robots.txt, sitemap.xml, and llms.txt.
Cairn does not charge for plans or planner refinements. A signed Nimiq wallet session proves identity for AI requests and protected teams. Owners can send NIM directly to a teammate after that person completes a task. Cairn never holds those funds.
The Worker preserves the legacy SQLite-backed credit ledger for compatibility, but Cairn no longer offers a donation checkout. It uses the configured Nimiq RPC service to verify direct teammate rewards. See credit ledger cutover before changing bindings or migrations. The checked-in production configuration has the reconciled ledger enabled; do not change its binding, class, or object name after it has accepted production writes.
Cairn publishes a read-only usage dashboard for judges and the community. It counts distinct signed wallets, activation, repeat use, successful planning actions, team work, and confirmed direct NIM rewards. Failed or rejected actions do not increase the product counts.
The usage ledger creates a private HMAC key inside its own Durable Object and
stores only keyed wallet digests. Raw wallet addresses, plan text, task content,
IP history, balances, and transaction details are never exposed in the report.
Referral labels are first-party, tab-scoped values such as ?ref=x-launch, and
the dashboard hides any source represented by fewer than three wallets. The
complete metric contract is in usage evidence.
Stated plainly, because it matters:
| Data | Where it goes |
|---|---|
| The idea you type | Google's Gemini API, via Cairn's server, to write the plan |
| The finished plan and private Track data | Your device's local storage. Nothing else, unless you use a planner follow up, public Share, or a protected team workspace |
| An editable project report | Your device's local storage and JSON backup. It leaves the device only when you copy it |
| A normal plan refinement | Cairn's server and Google's Gemini API for that one follow up. The PRD, flow, and text-only builder pack are sent so the change can be targeted. Private tracker metadata is not sent |
| Replan from progress | Cairn's server and Gemini receive a compact check-in summary, task status and due dates, and milestone blocker state. Private notes, priorities, dependencies, wallet assignments, rewards, the full journal, and release drafts stay on the device |
| A plan you tap Share on | Cairn's server, so the link can be opened until you revoke it. Progress, milestone dates, task due dates, labels, and recorded reward proofs are shared. Notes, priorities, and dependencies are not shared |
| A protected team workspace | Cairn's server, so named wallet members can use Track until the owner deletes it. Milestones, task text, status, labels, dates, milestone blocker flags, and recorded reward proofs are shared. The PRD, flow, Build summary, notes, priorities, and dependencies are not shared |
| Your wallet address | Cairn's server, as the identity bound to your short lived wallet session and protected team access. The aggregate usage ledger receives it internally, converts it to a keyed digest, and never stores the raw address |
| A teammate reward transaction hash | Cairn's server and the configured Nimiq RPC service, to verify the public reward transaction |
| A request network address | A short lived abuse counter in Cairn's server. It is not used for analytics or operational logs |
There are no analytics cookies, advertising trackers, device fingerprints, or third-party analytics scripts. Cairn keeps first-party aggregate usage evidence from successful, wallet-authenticated actions. The public report contains counts only. The app loads no external fonts. Cairn's Worker sends generation requests to Gemini and public payment lookups to the configured Nimiq RPC service on the server side. A ten-percent operational sample contains only API category, method, status, and duration; it excludes prompts, URLs, identifiers, wallets, bodies, and network addresses.
Plans are stored per device by design. Clearing the app's storage deletes them, and there is no private copy on a server to restore from. Use Save JSON backup and Restore JSON backup to move or recover a route. A restored file becomes a new local route and never inherits control of old share or team links.
npm install
npm run dev # http://localhost:5173To run the full local Worker, copy .dev.vars.example to .dev.vars and add a local Gemini
key. Then run npm run build and npm run worker:dev. The Worker uses its local KV store.
Never commit .dev.vars.
In a production build, Chrome uses Nimiq Hub for real wallet authentication.
Only a local Vite preview with no VITE_API_BASE uses a synthetic wallet
and an obviously-labelled placeholder plan. This keeps local UI work walkable
without weakening the production wallet path.
When you open the deployed app in Chrome, tap Generate plan and complete the Nimiq Hub popup. Allow popups for the Cairn site. Hub returns the selected wallet address and signature to Cairn, which the Worker verifies before the free AI action. Teammate reward payments appear only inside an owner-managed team workspace.
The only form factor that matters is a portrait phone inside the Nimiq Pay WebView.
npm run dev -- --hostThen in Nimiq Pay: Mini Apps → open URL → http://<your-lan-ip>:5173.
Note that LAN HTTP is not a secure context, so navigator.clipboard and
crypto.randomUUID are absent there. Both have fallbacks
(src/lib/clipboard.ts, src/lib/plan.ts) — which is the whole reason to test
this way rather than only on localhost.
npm run check # types, tests, secret scan, dependency audit, production build
npm run build # vue-tsc -b && vite build
npm test # Node's built-in test runner
npm run test:e2e # Playwright mobile layout, product route, metadata, and WCAG checkssrc/
lib/
nimiq.ts Nimiq Pay SDK wrapper. Provider methods RESOLVE with
`T | ErrorResponse` rather than throwing, so every call goes
through unwrap().
session.ts Which mode are we in, and whose wallet is this
plan.ts The data model, migration, and on-device library
tracker.ts Progress, dates, blocker, and dependency calculations
api.ts Typed client for the server
markdown.ts Plan → Markdown / plain text
clipboard.ts Copy, with a non-secure-context fallback
stub.ts Offline placeholder generator, dev only
components/
NewPlan.vue Screen one: the description
Workspace.vue One route: Today, Plan, Flow, Build, Track, and Team
ExecuteView.vue Daily focus, check-ins, experiments, journal, and release mode
PrdView.vue The PRD, readable and editable
VisualPrd.vue A visual, editable PRD canvas
FlowDiagram.vue The flow diagram
BuildView.vue Read only builder pack summary
MilestoneTracker.vue Owner board and timeline tracker
TrackerEditorSheet.vue Task and milestone editor
TeamPanel.vue Owner member and permission controls
RefineSheet.vue Preview and apply targeted planner follow ups
Library.vue Everything you have made
tests/
client/ Migration, tracker calculations, and targeted merge tests
e2e/ Mobile Chromium layout, accessibility, route, and metadata checks
worker/ Auth, budget, shape, share, and team permission tests
Vue 3 + TypeScript + Vite on the front, with one Cloudflare Worker serving the
app and API. KV stores sessions, explicit shares, team workspaces, rate limits,
and budget counters. A SQLite-backed Durable Object owns atomic credits and
payment receipt redemption. No component library, CSS framework, webfont, or
third-party analytics is used. Type checking is strict, including erasableSyntaxOnly and
verbatimModuleSyntax.
Google Analytics is intentionally not included. Cairn is a privacy first mini app, and adding third party tracking would contradict the disclosure shown before generation. Local business schema, maps, and directions are also not included because Cairn has no physical business location.
No API key, secret, or credential is committed to this repository. The Gemini key lives only in an encrypted Cloudflare secret binding.
MIT — see LICENSE.
Built for the Nimiq Mini Apps Competition.




