A digital garden and blog platform built with Astro, featuring multiple content types, progressive disclosure, and full-text search.
- Multiple Content Types: Blog posts, daily logs, TIL entries, projects, and more
- Full-Text Search: Client-side search functionality
- Dark Mode Support: Automatic theme switching
- RSS Feeds: Auto-generated feeds for all content
This project uses mise to load local environment
variables from .env. With mise activated in your shell, trust the project
configuration the first time you enter the repository:
mise trustThen install the project dependencies:
pnpm install
# Start development server on localhost:4321
pnpm dev
# Format code with Prettier
pnpm format
# Check formatting
pnpm format:check# Build the site
pnpm build
# Preview production build locally
pnpm previewCommon tasks are defined in mise.toml. Run mise run with no task to list
them. The project also defines just as a shell alias for mise, so the
old task commands continue to work when mise is activated.
# List all available commands
mise run
# Create a new blog post
mise run post "My New Post Title"
# Create a new daily log entry
mise run log
# Create a new TIL entry
mise run til "category" "TIL Title"With Ollama installed and pnpm install completed, run:
mise run rebuild-mapThis starts a temporary local Ollama server when needed, downloads
qwen3-embedding:8b if missing, and rebuilds src/data/embeddings.json.
It reuses cached embeddings for unchanged content. A server started by the
script is stopped afterward; an existing server stays running.
Drafts are excluded. Blog posts must explicitly set draft: false; other
included collections are logs, TILs, garden, projects, now, and uses.
Refresh /map locally to see the result. Commit the generated JSON to include
the refreshed map in the next deployment; a regular site build does not
regenerate it.
The script can also be run directly with node scripts/rebuild_map.mjs.
mise run embed remains the generator-only command for an already configured
Ollama server. The server address and model are shared in scripts/map-config.mjs.
Content is organized in src/content/ with the following collections:
posts/: Long-form blog postslogs/: Daily logstil/: Today I Learned entriesprojects/: Project showcasesfeeds/: RSS feed configurationuses/: "What I Use" pagenow/: "What I'm Doing Now" page
See CLAUDE.md for detailed development guidelines.
MIT