← Back to Portfolio
Shift — Volunteer Marketplace (WACODE 2026 Hackathon)
Shift is a two-sided volunteer marketplace — 'the DoorDash for volunteering' — that connects nonprofits with student volunteers who need flexible, nearby ways to give back. Nonprofits publish shifts with time, location, and capacity; students browse a personalized feed ranked for their schedule and proximity, claim slots in two taps, and join a smart waitlist that auto-promotes the next person (with a 30-minute confirmation window) when someone drops. Built in 24 hours for WACODE 2026 at Baylor University by a team of two — Ayokunmi Sodamola (PM & co-builder) and Kolade Abobarin (co-builder) — where it placed 4th.
View Live Project ↗Challenges
- Scoping a real two-sided marketplace (nonprofit admin flows + student claim flows + email + cron + auth) tight enough to actually ship end-to-end in a 24-hour window
- Avoiding the 'fake auth' shortcut — we wanted real magic-link authentication with hashed tokens and HTTP-only session cookies, not a mocked login for the demo
- Handling waitlist race conditions atomically — when a slot opens, two students could hit the promotion endpoint simultaneously and double-book the spot
- Working around Vercel Hobby's lack of scheduled cron — the waitlist expiry and 2-hour reminder jobs couldn't run on a timer on free tier, but needed to exist for the product to work
- Serving two very different audiences (students on phones claiming shifts; nonprofit admins on laptops publishing and tracking attendance) from one codebase without fragmenting into two apps
- Producing a compelling 60-second demo video for judging in the final hour without any traditional video tooling or editing experience
Solutions
- Built on Next.js 16 App Router with React Server Components and Tailwind v4, giving us a single design system across student and admin UIs and fast shipping velocity
- Used postgres.js tagged-template SQL against Neon Postgres, wrapping claim and waitlist operations in sql.begin() transactions to atomically serialize state changes and prevent double-booking
- Built real magic-link auth: token hashing at rest, HTTP-only session cookies, and a proxy.ts request-level middleware gating /student and /admin routes — no client-stored JWTs, no mocked sessions
- Integrated Resend for transactional email (claim confirmations, waitlist promotions, 2-hour reminders) with an email_log table for idempotency so retries never double-send
- Stubbed the scheduled cron job in vercel.json with a documented upgrade path to Vercel Pro (/api/cron/run every 5 minutes); kept it manually invokable via curl with a bearer secret so judges could trigger waitlist expiry live
- Designed a single codebase with cleanly separated /student/* and /admin/* route trees sharing the auth and DB layers — one deployment, two experiences
- Generated the entire promo video in Remotion + Claude Code in under 60 minutes — React-coded animations with Claude iterating the slide copy and styling in a tight feedback loop — and published alongside the build to LinkedIn
Impact
- Placed 4th at WACODE 2026 (24-hour hackathon, Baylor University, theme: 'technology for social good')
- Shipped a production-ready two-sided marketplace — not a hackathon prototype — with real auth, transactional database, transactional email, and a documented path to scheduled cron
- Tackled a real community problem in Waco, TX: reduced friction for local nonprofits (Meals on Wheels, Mission Waco) to recruit and for students to volunteer on their actual schedules
- Released a Remotion + Claude Code demo-video workflow that resonated with the tech community on LinkedIn (31 reactions, 7 comments) — reframing creative work as a code problem
- Live and publicly usable at shiftbear-five.vercel.app; code open-sourced at github.com/Bobarinn/ShiftBear