hobi.floriandheer.com
Personal hobby blog covering cooking, outdoors activities, and archery. Built with VitePress, managed with pnpm.
Commands
| Command | Description |
|---|---|
pnpm docs:dev | Start local dev server at http://localhost:5173 |
pnpm docs:build | Build for production into dist/ |
pnpm docs:preview | Preview the production build locally |
First run: pnpm install before any of the above.
Folder structure
02_Development/
├── .vitepress/
│ ├── config.mts # VitePress config, i18n locales, nav, sitemap
│ ├── data/
│ │ └── posts.data.ts # Content loader — aggregates all posts for the homepage
│ └── theme/
│ ├── index.ts # Theme entry: component registration, medium-zoom setup
│ ├── style.css # Brand tokens (--hobi-*), VitePress overrides
│ ├── Layout.vue # Thin layout wrapper (slot passthrough for future use)
│ ├── layouts/
│ │ └── HomePage.vue # Custom homepage layout (layout: page + <HomePage />)
│ └── components/
│ ├── RecentPosts.vue # Reusable recent-posts list (used on homepage)
│ ├── RecipeCard.vue # Ingredient/gear/source card (ported from wiki)
│ ├── LinkCardGrid.vue # Grid of external link cards (ported from wiki)
│ └── PackingChecklist.vue # Interactive packing checklist (ported from wiki)
│
├── index.md # Root — browser language detection redirect (→ /nl/ or /en/)
│
├── nl/ # Dutch locale (/nl/...)
│ ├── index.md # Dutch homepage (layout: page → <HomePage />)
│ ├── koken/
│ │ ├── index.md # Category landing — auto-lists posts via data loader
│ │ └── posts/ # One file per recipe
│ ├── buiten/
│ │ ├── index.md
│ │ └── posts/
│ └── boogschieten/
│ ├── index.md
│ └── posts/ # Empty for now — add files here when ready
│
├── en/ # English locale (/en/...)
│ ├── index.md
│ ├── cooking/
│ ├── outdoors/
│ └── archery/
│
└── public/
├── favicon.svg
└── images/
├── koken/ # Post images for cooking posts
├── buiten/ # Post images for outdoors posts
└── boogschieten/ # Post images for archery postsAdding a new post
Dutch recipe (koken)
- Create
nl/koken/posts/<slug>.md - Add frontmatter:yaml
--- title: Recept Naam date: 2025-06-01 # ISO date — required for sorting tags: [BBQ, Smoking] description: Korte omschrijving van het recept --- - If the post has images, put them in
public/images/koken/and reference them as/images/koken/filename.jpg - Use
<RecipeCard ... />for the ingredient block (see existing posts for syntax)
Dutch outdoors post (buiten)
Same pattern, use nl/buiten/posts/<slug>.md. <LinkCardGrid /> and <PackingChecklist /> are available globally.
Dutch archery post (boogschieten)
Same pattern, use nl/boogschieten/posts/<slug>.md.
English post
Mirror structure under en/cooking/posts/, en/outdoors/posts/, or en/archery/posts/. Add lang: en to the frontmatter.
Note on images: Keep source images under 500 KB. Run them through Squoosh or similar before committing. Use WebP where possible for best compression.
Migration notes
Content migrated from wiki/02_Development/knowledge/ on 2024-01-01.
Migrated
| Source | Destination | Notes |
|---|---|---|
recipe-chocolate-chip-cookies.md | nl/koken/posts/chocolate-chip-cookies.md | Frontmatter normalised |
recipe-brisket.md | nl/koken/posts/brisket.md | |
recipe-beef-jerky.md | nl/koken/posts/beef-jerky.md | |
recipe-cuban-chicken.md | nl/koken/posts/cuban-chicken.md | |
recipe-cubano-sandwich.md | nl/koken/posts/cubano-sandwich.md | |
recipe-fried-chicken.md | nl/koken/posts/fried-chicken.md | |
recipe-mop-sauce.md | nl/koken/posts/mop-sauce.md | |
recipe-ribs.md | nl/koken/posts/ribs.md | |
recipe-smashburger.md | nl/koken/posts/smashburger.md | |
outdoors.md | nl/buiten/posts/buiten-gids.md | Renamed; all content preserved |
Dates: No date field existed in any source file. All posts got date: 2024-01-01 as a placeholder — update these to the actual publish/write dates when known.
RecipeCard / LinkCardGrid / PackingChecklist components were ported directly from the wiki theme. They are self-contained — no dependency on wiki-specific CSS variables beyond standard VitePress tokens.
Not migrated (wiki-only content)
The following files were found in the source folder and deliberately left behind (software documentation, tools, unrelated topics):
3d-printing.md, ableton.md, affinity.md, ai.md, alibre.md, animation.md,
blender.md, chrome.md, compositing.md, cooking.md (index page — content
already split into individual recipe files), darktable.md, davinci.md,
design.md, dokuwiki.md, drawing.md, fusion.md, gimp.md, godot.md, hdri.md,
houdini.md, kodi.md, krita.md, mathematics.md, modeling.md, mp3tagger.md,
music.md, musicbee.md, obsidian.md, office.md, philosophy.md, photography.md,
photoscanning.md, physics.md, pipeline.md, programming.md, pureref.md,
resolume.md, sublime-text.md, substance-painter.md, texturing-shading.md,
touchdesigner.md, traktor.md, unity.md, unreal.md, vitepress.md, webdev.md,
windows.mdNo archery-specific files were found in the source knowledge folder. The /boogschieten/ section is ready and waiting for the first post.
Package choices
| Need | Package chosen | Alternatives considered |
|---|---|---|
| Lightbox | medium-zoom | yet-another-react-lightbox, photoswipe — both heavier; medium-zoom is tiny, zero-dependency, and widely used with VitePress |
| RSS feed | — (TODO) | vitepress-plugin-rss exists but maintenance is uncertain. Skipped for now; revisit when content volume justifies it |