wanessalabs standalone production

Wanessa Labs Website

The portfolio at wanessalabs.com. Fast, static, owned. Proof surface for clients in under 30 seconds.

AstroTailwindthree.jsCloudflare Pages
An AI consultancy that ships real tools, and documents the work rather than pitching it.
An AI consultancy that ships real tools, and documents the work rather than pitching it.
The same claim on a phone, with the proof one scroll below it.
The same claim on a phone, with the proof one scroll below it.
Every project carries a PRD, a decision log and a roadmap, listed rather than asserted.
Every project carries a PRD, a decision log and a roadmap, listed rather than asserted.

The previous site was slow and generic. LinkedIn is rented land. I needed a credible proof surface where anyone could verify what I’ve actually built in under 30 seconds. So I built this one.

The Problem

Consultants and builders have the same credibility problem: any claim they make about themselves lives on someone else’s platform. LinkedIn, Twitter, Substack: all rented land. You need a surface you own that shows the work, not just describes it.

What It Is

An Astro-powered static site listing all shipped projects, a development timeline showing what shipped and when, and short-form thoughts on AI and automation. Content sourced from markdown files in the vault. No backend, no database, no subscription required to read.

Fast-loading by design. The site proves the point before the reader finishes the first paragraph: this is what building without bloat looks like.

Features

The Projects Map

The catalog outgrew a list. Five tracks and a project count that keeps climbing is a shape, so /projects opens on a graph you can spin, drag, and click into.

The first version drew it from coordinates I typed by hand. Positions were fixed pixel values and the fan-out angle per cluster was a constant, so the layout had no idea how wide any label actually was. One track grew to 19 projects, and at 19 the names landed on top of each other. Adding a project meant editing numbers.

The rebuild removes the numbers. A small physics simulation runs in the browser: projects repel each other, links behave like springs, and the layout settles into whatever shape the data wants. Nothing is positioned by hand, so the next project places itself.

The text is the part that matters. WebGL draws the bubbles and the hairline links, and nothing else. Every label stays an ordinary link in the page, positioned over the canvas each frame from its node’s position in 3D. That split is what fixes the overlap. A label in the page can be measured, so before it draws it checks the room it needs against every label and bubble already placed, tries 12 positions around its node, and hides rather than overlap. Names cannot collide, because stacking is the one option the layout does not have.

Keeping labels as real links buys the rest for free. You can tab into the graph and open a project from the keyboard, and every project is a real link in the served HTML rather than a shape on a canvas, which is what a search engine needs in order to follow it.

Phones never download any of it. The 3D code loads on desktop only, and only once the map scrolls into view. The accordion that mobile gets is also the desktop fallback when WebGL is missing or the code fails to arrive, so the map area is never an empty box.

Stack

ToolRole
AstroStatic site generation
TailwindUtility-first styling
three.jsProjects map: bubbles and links only, lazy and desktop-only
Cloudflare PagesHosting with global CDN

Revenue Model

Stripe tip link only. No ads, no paywall.

Development timeline

