What it shows
- Collections.
ListsandTasksincollections/, with color, date, select and record fields. See collections. - Access scopes.
collections/_own.tskeeps every account to its own lists and tasks, and lets atodo.managecapability past. See who is asking and custom capabilities. - Sign-up.
api/signup.post.tscreates a member and signs them in. See creating accounts. - A role.
roles/member.ts, the role sign-up grants. See roles. - A dashboard page.
dashboard/pages/today.ts, linked in the sidebar byohne.config.ts. See pages and data. - Tables and editors for free. The
dashboardkey of each collection sets the columns and the form. See the collection in the dashboard. - An assistant.
ohne.config.tsstacksohnejs/ai, lets it read lists and tasks, and gives it the rules of the app.skills/teaches it Plan my day, Capture, Reschedule overdue and Weekly review. Every write it proposes runs with your own session and waits for your approval, unless you turn on auto-accept on your account page for small edits like ticking off a task. See the assistant and skills. - Messages. English and German in
messages/todo/. See messages. - A seed.
boot/_seed.ts, run byboot/seed.ts. See boot files. - Tests.
tests/boots the API in the test process and checks each rule above over HTTP.
Getting started
In a copy of this repository:
pnpm install
pnpm devOpen http://localhost:9000 and sign in:
| Account | Password | Sees | |
|---|---|---|---|
| Member | demo@example.com | ohne-demo | their own lists and tasks |
| Admin | admin@example.com | printed by the first pnpm dev | every account's lists and tasks |
The assistant runs on Claude. Put your key in .env as ANTHROPIC_API_KEY=... and press Cmd+K in the dashboard. Without a key, Cmd+K stays a search.
Once an account exists, anyone can sign up as a member:
curl http://localhost:9001/signup -H 'content-type: application/json' \
-d '{ "email": "you@example.org", "password": "correct horse" }'The seed fills an empty database only, and never under NODE_ENV=production. Delete .data/ to start over.
The checks:
pnpm typecheck
pnpm test
pnpm lint
pnpm format --checkUpgrading
Bump ohnejs in package.json and follow the framework's release notes. To pick up later changes to this example, compare your copy with this repository.
Deploy
Todo is a plain ohne app. Run ohne serve api and ohne serve dashboard as the deployment guide describes.
Set NODE_ENV=production. The seed then stays out, and sign-up stays closed until an admin exists. The first visit to the dashboard opens the install page, where you create that admin.
The app keeps its data in SQLite. For a bigger install, move to Postgres.
Licence and credits
MIT, see LICENSE. The seed holds no third-party assets.
One owner per install
One install serves one group of accounts. A member sees only their own lists and tasks, and an admin sees everyone's.



