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

14 logged updates over 117 days, 15 May 2026 to 8 Sept 2026.

  1. 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.

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

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

  3. /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.

  4. 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.

  5. 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.

  6. 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.

  7. 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…

  8. 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…

Show the earlier 6 entries
  1. 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.

  2. 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.

  3. 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…

  4. 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.

  5. About + Services pages shipped, RSS feed fixedfix

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

  6. POW artifacts scaffoldeddocs

    Site was live and active but missing POW documentation.

Written from this project's decision log as work happened, not afterwards. See every project →

What's next

5 open items

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