Files
verdande/CONTRIBUTING.md
T
Kristian WindandClaude Opus 5 7c9bde2cfd docs(phase6): documentation site, landing page and open-source scaffolding
Material for MkDocs under docs/, covering self-hosting, the Rune, the
quick-add and filter languages, importing from Todoist, CalDAV,
mail-to-task, MCP, the AI layer and the API. The version is pinned: the
maintainers have announced that MkDocs 2.0 removes the plugin system
with no migration path, and an unpinned install would break this build
on the day it lands.

The landing page shows the quick-add parser as actual text rather than a
screenshot of it — that is the thing worth showing, and it reads better
as the real thing. It shares the app's design tokens, so the site and
what it describes look like one project.

MIT licence, contributing guide, security policy and issue templates.
Pages deployment is behind workflow_dispatch, so the docs build on every
push but nothing is published until the owner chooses to.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-17 08:08:36 +02:00

2.0 KiB

Contributing

Thank you for looking. verdande is one person's self-hosted to-do app, so the bar for a change is "does this make it better for people running it on their own hardware" rather than "is it a feature some product has".

Before you write code

Open an issue first for anything beyond a bug fix. The non-goals are deliberate, and it is kinder to say no to a paragraph than to a weekend.

Running it

VERDANDE_DATA_DIR=./data VERDANDE_DEV=true go run ./cmd/verdande
cd web && npm install && npm run dev

The API is on 8080, the interface on 5173 with /api proxied to it — so the session cookie stays first-party exactly as it does in production.

What CI checks

gofmt -l .             # must print nothing
go vet ./...
go test -race ./...

The Docker image is built on every pull request too, so a Dockerfile that no longer works fails there rather than at release.

What a change needs

Tests for anything that could be silently wrong. Not coverage for its own sake — the parser, the permission checks and the import round trip are tested because a quiet failure in any of them loses somebody's data or shows them somebody else's.

Comments that say why, not what. The code says what it does. A comment earns its place by explaining a decision that is not obvious from reading it: why the connection pool is not 1, why recurrence is parsed before dates, why an uploaded file is never served inline.

Danish and English both. Anything that reads or writes text a person typed has to work in both. ø is not an accented o, and a feature that only works for one of the two languages is a broken feature.

Commits

Conventional Commits: feat(store):, fix(web):, docs:. Releases are semver tags, which build and publish the image.

Security

Please do not open a public issue for a vulnerability. Email the address in SECURITY.md instead.