Contribute
Set up a local development environment and submit your first merge request. YotoShelf is built to welcome AI-assisted contributors.
YotoShelf is open source (MIT) and actively maintained. Contributions are welcome: bug fixes, new features, documentation improvements, and test coverage all count.
Before you start
Read AGENTS.md
in the repository root before making any changes. It documents the required workflow,
architecture constraints, and the validation checklist every merge request must pass.
The pages under /contribute render sections of the application repository's
CONTRIBUTING.md
and
AGENTS.md,
fetched from the repository's main branch when this site is built. Anything
those two files do not say, this section does not say either: it links you into the
repository instead.
AI-assisted contributors should fetch /llms-full.txt
for a complete machine-readable rendition of this documentation.
Sections in this guide
- How It Works: the AGENTS.md contract summarised, covering stop conditions, blast radius limits, the one-thing-at-a-time rule
- Architecture: Go + huma + SQLite/sqlc/goose; Astro + Svelte 5 frontend; go-yoto client; design system submodule
- Dev Loop: clone, mise, just recipes, fixture seeding, E2E
- CI: the pipeline the app repo defines, and the gates
just checkruns locally - Conventions: file-size limits, structural conformity, i18n, error handling
Quick start
git clone --recurse-submodules https://gitlab.com/yotoshelf/yotoshelf.git
cd yotoshelf
mise install # installs exact Go, Node, sqlc, golangci-lint versions
just dev # starts backend + frontend, creates admin user
Note:
--recurse-submodulesis required — the frontend consumesfrontend/designas a git submodule. If you already cloned without it, rungit submodule update --init.
Login at http://localhost:4300 with admin@localhost / admin.
Warning: The default credentials above are dev-only and are seeded automatically by
just dev. Never use them in production — usecreate-adminwith a strong password instead.
After every change
After every change, run:
just check
This runs every local-runnable CI gate (lint + tests + build + govulncheck + npm audit + i18n). If it passes locally, it passes in CI.