Not a resume. Not a feed. A living structure of the people you've built things with — read the way a magazine reads, not the way a database reports.
Every open room here is introduced by the person already standing in it — what they're building, who they need, and why now. No keyword-matched postings, no cover letters into the void.
Enter the Room →Your graph renders as it actually exists — clustered by the work you shared, weighted by how recently you built together, not sorted by who posted today.
Enter the Circles →No vanity totals. Every number here traces back to a specific piece of shared work — reach that means something because you can name the room it came from.
Open the Dashboard →A focused task-enabler, not a co-pilot that talks over you — drafting the follow-up, surfacing the one introduction worth making, then getting out of the way.
Open Workflows →I build the systems other designers ship from — component libraries, navigation schemas, the unglamorous scaffolding that makes everything downstream feel effortless. Nine years across fintech, retail, and higher ed.
Nine years of choosing the boring, correct answer over the exciting, fragile one.
Unified navigation, tokens, and component contracts across teams that had never shared a repo before.
Ran discovery solo, shipped the first usable prototype in five weeks, stayed on through GA.
Heuristic audit, three rounds of testing, and a navigation rewrite that tripled weekly active use.
Documented every pattern before I left, so the system outlasted the contract.
Everything you've right-clicked and saved from today's browsing, in the order it landed. Right-click any job, case study, or gallery item and choose "Save" to add it here.
Everything moving across your graph — jobs, quotes, analytics, and shipped work. Click any card to read it in full on the right.
What it's for, how it's visually encoded, and how the control layer gives someone real leverage over their own graph rather than a fixed view of it.
Most products that touch "your network" pick one lens and ignore the other two. A CRM tracks outreach but has no idea what you've actually shipped with someone. A contacts list shows who you know but nothing about temperature — it can't tell a person you talk to weekly from one you emailed cold eight months ago and never heard back from.
Circles treats those as the same underlying graph, viewed one way. A cold recruiter outreach, a warm collaborator from a shipped project, and a person whose posts you keep engaging with are all just nodes with different edge properties — not three separate systems that happen to share a UI.
Home and Feeds are both, underneath their Mondrian framing, infinite pannable canvases — not paginated lists pretending to be something more dynamic. Circles pushes that same instinct all the way: a force-directed graph, full-bleed, with the bento framing shrunk down to a thin instrument panel around it rather than the dominant structure.
The panel doesn't disappear — the grid lines, hairline rules, and mono labels that define this site's visual language are still there, framing the graph the way a cockpit frames a windscreen. But the graph itself is physics, not HTML flow.
Every node encodes two independent facts at a glance: what kind of relationship this is (shape) and how close it sits to you (border). Nothing relies on color — the whole site stays strictly monochrome, so archetype had to be legible in silhouette alone.
Fill follows the same logic — inner and "you" render solid, outer renders hollow, so density near center is legible before reading a label.
Every connection sits on a six-point scale, and the line itself communicates it. Warmer relationships pull harder in the physics — a real spring-strength difference, not just a visual one.
The arrow on cold and ghosted edges matters: those aren't mutual relationships rendered dimly, they're outreach that hasn't been reciprocated. If someone replies, the edge resolves — dashed and directional becomes solid and undirected. The graph doesn't just display the pipeline, it is the pipeline.
The instinct with most "network" tools is to bury the ranking logic behind a search bar. Circles does the opposite: the controls are the algorithm, exposed directly.
Sets which degree of connection is even loaded, not just shown. Narrowing to "1st" removes second-degree nodes from the simulation entirely.
A literal radial force added to the physics each frame — a camera control over the simulation, not a toggle over a static image.
Isolate peers, hiring managers, recruiters, or mentors — "who do I know that could vouch for me at a company that's hiring."
Filter straight to the cold or ghosted end. This is the control that turns a pretty graph into an actual to-do list.
This site already leans on canvas for anything that needs to feel physical rather than templated — the particle-field hero, the infinite pannable card grids. Circles follows the same discipline.
Pairwise repulsion, spring attraction along each edge (strength set by responsiveness), a gentle pull to center, and a user-controlled radial bias on top.
Redraws every frame at 2D canvas speed — the only way this stays smooth while panning, zooming, and dragging at once.
The "you" node is the single fixed point. Drag any other node and it pins under the cursor, then releases back into the physics on let-go.
Clicking any node opens the same poster panel used for every other card on the site — a new way to browse the network, not a separate product.
Every metric here is available on the free tier — no paywall, no "upgrade to see who viewed your profile."
What Workflows is meant to be, why it's locked behind a tier rather than shipped half-built, and what's actually running behind that iframe right now.
The easy version of an AI feature here would be a chat window that answers questions about your network. That's a demo, not a workflow — it asks you to go start a conversation with it, which is one more thing competing for attention, not less.
Workflows is named deliberately, not as a euphemism for "agents." The bar for anything living here is narrow: does it do one bounded task and then stop, or does it want to become a running conversation you have to manage.
A co-pilot wants to sit in the loop continuously — reading everything, commenting on everything, present by default. A task-enabler shows up for one job, does it, and disappears until called again.
Concretely: after a conversation with someone in Circles goes quiet, a workflow could draft the follow-up message so the blank page isn't the reason it never gets sent. Or, looking at the graph, it could flag the one introduction actually worth making this week, instead of a daily digest nobody reads.
Everything else on this site — Feeds, Circles, General Assembly — works the same whether you're a free or paid user; the tiers mostly gate scale, not capability. Workflows is the one place that's actually different: it costs real inference time per action, so it's the one surface where "locked" is honest rather than a paywall dressed up as a feature.
That also means it's the wrong place to fake completeness. Better to show what's real — a working embed, a clear concept — than dress up a static screen as a finished product.
The panel on the left is a live embed, not a static mock — it's a genuine, standalone build, kept exactly as it was rather than absorbed into this site's own codebase.
That separation is intentional here specifically: Workflows is the one part of this concept furthest from settled, so it stays in its own sandbox instead of getting wired into the shared systems the rest of this site leans on.
The draggable divider and this scrolling brief panel are the exact shared mechanism built for Circles' graph and General Assembly's photo wall, just pointed at an iframe instead of a canvas.
The same drag-to-resize handle and custom scrollbar used on both other pages, extended rather than duplicated a third time.
No new resize callback was needed — an iframe already fills whatever box it's given at 100% width and height, unlike the canvas grid, which needed its own fix for exactly this.
What it’s for, why it breaks the site’s monochrome rule on purpose, and how the interaction here is deliberately different from every other card on the site.
General Assembly could have stayed a grid of skill-tags and case-study fragments — useful, but easy to skim past without feeling anything. Recasting it as a photo wall does something a tag cloud can’t: it makes the page worth lingering on for its own sake, not just for what it proves.
The images aren’t illustrations of a skill list sitting somewhere else. They’re the actual raw material here — a genuine change in what this page is for, not a reskin of what it looked like before.
Every major browsing surface on this site already breaks from a scrolling list in favor of an infinite, pannable grid. General Assembly doesn’t introduce a new interaction model — it just points that same camera at photography instead of text.
That consistency matters more than it looks: someone who’s already learned to drag-pan Feeds or Home doesn’t have to relearn anything to use this page.
Every other surface here stays strictly black, white, and gray, including photography used elsewhere on the site. This page is the single place that breaks that discipline on purpose.
No grayscale filter, no desaturation. Each tile is a real photograph, cropped to fill its cell edge-to-edge, with a small index number as its only chrome. The restraint everywhere else is exactly what makes the color here read as a decision, not an oversight.
Every other clickable card on this site opens the same wide poster panel — kicker, headline, tag row, related pathways. This page deliberately doesn’t. Hovering a tile just deepens its shadow and lifts it slightly, a pure elevation cue with nowhere to click through to yet.
Clicking opens a small, centered card sized closer to an actual postcard than a sidebar — the photo up top, a caption set in italic serif underneath, nothing else competing for attention. It’s meant to feel like being handed something, not like opening a record.
Two sliders live in the bottom drawer: grid size, which changes the tile dimensions used by the same panning physics as every other canvas grid on the site, and image gap, deliberately built as an independent control rather than tied to that same scale — so density and size can be tuned separately.
Neither is cosmetic. Move either one and the whole tiled pattern recomputes and re-centers live.
This page runs on the exact same panning, zoom, and tiling engine as Home and Feeds — not a parallel implementation that happens to look similar.
Two small opt-in hooks were added to support this page — a custom tile renderer for full-bleed images, and a custom click handler — both inert unless a page explicitly asks for them.
The photo pool was pulled from a longer list that included the same images uploaded twice in different formats. Each appears once.
Rather than resizing the site’s shared poster panel down to postcard scale, this page opens an entirely separate, smaller overlay — so the panel used everywhere else stays exactly as it is.
Image gap required a small addition to the shared grid engine itself — previously, spacing was locked to the same scale as tile size. It’s now a separate multiplier any grid can opt into.