Skip to content

hobi.floriandheer.com

Personal hobby blog covering cooking, outdoors activities, and archery. Built with VitePress, managed with pnpm.


Commands

CommandDescription
pnpm docs:devStart local dev server at http://localhost:5173
pnpm docs:buildBuild for production into dist/
pnpm docs:previewPreview 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 posts

Adding a new post

Dutch recipe (koken)

  1. Create nl/koken/posts/<slug>.md
  2. Add frontmatter:
    yaml
    ---
    title: Recept Naam
    date: 2025-06-01        # ISO date — required for sorting
    tags: [BBQ, Smoking]
    description: Korte omschrijving van het recept
    ---
  3. If the post has images, put them in public/images/koken/ and reference them as /images/koken/filename.jpg
  4. 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

SourceDestinationNotes
recipe-chocolate-chip-cookies.mdnl/koken/posts/chocolate-chip-cookies.mdFrontmatter normalised
recipe-brisket.mdnl/koken/posts/brisket.md
recipe-beef-jerky.mdnl/koken/posts/beef-jerky.md
recipe-cuban-chicken.mdnl/koken/posts/cuban-chicken.md
recipe-cubano-sandwich.mdnl/koken/posts/cubano-sandwich.md
recipe-fried-chicken.mdnl/koken/posts/fried-chicken.md
recipe-mop-sauce.mdnl/koken/posts/mop-sauce.md
recipe-ribs.mdnl/koken/posts/ribs.md
recipe-smashburger.mdnl/koken/posts/smashburger.md
outdoors.mdnl/buiten/posts/buiten-gids.mdRenamed; 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.md

No archery-specific files were found in the source knowledge folder. The /boogschieten/ section is ready and waiting for the first post.


Package choices

NeedPackage chosenAlternatives considered
Lightboxmedium-zoomyet-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