{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Boilerworks","text":"<p>Stop vibe-coding scaffolding. Pick a template. Ship.</p> <p>Boilerworks is a catalogue of opinionated, production-ready full-stack templates. One command gets you from zero to a running app with auth, database, background jobs, Docker, and CI \u2014 all pre-wired.</p>"},{"location":"#install","title":"Install","text":"<pre><code>pip install boilerworks\n</code></pre>"},{"location":"#quick-start","title":"Quick Start","text":"<pre><code># See all templates\nboilerworks list\n\n# Run the setup wizard\nboilerworks setup\n\n# Generate your project\nboilerworks init\n</code></pre> <p>That's it. <code>boilerworks init</code> clones the template, renames everything from <code>boilerworks</code> to your project name, and hands you a working repo with a clean git history.</p>"},{"location":"#the-catalogue","title":"The Catalogue","text":"<p>26 templates across 10 stacks. Three sizes.</p> Size When to use Full Apps with users \u2014 login, permissions, org management Micro API-key services, microservices, workers Edge Cloudflare Workers / Pages, globally distributed FullMicroEdge Template Stack <code>django-nextjs</code> Django 5 + Next.js 16 (GraphQL) <code>rails-nextjs</code> Rails 8 + Next.js 16 (GraphQL) <code>rails-hotwire</code> Rails 8 + Hotwire + Tailwind <code>nestjs-nextjs</code> NestJS + Next.js 16 (GraphQL) <code>laravel-vue</code> Laravel 12 + Vue 3 (Inertia) <code>spring-angular</code> Spring Boot + Angular 19 <code>go-nextjs</code> Go + Next.js 16 (GraphQL) <code>remix-full</code> Remix (full-stack) <code>sveltekit-full</code> SvelteKit (full-stack) <code>phoenix-liveview</code> Phoenix + LiveView Template Stack <code>django-micro</code> Django 5 REST API <code>fastapi-micro</code> FastAPI + async <code>nestjs-micro</code> NestJS REST API <code>rails-micro</code> Rails 8 API mode <code>laravel-micro</code> Laravel 12 API <code>spring-micro</code> Spring Boot REST <code>go-micro</code> Go REST API <code>express-micro</code> Express + TypeScript <code>phoenix-micro</code> Phoenix API <code>rust-micro</code> Axum REST API Template Stack <code>sveltekit-edge</code> SvelteKit on Cloudflare Pages <code>remix-edge</code> Remix on Cloudflare Pages <code>nextjs-edge</code> Next.js on Cloudflare Pages <code>astro-edge</code> Astro on Cloudflare Pages <code>hono-edge</code> Hono on Cloudflare Workers <code>worker-edge</code> Cloudflare Worker (bare)"},{"location":"#how-it-works","title":"How It Works","text":"<pre><code>boilerworks setup \u2192 answer 13 questions \u2192 writes boilerworks.yaml\nboilerworks init \u2192 reads boilerworks.yaml \u2192 clones + renames + git init\n</code></pre> <p>The renderer does case-variant string replacement across every text file:</p> <ul> <li><code>boilerworks</code> \u2192 <code>myproject</code></li> <li><code>Boilerworks</code> \u2192 <code>Myproject</code></li> <li><code>BOILERWORKS</code> \u2192 <code>MYPROJECT</code></li> </ul> <p>No Jinja2, no magic. Templates are real repos that boot as-is.</p>"},{"location":"#infrastructure-optional","title":"Infrastructure (optional)","text":"<p>If you select a cloud provider during setup, <code>boilerworks init</code> also clones boilerworks-opscode \u2014 a Terraform repo with full AWS infrastructure (ECS Fargate, RDS, Redis, ALB, Route53, ACM) and GCP/Azure stubs.</p> <p>Two topology options:</p> <ul> <li>Standard \u2014 app and ops land in sibling directories</li> <li>Omni \u2014 ops lives inside the app repo as <code>ops/</code></li> </ul>"},{"location":"#license","title":"License","text":"<p>MIT \u2014 Copyright \u00a9 2026 CONFLICT LLC</p>"},{"location":"contributing/","title":"Contributing","text":""},{"location":"contributing/#ways-to-contribute","title":"Ways to contribute","text":"<ul> <li>Add a template \u2014 build a new stack using the boilerworks conventions and open a PR to add it to the catalogue</li> <li>Improve docs \u2014 fix errors, improve clarity, add examples</li> <li>Report bugs \u2014 open an issue with steps to reproduce</li> <li>Request a template \u2014 open an issue describing the stack</li> </ul>"},{"location":"contributing/#template-conventions","title":"Template conventions","text":"<p>All templates must:</p> <ul> <li>Boot with <code>docker compose up -d</code> from scratch (no local installs required)</li> <li>Use standard ports (app: 3000/8000, postgres: 5432, redis: 6379)</li> <li>Use <code>boilerworks</code> as the placeholder name throughout (the renderer replaces it)</li> <li>Include: Items, Categories, FormDefinitions, FormSubmissions, WorkflowDefinitions (Full only)</li> <li>Have health check at <code>/up</code> or <code>/health/</code></li> <li>Include a <code>CLAUDE.md</code> pointing to <code>bootstrap.md</code></li> <li>Pass <code>make test</code> and <code>make lint</code></li> </ul>"},{"location":"contributing/#cli-development","title":"CLI development","text":"<pre><code>git clone https://github.com/ConflictHQ/boilerworks.git\ncd boilerworks\nuv sync\nuv run boilerworks --help\n\nmake lint # ruff check + format --check\nmake test # pytest with coverage\nmake format # ruff fix + format\n</code></pre> <p>Coverage must stay at \u2265 80%.</p>"},{"location":"contributing/#adding-a-template-to-the-catalogue","title":"Adding a template to the catalogue","text":"<ol> <li>Build and test the template repo (must live at <code>ConflictHQ/boilerworks-{name}</code>)</li> <li>Edit <code>data/templates.yaml</code> \u2014 add an entry with <code>name</code>, <code>repo</code>, <code>size</code>, <code>language</code>, <code>status</code>, <code>description</code>, <code>topologies</code></li> <li>Run <code>make test</code> \u2014 <code>test_registry.py</code> will catch count or schema mismatches</li> <li>Open a PR</li> </ol>"},{"location":"contributing/#code-standards","title":"Code standards","text":"<ul> <li>Python 3.12+, fully typed</li> <li>Line length: 120 (ruff config in <code>pyproject.toml</code>)</li> <li><code>ruff check . && ruff format .</code> before every commit</li> <li>No TODOs, no stubs</li> <li>No co-authorship messages in commits</li> </ul>"},{"location":"contributing/#issues-and-prs","title":"Issues and PRs","text":"<p>github.com/ConflictHQ/boilerworks/issues</p>"},{"location":"cli/bootstrap/","title":"boilerworks bootstrap","text":"<p>Run Terraform infrastructure layers. Requires a generated ops directory (from <code>boilerworks init</code> with <code>ops: true</code>).</p> <pre><code>boilerworks bootstrap\nboilerworks bootstrap --dry-run\n</code></pre> <p>v2 feature</p> <p><code>bootstrap</code> is a v2 CLI feature. The ops Terraform files are fully functional \u2014 run them directly with <code>./run.sh</code> in the ops directory. The CLI wrapper is coming in v0.2.</p>"},{"location":"cli/bootstrap/#manual-bootstrap-v1","title":"Manual bootstrap (v1)","text":"<p>Until the CLI wrapper lands, use <code>run.sh</code> directly:</p> <pre><code>cd my-app-ops # or my-app/ops for omni topology\n\n# Edit cloud config\nvim aws/config.env # set PROJECT, AWS_REGION\n\n# Bootstrap state backend (S3 + DynamoDB)\n./run.sh bootstrap aws dev\n\n# Plan and apply\n./run.sh plan aws dev\n./run.sh apply aws dev\n</code></pre>"},{"location":"cli/bootstrap/#runsh-commands","title":"run.sh commands","text":"Command Description <code>./run.sh init aws dev</code> <code>terraform init</code> for AWS dev <code>./run.sh plan aws dev</code> <code>terraform plan</code> <code>./run.sh apply aws dev</code> <code>terraform apply</code> <code>./run.sh destroy aws dev</code> <code>terraform destroy</code> <code>./run.sh fmt</code> Format all <code>.tf</code> files <code>./run.sh validate</code> Validate all Terraform directories <code>./run.sh bootstrap aws dev</code> Create state backend + init"},{"location":"cli/bootstrap/#what-gets-created","title":"What gets created","text":"<p>Running <code>./run.sh apply aws dev</code> provisions:</p> <ul> <li>VPC (3 AZs, public/private/database/cache subnets)</li> <li>ECS Fargate cluster + service</li> <li>RDS PostgreSQL 16</li> <li>ElastiCache Redis 7</li> <li>Application Load Balancer (HTTPS)</li> <li>Route53 hosted zone + A record</li> <li>ACM wildcard TLS certificate</li> <li>S3 file storage bucket</li> <li>Secrets Manager (db creds, app secrets)</li> <li>CloudWatch log groups + alarms</li> <li>IAM roles (ECS task execution, CI/CD)</li> <li>Security groups (ALB \u2192 ECS \u2192 RDS/Redis)</li> </ul>"},{"location":"cli/init/","title":"boilerworks init","text":"<p>Generate a project from a <code>boilerworks.yaml</code> manifest.</p> <pre><code>boilerworks init\nboilerworks init --manifest path/to/boilerworks.yaml\nboilerworks init --output ~/repos/\nboilerworks init --dry-run\n</code></pre>"},{"location":"cli/init/#options","title":"Options","text":"Option Description <code>--manifest PATH</code> Manifest file to read (default: <code>boilerworks.yaml</code> in cwd) <code>--output PATH</code> Where to create the project directory (default: <code>.</code>) <code>--dry-run</code> Print what would happen without touching the filesystem"},{"location":"cli/init/#what-it-does","title":"What it does","text":"<ol> <li>Reads and validates <code>boilerworks.yaml</code></li> <li>Clones <code>ConflictHQ/boilerworks-{family}</code> \u2192 <code>{output}/{project}/</code></li> <li>Removes <code>.git/</code> from the clone</li> <li>Runs string replacement across all text files: <code>boilerworks</code> \u2192 <code>{project}</code> (3 case variants)</li> <li>Renames files and directories containing <code>boilerworks</code></li> <li>If <code>ops: true</code> and <code>cloud</code> is set:<ul> <li>Clones <code>ConflictHQ/boilerworks-opscode</code></li> <li>Standard topology: places it at <code>{output}/{project}-ops/</code></li> <li>Omni topology: places it at <code>{output}/{project}/ops/</code></li> <li>Writes <code>{cloud}/config.env</code> with project name, region, domain</li> </ul> </li> <li>Runs <code>git init</code> + initial commit</li> </ol>"},{"location":"cli/init/#clone-auth","title":"Clone auth","text":"<p>The CLI tries SSH first, then HTTPS:</p> <pre><code>[email protected]:ConflictHQ/boilerworks-{family}.git \u2190 tried first\nhttps://github.com/ConflictHQ/boilerworks-{family}.git \u2190 fallback\n</code></pre>"},{"location":"cli/init/#dry-run-example","title":"Dry run example","text":"<pre><code>boilerworks init --dry-run\n\n 1. Clone ConflictHQ/boilerworks-django-nextjs\n 2. Remove .git/ from cloned directory\n 3. Replace all 'boilerworks' \u2192 'my-app' (case-variant)\n 4. Rename files/dirs containing 'boilerworks'\n 5. Update CLAUDE.md and README.md headers\n 6. git init + initial commit in /Users/me/repos/my-app\n 7. Clone ConflictHQ/boilerworks-opscode \u2192 /Users/me/repos/my-app-ops\n 8. Render + rename ops files (boilerworks \u2192 my-app)\n 9. Write aws/config.env (project, region, domain)\n 10. git init ops repo in /Users/me/repos/my-app-ops\n\nOutput directory: /Users/me/repos/my-app\n</code></pre>"},{"location":"cli/list/","title":"boilerworks list","text":"<p>List all available templates.</p> <pre><code>boilerworks list\nboilerworks list --size full\nboilerworks list --language python\nboilerworks list --size micro --language go\n</code></pre>"},{"location":"cli/list/#options","title":"Options","text":"Option Values Description <code>--size</code> <code>full</code>, <code>micro</code>, <code>edge</code> Filter by template size <code>--language</code> <code>python</code>, <code>ruby</code>, <code>typescript</code>, <code>php</code>, <code>java</code>, <code>go</code>, <code>elixir</code>, <code>rust</code> Filter by primary language"},{"location":"cli/list/#output","title":"Output","text":"<p>Displays a Rich table with columns:</p> <ul> <li>Name \u2014 template family name (pass to <code>boilerworks setup</code>)</li> <li>Size \u2014 Full / Micro / Edge</li> <li>Language \u2014 primary backend language</li> <li>Frontend \u2014 frontend framework (if any)</li> <li>Status \u2014 <code>done</code> (\u25cf), <code>building</code> (\u25d0), <code>planned</code> (\u25cb)</li> <li>Description \u2014 one-line summary</li> </ul>"},{"location":"cli/list/#template-status","title":"Template status","text":"Status Meaning <code>done</code> Production-ready, live-tested <code>building</code> In progress <code>planned</code> On the roadmap"},{"location":"cli/setup/","title":"boilerworks setup","text":"<p>Run the interactive setup wizard. Asks questions about your project and writes <code>boilerworks.yaml</code>.</p> <pre><code>boilerworks setup\nboilerworks setup --output /path/to/boilerworks.yaml\n</code></pre>"},{"location":"cli/setup/#options","title":"Options","text":"Option Description <code>--output PATH</code> Where to write the manifest (default: <code>boilerworks.yaml</code> in cwd)"},{"location":"cli/setup/#questions","title":"Questions","text":"<p>The wizard walks through 13 steps:</p> <ol> <li>Project name \u2014 validated slug (lowercase, letters/digits/hyphens, must start with a letter)</li> <li>Template size \u2014 Full / Micro / Edge (with a guide panel)</li> <li>Template family \u2014 filtered by size, shown as a Rich table with status indicators</li> <li>Topology \u2014 standard, omni, or api-only (filtered to what the template supports)</li> <li>Cloud provider \u2014 aws / gcp / azure / none</li> <li>Infrastructure \u2014 include boilerworks-opscode? (shown only if cloud is selected)</li> <li>Region \u2014 default varies by cloud</li> <li>Domain \u2014 optional</li> <li>Mobile \u2014 include mobile template? (Full templates only)</li> <li>Web presence \u2014 include marketing site? (Full templates only)</li> <li>Compliance \u2014 multi-select: soc2, hipaa, pci-dss, gdpr</li> <li>Email provider \u2014 ses / sendgrid / mailgun / none</li> <li>E2E testing \u2014 playwright / cypress / none</li> </ol> <p>A summary panel shows all selections before writing.</p>"},{"location":"cli/setup/#output","title":"Output","text":"<pre><code># boilerworks.yaml\nproject: my-app\nfamily: django-nextjs\nsize: full\ntopology: standard\ncloud: aws\nops: true\nregion: us-east-1\ndomain: myapp.com\n...\n</code></pre> <p>Pass this file to <code>boilerworks init</code> to generate the project.</p>"},{"location":"getting-started/configuration/","title":"Configuration","text":""},{"location":"getting-started/configuration/#boilerworksyaml","title":"boilerworks.yaml","text":"<p>The manifest file that drives <code>boilerworks init</code>. Created by <code>boilerworks setup</code>, or write it by hand.</p> <pre><code>project: my-app\nfamily: django-nextjs\nsize: full\ntopology: standard\ncloud: aws\nops: true\nregion: us-east-1\ndomain: myapp.com\nmobile: false\nweb_presence: false\ncompliance:\n - soc2\nservices:\n email: ses\n storage: null\n search: null\n cache: redis\ndata:\n database: postgres\n migrations: true\n seed_data: true\ntesting:\n e2e: playwright\n unit: true\n integration: true\ntemplate_versions: {}\n</code></pre>"},{"location":"getting-started/configuration/#fields","title":"Fields","text":"Field Type Description <code>project</code> string Slug \u2014 lowercase, letters/digits/hyphens <code>family</code> string Template name from <code>boilerworks list</code> <code>size</code> <code>full</code> | <code>micro</code> | <code>edge</code> Template size <code>topology</code> <code>standard</code> | <code>omni</code> | <code>api-only</code> Project structure <code>cloud</code> <code>aws</code> | <code>gcp</code> | <code>azure</code> | null Cloud provider for infra <code>ops</code> bool Include boilerworks-opscode <code>region</code> string Cloud region <code>domain</code> string App domain <code>mobile</code> bool Include mobile template (Full only) <code>web_presence</code> bool Include marketing site (Full only) <code>compliance</code> list <code>soc2</code>, <code>hipaa</code>, <code>pci-dss</code>, <code>gdpr</code>"},{"location":"getting-started/configuration/#topologies","title":"Topologies","text":"<p>Standard (default) \u2014 separate directories: <pre><code>my-app/ \u2190 app repo (git init'd)\nmy-app-ops/ \u2190 Terraform repo (git init'd, if ops=true)\n</code></pre></p> <p>Omni \u2014 single repo: <pre><code>my-app/\n ...app files...\n ops/ \u2190 Terraform lives here\n</code></pre></p> <p>API-only \u2014 no frontend: <pre><code>my-app/ \u2190 backend only\n</code></pre></p>"},{"location":"getting-started/configuration/#annotated-example","title":"annotated example","text":"<p>See <code>boilerworks.yaml.example</code> in the repo for a fully annotated manifest with all fields and their defaults.</p>"},{"location":"getting-started/installation/","title":"Installation","text":""},{"location":"getting-started/installation/#requirements","title":"Requirements","text":"<ul> <li>Python 3.12+</li> <li>Git</li> <li>SSH key or <code>gh auth login</code> for GitHub access (templates are cloned from ConflictHQ)</li> </ul>"},{"location":"getting-started/installation/#install","title":"Install","text":"pippipx (recommended)uv <pre><code>pip install boilerworks\n</code></pre> <pre><code>pipx install boilerworks\n</code></pre> <pre><code>uv tool install boilerworks\n</code></pre>"},{"location":"getting-started/installation/#verify","title":"Verify","text":"<pre><code>boilerworks --help\n</code></pre> <pre><code>Usage: boilerworks [OPTIONS] COMMAND [ARGS]...\n\n Boilerworks CLI \u2014 project scaffolding from the boilerworks.ai catalogue.\n\nCommands:\n setup Run the interactive setup wizard \u2192 writes boilerworks.yaml\n init Generate a project from boilerworks.yaml\n list List all available templates\n bootstrap Run Terraform infrastructure layers (requires cloud setup)\n</code></pre>"},{"location":"getting-started/installation/#github-access","title":"GitHub Access","text":"<p>Templates are cloned from <code>github.com/ConflictHQ</code>. The CLI tries SSH first, then HTTPS.</p> <p>SSH (recommended): <pre><code># Add your key to GitHub if you haven't already\nssh-add ~/.ssh/id_ed25519\nssh -T [email protected] # should say \"Hi <username>\"\n</code></pre></p> <p>HTTPS via gh CLI: <pre><code>gh auth login\n</code></pre></p>"},{"location":"getting-started/quickstart/","title":"Quick Start","text":"<p>Get a working project in under 5 minutes.</p>"},{"location":"getting-started/quickstart/#1-install","title":"1. Install","text":"<pre><code>pip install boilerworks\n</code></pre>"},{"location":"getting-started/quickstart/#2-pick-a-template","title":"2. Pick a template","text":"<pre><code>boilerworks list\n</code></pre> <p>This shows all 26 templates with size, language, and description.</p> <pre><code>boilerworks list --size full # only Full templates\nboilerworks list --language python # only Python templates\n</code></pre>"},{"location":"getting-started/quickstart/#3-run-the-wizard","title":"3. Run the wizard","text":"<pre><code>boilerworks setup\n</code></pre> <p>The wizard asks 13 questions:</p> <ol> <li>Project name \u2014 slug format (e.g. <code>my-app</code>)</li> <li>Template size \u2014 Full / Micro / Edge</li> <li>Template family \u2014 filtered list based on size</li> <li>Topology \u2014 standard (separate repos) or omni (monorepo)</li> <li>Cloud provider \u2014 aws / gcp / azure / none</li> <li>Infrastructure \u2014 include boilerworks-opscode? (yes/no, if cloud selected)</li> <li>Region \u2014 e.g. <code>us-east-1</code></li> <li>Domain \u2014 e.g. <code>myapp.com</code></li> <li>Mobile \u2014 include mobile template? (Full only)</li> <li>Web presence \u2014 include marketing site? (Full only)</li> <li>Compliance \u2014 SOC2 / HIPAA / PCI-DSS / GDPR</li> <li>Email provider \u2014 SES / SendGrid / Mailgun</li> <li>E2E testing \u2014 Playwright / Cypress</li> </ol> <p>Writes <code>boilerworks.yaml</code> to the current directory.</p>"},{"location":"getting-started/quickstart/#4-generate","title":"4. Generate","text":"<pre><code>boilerworks init\n</code></pre> <p>This:</p> <ol> <li>Clones the template from <code>ConflictHQ/boilerworks-{family}</code></li> <li>Removes <code>.git/</code></li> <li>Replaces all <code>boilerworks</code> strings with your project name (case-variant)</li> <li>Renames any files/directories containing <code>boilerworks</code></li> <li>If cloud + ops selected: clones <code>boilerworks-opscode</code> and configures it</li> <li>Runs <code>git init</code> + initial commit</li> </ol>"},{"location":"getting-started/quickstart/#5-boot-it","title":"5. Boot it","text":"<pre><code>cd my-app\ndocker compose up -d\n</code></pre> <p>Visit <code>http://localhost:3000</code>. Your app is running with your project name everywhere.</p>"},{"location":"getting-started/quickstart/#what-you-get","title":"What you get","text":"<p>Every Full template ships with:</p> <ul> <li>User auth (login, logout, session management)</li> <li>Group-based permissions</li> <li>Items + Categories CRUD</li> <li>Form definitions + submissions</li> <li>Workflow definitions + instances</li> <li>Admin dashboard</li> <li>Background jobs</li> <li>PostgreSQL 16 + Redis 7</li> <li>Docker Compose (dev) + Dockerfile (prod)</li> <li>Health check endpoint</li> <li>RSpec / pytest tests</li> <li>CI pipeline</li> </ul> <p>Dry run first</p> <p>Not sure what will happen? Run <code>boilerworks init --dry-run</code> to see the full plan without touching the filesystem.</p>"},{"location":"guide/choosing/","title":"Choosing a Template","text":""},{"location":"guide/choosing/#by-what-youre-building","title":"By what you're building","text":"If you're building... Use SaaS with user accounts, teams, billing Full Internal tool / admin app Full Public API for developers Micro Microservice in a larger system Micro Marketing site or landing page Edge Globally distributed API Edge"},{"location":"guide/choosing/#by-your-teams-stack","title":"By your team's stack","text":"Team knows... Reach for Python <code>django-nextjs</code>, <code>django-micro</code>, <code>fastapi-micro</code> Ruby <code>rails-nextjs</code>, <code>rails-hotwire</code>, <code>rails-micro</code> TypeScript (Node) <code>nestjs-nextjs</code>, <code>nestjs-micro</code>, <code>express-micro</code> PHP <code>laravel-vue</code>, <code>laravel-micro</code> Java / Kotlin <code>spring-angular</code>, <code>spring-micro</code> Go <code>go-nextjs</code>, <code>go-micro</code> Elixir <code>phoenix-liveview</code>, <code>phoenix-micro</code> Rust <code>rust-micro</code> Full-stack JS (no separate backend) <code>remix-full</code>, <code>sveltekit-full</code>, <code>remix-edge</code>, <code>sveltekit-edge</code>"},{"location":"guide/choosing/#by-frontend-preference","title":"By frontend preference","text":"Frontend Full templates Next.js (React) <code>django-nextjs</code>, <code>rails-nextjs</code>, <code>nestjs-nextjs</code>, <code>go-nextjs</code> Vue (Inertia) <code>laravel-vue</code> Angular <code>spring-angular</code> Hotwire (server-rendered) <code>rails-hotwire</code> LiveView (server-rendered) <code>phoenix-liveview</code> Remix <code>remix-full</code>, <code>remix-edge</code> SvelteKit <code>sveltekit-full</code>, <code>sveltekit-edge</code>"},{"location":"guide/choosing/#crown-jewels","title":"Crown jewels","text":"<p><code>django-nextjs</code> \u2014 the reference implementation. Every pattern in the catalogue was refined here first. Django 5 backend with Strawberry GraphQL, Next.js 16 frontend with Apollo Client. If you're unsure, start here.</p> <p><code>rails-hotwire</code> \u2014 the most opinionated Rails stack. Hotwire (Turbo + Stimulus) + Tailwind CSS 4 + Pundit + Solid Queue. Zero JavaScript build complexity, full interactivity.</p> <p><code>fastapi-micro</code> \u2014 async-native Python API. The fastest way to ship a Python microservice that can handle real load.</p>"},{"location":"guide/templates/","title":"Template Catalogue","text":"<p>26 production-ready templates across 10 stacks. All ship with real code \u2014 no stubs, no TODOs.</p>"},{"location":"guide/templates/#full-templates","title":"Full Templates","text":"<p>Apps with user auth, group permissions, and full admin interface.</p> Template Backend Frontend Auth Jobs <code>django-nextjs</code> Django 5 Next.js 16 (GraphQL/Apollo) Session Celery <code>rails-nextjs</code> Rails 8 Next.js 16 (GraphQL/Apollo) Session Solid Queue <code>rails-hotwire</code> Rails 8 Hotwire + Tailwind Session Solid Queue <code>nestjs-nextjs</code> NestJS Next.js 16 (GraphQL/Apollo) Session Bull <code>laravel-vue</code> Laravel 12 Vue 3 (Inertia) Session Horizon <code>spring-angular</code> Spring Boot Angular 19 Session Spring Scheduler <code>go-nextjs</code> Go Next.js 16 (GraphQL) Session \u2014 <code>remix-full</code> Remix \u2014 Session \u2014 <code>sveltekit-full</code> SvelteKit \u2014 Session \u2014 <code>phoenix-liveview</code> Phoenix LiveView Session Oban"},{"location":"guide/templates/#whats-in-every-full-template","title":"What's in every Full template","text":"<ul> <li>User model with <code>has_secure_password</code> / bcrypt</li> <li>Group-based permissions \u2014 Pundit / CanCan / custom</li> <li>Concerns/mixins: Auditable, SoftDeletable, ExternalId (UUID), Versionable</li> <li>Business models: Items, Categories, FormDefinitions, FormSubmissions, WorkflowDefinitions, WorkflowInstances</li> <li>Admin dashboard with CRUD for all models</li> <li>PostgreSQL 16 (primary) + Redis 7 (cache + jobs)</li> <li>Mailpit (dev email catcher)</li> <li>Docker Compose (dev) + Dockerfile (prod, multi-stage)</li> <li>Health check at <code>/up</code> or <code>/health/</code></li> <li>Tests with real database \u2014 never mocked</li> </ul>"},{"location":"guide/templates/#micro-templates","title":"Micro Templates","text":"<p>API-key auth only. No user management, no frontend. Lean, fast, deployable.</p> Template Stack Auth <code>django-micro</code> Django 5 REST API key <code>fastapi-micro</code> FastAPI + async API key <code>nestjs-micro</code> NestJS REST API key <code>rails-micro</code> Rails 8 API API key <code>laravel-micro</code> Laravel 12 API API key <code>spring-micro</code> Spring Boot API key <code>go-micro</code> Go + Chi API key <code>express-micro</code> Express + TypeScript API key <code>phoenix-micro</code> Phoenix API API key <code>rust-micro</code> Axum API key"},{"location":"guide/templates/#whats-in-every-micro-template","title":"What's in every Micro template","text":"<ul> <li>API key auth middleware</li> <li>Items CRUD endpoint</li> <li>Health check</li> <li>PostgreSQL 16 + Redis 7</li> <li>Docker Compose + Dockerfile</li> <li>OpenAPI / Swagger docs (where framework supports it)</li> </ul>"},{"location":"guide/templates/#edge-templates","title":"Edge Templates","text":"<p>Cloudflare-native. No servers, no Docker \u2014 deploys to the global edge.</p> Template Platform Runtime <code>sveltekit-edge</code> Cloudflare Pages SvelteKit + adapter-cloudflare <code>remix-edge</code> Cloudflare Pages Remix + adapter-cloudflare <code>nextjs-edge</code> Cloudflare Pages Next.js + @cloudflare/next-on-pages <code>astro-edge</code> Cloudflare Pages Astro + adapter-cloudflare <code>hono-edge</code> Cloudflare Workers Hono <code>worker-edge</code> Cloudflare Workers bare Worker API"},{"location":"guide/templates/#whats-in-every-edge-template","title":"What's in every Edge template","text":"<ul> <li>Cloudflare Workers / Pages deploy config (<code>wrangler.toml</code>)</li> <li>D1 (SQLite) or KV bindings</li> <li>Local dev with <code>wrangler dev</code></li> <li>GitHub Actions deploy workflow</li> </ul>"},{"location":"guide/templates/#ports","title":"Ports","text":"<p>All templates use standardised ports to avoid collisions when running multiple projects:</p> Service Port App 3000 (frontend) / 8000 (backend API) PostgreSQL 5432 Redis 6379 Mailpit (SMTP) 1025 Mailpit (UI) 8025 MinIO (S3) 9001"}]}