- Go 42%
- HTML 31%
- CSS 27%
- Makefile <1%
tilde.style #
A design toolkit for intentional folk/tilde web presence.
Modelled after impeccable.style — a Claude Code skill, named commands, and curated anti-patterns — but for the folk web: tilde communities, smallweb servers, AT Protocol personal spaces, webrings.
The tilde (~) is the symbol of personal directories. style = deliberate intention.
The central constraint #
You bring the design intention. The AI executes it.
Before any generative design session, write your intention in one sentence. The toolkit enforces this. If you can't articulate what you wanted before the output arrived, the loop has already replaced your judgment.
This is the trespass.ing principle applied to design: author-preservation is agency.
Install #
# Clone into your Claude Code user skills directory
git clone git@tangled.org:tilde.style/toolkit ~/.claude/skills/tilde-style
Then in any Claude Code session:
/tilde-style init
CLI tooling (wiggle / wiggle-verify) #
Two small Go binaries automate the mechanical parts of adding a style — see
DESIGN.md's Tooling section for what each does and why they're split.
# Build from a local clone
git clone git@tangled.org:tilde.style/toolkit ~/tilde.style
cd ~/tilde.style && make build # → ./wiggle, ./wiggle-verify
# Or install directly — tangled.org serves the go-import meta tag needed
# for `go install` to resolve it, but it isn't a registered checksum-database
# host, so GOPRIVATE (or GONOSUMCHECK) has to skip that verification step:
GOPRIVATE=tangled.org go install tangled.org/tilde.style/toolkit/tools/cmd/wiggle@latest
GOPRIVATE=tangled.org go install tangled.org/tilde.style/toolkit/tools/cmd/wiggle-verify@latest
Commands #
| Command | Description |
|---|---|
init |
Design intention interview → style.md + DESIGN.md |
gardening |
Load the Gardening style (Teich-Morgen palette, pond vocabulary) |
ground |
Write design intention before generating. Preserves authorship. |
tend [target] |
Review against the active metaphor. Flag drift. |
detect [target] |
Scan for anti-patterns. Deterministic. |
language |
Define a new design language: metaphor → tokens → vocabulary → anti-patterns |
document |
Write/update DESIGN.md at end of session |
season [variant] |
Add a temporal palette variant via data-mode |
Styles #
tilde.style ships one style. Users create their own with language.
Gardening #
Extracted from chatbot-garden — a vocational training knowledge assistant. The metaphor emerged from the codebase: the knowledge base is a pond, content floats as Lernhappen, the ingest workflow is a picnic, the tool server is a shed, the append-only event log is a Rundholz.
See styles/gardening/style.md for the full manifest.
Anti-patterns #
Things tilde/folk web design avoids:
- Platform aesthetics imported wholesale — Substack, Notion, Linear chrome without adaptation
- AI-palette with no metaphor anchor — purple gradients, slate-and-teal, glassmorphism by default
- Conversational UI as the only surface — not every tilde site is a chatbot
- Scale-first vocabulary — components named after KPIs (feed, engagement, growth)
- Authorless generation — no
DESIGN.md, no recorded intention, no named decisions - Metaphor abandonment mid-sprint — starting with a garden, ending with generic cards
- Motion without a still state — every animation needs a
prefers-reduced-motioncounterpart
Contributing a style #
- Fork this repo
- Run
/tilde-style languagein a Claude Code session - Save your style manifest to
styles/{your-style}/style.md - Open a PR — include the metaphor origin and a screenshot or color swatch
Styles should be grounded in a real-world metaphor, not a design aesthetic.
License #
MIT. The Gardening style tokens and vocabulary are extracted from chatbot-garden with permission.
The wiggle/wiggle-verify CLI tooling (tools/) borrows real architectural patterns — a thin main.go per binary, Cobra subcommands, splitting a heavy dependency (browser automation) into its own binary rather than bloating the everyday tool — from hmans/beans, which this project's own .beans/ task tracking already runs on.