Day X: Summoning Odoc – A Joyful Documentation Portal Appears 😄
Date: September 13, 2025
Mood: Caffeinated. Determined. Mildly dramatic. Ecstatically nerdy.
Today I taught Memoir a new trick: how to proudly host its own API
documentation at /docs
. Yes, the code can now talk about
itself! (Self‑reflection is healthy — even for OCaml modules.)
Visit the freshly conjured portal here (bring snacks):
➡️
https://www.fearful-odds.rocks/docs
Why This Was Fun (And Necessary)
I’ve been building components, types, templates — but unless you enjoy
spelunking through lib/
with a headlamp and a mug of
determination, discovering APIs wasn’t exactly… delightful.
Enter odoc: elegant, semantic, link-rich documentation
that makes the Content_types
, templates
, and
friends feel like they’re walking a red carpet.
So today’s quest: Automate odoc generation, pipe it directly into the built site, and make it effortless to keep docs updated.
Mission accomplished, with sparkles. ✨
The Commit That Did the Heavy Lifting
commit 3bc3df1f1d9df5f84ba8190b9560056b2b25c3ee
Author: Chukwuma Akunyili
Date: Thu Sep 11 10:20:17 2025 +0100
Enhance documentation build process and add new commands
- Added docs, docs-build, and copy-docs commands
- Integrated docs copy step into site generation
- Published odoc HTML under _site/docs
This commit didn’t just add files — it upgraded the workflow. The site generator now treats documentation as a first-class citizen. 🎓
Makefile Magic 🔧 (A Kaizen Moment)
Three new spells (ahem, targets) joined the Makefile:
docs: # Build docs & serve them locally on :9090
dune build @doc
cd _build/default/_doc/_html && python3 -m http.server 9090
docs-build: # Just build odoc output
dune build @doc
copy-docs: docs-build # Ship docs into the public site
rm -rf $(SITE_DIR)/docs
mkdir -p $(SITE_DIR)/docs
cp -r _build/default/_doc/_html/* $(SITE_DIR)/docs/
And inside the existing generate
target: a cheerful new
line:
🔍 Copying documentation to site...
Which triggers make copy-docs
so I never forget to publish
API docs again. Future Me is grateful. Present Me is smug.
Directory Alchemy 🗂️
Before:
_build/default/_doc/_html/ # Hidden in the build labyrinth
After running make generate
:
_site/
docs/
index.html
memoir/
Content_types/
Memoir_content/
Memoir_lib/
Memoir_templates/
Now /docs
is a living, linkable, style-aligned knowledge
hub embedded in the site — no sidecar hosting, no manual copy-paste
rituals.
A Peek at the Generated Odoc (Because It Makes Me Grin)
Inside Content_types
you’ll find type definitions like
frontmatter
beautifully rendered — with each field
anchor‑linked like a polite citizen of the Web.
It feels professional. It is professional. But also: it’s fun seeing my types dress up for production.
Lessons (with Smiles)
- Automating documentation is like brushing your teeth — do it early, do it often, and future you avoids decay.
-
Adding a
copy-docs
step prevents “Oops, stale docs” embarrassment. - odoc output integrates smoothly with a static site — zero drama, 100% structured goodness.
- Writing Makefile targets is still oddly therapeutic.
- Joyful tooling makes me want to document. That’s a win.
Next Playful Ideas 🎯
-
Add a link to
/docs
in the navigation (with a subtle ✨?) -
Auto-regenerate docs on
watch
mode during development - Explore adding module-level examples that double as tests
- Generate a changelog page powered by git history
Closing Vibes
Today wasn’t just about “docs.” It was about making the codebase
approachable, welcoming, and a little bit
sparkly. If someone smiles while browsing /docs
,
that’s mission success.
Onward — and may your modules always compile on the first try (or at least after reading the docs 😉).
Happy Hacking