Inspiration We kept noticing the same pattern at events: people collect contacts and nothing happens. LinkedIn reduces you to a job title. Instagram reduces you to an aesthetic. Everyone shows up guarded, and the collaborations that could actually happen never do, because nobody has a reason to go first.

We wanted a network built on overlap instead of credentials — one where you're matched on soft skills and passions, not résumés — and where both sides have to actually show up before either can hide behind a cold DM. Yellow is named for that: openness, warmth, growth.

What it does Yellow is an AI-matchmaking network for entrepreneurs and builders.

Onboarding — you write a free-text blurb about yourself. Claude (via Amazon Bedrock) reads it and extracts your soft skills and interests as tags, which you can confirm and edit. Bubble map — an Apple-Watch-style floating cluster with you at the centre. Everyone else orbits you, sized and positioned by how much you overlap — bigger and closer means more shared. Match nudge — a banner surfaces your strongest match: "you and Maya overlap on 14 skills & interests." The gate — before either side can send a single message, both people have to answer Who are you? What are you building? What are you looking for? — by voice. A split-node rail visualises the rule as each side satisfies it. Neither side can hide behind silence. DM + project hubs — once unlocked, chat opens, and you can spin up a shared workspace per project: an updates/questions feed and a task board with assignees and deadlines, because real builders are juggling more than one thing at once. How we built it Next.js 16 (App Router, Turbopack) with React 19 and Tailwind v4, deployed on AWS Amplify. Everything server-side, no client-side AWS SDK:

Amazon Cognito for auth — custom signup/login UI, httpOnly session cookies, a proxy.ts route guard. DynamoDB for state — a per-user app-state table plus shared pair# rows for connections, yellow-hubs/yellow-hub-items for shared project workspaces, and a public user directory. Amazon Bedrock (Claude Haiku 4.5) to turn a free-text bio into a structured tag set, with a silent local-keyword fallback if Bedrock is unreachable. S3 for voice notes (private, presigned) and profile photos (a public-read carve-out so avatars load as plain tags). The bubble map runs its physics in a requestAnimationFrame loop that writes transforms straight to the DOM — golden-angle placement plus a relaxation pass for a collision-free cluster, so React never re-renders per animation frame. Challenges we ran into Making a connection a fact, not a feeling. Early on, a "match" only lived in one person's browser state — so two people could each believe they were connected while the app quietly split them into two half-filled records that never reconciled. We rebuilt connections as a single shared DynamoDB row keyed by both user IDs, so the unlock only fires when the server can prove both sides showed up. The same bug, twice. Hubs had the identical problem — a hub someone "added you to" was really just written to their own private state, so the invitee saw nothing. We moved hubs into their own shared tables too, and verified with two real accounts that both sides actually see the same hub. Identity has to resolve before anything else does. State is keyed by the Cognito sub, resolved asynchronously — publish anything under a synchronous fallback ID before that resolves, and you've created a permanent duplicate identity. We had to audit every write path to guarantee it always awaits real identity resolution first. Fail-soft as a design constraint, not an afterthought. Bedrock, the directory, S3, and the mic all needed to degrade gracefully rather than block the flow — a demo shouldn't die because one AWS service hiccups. Accomplishments that we're proud of Getting the whole loop working end-to-end on real infrastructure, with real accounts, in a single hackathon build: sign up, get matched by AI-extracted overlap, unlock a conversation only after both sides show up, and land in a shared workspace with someone you just met — all backed by a database that agrees with itself.

What we learned Trust in a social product isn't a UI feature you bolt on last — it has to be enforced at the data layer. The mutual-vulnerability gate only means something if the server, not the client, is the one deciding whether both sides have actually shown up.

What's next for Yellow Richer hub collaboration (shared documents, milestones), smarter re-ranking of the bubble map as new tags get added over time, and pushing the voice-intro exchange into a fuller async video option for people who'd rather show than tell.

Built With

Share this project:

Updates