Develop camply
For application development, install Python 3.14, uv, Node.js 24, the pnpm version pinned in package.json, Docker Compose, and Task. The developer guide covers setup and detailed workflows.
From the repository root:
task install
cp docs/examples/.env.example .env
task compose:infra
UV_ENV_FILE=.env task devIf you want to use the Compose PostgreSQL database, enable the PostgreSQL settings in .env before starting the backend. The default database is SQLite. Vite serves the frontend at http://localhost:5173 and proxies /api to the backend at port 8000.
Use standalone setup when you just want to run the complete app locally. For distributed polling, also run UV_ENV_FILE=.env task backend:worker:all in a separate terminal. Import the catalog through Sync Providers in Admin Operations.
Quality checks
task lint
task check
task testRun task to list workflows. See the style guide for contribution standards and the reference directory for architecture and feature plans.
Working on the docs
The docs site uses VitePress, Node 24, and pnpm. Run these commands from the repository root:
task docs:install
task docs:serveOpen http://127.0.0.1:8001. VitePress rebuilds as you edit Markdown under docs. Navigation and theme settings live in docs/.vitepress/config.ts.
task docs:buildThe build writes the static site to ignored build/docs. Run task docs:check to also verify generated links, assets, and the publishing configuration. To preview the built site, run task docs:preview.
Docs in the web app
Every production frontend build generates the docs and includes them under docs/ in the static bundle. The footer links to /docs/ on the same instance. Python standalone, Nginx, and Cloudflare Pages serve the generated pages and assets directly, including nested docs URLs.
Frontend builds run VitePress directly through Node, eliminating separate Python docs dependencies. Cloudflare Pages, Docker frontend builds, and local development use the pinned frontend toolchain. Python wheel/sdist builds bundle the generated static site into application assets. Vite's development server serves the React app; use the separate docs preview above when editing docs.
Publishing the docs
Pull requests build and verify the docs in CI. The app hosts its docs at https://camply.rocks/docs/. After all CI checks pass on main, the release workflow also publishes build/docs as a GitHub Pages mirror using the same shared Pages action as cookiecutter-python. The mirror updates even when no new application version is released.
The mirror URL is https://juftin.com/camply-web/. Self-hosted instances serve their own bundled docs at /docs/.
For the first mirror deployment, a repository administrator must open Settings → Pages → Build and deployment and choose GitHub Actions as the source. The deployment job uses the github-pages environment with pages: write and id-token: write; it uses the standard GITHUB_TOKEN and needs no additional publishing secret. If Pages is not enabled, configure it before the next push to main, or rerun the failed docs job after enabling it. Bundled app docs work independently of this setting.
Use relative Markdown links between site pages. Link to the existing GitHub references when a document lives outside docs/site, so those links also work in the built site. See the VitePress docs for supported Markdown features.