An opinionated collection of web app templates for building interactive, well-tested applications across ecosystems. Designed for use with opencode (skills, ADRs, agent workflows) but easily adapted to any AI harness.
The name comes from the Japanese art of repairing broken pottery with gold — every fix and refinement makes the codebase stronger and more beautiful.
| Ecosystem | Stack | Directory |
|---|---|---|
| C# | .NET 10 + ASP.NET Core Razor Pages + HTMX + SQLite/EF Core + xUnit | c_sharp/ |
| TypeScript | Node.js + Express + HTMX + SQLite/better-sqlite3 + Vitest | typescript/ |
| Go | Go 1.24 + net/http + HTMX + SQLite/modernc.org + testing (air live-reload) | go/ |
| Python | Python 3.12 + FastAPI + Jinja2 + HTMX + SQLite/aiosqlite + pytest | python/ |
All templates share the same opinionated conventions:
- DDD with encapsulated domain entities — entities protect their invariants through constructors/factories and behavior methods. No anemic data bags.
- Vertical slice architecture — each feature is a self-contained folder with its entity, data access, routes, and views. No cross-cutting layers.
- HTMX for interactivity — server-rendered HTML with HTMX attributes
(
hx-boost,hx-confirm,hx-disabled-elt,hx-vals). Leverage pragmatic HTMX for all interactivity; avoid custom JavaScript wherever possible. No SPA, no client-side framework, no JS build step. - Testable by design — every feature is backed by tests using a real
database connection (
:memory:). No mocking frameworks or fakes. Use test containers for test isolation. - TDD workflow — write the test first, then the production code.
- Built-in theme system — each template ships with a theme picker
(30+ dark and light themes) with
localStoragepersistence. - Cache busting — CSS/JS assets are versioned on server restart to prevent stale caches.
- Boring and obvious — clarity over cleverness. Fewer abstractions, less indirection, less to change.
# C#
cd c_sharp
dotnet run --project Kintsugi.Web
# TypeScript
cd typescript
npm install
npm run dev
# Go
cd go
make dev
# Python
cd python
uv sync --extra dev
uv run uvicorn src.main:app --reloadEach template is a standalone starter project with opencode agent config baked in.
Use the whole repo, keep your chosen template, delete the rest:
git clone https://github.com/YOUR-ORG/Kintsugi.git my-app
cd my-app
rm -rf typescript .git # keep C#
# or: rm -rf c_sharp .git # keep TypeScript
(cd .opencode && npm install) # opencode runtime depsThe .opencode/ directory is already at the root — you're done.
cp -r /path/to/Kintsugi/c_sharp /path/to/my-app # or typescript
cp -r /path/to/Kintsugi/.opencode /path/to/my-app/.opencode
cd /path/to/my-app
(cd .opencode && npm install)The .opencode/ directory provides:
- Skills (
add-feature,fix-bug,refactor,designer) — loaded by your AI agent - Commands (e.g.
commit) — custom agent workflows - Runtime (
@opencode-ai/plugin) — enables opencode integration
Templates ship with their own opencode.json, AGENTS.md, and docs/ — no extra setup needed.
See .screenshots/ for screenshots of each running project.
- Create a new directory at the root (e.g.
python/,rust/). - Add a
README.mddocumenting the stack and project structure. - Add a row to this root README's template table.
- Follow the common conventions above for consistency.