mirror of
https://github.com/andwati/andwati.com.git
synced 2026-10-18 01:12:53 +00:00
- Fresh structure: Next.js App Router + Tailwind v4 at the repo root, exported as static files (output: export) and served by static-web-server - Remove the Strapi CMS, Astro app, Pagefind search, comments, old scripts, Lighthouse config and compose files; content in content/ is now plain markdown with YAML frontmatter - Pages: About, Writing, Reading (3D bookshelf) and Portfolio, styled after adammaj.com - SEO: metadata and canonicals, JSON-LD, generated OG images, sitemap, robots, RSS and JSON feeds, llms.txt - Umami via PUBLIC_UMAMI_SCRIPT_URL / PUBLIC_UMAMI_WEBSITE_ID (build args) - Dockerfile builds the export and serves it with sws.toml (security headers, clean URLs, .well-known, OG image content type, immutable asset caching) - Prettier and cspell for content with a husky/lint-staged pre-commit hook - Old redirect list dropped to start from a clean slate
1.3 KiB
1.3 KiB
andwati.com
Personal site: about, writing, reading and portfolio. Next.js (App Router) with Tailwind CSS v4, exported as static files and served by static-web-server.
Develop
pnpm install
pnpm dev
Content
Everything lives in content/ as markdown with YAML frontmatter:
content/about.mdis the home pagecontent/writing/*.mdare posts (title,description,date,tags)content/reading/*.mdare books and paperscontent/portfolio/*.mdare projects
Covers go in public/covers/<slug>.jpg. Math ($...$), code fences, callouts and YouTube embeds are supported.
Checks
pnpm check # Biome (code) + Prettier and cspell (content)
pnpm format:content # format markdown
A pre-commit hook runs these on staged files. Add project words to .cspell/words.txt.
Analytics
Umami is loaded when both variables are set at build time:
PUBLIC_UMAMI_SCRIPT_URL=https://analytics.andwati.com/script.js
PUBLIC_UMAMI_WEBSITE_ID=...
Deploy
docker build -t andwati-site \
--build-arg PUBLIC_UMAMI_SCRIPT_URL=... \
--build-arg PUBLIC_UMAMI_WEBSITE_ID=... .
The image builds the static export (out/) and serves it with sws.toml (security headers, clean URLs, .well-known). In Dokploy, pass the two Umami variables as build args.