Inspiration

Buying and selling used stuff locally is a mess. You post something, get "is this still available?" from six people, and half of them vanish. If someone shows up, you're meeting a stranger and hoping they brought the money. Most marketplaces focus on the listing, but the risky part is the handoff, so we built around that.

What it does

Licks is a peer-to-peer marketplace for listings, reservations, and verified in-person meetups.

Landing page and listing browser: anyone can browse, and signing in lets you reserve. Listing studio: sellers create and manage listings in one place. Meetup workspace: once an item is reserved, the buyer and seller share one screen that stays in sync across both devices. Verified handoff: the purchase only settles after the meetup is confirmed.

Payments in the demo use clearly labeled simulated wallet credits. No real money moves, and real Stripe requests are disabled.

How we built it

Licks is a Next.js 14 app on Supabase. We used Supabase Auth with cookie sessions, Postgres for data, and Realtime for live updates. The responsive frontend calls our authenticated marketplace API directly, and active transactions are polled so both devices stay in sync.

Purchases run through atomic Supabase RPCs, so the reservation, wallet debit, and status change either all happen or none do. Setup, API contracts, demo accounts, and migrations are documented in BACKEND_INTEGRATION.md.

Challenges we ran into

Syncing two devices. Getting both phones to agree on a transaction's state took more tuning than expected, and polling became our reliable fallback. Race conditions. If two buyers reserve at the same moment, one has to lose cleanly. Atomic Postgres RPCs fixed this. Cookie-session auth in Next.js 14. Making sessions work across server components, client components, and API routes was fiddly. Payments at a hackathon. We built a clearly labeled simulated wallet instead of faking a real payment flow. Accomplishments that we're proud of A complete flow that works end to end: list, reserve, meet up, settle. A meetup screen that updates live across two real devices. Atomic settlement logic that holds up beyond the demo. Docs someone else can actually follow, demo accounts included.

What we learned

Supabase RPCs are great when multiple writes must succeed or fail together. Realtime is useful, but a polling fallback saved us when it got flaky. Designing around the meetup, not just the listing, changed how we thought about the product.

What's next for Licks

Real payments through Stripe once the flow is hardened. Identity verification so both sides can trust who they're meeting. Ratings and reputation for buyers and sellers. In-app chat, safe meetup spot suggestions, and push notifications. A pilot in one real neighborhood or city.

Built With

Share this project:

Updates

Submission history