Ship log
Changelog
What landed across the workspace, and when. Each entry links back to the spec or blueprint that asked for it. Entries from sibling sites are tagged with their slug.
-
The Toolkit Grows Client Portals, and Two Bugs That Only a Browser Could Find
A filter that ate every keystroke, icons that were 130 bytes of text, and a page nothing linked to — all invisible to a green build.
-
Three Client Spikes in One Night, and the Skill That Came Out of Them
Three sites got redesigned as three complete directions each — nine working variants, twenty-seven direction-and-mode combinations, all off one shared content layer per site. gth-site turns a docuseries funnel into a clinical publication, an anatomical atlas, or a consultation, with an upgrade cart whose tiers are strict supersets so it can show you a delta instead of a new cart. dominocielo-site holds a 300-word family-office page at 300 words and makes brevity read as confidence. multiphasic-site got the README treatment its CEO's interest deserved. The pattern repeated three times, so it stopped being improvisation and became `generate-site-design-variants` — a 257-line skill, plus a `/design-variants` page on the splash so the workflow is legible to people who are not us.
-
Image carousels become a first-class LFM directive — four variants, and a timestamp convention that turns out to be a run stamp
Screenshots of a setup flow are a sequence, and we had no way to say so in markdown. `:::image-carousel` now does, in four variants split as ImageCarousel--{Variant} siblings. Two findings fell out of building it: the image-prep timestamp records when a file was processed rather than when the screen was captured, and our prose reset out-specifies any component that renders a list inside it.
-
Every guide gets a table of contents — and the layout bug that had been bleeding every page off the right edge since forever
The ToC was the goal; the layout fix was the surprise. `mx-auto` on a flex item silently disables stretch, so `<main>` had been sizing to its content instead of its parent on every page of the site. Found by driving headless Chrome after three wrong guesses. Plus a new orientation on which open model does which job.
-
LFM 0.5.0 lands: the table of contents deletes its local scaffolding, and starts leaving callout headings alone
The helpers this site was carrying locally shipped in the package, so `toc-types.ts` was deleted rather than migrated — which was the point of writing it that way. `inContainer` arrived with it, so headings nested inside callouts no longer show up as phantom sections. Also: the ToC was rendering twice on every guide, and had been since it shipped this morning.
-
v0.3.0 — Reading surfaces: a table of contents, syntax-highlighted code, image carousels, and the first steps off Astro DB
Two weeks spent making long-form content actually readable — a reading-position ToC on every guide, code blocks that read in the house palette, carousels for screenshot sequences — and one layout bug, found by measurement after three wrong guesses, that had been bleeding every page off the right edge the entire time.
-
A passcode for the right-hand columns — gating markups on a public track record
The portfolio table always published every multiple and valuation to anyone who loaded the page. Now the left half is public and the right half asks for a passcode — and the numbers behind it are not in the repo at all.
-
Essays learn where you are — a reading-position table of contents, built from the parse tree
Twenty-five of the fifty essays are long enough to get lost in and none of them offered a map. They do now, and the outline comes from the MDAST rather than the markdown text or the rendered DOM — which is the only source that can tell a real heading from a `#` comment inside a code fence.
-
Four playlists, one page, and a counter that stops lying between deploys
Six thousand videos collected over the years had no front door — the playlist components existed but only ever rendered inside a spec page that happened to mention one URL. Now there is a /playlists surface with a toggle, and the counters refresh on every build for a single quota unit instead of freezing for thirty days.
-
The playlists page shipped empty, and the fix turned 6,362 videos into 2,196 channels
A build log saying 6,362 videos, a page rendering four empty shells. Chasing that gap produced a working /playlists and a new /channels.
-
Agent-native browsers get a recipe, seven tool entries, and the first scripts that skip Astro DB entirely
A new orientation on the browser-shaped body for agents — the one that can pull four years of portco correspondence out of Gmail as filed PDFs — plus the seven browsers it surveys, added to the registry. Underneath: the stack rows behind it were written to Turso directly, with no `astro db execute` anywhere, which is the first piece of getting off a layer Astro is deprecating.
-
The ledger learns what the changelog never said
Commit volume and the model timeline now sit under the entry marks, so the strip shows what was built and what it was built with — not just what got written down.
-
Markdown wins the stack argument: the DB scripts run again, seven identities reconciled, and the July 29 cohort lands on the roster
Adding one tool to the registry surfaced that every stack-sync script had been dead since the Astro 7 upgrade — and that Turso had been a stale photocopy of markdown since May 21. Fixed the tooling, declared markdown the source of truth, and caught a roster sync that was about to publish seven duplicate profiles including one called `mail`.
-
Code blocks get syntax highlighting for the first time — and it reads in the house palette, not GitHub's
Every code block on every guide had been rendering as unstyled plain text, because Astro's built-in Shiki never sees content that LFM renders through a custom component. Wired up a highlighter whose theme is made of CSS variables, so the three modes re-point tokens instead of shipping three themes.
-
A mark, a voice, and an address — the flame becomes the brand, Thoughts goes live on LFM, and learnstart.vc gets a canonical URL
Four things landed in one day and none of them had a changelog until now. The flame stopped being a favicon and became the logo — one Python geometry module emitting both, so the tab icon and the header mark can never drift. The Thoughts stream shipped on @lossless-group/lfm with a Sveltia surface so Don can publish without ever seeing git. 62 portfolio companies got one asset convention. And the site finally got an address — plus a DNS zone that had to be snapshotted before anyone dared touch it.
-
One ledger for everything we ship
Thirty-eight changelogs scattered across thirty-one repositories now read as a single record — and the brand gradient stopped being decoration and started telling you when.
-
Share cards that render themselves — LearnStart's OG set, built from the site's own components
LearnStart had no og:image at all: every link anyone shared unfurled as a bare grey box. It now ships four share cards across banner, WhatsApp-tall, portrait, and square — and none of them are drawn by an image library. The card is a real Astro page built from the real FlameMark and the real theme tokens, photographed by headless Chrome. Change a gradient token and the share card changes with it.
-
LearnStart, rebuilt — from a lost Heroku site to an Astro Knots front door
The original LearnStart site vanished with a Heroku sunset. This is the ground-up rebuild: a self-owned, three-mode Astro Knots site that shows the 60+ learning companies we've backed since 2015 — and it was built by mastering agentic engineering.
-
The Checkup shipped: live polls inside the slides, a WhatsApp-ready mobile poll, and the Recipes surface comes alive
The July 29 all-hands ran on a deck with the polling system embedded directly in the slides — then kept evolving mid-session. Plus: a swipe-through mobile poll for the WhatsApp blast, two founding Recipes articles, a downloadable agent-skill, and the site's first DESIGN.md.
-
v0.2.0 — The Checkup: live polls in the slides, a swipe-through mobile poll, and Recipes goes live
The July 29 all-hands became the proving ground for a new idea: the deck IS the app. Polls embedded in slides, mid-session hotfixes with no deploys, a WhatsApp-ready mobile voting surface, and the first Recipes content — including a downloadable agent-skill.
-
Routine Dependency Maintenance Pass — Patch/Minor Bumps Post-Astro-7
A follow-up maintenance sweep on top of this session's Astro 6→7 upgrade — inventoried everything with pnpm outdated, bumped the two packages that had drifted, and wired in typechecking (astro check) for the first time since the site's scaffold.
-
Upgraded to Astro 7, Cleared Two Broken Landing Pages
-
Project Scaffold Summary — cilantro-site
Multi-product marketing and changelog platform built with Astro 5 + SSR + Tailwind 4 — home to the Neo AI assistant landing, a changelog architecture that aggregates multiple products, and a Twenty CRM newsletter integration.
-
Dependency upgrade — Astro 5→7, @astrojs/node 9→11, Tailwind 4.1→4.3
Skipped the broken Astro 5.14.1 lock-file state and jumped directly to Astro 7.0.6 — the biggest version hop in the site's history. Build is passing clean.
-
Project Scaffold Summary — coglet-shuffle (Pug → Astro Migration Complete)
Full Pug-to-Astro migration of the Coglet Shuffle steampunk marketing site — 12 components, Alpine.js mobile nav, Tailwind v4 CSS-based theming, and a passing production build.
-
Project Scaffold Summary — cogs-site (Coglets AI)
Full marketing site for Coglets AI — a zero-JavaScript Astro 5 build with a complete section stack, branded logo, and a dynamic OpenGraph image system.
-
Dependency Upgrade — Astro 5 → 7
Cogs-site catches up with the rest of the Astro Knots fleet — Astro jumps two majors in one clean pass, Tailwind CSS patches to latest, and typecheck tooling gets added for the first time.
-
Dependency upgrade — Astro 6→7, @astrojs/vercel 10→11, @astrojs/svelte 8→9, Tailwind 4.3.1→4.3.2
Full major-version upgrade sweep across Astro and its adapters. 110+ pages and routes prerendered cleanly on the first build attempt.
-
Dependency maintenance pass — svelte + @types/node patch/major bumps, workspace isolation fix
Routine patch/minor sweep on top of the Astro 7 upgrade. Also fixed a real bug: pnpm was leaking installs into the parent astro-knots workspace and corrupting its lockfile.
-
Dependency upgrade — Astro 6→7, @astrojs/vercel 10→11, @astrojs/svelte 8→9, Tailwind 4.3.0→4.3.2
Biggest upgrade cycle yet — three simultaneous major adapter bumps alongside the Astro 6→7 jump. Build passed cleanly with no breaking-change fixes required.
-
Dependency upgrade — Astro 6→7, @astrojs/vercel 10→11, @astrojs/svelte 8→9, Tailwind 4.3.1→4.3.2 + six malformed-HTML fixes
Astro 7's Rolldown compiler caught six pre-existing HTML nesting bugs that Vite silently swallowed. All fixed. Build is green.
-
Dependency maintenance pass — Vitest 4.1.5→4.1.10, @types/node 25.6.2→26.1.0
Routine patch/minor sweep after the Astro 7 upgrade. Vitest and its UI companion caught up to latest patch; @types/node took a major bump. Build stayed green throughout.
-
Two Doors, One Room — The How-To Engine Starts, and the Registry Grows
-
The Docs Pages Get Their Typography
-
FullStack VC v0.1.0 — June 24 Readiness, a Two-Perspective How-To Engine, and a Registry That Grew Up
Everything between the May 27 all-hands and the June 24 session: we turned a thin poll into rendered pre-session data, built and revised the 'Dealflow into Second Brains' deck, corrected the record on who actually presented, bumped the whole toolchain onto Astro 6.4.8, grew the tool + participant registries with real sourced profiles, and — the forward-looking bet — started a documentation engine that lets VCs enter how-to content two ways: by the problem they're solving or the tool they've heard about. 26 commits, 37 files.
-
FullStack VC v0.1.1 — Docs Prose Typography
A patch on v0.1.0's how-to engine: the docs pages now articulate their own prose. Tailwind's preflight had been stripping every heading bare; a shared docs-prose.css gives guides, use-cases, and tool pages real typographic hierarchy from a single source — and the redundant body title is gone.
-
Dealflow into Second Brains — Prepping June 24, and Keeping the Record Honest
-
Giving May 27 a Spine — Three Breakout Tracks From Yes to Win
-
Google OAuth as a Third Identity Provider — Plus Link-While-Logged-In and Header Logout
-
FullStack VC v0.0.8 — Three-Bucket Stack Editor, Stacks on Turso, Google OAuth as Peer Provider
First tagged release of the FullStack VC site, accumulating three substantial feature drops since v0.0.5. The polling system that captured zero participant votes on April 29 now sits behind three peer identity providers (Google, GitHub, LinkedIn) with a link-while-logged-in flow so any provider works from any session — VCs with Workspace emails finally have a one-click path through the auth gate. Stack edits moved off the GitHub-App-commits-on-every-save pattern that the polling blueprint v2 §8.1 explicitly retired for time-sensitive data — they now persist to Astro DB on Turso in sub-second time, with a sync script that materializes back to public markdown on the operator's cadence. And the stack editor itself, which had only ever surfaced the Current bucket in its UI, is now a three-bucket drag-drop canvas with toggleable columns, cross-bucket data reshape, optimistic UI with Cmd/Ctrl+Z undo, and a mobile-friendly fallback. Six days before the May 27 Monthly All-Hands.
-
A Services Catalog That Composes Itself From Atomic Offerings
The Services section grew a real spine: a three-collection model (items → categories → cards) where the same atomic offering can be baked into one card's Standard tier and surfaced as a +€80 add-on on another, while a separate billing mode handles hourly/daily/multi-day bookings — and Sveltia learned every one of those shapes.
-
Editorial Type Lock, and a Catalog That Lives Apart from Its Pictures
Two threads landed in one afternoon: the typography for arthouse-site got picked from three live specimens and wired across the stack, and the gallery system stopped knowing about images entirely — it now references a catalog that resolves to ImageKit at render time.
-
Confidential Access v2 — Signed-Link Sessions + Telemetry for Client-Content Workspaces
Resolved the long-standing problem that bit us hardest on calmstorm-decks last week: a busy primary stakeholder couldn't get into the gated site, the gate had no server-side telemetry to debug it, and there was no way to attribute downstream sharing. The new pattern — exploration + spec at the cross-cutting level, working implementation in calmstorm-decks — replaces client-side localStorage gates with a DB-backed session model on Astro DB / Turso. Tier 1 is a signed pre-authed link (WhatsApp-deliverable, identity-bound) for direct stakeholders; Tier 3 is a two-role universal passcode (admin / viewer) with a downstream-sharing attribution hack via passcode suffix. Every verify attempt writes an AuthEvent row; every gated page view writes a PageView row; an /admin/activity dashboard surfaces both in real time. Now the lineage of any client interaction is recoverable in a 30-second DB query instead of a multi-hour forensic exercise.
-
Accurate Screenshots to Per-Variant PDF Decks via a Dev-Only Capture Surface
calmstorm-decks now exports the live HTML/CSS/Tailwind slide tier to pixel-perfect PNGs and three per-variant PDFs (v1/v2/v3, 17 pages each) in one `pnpm export:decks` call. The unlock was a tiny dev-only un-gated route — `/dev/shot/{slot}/{variant}` — that renders exactly one SlideCanvas filling the viewport, with no chrome, no auth, no aria-hidden juggling. Screenshot infrastructure shouldn't traverse production auth; once we accepted that, the export script collapsed to a five-line URL loop and we got a runnable PDF deck for every design variant on the fund.
-
Sweep: llms.txt + sitemap + robots.txt across every site and splash
The day after the analytics + LFM sweep, we shipped the discoverability layer. Every actively-maintained site and splash in the astro-knots ecosystem got an llms.txt / llms-full.txt pair (per llmstxt.org), an XML sitemap auto-generated by @astrojs/sitemap, a robots.txt pointing crawlers at it, and a pair of <link> hints in BaseLayout announcing both surfaces from every rendered page. SEO + GEO discoverability, parallel-patterned across eight repos in one motion.
-
A New Content Paradigm — The Scroll Report
Long-form research deserves a stage. We took inspiration from a striking interactive industry report on the web and rebuilt the pattern into a first-class content type for mpstaton-site — a scroll-driven, theme-shifting narrative with KPIs, stat cards, and section-paced gradients.
-
Sweep: LFM 0.3.0, Astro 6.3.1, and OpenPanel layered across the fleet
A chore commit dressed up as a milestone. We landed @lossless-group/lfm v0.3.0 on JSR, brought every actively-maintained site to Astro 6.3.1, and layered OpenPanel.dev alongside Umami and Fathom across eight Analytics components. The interesting part isn't any single change — it's that the discipline of one parallel pattern in eight repos stayed intact long enough to do all three at once.
-
Better rendering for YAML conventions, markdown through a refactored callout system
-
Support new LFM callout features in mpstaton-site
The site now speaks the full LFM callout vocabulary — ten canonical types over the brand palette, AI-source badges on model-generated blocks, and directive syntax that lets a callout break out into the margin like a print sidebar.
-
Wikilinks render live: from [[Page]] to <a href> in the essay archive
Obsidian wikilinks had been leaking into the essays as raw double-bracket syntax since the first import. Now 208 of 354 unique paths resolve to live hyperlinks, and the ones that don't recede into the prose without a trace.
-
Paste a playlist link, get a real playlist component
A YouTube playlist URL on its own line used to render as a frame indistinguishable from a single video. Now it pulls 1,899 items from the Data API at build time, server-renders a sidebar, and lets the reader click any video to play it in place — all from a bare URL or a `:::youtube-playlist` directive. First pass; UI tweaks pending; pattern is reusable across every Astro Knots site.
-
aside-escape: sidebars that pop out of the article column
The empty space to the right of a centered article column has been doing nothing useful for decades. Today it earned a job. The playlist component's sidebar now floats out of the reading column into that margin track, with the player still anchored in the prose flow. Same trick generalizes to any LFM component that wants to be supplementary, not stacked.
-
v1 ship: YouTube playlist embed family functional
Started the day fixing how a single-line YouTube Short renders inside a memo's prose flow. Ended it with a build-time-fetched playlist UI that escape-positions itself in the article's right margin, with a 1,899-item scroller wired to the iframe via the YouTube IFrame Player API. Six commits, three changelogs, two specs touched, one new cross-cutting `MobileFeaturePlaceholder` pattern.
-
Shorts that don't shout: 9:16 video as a margin float
A YouTube Short used to occupy a full row by itself — 320px of player surrounded by 700px of empty column. Now it floats, prose wraps alongside, and a memo reads like a magazine instead of a slideshow.
-
Telemetry for traction: Umami + Fathom across the splash fleet
Eight sites can finally tell us if anyone's reading. Two analytics platforms, one tiny component pattern, and a production-only gate that keeps localhost out of the dashboard.
-
LFM Inline Link Substitutions — OG Fetch Foundation and the link-preview / link-rollup Directives
The first end-to-end slice of inline link substitution: paste a URL, get a card. Eight render formats now exercise the spec, with styling polish and rate-limit tuning still open.
-
/promote — gated investment-opportunity surface, scroll-deck prototype, memo rendering
A private surface for sharing investment opportunities with a small circle of co-investors — passcode-gated in middleware so a locked deck never assembles, with the opportunity content itself gitignored out of this public repo.
-
Mermaid charts through LFM — CDN runtime, theme parity, expand-to-modal UX
Fenced mermaid blocks now render as live diagrams in any document that goes through our markdown pipeline — themed to match the page, with a quiet expand affordance and a fullscreen modal for when a diagram outgrows the column.
-
Bare URL auto-unfurl — paste a YouTube link on its own line and it embeds
Paste a YouTube link on a line of its own and it becomes a player. Shorts get a vertical frame, playlists get a playlist player, and a link dropped mid-sentence is left alone as an ordinary link.
-
Dual-provider auth — sign in with GitHub or LinkedIn, link both, get a green dot
-
People as first-class subjects — one PersonCard, one resolver, one truth
-
Propose a project or working group from the site itself
-
Interactive live polling — Svelte SSR + Turso, five templates, audit log, end-to-end in one evening
-
Web-native slides — Reveal.js + Astro components-as-slides + GSAP, all mode-aware via tier-2 tokens
-
Get-Involved icon row — three-tap commitment signal on every project, working-group, and proposal card
-
Webinar pre-event polish — registrant survey viz, presenter cards, Kauffman partner mark
-
Stacks v0.5 — interactive stack builder, GitHub App write path, full registry browse
-
Long-Form Reader Chrome — Triptych, Reading Progress, ChapterMeta, and the LFM Pipeline Everywhere
-
Projects, the surface — gallery, detail, header popdown, and the working-group content collection
-
Working Groups, alongside Projects — disambiguating the surface, codifying the relationship
-
Mobile-responsive header — hamburger drawer, anchored spacing
-
Context Vigilance — Spec Authoring and Decision Capture for the Long-Form Reader
A deliberately documentation-heavy session. The argument for spending a day writing rather than building: what we wrote will outlast what we built.
-
Dojo Page, Reusable Hero/CTA/Grid Components, TextLinkSpan, and a Long-Form Content Scaffold
-
Strategies — Markdown-Authored Strategy Documents with Inline Citations
Strategy documents become first-class: markdown in, blog-style pages out, with inline citations and an index of preview cards.
-
LFM — The remark-citations Plugin and Its Spec
Hex-code footnote identifiers become sequentially-numbered citations at render time, so a citation can keep its stable ID while still displaying as [1], [2], [3] in reading order.
-
Citations rendering: footnoteReference display, Sources component, workspace lfm link
Hex-code footnotes stop rendering as raw identifiers and start behaving like real citations — sequential numbers inline, and a linked Sources list at the foot of the page carrying titles, domains, and publication dates.
-
Project Scaffold — Astro 6, Svelte 5, Tailwind 4, Sveltia CMS
-
Flag Pixel Spacing Variants
-
Wobble Rings Flare Component
-
Vibrant Mode, Brand Mark Wrapper, and Animated Grain Overlay
-
OpenGraph Meta Tags and Share Banner
-
Vibrant Mode Token Refactor, Snippet Sanitization, and Department Filters
-
New Flare Components & Simplified Homepage
-
Jobs Page & Pinpoint API Integration
-
Team Data Updates and the Astro 6 Migration
Roster changes to the people data, plus the Astro 6 upgrade — which turned out to be less a version bump than a Content Collections migration with required rework.
-
The Institute Page, and Institute-Classified People on /the-people
A new primary Institute page — and the fix that makes Institute-classified people actually render on /the-people, where they had been silently missing.
-
Lossless branding, track record table, design system, and logo variants
The site got its Lossless colors, picked a wordmark out of five nerdy candidates, and grew a portfolio page: 70+ investments spanning 2012 to 2026, filterable by vehicle, sector, exit, and year.
-
Emblem Theme System Implementation
-
Changelog System Implementation
-
Design System Documentation Hub
-
Flare: Three.js Visual Effects System
-
Hypernova Site — Private GitHub Content Fetching for Confidential Memos
Confidential memos stream from a private repository through a fine-grained token, with the file path derived automatically from the URL slug. None of that content ever touches the deployed build.
-
Hand-Rolled OAuth (GitHub + LinkedIn), Privacy Policy, and the /stack/me Scaffold
-
Site Scaffold from Astro Knots Conventions — Skeleton Right on First Try
-
Webinars Collection — Calendar-Style Cards, Index Page, and Detail Pages