34 logged updates over 176 days, 15 May 2026 to 6 Nov 2026.

  1. The About Clemens showroom, a statue that changes clothes, and its own pagefeature

    What: The About room (first shipped 2026-11-05 in PR #391 with the walker as a stone statue) got a statue of Clemens himself. PR #400 built it from his pen-drawn profile portrait.

  2. A star gate to Clem's Travelsfeature

    The gallery holds every project, but the travel archive at travel.listsof30.com had no way in. Clemens asked for a separate door into a universe of its places.

  3. Shipped, with a way in from the travels site and its own pagefeature

    The room also got its own project page, travel-planetarium (asset 53), with five screenshots captured from the live site, and a globe-in-a-pit glyph.

  4. The planetarium gets a globe and a wall of photosfeature

    Clemens, after the first version shipped: the room's wall looked bare, and a black sky of stars gave no sense of where anything was. He asked for his top 15 places as gallery cards round the wall, and said a globe would make more sense.

  5. Follow the Lemon, a guided tour and five hidden lemonsfeature

    The gallery had no way in for someone who doesn't want to steer, and nothing to find once you'd seen the rooms.

  6. Proposal Site Skill pagefeature

    What: /projects/proposal-site under Clembot + Enhancements, describing the proposal-site skill with Transient Digital and NeatoFX as the two example builds.

  7. The walker gets glasses and a mustachefeature

    The avatar's face still had the placeholder defaults, and Clemens wanted it closer to his likeness.

  8. Walk the Gallery on phones, a pill before the cardfeature

    On a phone, walking near a wall popped the project card automatically, and it covered most of the view.

Show the earlier 26 entries
  1. Walk the Gallery v2, the avatar and the loop doorsfeature

    v1 was a first-person walk. It read as a floor plan more than a place, and the longest wing (Games, 36 projects) was a long walk out and the same long walk back.

  2. Walk the Gallery, /projects/walk/feature

    /projects shows 78 projects as a list, figure cards and a map. None of them gives a sense of the portfolio as a place, and none of them works as a guided showing in a pitch or interview.

  3. Figures view on /projectsfeature

    Clemens asked for the Hairline experiment to become a real way to browse /projects, as a tab after the map, with no drawing repeated.

  4. Hairline Diagrams project pagefeature

    Clemens asked for Hairline Diagrams as a project page under Clembot + Enhancements, framed as a design tool, with clemens.listsof30.com and wanessalabs.com/projects as the live examples.

  5. Clembot HUD Observability Project Page (Asset #47)feature

    Clembot and autonomous agent harnesses lacked an observability UI showcasing real-time architectural components, agent execution states, file churn, and drift.

  6. /audit Skill: Fleet-Wide Optimization Gate & Project Showcasedocs

    Codified the /audit skill as the final, mandatory gate in the optimization lifecycle, and added it as a featured showcase project on wanessalabs.com/projects/audit-skill/.

  7. Lighthouse & Core Web Vitals Optimization Passfeature

    PageSpeed Insights audit on wanessalabs.com flagged: 1. Performance score of 67 due to 1.37MB of unoptimized, oversized images (clemenswan-headshot.png, vinessawan-headshot.jpg, wanessalabs-logo-black.png).

  8. Portfolio tracks corrected, then recovered from a hand-deployfeature

    Sorting a card to the bottom of a track means DROPPING assetNumber, not raising it. The /projects comparator returns low asset numbers first and sinks entries that have none, so Marketing Bootstrap's assetNumber: 2 would have pinned it to…

  9. Budget Meeting and Date Night Planner reach alpha, and the family pages cross-linkfeature

    Both pages were placeholders describing pre-dashboard plans (a Claude Q&A with Puppeteer scraping; a markdown template and a CSV). Both products now ship as tabs inside Family Dashboard, so the pages were rewritten to describe what…

  10. /audit Remediation: Web Vitals, A11y, Legal & Agentic Readinessdocs

    Full systematic /audit pass across all 7 dimensions.

  11. Laya Command Center integrationfeature

    registered in Laya as a watched repo; no code change.

  12. /13: A glossary that explains the jargon, and a nav that stops hiding two pagesfeature

    the portfolio prose is dense with MCP, x402, RLS, IndexedDB, Dexie, PRD and harness, aimed at an audience that includes prospective clients who do not read the stack for a living.

  13. Mini Crossword joins the portfolio, argued from the grid shapesfeature

    The game had been live on the hub since May and the book maker since August, with no page on wanessalabs.com.

  14. Three LinkedIn posts on the writing feed, sourced rather than inferredfeature

    The /thoughts feed had not gained an entry since April.

  15. /projects becomes a progress surface: per-project timelines and a portfolio feedfeature

    The portfolio showed 68 finished things and nothing about the work. The site's one progress surface, /30-in-90, counts status === 'shipped' and so reports 4 of 30 while 45 projects sit at status: production.

  16. Timeline coverage 30 to 56 pages, and eleven project marksfeature

    Two coverage gaps on the portfolio, closed the same afternoon. Neither was a missing feature: both components already worked and were simply reading empty inputs.

  17. The third Reddit pilot, and a page that grades its own coachfeature

    Fibbers Dice shipped as a Reddit post and had no page. The two pilots before it had set a template, and the risk with a template is that the third page repeats the second's claims rather than reading the third game's code.

  18. Curated launches reach their own project pages, and a forward-looking roadmap sectionfeature

    Two gaps left by the timeline work earlier the same day. The 20 curated game-hub launches rendered on the portfolio feed and nowhere else, so 19 project pages showed no timeline at all while the site already knew their launch date.

  19. The Reddit rail reaches the portfolio, and code blocks become readablefeature

    Two games shipped as Reddit posts on the Devvit platform and the portfolio said nothing about either. Separately, every fenced code block on the site rendered as a near-black box with unreadable text, on a page whose stylesheet clearly…

  20. The Blackjack page, and what it revealed about the page herofeature

    Local build exit 0, 87 pages, 66 project pages. Live verification by content rather than status code: the page and all four assets return 200, the served asset byte counts match the commit exactly (128450 / 111277 / 105219 / 103657), zero…

  21. Two false claims removed from the public site, and a token that was never AAfix

    Three defects that all read as true. (1) --text-muted at oklch(58% 0.007 82) measured 3.99:1 on --bg and 3.59:1 on --surface-raised, failing WCAG AA on roughly 20 small-text elements.

  22. Projects map: rebuilt as a 3D force-directed graphimproved

    The same label-overlap defect the 2026-05-19 entry below claims to have fixed. It came back, because that fix treated the symptom.

  23. Added design/ as the canonical brand source of truthfeature

    Pulling it into a design/ folder gives a single canonical reference for future UI work and keeps the front door in sync with the Claude Design library (preview cards live in designs/library/wanessalabs/). Documents the hard boundary with…

  24. Projects mindmap: elastic layout overhaulfeature

    Clusters with 7–8 projects had severe leaf overlap. Root cause was three bad constants: fixed LEAF_DIST = 82, max spread of 108°, and cluster positions too close to the SVG canvas edges.

  25. About + Services pages shipped, RSS feed fixedfix

    Added two missing pages to close the "three missing sections" gap noted in the session brief.

  26. POW artifacts scaffoldeddocs

    Site was live and active but missing POW documentation.

Written from this project's decision log as work happened, not afterwards. 1 entry was withheld from publication. See every project →

What's next

5 open items

Plans, not promises. Taken from this project's own roadmap.