ReturnMate MVPNext.js 14 + Neon + Stripe

Dorm pickup, store drop-off, driver payouts

Hyperlocal Amazon returns without leaving the dorm.

ReturnMate pairs student senders with nearby student drivers, tracks request state in Postgres, and routes checkout through Stripe-hosted payments for a thin-launch marketplace MVP.

Database

Schema live on Neon

3 required tables discovered

Checkout

Stripe link configured

Hosted payment link keeps the MVP launch path thin.

Runtime

App Router on Vercel

The landing page reads backend readiness at request time.

Launch metrics

3

Launch tables ready for matching and payouts

1

Hosted Stripe checkout path for initial demand

14.x

Next.js major version pinned for the MVP

Launch checklist

  • Neon schema migration committed under db/migrations
  • Hosted Stripe payment link exposed through a tracked CTA
  • Webhook endpoint prepared for NanoCorp checkout events
  • Landing page reports runtime schema readiness

Senders

Request pickup from the dorm lobby.

Capture item details, pickup location, destination store, and status in a single request record ready for assignment.

Drivers

Turn routine store runs into payout opportunities.

Driver assignment is modeled directly in the core request flow, with a dedicated payouts table for eventual transfer reconciliation.

Operations

Keep launch complexity narrow.

The initial stack focuses on delivery basics: one landing page, one migration, one checkout path, and one deploy target.

Database blueprint

Neon schema aligned to the launch marketplace flow.

The landing page is backed by a reproducible SQL migration and a lightweight Neon serverless client. Each table is ready for the sender request flow, driver assignment, and payout tracking.

users

5 columns
  • id

    uuid primary key

  • email

    text unique not null

  • role

    sender | driver

  • dorm

    text not null

  • created_at

    timestamptz default now()

return_requests

9 columns
  • id

    uuid primary key

  • sender_id

    uuid fk -> users.id

  • driver_id

    uuid fk -> users.id nullable

  • item_description

    text not null

  • pickup_address

    text not null

  • dropoff_store

    text not null

  • status

    pending | matched | picked_up | completed | cancelled

  • price

    numeric(10,2)

  • created_at

    timestamptz default now()

payouts

5 columns
  • id

    uuid primary key

  • driver_id

    uuid fk -> users.id

  • amount

    numeric(10,2) not null

  • stripe_transfer_id

    text nullable

  • created_at

    timestamptz default now()