A local web app to manage and track progress on your programming book — built with Astro and served via Deno.
- Overview dashboard — word count progress, chapter stage breakdown, upcoming milestones
- Table of Contents — plan chapters, preface, intro, and appendices; inline-edit titles; stage pipeline per row
- Milestones — kanban-style board with Pending / In Progress / Done columns
- Code Samples — track every code file, link to chapters, filter by stage
- Settings — edit book metadata; export
book.json
All data lives in data/book.json — commit it alongside your Typst source.
npm install
npm run dev
# → http://localhost:3000# Install deps via npm first (Astro still needs npm for build tooling)
npm install
# Build
deno task build
# Run the Deno server
deno task start--allow-read --allow-write --allow-net --allow-env
book-tracker/
├── data/
│ └── book.json ← all your book data (edit or commit this)
├── src/
│ ├── layouts/
│ │ └── Base.astro ← shared HTML shell + design system
│ ├── lib/
│ │ ├── types.ts ← TypeScript types
│ │ ├── data.ts ← read/write book.json
│ │ └── id.ts ← ID generator
│ └── pages/
│ ├── index.astro ← Overview dashboard
│ ├── toc.astro ← Table of Contents
│ ├── milestones.astro
│ ├── samples.astro ← Code Samples
│ ├── settings.astro
│ └── api/
│ ├── chapters.ts
│ ├── sections.ts
│ ├── milestones.ts
│ ├── samples.ts
│ └── meta.ts
├── astro.config.mjs
├── deno.json
└── package.json
data/book.json is human-readable and version-control friendly:
{
"meta": { "title": "...", "author": "...", "targetWordCount": 80000 },
"chapters": [ { "id": "ch-1", "number": 1, "title": "...", "stage": "draft", ... } ],
"specialSections": [ { "type": "preface" | "intro" | "appendix", ... } ],
"codeSamples": [ { "file": "src/ch1/hello.zig", "status": "final", ... } ],
"milestones": [ { "title": "...", "status": "pending" | "in-progress" | "done", ... } ]
}not-started → outline → draft → edit → final
pending → in-progress → done