Files
andwati.com/TODO.md
T
andwati 27efeb8b26 Add Docker setup for running Strapi locally
apps/cms/Dockerfile.dev + root docker-compose.yml give a one-command
way to run the CMS in a container for testing (docker compose up
cms), with the shared content/ directory mounted so it matches the
host dev setup. apps/cms/Dockerfile is a production multi-stage build
for later Dokploy deployment. Uses node:24-bookworm-slim to match the
local Node version and get glibc prebuilt binaries for better-sqlite3
without needing a native build toolchain in the final image.

Verified: both images build, the dev container boots Strapi
successfully, admin panel and API routes are reachable, and the
mounted content/ volume resolves at the same relative path the future
sync provider will expect.
2026-08-30 18:36:31 +03:00

106 lines
4.4 KiB
Markdown

# Astro + Strapi Rebuild — TODO
Tracking doc for the `astro-migration` branch. See the locked spec in the
approved plan for full rationale on each decision referenced below.
## Done
- [x] Scaffold pnpm workspace (`apps/site` Astro, `apps/cms` Strapi + SQLite)
- [x] Switch tooling to pnpm-only, add Biome for lint/format
- [x] Define shared `content/` schema (writings, portfolio, bookshelf, blogs)
with TOML frontmatter matching the legacy Zola format
- [x] Bookshelf schema covers both books (ISBN) and papers (DOI/arXiv id)
- [x] Custom Astro content loader parsing `+++` TOML frontmatter directly
(no YAML conversion step)
- [x] Basic list/detail pages for all four content types, verified running
end-to-end in-browser (`pnpm --filter site dev`)
- [x] CLAUDE.md updated: no agent self-attribution in commits/PRs, commit
regularly after each working step
- [x] Strapi content-type definitions matching the `content/` schema exactly
(writings, portfolio, bookshelf, blogs) — verified boots and registers
all four REST routes
- [x] `apps/cms/Dockerfile.dev` + root `docker-compose.yml` for running
Strapi locally in a container (node:24-bookworm-slim, matches local
Node version); `apps/cms/Dockerfile` production multi-stage build for
later Dokploy deployment. Verified: builds, boots, admin panel and API
reachable, shared `content/` volume mounted at the right relative path
## Content pipeline
- [ ] Strapi custom provider/lifecycle hooks that read + write the same
Markdown files in `content/` (Strapi's DB stays a disposable cache)
- [ ] Verify round-trip: edit in Strapi admin → file on disk updates, and
vice versa, without drift
- [ ] Bookshelf ISBN lookup hook (Open Library / Google Books) with local
cover caching
- [ ] Bookshelf paper lookup hook (Semantic Scholar / arXiv) with local
cover/thumbnail caching
- [ ] OG image auto-generation extended from the legacy per-post script to
all three content types (writings, portfolio, bookshelf)
- [ ] `llms.txt` generation extended to cover all content types, not just
posts
## Design system
- [ ] New typography scale + color system (full reset, not inherited from
`sass/_theme.scss`)
- [ ] Motion primitives: CSS + native Web Animations API spring utility
- [ ] Base layout/components replacing the placeholder `Base.astro`
- [ ] Homepage redesign around the Three.js centerpiece as hero
- [ ] New 404 page concept (terminal easter egg retired)
## Three.js centerpiece
- [ ] Decide the constellation/node-graph data model (what nodes/edges
represent — writings ↔ portfolio ↔ beliefs connections)
- [ ] Build as an isolated Astro island
- [ ] Static image/CSS fallback for `prefers-reduced-motion` and low-end
devices
- [ ] Perf budget check on a low-end/mobile profile
## Content features carried over from the Zola site
- [ ] Series-nav (multi-part post series)
- [ ] Table of contents (inline + sidebar)
- [ ] Prev/next post navigation
- [ ] Related posts (tag-based)
- [ ] Per-tag descriptions on tag archive pages
- [ ] `llms_description` meta (site-wide + per-post override — schema
already supports the override)
- [ ] RSS/JSON feeds
- [ ] Sitemap + robots.txt
## Search & comments
- [ ] Pagefind integration (static search index from the Astro build output)
- [ ] Webmentions integration (replacing Utterances) — decide self-hosted
endpoint vs. webmention.io
## Analytics
- [ ] Stand up Plausible or Umami on the Dokploy host, wire up tracking
snippet (replacing Google Analytics)
## Migration from the legacy Zola site
- [ ] Script/process to convert `content/posts/*.md` into the new
`content/writings/` schema
- [ ] Preserve slugs/URLs or add redirects (mechanism TBD — Astro
middleware vs. `static-web-server`/`sws.toml` rules)
- [ ] Migrate `content/archive/`, `content/about.md` equivalents
- [ ] Verify RSS subscribers and inbound links survive the cutover
## Infra / deployment
- [ ] Wire Strapi into the Dokploy deployment alongside the Astro build
- [ ] Decide build trigger: webhook on Strapi publish → CI rebuild, vs.
manual/scheduled rebuild
- [ ] Update `Dockerfile`/`sws.toml` for the new build output (currently
Zola-specific)
## Cleanup
- [ ] Remove Zola-specific files (`zola.toml`, `templates/`, `sass/`,
`themes/`, `content/posts/`, legacy OG/llms scripts) once each has a
working Astro/Strapi equivalent — progressively, not all at once