Build from Source
Clone the repository and run YotoShelf locally with hot reload.
Every command on this page is a section of the application repository's
CONTRIBUTING.md,
fetched when this site is built. If you would rather read it at the source, that file is
the source.
Prerequisites
- mise — mise.jdx.dev (
curl https://mise.run | sh) - ffmpeg —
brew install ffmpeg(macOS) orapt install ffmpeg
All other tools (Go, Node, sqlc, golangci-lint) are pinned in .mise.toml and installed by mise install.
Clone and 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.
Recipes
just dev is one of several. The repository's
CONTRIBUTING.md
documents what each one does, rendered on Dev Loop;
just --list in your clone prints the full set the
justfile
defines. just dev-prod is the production-mode variant: one embedded binary,
the same way the container image runs.
Seed fixtures
To populate a running instance with test content, use the sibling fixtures repo:
python3 fixtures/seed.py <url> admin@localhost admin
The seed script requires the dev-permissive origin (i.e. YOTOSHELF_PUBLIC_URL
must not be set, or must match the URL you pass). Default: http://localhost:4300.
Building the container image
Container builds happen in GitLab CI on main. The Containerfile uses a
three-stage build: Node (frontend) → Go (binary) → Alpine (runtime + ffmpeg).
The repository documents no local build command, so this page does not invent one. To run the image the pipeline publishes, see Quick Start.