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.
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.
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.
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.
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`.
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.
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.
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.
We started a documentation engine that the Dojo actually needs — how-to content you can enter two ways: by the problem you're solving (a use-case like 'automate dealflow') or by the tool you've heard you should learn (a guide like 'Hermes Agent'). Same content, two doors, cross-linked. It's built on @lossless-group/lfm (not Starlight), shipped a first wired slice end-to-end, gained internal /tools pages that wikilinks now prefer over external sites, and a /recipes index in the header. Alongside it, the tool + participant registries grew: Composio and Granola joined, and David Rolf, Abhinaya Konduru, and a fixed-up Lylan Masterman landed with real profiles.
The new how-to pages were rendering their headings bare — Tailwind's preflight reset had stripped every '##' down to body size. Added a single shared docs-prose.css that articulates the LFM/AstroMarkdown output (headings, lists, blockquotes, code, tables), applied across the guide, use-case, and tool pages, and dropped the redundant body title so each doc reads like real long-form content.
Last month's poll drew only a handful of responses — so this month we turned those few voices into the spine of the next session. We structured the May 27 reflection + open poll into rendered data, ported and revised a full June 24 'Dealflow into Second Brains' slide deck with an April→May satisfaction trajectory, added Jules Miller to the roster, corrected who actually presented (Marcus and Toby were no-shows, not headliners), moved the /slides 'Today' highlight forward, and bumped Astro to 6.4.8 — verified by a clean full build.
Seven survey responses came back from 49 registrants. Rather than retrofit a thin pre-session report, we built the session's structural backbone — three jigsaw breakout tracks that each start at the moment of full-body conviction and fork by which wall comes next, a session-page teaser that renders them at the end of the Format section, and a host script for the closing question that splits the room into a willing-and-able doer cohort and a hear-back audience cohort for June 24.
Brought Google up to parity with GitHub and LinkedIn as a peer identity provider for the Agentic VC Dojo. Sign in with any one — including Workspace emails, which is the dominant login surface for fund operators who don't think of themselves as having a developer account. Adds the link-while-logged-in flow (callbacks now read the existing session cookie before overwriting it, so clicking a second provider attaches it to your existing User row instead of minting a separate identity) and a Log out row in the header tooltip so signing out doesn't require navigating to /me. Strategic shift: each provider gives different signal about the same person — GitHub = building behavior, LinkedIn = professional identity, Google = domain affiliation + lowest-friction VC sign-in — so connecting more than one isn't redundancy, it's triangulation.
A day that started as a chase for two YAML parse errors and ended with a fully refactored LFM callout system, two new shared conventions documented across the pseudomonorepo, three new Kauffman Fellows in the directory, and a polished design system page demonstrating it all. The thread running through everything: when a one-line indentation mistake crashes the whole build, the right answer isn't just to fix the line — it's to make the pipeline tolerant in the first place. Small disciplined moves compounding into something that will keep paying off across every astro-knots site.
Members can now sign in with GitHub OR LinkedIn — and link both. The User table is now one row per *person* (canonical id = lowercased roster email) with nullable provider columns rather than one row per login. The header indicator went tri-state — green when both providers are linked, amber 'partial' when only one is, red when not signed in — and the partial state opens a tooltip nudging the user to connect the second.
Three places used to introduce a human — webinar presenters, project leads, working-group leads — with three different markup paths and three different fallbacks. Consolidated into a single PersonCard--Bare component plus a participants resolver that auto-fills avatar, firm, and profile link from the participants collection by case-insensitive name match. Frontmatter stays slim; one source of truth for what a person looks like across the site. Plus a small UX kit (ToolTipIndicator, CtaBtnWithAuthIcons, About-as-popdown-topline, dojo CTA explainer) introduced en route.
Members can now sketch a new project or working group directly from /projects/propose and /working-groups/propose without asking a maintainer to draft a markdown file. Two pages, two named form components over one shared body, a new Proposal table on Turso, and a public 'recent proposals' rail beneath each form so submitters see the queue they're joining. The bar to propose is intentionally low; the bar to lead is whoever is willing.
Built the interactive polling stack from empty to shipped in about six hours of focused work — Astro DB schema with five tables (Session, Poll, Vote, PollResult, PollEvent), five question templates (boolean, single-select, multi-select, sliding-scale, multi-string-input), pure validation + aggregation library, two server endpoints, a Svelte orchestrator with six visual states and optimistic submission, and SSR session pages that read the OAuth cookie per request. Whole companies sell this as a SaaS; we shipped one that's tighter, owns its own data, and lives next to the markdown content collections it eventually materializes back into.
Stood up a slides surface from zero in one evening — Reveal.js layout that lives inside BaseThemeLayout (header stays, theme/mode toggle stays, fullscreen via a Present button), markdown-deck and Astro-deck routes side by side, auto-discovery of decks via import.meta.glob (no registry file), a tone-setter deck for tomorrow's launch session that composes the existing Section__Webinar* infographic components as slides, two seed decks lifted and adapted from hypernova-site, a markdown primer deck, and a small GSAP timeline registry pattern keyed off data-gsap attributes — nine animated timelines on the launch deck, including a number-counter on the survey-stats tiles. Decks read tier-2 semantic tokens only, so the same deck repaints automatically when the user toggles light / dark / vibrant from the site header.
Every project card, working-group card, and member proposal card now carries a three-icon 'Get involved' row — Lead-Potential / Active-Participant / Keep-Informed — that writes the user's commitment level to a new Turso table on tap. One row per (user, entity, level), enforced by a composite unique index, so a re-tap on the same icon clears the row and a tap on a different icon updates the level in place. Logged-out users see the icons at full fidelity, hover-tooltips describing what each level means, and a click-triggered 'Only the penitent man shall pass' gating message that links them to /login with the return URL preserved. Wired into both galleries (portfolio, mission-brief, lite variants) and into the recent-proposals rail on /projects/propose and /working-groups/propose. Built for tomorrow's launch session — 60 attendees, low-friction signal-collection.
Ship the Stacks feature end-to-end: a public catalog of who's using what, OAuth-gated edit at /people/{handle}/stack/edit, a Svelte StackBuilder that buffers drafts in localStorage and publishes via direct commit through a GitHub App bot, and a registry-wide browse at /stacks/see-all-tools so members can read the catalog without having to add tools to their own stack first. Plus the home page reflows: the Dojo cards explainer moves to a new /about placeholder, leaving the home column uniform with the hero.
Built the v0.1 long-form reader chrome on `/read/venture-handbook/[slug]/`: a `BookReaderLayout` that wraps `BaseThemeLayout` and composes a top triptych (previous chapter card · banner with overlay · next chapter card), a `ChapterMeta` slim row, an 'In this chapter' outline, generous prose typography (drop-cap, accent rule above each H2, footnote pills, ✦ ornament on `<hr>`), and a bottom prev/next pair — all driven by container queries with four width-based modes. Introduced four reader-specific components in `src/components/read/` (`BookReaderLayout`, `ReadingProgressBar`, `ChapterMeta`, `ContentPreviewNavCard`) and a site-wide `FormattedDate` component backed by a `format-date.ts` util that handles UTC normalization (`April 26, 2026` default, plus medium / short / iso / reverse-medium / year-only). Migrated `webinars/[id].astro` from the improvised vanilla `<Content />` rendering to the canonical Lossless pipeline (`parseMarkdown` + `AstroMarkdown` + `Sources`) and added the table / footnote-pill / hr styles that were missing. Removed a duplicate-`Sources`-heading bug from chapter bodies (the LFM Sources component owns that heading; the content port was double-injecting it). Fixed a fundamental container-query mistake: `@container reader (aspect-ratio …)` reads the container's *own rendered* aspect, which is always portrait for a long scrolling page — so the Desktop layout never fired. Switched to width-only thresholds plus a viewport `@media (max-aspect-ratio: 13/10)` for the actual split-screen-on-portrait case. Dropped a brand banner above the hero on `/dojo` (Kauffman + SVG composite). Registered every new component in `/design-system` per the maintenance motion. The Agentic VC Dojo launch session now has its time, RSVP, and Format table dialed in for the kickoff.
Stood up the Projects surface for FullStack VC end-to-end: a page spec authored as the input artifact (`context-v/sitemap/pages/Page__projects-index.astro.md`), a `projects` content collection with a Zod schema covering identity, lifecycle (active / proposed / archived), working-group metadata, external links, and display hints; six active projects ported as content (Content Farm, MemoPop AI, Astro Knots, Augment It, Context Vigilance, Lossless Flavored Markdown) plus one proposed (Dealflow OS) and one archived (LP Update Bot) for layout testing; a new `HeroBannerWithMessageHierarchy.astro` that composes the existing `HeroContentCoreMessage` over an image banner (3 heights × 3 overlays × 2 alignments); a single `Section__ProjectGallery.astro` with four variants — `portfolio` (Working Group Cards) and `mission-brief` (numbered dossier) as the two 'standard' creative concepts road-tested in the design system, plus `lite` for proposed projects and `shelf` for the archive; a `JumboPopdown__Projects.astro` mounted in `Header.astro` that surfaces active and proposed projects from any page (hover-open on pointer:fine, click-toggle, Esc-closes, arrow-key navigation, role=menu/menuitem, mobile becomes a bottom drawer); a `ProjectMetadataDisplay.astro` strip and `ProjectReader.astro` body wrapper for the detail page (LFM pipeline + Sources). Three new semantic tokens added to `theme.css` (`--color-status-active`, `--color-status-proposed`, `--color-status-archived`) so status pills carry color through the two-tier system without any component reading `--color__*` directly. Three new design-system catalog entries land in `/design-system/sections/`, `/design-system/heroes/`, and `/design-system/components/` per the maintenance motion. The page spec format itself is new for this site — copying the LFM spec's frontmatter shape (initial-draft / current-draft / final-draft / first-published / last-updated dates, `at_semantic_version`, structured authors, image_prompt) so future page specs read consistently.
Stood up a `working-groups` content collection sibling to `projects`, with the relationship modeled as **many-to-many** via a new `working_group_slugs: string[]` field on the project frontmatter (project files are authoritative; many-to-many because a project can be of interest to multiple WGs). The WG schema is a verbatim clone of the projects schema — fix-as-we-go discipline, no upfront vocabulary redesign. Four starter Working Groups seeded (Data-Driven Venture, Professional Grade Content Development, Hack & Ship, Tech Stack Deep Dives), each with a strong `image_prompt` so the existing banner-generation pipeline can run later. Hybrid component approach: one already-generic component (`ProjectReader.astro`) renamed to `MarkdownReader.astro` and moved to `src/components/markdown/` (single import-path change in one consumer); three project-bound components (`Section__ProjectGallery`, `JumboPopdown__Projects`, `ProjectMetadataDisplay`) copied-and-adapted into working-group siblings. The gallery's WG variant adds a small **active-projects chip row** to the card body — pre-joined by the loader (`loadWorkingGroupsWithProjects(status)`) so the component never queries mid-render. The header now exposes two sibling popdowns — `Working Groups ▾` and `Projects ▾` — keyboard-isolated and visually identical because the popdown's behavior is copied verbatim. The project detail page gains a small `Part of: [WG-A · WG-B]` breadcrumb when `working_group_slugs` is set; the WG detail page renders an active-projects rail (reusing `Section__ProjectGallery variant="lite"` filtered to the WG — zero new gallery code), then the LFM-rendered charter, then a past-projects shelf. Three new design-system catalog entries (working-group-gallery, jumbo-popdown-working-groups, markdown-reader) plus four new entries in the catalog index. The deeper story is the architectural lesson: when the user identified that I'd conflated 'working group' and 'project' from the start, we used plan mode to interrogate the choice — refactor for polymorphism vs. YOLO copy-and-adapt — and chose the second path explicitly because the pattern-library philosophy in `astro-knots/CLAUDE.md` endorses it for UI surfaces. Total cost of the YOLO path: the four cloned components diff cleanly from their parents and can evolve independently. The cost of refactoring would have been a polymorphic abstraction we'd have to maintain across two domains.
Fix two mobile usability issues in the site header. (1) Below 640px, nav links were hidden with no replacement — visitors landing on a project or working-group page couldn't navigate anywhere else. (2) The right-side cluster (GitHub icon + ModeToggle) was clustered next to the brand instead of anchored to the right edge, because the desktop layout relied on the now-hidden nav for its `margin-left: auto`. Added a new `MobileNav.astro` (hamburger button + slide-down drawer) inside `.site-header__actions`, visible only at ≤640px. Drawer renders flat links plus two `<details>` accordions for Working Groups and Projects — populated from the same loaders the desktop popdowns use. Closes on direct re-press, Esc, outside-tap, and link navigation. One-line CSS fix (`margin-left: auto` on `.site-header__actions`) anchors the right cluster regardless of nav visibility.
Built the dedicated /dojo landing (2/3 hero · 1/3 alternate CTA, plus a 10-card Areas-of-Venture grid lifted from the Class 20 Venture Handbook chapter structure). Extracted four reusable components: HeroContentCoreMessage, AlternateCta, AreasOfVentureGrid, and TextLinkSpan (subtle dot-separated text-link row). Cleaned up the homepage so Brand Kit + Design System sit as a right-aligned TextLinkSpan under the header instead of competing with the primary CTA. Scaffolded a `long-form/venture-workflows` content collection with 10 frontmatter-only files — one per chapter — provenance + sequencing + marketing tags ready, body imports waiting on the long-form publishing decision (in-file discussion appended to the prompt). Added an SVG approximation of the Kauffman Fellows mark for Affinity refinement, and pinned the Astro dev port to 4324 to keep OAuth localhost callbacks deterministic alongside other projects.
Built the auth foundation for the Interactive Stack Display: hand-rolled GitHub + LinkedIn OAuth (no Auth0/Clerk), jose-based JWT sessions in HttpOnly cookies, allowlist via kauffman_roster.json, /login + /stack/me pages, and a published privacy policy. Switched the site to Astro server output with the Vercel adapter; all existing static pages opt back in via prerender. ~250 lines of TypeScript replaces what would have been a $35/mo SaaS dependency.
Initial scaffold of the FullStack VC site (sites/fullstack-vc) from the Astro Knots Quickstart, blueprints, and CLAUDE.md. AI assistant got the skeleton right on the first attempt — workspace setup, theme/mode subsystem with three-mode toggle, brand kit + design system reference pages, content collections, base layouts. Validates that the documentation is now self-serve.
Built the Agentic VC Dojo schedule end-to-end: webinars content collection with date_scheduled / date_posted frontmatter, status (Upcoming / Live / Recorded) inferred at render time from the scheduled date, calendar-style WebinarCard component with a date tear-off, /webinars index page grouped by status, and /webinars/[id] detail pages that render the markdown body. Authoring a new session is now one .md file.