Inspiration

Loneliness is common, and it's a health problem.

  • About 1 in 6 people worldwide feel lonely, and the World Health Organization links loneliness to roughly 871,000 deaths a year, about 100 every hour. (WHO, 2025)
  • In Canada, 13% of people aged 15 and over always or often feel lonely. Among 15 to 24 year olds, it's 17%. (Statistics Canada, 2024)
  • Calgary is no exception: about 2 in 10 Calgarians often or always feel lonely, above the national average (Calgary Foundation 2024, via Avenue Calgary), and 1 in 5 don't feel a sense of belonging.

The surprising part: people want to talk to each other, they just assume others don't. In a Chicago study, commuters asked to talk to a stranger had a more pleasant ride than those asked to sit in silence, even though they predicted the opposite. (Epley & Schroeder, 2014)

We kept thinking about the person you see at the library every week and never say a word to. ChatterBox is for that person, and for you.

What it does

ChatterBox is a mobile app and a small light box for study tables and cafes in Calgary. It removes the guesswork from starting a conversation.

1. You know who's open to chat before you sit down. Every table has a light. 🟢 Green means the people there are happy to talk. 🔴 Red means not right now. 🟡 Yellow means the seat is free to claim. Nobody risks an awkward approach, and anyone can say "not now" without explaining.

2. The people you keep seeing can become people you know. The app notices when you and another regular keep overlapping at the same place (3+ separate days, 20+ minutes each). It offers an introduction that only happens if you both say yes, then helps you plan a second meeting.

3. You stay in control. Conversations have a set length and you both vote on whether to keep going. Leave, Report and Help are always one tap away. Your name is only shared when you both agree.

Features

  • Tap to check in: hold your phone to the NFC tag at the entrance or on a table's box. The same links work as QR codes.
  • Live floor map: TFDL floor 3, traced from the real floor plan, with every table showing its light. The room shows counts only ("12 people here · 4 open to talk · 3 into hiking like you").
  • Claim a table: set your light to green or red, hold your seat with "I'll be right back", and get checked out automatically after 3 hours.
  • Conversations: say hi at a green table and the other person's phone opens the chat within seconds. The light turns red while you talk.
  • Familiar faces and meetups: turn repeat overlaps into connections, then plan a second meetup that accounts for Calgary weather, holidays and opening hours (or just go for a walk).
  • Explore: Calgary places on a map with live counts and a short Gemini summary of what each place is like right now.
  • The box: an ESP32 light on the table that mirrors the table's colour in about 2 seconds.
  • Kiosk and owner dashboard: for venue staff, showing totals only.

How we built it

  • App: Expo SDK 58, React Native, Expo Router, TypeScript, NativeWind
  • Sign-in: Auth0 through expo-auth-session, so it works in Expo Go
  • API: Hono on Node 22
  • Database: Tiger Data (Postgres + TimescaleDB), with check-ins stored as time-series data and busy hours precomputed
  • AI: Gemini, server-side only, for venue summaries, conversation openers, meetup plans and owner tips, with rate limits, timeouts and fallback text
  • Data: Google Places, Calgary open data and Environment Canada weather
  • Hardware: ESP32 + LED strip, polling the API every 2 seconds for its table's colour
  • NFC: NTAG stickers that hold only a link to our server, which forwards into the app

Privacy is enforced in the database, not just hidden in the app. The server runs every request as the signed-in user, so row-level security decides what comes back. If the server forgets a filter, the database still refuses.

  • Nobody can see who is at a place. Crowd info arrives pre-counted, with no names or IDs.
  • "Like you" needs at least 2 people sharing an interest, so it can't point at one person.
  • Names appear only after both people accept. Before that, the name is never sent at all.
  • A decline looks exactly like "not available."
  • The box gets a colour and nothing else, and goes off if anything is unclear.
  • Gemini never sees an identifiable person.
  • Personal check-ins are deleted after 90 days; only anonymous busy-hour totals are kept.

Challenges we ran into

  • Connecting the box to the cloud. We first thought the ESP32 would need its own local database synced to the cloud. Instead, the box just asks the API for its table's colour every 2 seconds over Wi-Fi, which made it simpler and safer.
  • NFC across phones. iPhones won't open custom app links from an NFC tap, and Expo Go links change with your laptop's IP. We solved it by putting a server link on every sticker that forwards to the app, so we never have to rewrite the stickers.
  • Showing the room without showing people. We wanted the room to feel alive without ever revealing who is there. That meant designing every number as an aggregate with minimum group sizes, and only showing shared interests with consent from both sides.
  • Changing our stack mid-hackathon. We moved from Supabase to our own API and Tiger Data while keeping every privacy rule intact.

Accomplishments that we're proud of

  • A real physical box whose light changes within seconds of a tap in the app
  • Privacy rules that live in the database itself, backed by tests that check gender and identities never leak
  • A floor map traced from the real TFDL floor 3 plan
  • Tap-to-check-in with NFC that works on both iPhone and Android
  • Familiar-faces matching and a meetup planner that actually use Calgary weather and open data

What we learned

  • The hardest part of a social app is consent, not code. Every feature started with "who sees what, and did they agree?"
  • Simple hardware designs win: a box that only knows its colour is easier to build and safer than a smart one.
  • Putting rules in the database means the whole team can move fast without worrying about breaking privacy.

What's next for ChatterBox

Open to people without the app

  • A web page so anyone can scan a table's QR, learn the colours and join from the browser
  • Guest mode: a first name and a house-rules tap, no account needed
  • A physical button on the box to switch between green and red without a phone

Safety at the table

  • Report a problem tied to the table and time, sent to venue staff
  • A quiet staff alert when someone taps Help
  • House rules on every ChatterBox table
  • A "need an exit?" button that brings up a fake call so you can leave gracefully

Growing the community

  • More ChatterBox tables across Calgary cafes, libraries and community centres
  • Rewards for regulars and a passport stamp for every new place
  • Staff-only access for the kiosk and owner dashboard

ChatterBox is for everyone: students, newcomers to Calgary, remote workers and older adults. We're starting with the places people already go.

Built With

Share this project:

Updates

Submission history