Skip to content

Repository files navigation

The Loopdown β€” one lesson, four platforms

The Loopdown

loop + lowdown, field notes from an engineer who writes.

Short, sharp technical lessons pulled from real projects (Doori, kmp-toolkit, PaymentsLab-KMP, Gaddi, Dice), each written once and adapted to LinkedIn, dev.to, Hashnode, and Medium, plus an archive of everything I've written before.

Case study: The Loopdown (also at cv-siddharth.vercel.app)

This repo does three jobs at once:

  1. πŸ“š Archive: my complete writing corpus, consolidated and versioned. Nothing lost.
  2. πŸ“‘ Engine: a pipeline that turns a project war-story into a multi-channel post + branded graphic.
  3. 🧱 Wall: public proof of consistency. The registry below is the track record.

The universe

The Loopdown isn't a content calendar, it's a world. An engineer stuck in a time loop (52 iterations of the same Wednesday), filing field notes on the same bugs and lying systems each pass. Because seniority is the loop: you don't know more code, you've just run the same failure enough times to name it on sight.

Posts share a recurring cast, The Concussed Witness (GPS that lies with total confidence), Doze the Jailer, The Messenger (CancellationException, forever mistaken for an assassin), grouped into series you can binge. Continuity is tracked automatically (see Cast Appearances below). The world is in lore/; the voice is in voice/.

πŸ”­ The Morkinstar Journals, the fiction anthology

Separate universe, same author. Four seasons, forty-eight entries, grown out of a single 2021 story in the archive that turned out to have a whole series folded inside it.

A field correspondent visits worlds that cannot yet leave them and writes down the story each one tells about its own weather. Every world independently reports fourteen gods and fourteen monsters. Nobody anywhere can name the fourteenth.

node scripts/morkinstar-plates.mjs   # 49 field plates, all four seasons + cover
node scripts/morkinstar-site.mjs     # β†’ site.html

This is not The Loopdown's cosmology and does not cross over with the cast above. They rhyme. The rhyme is the reward.


πŸ“‘ Lessons (dev content)

Date Title Series Status Live
2026-09-02 The captain routes. The captain never rows. notes-from-the-loop 🟑 ready β€”
2026-08-31 I audited my own migrations. It was not fine. crossing-the-schema 🟑 ready β€”
2026-08-29 Plausible is worse than wrong notes-from-the-loop 🟑 ready β€”
2026-08-27 Your thresholds do not belong in constants chain-of-custody 🟑 ready β€”
2026-08-25 Invariants are cheap. Silent corruption is not. chain-of-custody 🟑 ready β€”
2026-08-20 Every filter needs a documented exception sensors-who-lie 🟒 live read β†’
2026-08-18 Never silently change a number someone gets paid on chain-of-custody 🟒 live read β†’
2026-08-13 When two sensors disagree, rank them sensors-who-lie 🟒 live read β†’
2026-08-11 Your data model is where uncertainty goes to die chain-of-custody 🟒 live read β†’
2026-08-06 One global threshold is how you delete valid data sensors-who-lie 🟒 live read β†’
2026-08-04 Filtered should never mean deleted sensors-who-lie 🟒 live read β†’
2026-07-31 collectAsState is quietly leaking your work ghosts-in-the-recomposition 🟒 live read β†’
2026-07-29 expect/actual is the wrong default in KMP one-brain-two-bodies 🟒 live read β†’
2026-07-24 Your LazyColumn recomposes on every scroll ghosts-in-the-recomposition 🟒 live read β†’
2026-07-22 The 5-second window that crashes your service the-night-shift 🟒 live read β†’
2026-07-20 CancellationException is not an assassin the-coroutine-court 🟒 live read β†’
2026-07-19 Teaching a phone to disbelieve its own GPS sensors-who-lie 🟒 live read β†’

🎭 Cast appearances (continuity)

Character Appearances In
the-concussed-witness 5 Every filter needs a documented exception, When two sensors disagree, rank them, One global threshold is how you delete valid data, Filtered should never mean deleted, Teaching a phone to disbelieve its own GPS
the-archivist 4 Your thresholds do not belong in constants, Invariants are cheap. Silent corruption is not., Never silently change a number someone gets paid on, Your data model is where uncertainty goes to die
the-recomposer 2 collectAsState is quietly leaking your work, Your LazyColumn recomposes on every scroll
the-fleet 1 The captain routes. The captain never rows.
the-ferryman 1 I audited my own migrations. It was not fine.
the-borrowed-hand 1 Plausible is worse than wrong
the-second-witness 1 When two sensors disagree, rank them
the-understudy 1 expect/actual is the wrong default in KMP
doze-the-jailer 1 The 5-second window that crashes your service
the-messenger 1 CancellationException is not an assassin

πŸ“š Archive (10 pieces)

Title Form Era Words Tags
Chronicles Of An NRE Kid essay personal-essay 1966 memoir identity growing-up
CTC: Cost To Company short-fiction 2069 (written 2020) 1628 dystopia satire world-building corporate
Deadline short-fiction 2018 3164 memento-mori sci-fi diary philosophy
Honest College Fests humor humor 978 satire college listicle
It's A Doggone Life essay personal-essay 1371 memoir dogs heart
Pointer Games short-fiction campus-lore 1739 campus-lore mystery hinglish world-building
Prophecy #201112003 short-fiction campus-lore 1761 campus-lore mystery world-building
The Legend Of K'âæluæ's Scales short-fiction 2021 1804 world-building mythology sci-fi framed-narrative
The Loopdown short-fiction 2020 1973 time-loop sci-fi world-building diary
The Pun Force humor humor 627 puns meta comedy world-building

