Template System¶
How It Works¶
Templates are layered via Copier + Jinja2:
Base template — shared by all projects (pyproject.toml, CI, gitignore)
Archetype template — project shape (service adds infra/, Makefile, .env)
Fragment templates — per-group scaffolding (API routes, DB models, etc.)
Group-Aware Rendering¶
All templates receive groups (list of selected group IDs) in Jinja2 context:
{% if "database" in groups %}
from {{ project_slug }}.core.database import get_session
{% endif %}
This means fragments auto-wire based on what’s selected:
.env.exampleonly includes vars for your groupsSettings only has fields for selected groups
Lifespan connects DB + Redis if those groups are present
Health check pings actual dependencies
Test fixtures match selected groups
Source Code Fragments¶
Fragment |
What it generates |
|---|---|
|
Pydantic Settings + .env.example |
|
FastAPI factory, routes, middleware, deps, main.py |
|
SQLAlchemy engine, session, Base model, mixins |
|
Async Redis client + connection pool |
|
JWT create/decode + Bearer auth dependency |
|
LangGraph agent with graph, state, tools, prompts |