Personal website built with Zola, Tailwind CSS v4, and DaisyUI v5.
Prerequisites:
- Zola
just
Run:
just setup
just devjust dev # full dev loop
just dev-fast # skip generated-content refresh
just build # production build
just ci-build # CI-equivalent build and validation
just check # local quality checks
just clean # remove build output
just help # command overviewSome files are generated and tracked in git:
content/projects/*.mdfromdata/projects.jsonstatic/widgets/latest-posts-data.json
Refresh before build/commit when relevant:
just project-pages
just widget-dataCI/deploy workflows enforce generated-content consistency.
content/: markdown contenttemplates/: Zola templates, macros, shortcodesstatic/: static assets served as-issrc/: source CSSdata/: structured source datascripts/: build and validation scriptsjustfile: command entrypoint
- Security headers and CSP are enabled; Cloudflare worker source:
tools/cloudflare/csp-meta-handoff-worker.js - PWA support is enabled (service worker, installability, notifications)
Stable integration entrypoints:
- Shell loader: /js/shell.js
- Service worker loader: /sw.js
<script type="module" src="https://dhanur.me/js/shell.js"></script>If Cloudflare blocks a bot or GitHub Action, use raw mirror URLs.
- RSS:
https://raw.githubusercontent.com/kascit/kascit.github.io/raw-mirror/rss.xml
Mirror publishing:
- Workflow:
.github/workflows/raw-mirror.yml - Manifest:
.github/raw-mirror-paths.txt(paths relative topublic/)
Example: add sitemap.xml to the manifest, then use
https://raw.githubusercontent.com/kascit/kascit.github.io/raw-mirror/sitemap.xml.
MIT