···1818bun run typecheck # tsc --noEmit
1919```
20202121-The database auto-seeds with sample data on first run. To reset, delete `atwiki.db` and restart.
2121+The database auto-seeds with sample data on first run. To reset, delete `lichen.db` and restart.
22222323## Development commands
2424···6060 server/ # Elysia routes, database (schema, queries/, seed)
6161 atproto/ # ATProto OAuth (client, routes, session, env) + PDS write functions
6262 firehose/ # standalone firehose subscriber
6363- lib/ # shared logic (at-uri, diff, markdown, slugs, viz, image, blob refs, ws-polyfill)
6363+ lib/ # shared logic (at-uri, diff, markdown, slugs, viz, image, blob refs, ws-polyfill, i18n, urls, response)
6464 shared/ # shared type definitions (viz-types)
6565 views/ # HTML templates
6666lexicons/ # ATProto lexicon schemas
···8282- PDS is canonical: PDS write must succeed before DB write. If PDS fails, the request fails (no partial state)
8383- No ORMs — raw SQL with prepared statements
8484- Route param names must be consistent across all routes sharing a path segment
8585+- UI strings must use the i18n system (`t(locale).section.key`) — no hardcoded English strings in views
8686+- Tailwind class names must come from `src/views/theme.ts` (`THEME.*`) — no hardcoded class strings in views. Client-side hex colors come from `THEME_HEX`
85878688## Database
8789···96989799## ATProto
981009999-**Lexicon namespace:** `pub.coral`. Lexicon JSON files live in `lexicons/`.
101101+**Lexicon namespace:** `wiki.lichen` (domain: `lichen.wiki`). Lexicon JSON files live in `lexicons/`.
100102101101-Record types: `pub.coral.wiki`, `pub.coral.note`, `pub.coral.noteRevision`, `pub.coral.memberRequest`, `pub.coral.membership`, `pub.coral.bookmark`
103103+Record types: `wiki.lichen.wiki`, `wiki.lichen.note`, `wiki.lichen.noteRevision`, `wiki.lichen.memberRequest`, `wiki.lichen.membership`, `wiki.lichen.bookmark`
102104103105In dev mode (no OAuth configured), PDS writes are skipped and a mock DID (`did:plc:mock123`) is used. All data lives in SQLite only.
104106
+6
README.md
···11+# Lichen
22+13A wiki built on [ATProto](https://atproto.com). Sign in with your Bluesky account, create public or private wikis, and write in plain markdown with `[[wikilinks]]`.
2435Your data lives on your own PDS: records persist independently of this app, and your Bluesky identity works everywhere on ATProto.
66+77+**Features:** wikilinks · backlinks · revision history · access control (public/private wikis, roles) · D3 visualizations in fenced code blocks · image upload · EN/FR UI
88+99+**Lexicon namespace:** `wiki.lichen` — domain: `lichen.wiki`
410511## Quick start
612```bash