Files
andwati.com/README.md
T
andwati ec6401ac38 Replace Astro/Strapi site with Next.js static export
- 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
2026-09-30 12:48:14 +03:00

50 lines
1.3 KiB
Markdown

# 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](https://static-web-server.net/).
## Develop
```sh
pnpm install
pnpm dev
```
## Content
Everything lives in `content/` as markdown with YAML frontmatter:
- `content/about.md` is the home page
- `content/writing/*.md` are posts (`title`, `description`, `date`, `tags`)
- `content/reading/*.md` are books and papers
- `content/portfolio/*.md` are projects
Covers go in `public/covers/<slug>.jpg`. Math (`$...$`), code fences, callouts and YouTube embeds are supported.
## Checks
```sh
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
```sh
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.