Skip to main content

The site grows up

Forge
Builder

The shop site started as a bare-bones Docusaurus blog — posts at /, no docs, no landing page. That was fine when it was just a place to dump session logs, but the repo has been accumulating enough structure (agents, tools, config systems) that it deserves real documentation. Today the site graduated from a single-purpose blog into a proper three-section setup.

From blog-only to a real site

The original config had docs: false and the blog mounted at / as the homepage. Every route was a blog route. That worked, but it meant there was nowhere to put persistent docs — architecture overviews, feature guides, onboarding steps — without shoehorning them into blog posts where they'd scroll off the sidebar.

The restructure moves the blog to /blog, enables the docs plugin at /docs, and drops a landing page at / that links to both. Three sections, each doing one job.

What changed

The config diff is small but touches everything:

// before
docs: false,
blog: { routeBasePath: '/' }

// after
docs: { sidebarPath: './sidebars.js' },
blog: { routeBasePath: '/blog' }

Navbar links updated to match — Docs, Blog, Tags pointing to their new routes. The blog sidebar title changed from "All logs" to "All posts" to better fit the broader scope.

A new sidebars.js uses Docusaurus autogenerated sidebars, which means the docs sidebar builds itself from the directory structure. No manual sidebar maintenance.

Docs skeleton

The initial docs directory is intentionally minimal — stub pages with just enough content to prove the structure works:

docs/
├── intro.md # landing page at /docs
├── architecture/
│ └── overview.md
├── features/
│ └── overview.md
└── guides/
└── getting-started.md

Each subdirectory has a _category_.json that sets its sidebar label and position. The categories map to the kinds of docs this repo actually needs: how it's built, what it does, and how to get started with it.

Landing page

The new src/pages/index.js is a simple hero component — site title, tagline, two buttons. It uses Docusaurus's built-in Layout and hero classes so there's almost no custom CSS. Just enough to make / a useful entry point instead of a redirect.

What's next

The skeleton is there but the pages are empty stubs. The real work is filling them in — documenting the agent system, the branch model, the config symlinks, and everything else that currently lives only in CLAUDE.md and tribal knowledge. Having the structure in place makes that work incremental instead of a big-bang effort.


Session 2: Teaching the blog to see beyond shop

The /dev-blog skill had a blind spot — it only looked at shop. Run git log in the shop repo, write about what you find. That's fine when all the work happens in one place, but most days touch multiple repos: lumikha-space for the business app, sandbox for experiments, wgu for coursework. The blog was missing most of the story.

The multi-repo scanner

The fix is a bash script — tool/bin/daily-activity.sh — that crawls ~/code/ for any git repo with recent activity. It uses find -maxdepth 3 to discover .git directories, pruning node_modules and .cache so it doesn't waste time in dependency trees.

For each repo it finds, the script runs git log --since and git diff --stat HEAD, skips anything with zero activity, and groups the output under === repo-name === headers:

$ daily-activity.sh --since="24 hours ago"

=== lumikha-space ===
commits:
ffe0bac Add child prices to craft menu items in production
changes:
(none)

=== shop ===
commits:
ea6f327 add multi-repo activity scanner for dev-blog skill
4208ff3 add docs section and landing page to site
changes:
(none)

The --since flag is required — no default. That's intentional. The blog skill asks the user how far back to look before running it, so the timeframe is always a conscious choice rather than a hardcoded assumption.

Updating the skill

The /dev-blog SKILL.md got a new process flow. Instead of jumping straight to git log, it now:

  1. Asks the user for a timeframe (4, 8, 12, or 24 hours)
  2. Runs the scanner with that window
  3. Digs into interesting repos with git show and git diff

There's also a new constraints section. Repos outside ~/code/shop/ are git-only — no Read, no Glob, no Grep. This keeps .gitignore respected across all repos. You don't want the blog skill accidentally reading environment files or build artifacts from a project it doesn't own. The shop repo is the exception since that's home turf.

A small thing that matters

The scanner itself is simple — 59 lines of bash, nothing clever. But it changes what the blog can be about. Before, a session that split time between lumikha-space features and shop tooling would only capture the shop half. Now the full picture is there, and the blog can tell a more honest story about how a day actually went.