Pamela Estivam Marques← Back to work

Community tool · Design & build

The Connection Wall

A room full of people becomes a wall of profiles you can actually click.

Role
Design, front-end, data model
Built for
Coletivo Delas
Status
Live, in use
Visit
theconnectionwall.com ↗
theconnectionwall.com/coletivodelas

The Connection Wall

Room: Coletivo Delas

The wallColetivo Delas6 people
  • AR

    Ana Ribeiro

    Product designer learning to build her own front-end.

    View profile ↗
  • MC

    Marina Costa

    Data analyst at a fintech. Dashboards, mostly.

    View profile ↗
  • JS

    Júlia Santos

    Front-end dev. React and accessibility.

    View profile ↗
  • BL

    Bruna Lima

    Moving from law into UX research.

    View profile ↗
  • CF

    Carla Ferreira

    Community lead. I connect people for a living.

    View profile ↗
  • LM

    Larissa Moreira

    Back-end engineer. Node, Postgres, coffee.

    View profile ↗

Add yourself

Name
Ana Ribeiro
LinkedIn URL
https://linkedin.com/in/anaribeiro
Short description
Product designer learning to build her own front-end.

54/280 characters

Generate profile
← Back to the wall
AR

Ana Ribeiro

Product designer learning to build her own front-end.

Visit LinkedIn profile ↗

Interface reproduction · sample profilesWall / Add yourself / Profile

What it is

Every community event ends the same way: a group chat full of people who never quite meet. The Connection Wall gives an organiser one link to share. Anyone who opens it adds their name, their LinkedIn and one line about themselves, and immediately becomes a circular tile on a shared wall that everyone else can click straight through.

No accounts, no install, no admin. The first room was built for Coletivo Delas, a women-in-tech collective, and it runs live today.

How it works

  1. 01

    Name the room

    The organiser names the room and picks the platform its members will link — LinkedIn today, with Instagram, X and the rest already in the picker.

  2. 02

    Share one link

    Members open it and fill three fields. Validation is immediate and human: “Use a full LinkedIn URL”, not “invalid input”. The description caps at 280 characters, with the counter running live.

  3. 03

    The wall fills in

    Each person lands as a circle carrying their initials, name and one line. Hovering lifts the tile; clicking opens their profile page, and from there, their LinkedIn.

Inside the build

Validation

One schema, both sides

The Zod shape that checks the form in the browser is the same shape the server parses before anything reaches the database. Rules live in one place, so the client can’t drift from the server.

src/lib/profiles.functions.ts

Data access

Reads are public, writes are not

The browser reads the wall through the public Supabase client. Inserts run inside a TanStack Start server function using the admin client, so the form is the only way onto the wall.

supabase/migrations

Sharing

Every profile has an address

Profiles render server-side at their own route with their own title and Open Graph tags, so a member can paste her tile into a group chat and have it unfurl properly.

src/routes/profiles.$profileId.tsx

Design system

Tokens, not stylesheets

Colour is a set of oklch tokens defined once. The tile lift, the surface shadow and the letter-spaced eyebrow are Tailwind v4 @utility rules — the wall’s behaviour is described in one file, not repeated across components.

src/styles.css

Built with

  • React 19
  • TypeScript
  • TanStack Start
  • TanStack Router
  • TanStack Query
  • Tailwind v4
  • shadcn/ui
  • Radix
  • Supabase
  • Zod
  • Vite 8
  • Bun

Server-rendered with file-based routing and typed server functions, so the wall is readable before JavaScript loads and shareable links resolve on the server.

What’s next

Rooms are the piece still being built. The landing page collects a room name and a platform today and routes to the Coletivo Delas wall; the room record, its slug and per-room queries come next — followed by opening the profile link up to the other platforms already in the picker.