πŸ—„οΈ Sibling series (same universe, not a season)

Series Entries
The Dark Directory 10

How it works

idea  β†’  new-lesson.mjs  β†’  lesson.md (source of truth, written ONCE)
                                 β”‚
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β–Ό               β–Ό               β–Ό
           linkedin.md      article.md      assets/card.yaml
        (≀1300, punchy)   (long-form)      β†’ render.mjs β†’ card.png
                 β”‚               β”‚               β”‚
                 └──────── you review β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                    export β†’ Buffer (LinkedIn) Β· dev.to/Hashnode API Β· Medium (manual)
                                 β”‚
                          meta.yaml logs urls + metrics
                                 β”‚
                    build-registry.mjs β†’ this README updates

Every draft is checked against voice/voice-profile.md the style contract distilled from the archive so new posts sound like me, not generic LinkedIn.

Commands

cd scripts && npm install          # once (pulls @resvg/resvg-js for SVG→PNG)

node new-lesson.mjs "dead reckoning" --pillar location --project Doori --date 2026-07-19
node render.mjs lessons/2026-07-19-dead-reckoning      # card.yaml β†’ card.png
node build-registry.mjs                                 # regenerate registry + this README
node check-setup.mjs                                    # pipeline readiness dashboard
node export.mjs lessons/<dir>                           # dry-run: plan + paste files (safe)
node export.mjs lessons/<dir> --draft                   # dev.to drafts, reviewable on-platform

Accounts, tokens, and the publish flow: SETUP.md.

Repo map

Path What
archive/ Existing writing, converted to clean Markdown + frontmatter.
voice/voice-profile.md The style contract every post is checked against.
lore/ The universe: bible, cast, pantheon, series.
lore/bestiary.md Β· docs/bestiary.png Generated. Every entity, its sigil, its dead Aspect, and every post it has appeared in. Rebuilds with the registry.
series/ Generated bingeable hub page per arc (cross-post "read the series" target).
profile.yaml Cross-platform identity, handles + canonical strategy; threads into every footer.
lessons/<date>-<slug>/ One folder per lesson: source + per-channel adapts + assets + metrics.
scripts/design-kit.mjs The visual identity: textures, diagram figures, and the cast drawn as specimen plates.
scripts/slide-css.mjs Carousel stylesheet. Slides are HTML, screenshotted through Chromium, so body copy wraps itself.
templates/copy/ Hook formulas + per-channel skeletons.
scripts/ new-lesson Β· render Β· build-registry Β· check-setup Β· export.
data/backlog.md Idea queue mined from projects.
data/registry.json Machine-readable source of truth (generated).
docs/DESIGN.md Β· SETUP.md Why it's built this way Β· how to wire the accounts.
.env Gitignored. Your API tokens. Copy from .env.example.
private/ Gitignored. Personal/admin docs + original binaries. Never pushed.

Voice, in one line

Hook you with a scene, teach you something real, land a payload you didn't see coming, while clearly having fun. See voice/voice-profile.md.

Publishing, one connected campaign, not four copies

Each lesson goes out as a coordinated cross-platform drop (SETUP.md):

  • dev.to + Hashnode + Medium β†’ native APIs (draft-first, per-post approval). Medium uses the legacy token if your account has one, else a one-click import from the canonical URL.
  • LinkedIn β†’ paste-ready file with the full-write-up link auto-embedded (optional Buffer queue). No tool touches the account directly.
  • One canonical home so cross-posts don't compete in search, the rest declare canonical β†’ it.
  • Consistent branded footer on every article: series, featured cast, "previously in this series," follow links, all generated from profile.yaml. Edit once, threads everywhere.
  • Series hubs (series/), a bingeable index page per arc, linked from every post in it.

Roadmap

  • Repo + archive + voice profile + visual engine + first lesson
  • Lore layer, universe bible, cast, series, continuity index
  • export.mjs, dev.to/Hashnode/Buffer + paste files; check-setup.mjs dashboard
  • Tokens filled, repo pushed: six lessons live across dev.to, LinkedIn, Medium and Hashnode
  • .github/workflows/pipeline.yml: lints voice, smoke-tests renders, fails the build on registry drift, on every push to main
  • Cadence: 2 to 3 posts/week from the backlog

License

Two licenses, because this repo holds two different kinds of work.

The engine is MIT. scripts/, templates/, voice/, launchd/ and the dashboard are yours to take, fork and adapt. That is what they are for.

The writing is not. lessons/, fiction/, lore/, series/, archive/, notes/ and docs/ are all rights reserved. Read them, quote them with attribution and a link, but republishing or adapting them needs a yes from me first. The pipeline is a tool. The field notes are the work.

See LICENSE for the exact terms.

About

Dev-content engine: one lesson becomes a LinkedIn post, long-form article and branded card, with a voice linter that strips AI tells before anything ships

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages