Purpose — Project Story

Hackathon submission · AWS × Vercel/v0 · Track 1 — Monetizable B2C


Inspiration

Loneliness isn't just a feeling — it's a growing public-health problem. After the pandemic, many people moved cities, started working remotely, or travel solo and still struggle to find real connection beyond another scrolling feed.

We were inspired by a simple question: "I want to do something — who nearby wants the same?" Not a big event. Not a dating profile. Just dinner with someone new, a walk, a study session, or help setting up Wi-Fi.

Meetup is event-centric. Bumble BFF is profile-centric. We wanted something intent-centric — post what you want to do, discover it on a map, and connect in small groups (1–6 people). That's Purpose.


What it does

Purpose is a B2C marketplace for local, activity-first connection.

Users can:

  • Post a Purpose — dinner buddy, gym partner, coworking session, city tour, tech help, and more
  • Explore on a live map — see nearby Purposes with GPS tracking and radius-based search
  • Request to join — guests send a message; hosts accept or decline from an inbox
  • Verify identity — demo ID verification flow (US + India document types) to build trust
  • Host paid experiences — data model supports paid Purposes; Stripe integration is next

Categories: Together, Create, Help, and Explore. Launch geography includes US and India (SF, Austin, Mumbai, Bangalore, Delhi).


How we built it

We started in v0.app, iterated on the UI fast, and deployed to Vercel for production hosting.

Layer Technology
Frontend Next.js 16, React 19, Tailwind CSS 4
Maps Leaflet + CARTO Voyager tiles
Geocoding Nominatim (OpenStreetMap)
Backend Next.js API Routes + server/client components
Database Amazon Aurora PostgreSQL (Serverless v2, ap-south-1)
ORM Prisma 6

Data model: User, Purpose, and JoinRequest tables in Aurora. Join requests use a unique constraint per user per Purpose so duplicate requests are blocked.

Nearby search (LaTeX)

Purpose filters listings by great-circle distance using the haversine formula. Given two points on a sphere with latitudes (\phi_1, \phi_2), longitudes (\lambda_1, \lambda_2), and Earth radius (r \approx 6371\,\text{km}):

Displayed equation:

$$ d = 2r \arcsin\left(\sqrt{\sin^2\frac{\Delta\phi}{2} + \cos\phi_1\cos\phi_2\sin^2\frac{\Delta\lambda}{2}}\right) $$

where (\Delta\phi = \phi_2 - \phi_1) and (\Delta\lambda = \lambda_2 - \lambda_1).

Inline usage in prose: we keep Purposes where (d \leq R) and (R) is the user's chosen search radius in km.

Platform fee model (future): host payout after Stripe processing:

$$ \text{payout} = P \times (1 - f), \quad f = 0.15 $$

where (P) is the listed price in USD and (f) is the 15% platform fee.

Key flows

  1. Create → map pin + geocode → POST /api/purposes → Prisma → Aurora
  2. Explore → browser Geolocation API → GET /api/purposes/nearby
  3. Join → POST /api/purposes/[id]/join → pending JoinRequest
  4. Host inbox → PATCH /api/join-requests/[id] → participant count updates

Build command:

prisma generate && next build

Health check at /api/health confirms Aurora connectivity. For the hackathon demo, we use a session user switcher (u1–u5) so judges can test guest → host flows without full auth.


Challenges we ran into

Leaflet + Next.js SSR — Map libraries expect window. We hit build failures until we lazy-loaded map components with dynamic imports and kept geocoding server-safe.

Maps centered on the wrong country — Early demos defaulted to the US. We fixed centering on live GPS, seeded India data (Mumbai, Bangalore, Delhi), and tuned the default viewport.

Non-English map labels — OpenStreetMap tiles showed local scripts in India. We switched to CARTO Voyager and set Accept-Language: en for Nominatim so labels stay readable for our launch markets.

v0 → Vercel deployment — Getting DATABASE_URL wired to Aurora PostgreSQL with SSL (sslmode=require) took careful env setup. Prisma and vercel.json build steps had to align so production builds didn't skip the client generate step.

Trust without over-building — Real auth (Clerk) and AWS Rekognition were out of scope for the hackathon window. We shipped a verification UX + demo auto-approve so the product story is clear while staying realistic.


Accomplishments that we're proud of

  • A working full-stack MVP — not just a mockup: Purposes persist in Aurora PostgreSQL
  • End-to-end join workflow — request → pending → accept/decline → inbox → updated participant count
  • Map-first discovery — live user dot, colored pins, nearby radius filter
  • Thoughtful monetization path — paid Purpose fields + 15% platform fee model (Track 1)
  • Production-ready architecture — client, Vercel/v0 app layer, Aurora, and external services documented in docs/architecture.md
  • India + US from day one — seed data, ID types, and English map labels for both markets

What we learned

  • v0 accelerates UI; Aurora + Prisma gives real relational data without managing Postgres yourself — a strong split for a geo-social app
  • Intent beats inventory — users care more about "dim sum Sunday in Bandra" than browsing generic event listings
  • Host approval matters — a simple join-request gate feels safer than open RSVPs for 1:1 and small-group meetups
  • Geo is deceptively hard — tiles, geocoding rate limits, SSR, and GPS permissions all need separate attention
  • Hackathon scope discipline — demo auth + real DB + one complete user journey beats half-implemented payments and auth

What's next for Purpose

Next 30 days

  • Stripe — paid Purposes with 15% platform fee
  • Real authentication — Clerk or Auth.js, replace demo user switcher
  • Notifications — email/push when someone requests to join or gets accepted

Next 90 days

  • PostGIS on Aurora for scalable geo queries at volume
  • AWS Rekognition + manual review for ID verification
  • Trust & safety — reports, blocks, host ratings
  • Mobile PWA or native wrapper for on-the-go discovery

Purpose is built to grow: connection first, monetization second, trust always.

Built With

  • and-tailwind-css-4
  • aurora
  • carto/openstreetmap
  • leaflet.js
  • merma
  • next.js-16
  • nextjs
  • postgresql
  • prisma
  • prototyped-in-v0-and-deployed-on-vercel.-all-persistent-data-lives-in-amazon-aurora-postgresql-(serverless-v2
  • react-19
  • v0
  • vercel
Share this project:

Updates

Submission history