Inspiration

Young adults are now the loneliest age group in the world, and nearly one in four Canadians aged 15 to 24 always or often feels lonely. Half of those people rate their mental health as fair or poor. We have more ways to message each other than ever, yet we spend far less time together in person, and many of us have quietly stopped reaching out.

We noticed that the problem is rarely a lack of things to do. Calgary has hundreds of events every week. The hard part is finding someone to go with, finding a time that works for busy friends, and finding the courage to ask at all. And even people with friends stop asking, because chasing everyone for a free evening starts to feel desperate. We built Nexus to lower that barrier.

What it does

Nexus is a social wellness app for Calgary that turns "I should get out more" into real plans with real people.

  • Explore: one map of Ticketmaster, City of Calgary and neighbourhood events, filterable by day, distance, interest and social energy (introvert-friendly to lively). On any event, users can RSVP, save it, set a day-before reminder, or tap Find a buddy.
  • Go together: see which friends want company at an event and answer with "I'll go with you". Friends are named; strangers appear only as a count; locations are never shared.
  • Plan with friends: friends share busy times, never details. Nexus finds when everyone is free, suggests events that fit, and pre-fills a plan with the people, date and place.
  • Create events: host your own hangout, public on the map or visible to friends only.
  • Community: interest groups with channels, user-created public or friends-only communities, adding friends straight from chat, and direct messages.
  • Journal: private notes with mood check-ins, plus affirmations focused on happiness and belonging.
  • Profile and badges: event photos become memories and earn badges for showing up and bringing friends, with no rankings or streaks. Day-before reminder emails help people follow through.
  • Invites and Instagram: a one-tap invite link that makes two people friends, and an optional Instagram link on public profiles.

How we built it

Nexus is a React single-page app talking to a FastAPI REST backend, with a PostgreSQL database on AWS RDS (Canada Central region) that the whole team shared during development.

Event ingestion pipeline. A background job on the server runs every 30 minutes and pulls events from three adapters: the Ticketmaster Discovery API v2, the City of Calgary's open data portal (data.calgary.ca, the city's official events dataset) and the Meetup GraphQL API (built, ready to enable once a token is added). Each adapter normalises the source into one event schema: title, description, start and end times, venue, address, price, ticket URL and image. Addresses without coordinates are geocoded through OpenStreetMap's Nominatim, with every lookup cached in the database to respect its rate limits. A keyword classifier then tags each event with interest categories and a "social energy" level, from introvert-friendly to lively. Events are upserted on a unique (source, source id) key, so repeated syncs never create duplicates, and recurring City events are split into one row per occurrence.

What the database stores. Beyond events, PostgreSQL holds:

  • accounts, with bcrypt-hashed passwords
  • the social graph (follows and follow requests)
  • RSVPs with "looking for a buddy" flags, and buddy pairings
  • saved events and reminder flags, plus a log of reminders sent
  • busy blocks and linked calendar feeds
  • communities, memberships and channel messages
  • direct messages and private journal entries
  • event check-in photos and profile photos

Every table has export and delete paths, so a user can download or erase their own data from Settings.

Scheduling engine. Users block time manually or link a Google, Outlook or iCloud calendar through its private iCal URL. We wrote our own ICS parser that expands repeating events (daily and weekly rules, exceptions, cancellations), skips events marked as free, and discards titles before storing anything. The planner merges everyone's busy intervals, subtracts them from each day's 8 a.m. to 10 p.m. window, keeps gaps of at least an hour, and matches those windows against real events in the database. No AI is involved; it is deterministic interval arithmetic.

Frontend. The map is built with Leaflet and OpenStreetMap tiles, with Google Maps when a key is configured. Filters (day, distance, category, social energy, friends' events, wants company) are applied client-side for instant feedback. The UI uses design tokens in Tailwind CSS v4, so the whole colour system lives in one place. JWT sessions handle auth, signed one-time links handle password resets, and an asyncio task sends day-before reminder emails over Gmail SMTP. A suite of 28 pytest tests covers the privacy rules, the scheduling engine, buddy matching, messaging, communities and reminders.

Challenges we ran into

  • Calgary's time zone changed under us. Alberta moved to permanent UTC−6 in March 2026, but standard time-zone databases still assumed the old daylight-saving rules, so plans showed an hour off. We wrote our own Calgary time handling for both the server and the browser.
  • Reading real calendars. Exported calendar files are messy: recurrence rules, cancelled occurrences, all-day items and timezone tags. We built an iCal reader that handles them while keeping event titles private.
  • Privacy at every step. Every endpoint had to answer "who can see this?": friends see only busy times, strangers only counts, and private communities are invisible to non-members.
  • A shared cloud database. Four laptops on different networks needed the same data, which meant managing the RDS security group allowlist and keeping credentials out of GitHub.
  • Design without noise. We went through many colour iterations to find a look that feels warm and hopeful without distracting from people and plans.

Accomplishments that we're proud of

We are proud that Nexus solves a problem we have ourselves. The planner is the feature we will keep using after this weekend: every one of us has watched a group plan die in a chat thread, and seeing everyone's shared free time in one view, with real events that fit, genuinely changes how we organise our own week.

We are also proud of connecting directly to the City of Calgary's open data. Public recreation drop-ins, community events and engagement sessions that rarely reach young people now sit on the same map as concerts and games, which turns the city's own data into something people can act on.

Finally, we shipped a polished, accessible interface rather than a prototype: a consistent design system, text colours checked against WCAG AA contrast, keyboard support throughout, and an end-to-end product where the data, emails and scheduling are all real.

What we learned

We learned how much design decides whether people feel safe using a social app. Data minimisation became a core feature rather than an afterthought: the planner shares only busy intervals and never event titles, strangers are shown as counts instead of names, and badges have no leaderboards, so there is no competitive pressure.

What's next for Nexus

  • Newcomer onboarding: partner with Calgary settlement agencies and community associations so new arrivals are welcomed into a starter community in their first week.
  • Group chats and event chats: a shared chat for everyone going to the same event, so strangers can meet as a small group in a public place.
  • Push notifications and a mobile app, so a friend's "I'll go with you" arrives instantly.
  • More languages and accessibility filters, such as wheelchair access, cost and quiet spaces.
  • Gentle wellbeing nudges: if someone's journal moods dip for a week, suggest a low-pressure event or a friend to reach out to, always opt-in and private.
  • Other cities: the event sources and scheduling work anywhere, so Edmonton and Vancouver are next.

Built With

Share this project:

Updates

Submission history