Skip to content

shaowuz/ipaid-for-us

Repository files navigation

iPaid for Us

One link for rent splits, shared expenses, and group confirmations.

iPaid generates a short confirmation link. Friends tap when they have paid you back or finished their part, and you get an email when everyone is done.

Live site: ipaidforus.com

Screenshots

Create a link Friends pick themselves
Create a rent split link with iPaid Roommates pick themselves from a shared iPaid link
Private confirmation Owner gets the status
Private iPaid confirmation page iPaid owner dashboard after link creation

What It Does

  • Create a shared bill without login.
  • Add participants and custom amounts.
  • Generate one short share link for the group.
  • Let each participant open only their own private confirmation page.
  • Track paid / unpaid status on the owner dashboard.
  • Send one-time email nudges to unpaid participants if you collected their emails.
  • Email the owner a live panel link when a bill is created.
  • Send an optional completion email to the bill owner when the bill clears.
  • Let participants opt in to their own recurring email reminders.
  • Generate calendar reminders without requiring an account.
  • Track anonymous site visits and product events on a private traffic dashboard.
  • Use the same flow for non-payment check-ins where everyone just needs to tap once.

Use Cases

  • Rent split and roommate bills.
  • Rent reminders and roommate utility bills.
  • Utilities, Wi-Fi, dinner, travel, and shared expenses.
  • Who-paid tracking for group payments.
  • Student house or club dues.
  • Simple task confirmation where every person needs to tap once.
  • Lightweight group check-ins with a completion email.

Privacy Boundaries

iPaid is intentionally small:

  • It does not process payments.
  • It does not store bank accounts, card numbers, SSNs, or payment passwords.
  • It stores owner and participant tokens as hashes.
  • Owner dashboard links and participant confirmation links are separate access boundaries.
  • Participants can only subscribe themselves to reminders.
  • Reminder emails include unsubscribe links.

Tech Stack

  • Next.js App Router
  • TypeScript
  • Tailwind CSS
  • Prisma
  • Postgres-compatible database
  • Resend for email delivery
  • Vercel-friendly deployment

Local Setup

Install dependencies:

npm install

Create an environment file:

cp .env.example .env

Set DATABASE_URL in .env. You can use a local Postgres database, Supabase, Neon, or Prisma's local dev database.

For Prisma's local dev database:

npx prisma dev -d --name ipaid-for-us

Then apply the schema:

npm run db:push

Run the app:

npm run dev

Open:

http://localhost:3000

Useful Commands

npm run prisma:validate
npm run lint
npm run build

Environment Variables

DATABASE_URL
APP_SECRET
NEXT_PUBLIC_APP_URL
APP_ALLOWED_HOSTS
APP_TIME_ZONE
RESEND_API_KEY
FRIEND_REMINDER_EMAIL_FROM
REMINDER_EMAIL_FROM
COMPLETION_EMAIL_FROM
CRON_SECRET
TRAFFIC_DASHBOARD_TOKEN

RESEND_API_KEY is optional in local development. Without it, nudge, reminder, and completion emails are recorded as skipped instead of crashing the app.

FRIEND_REMINDER_EMAIL_FROM is optional. If it is not set, iPaid falls back to the reminder or completion sender.

APP_SECRET must be a long random string. It is used for token hashing and sealing.

APP_ALLOWED_HOSTS is a comma-separated allowlist used when the app builds share links from the current request domain. Include local hosts, your Vercel domain, and any production custom domains.

CRON_SECRET protects:

/api/cron/monthly-reminders

TRAFFIC_DASHBOARD_TOKEN protects:

/traffic?token=...

The traffic dashboard counts anonymous public-page visits, top pages, traffic sources, share-link opens, bill creation, paid taps, and nudge emails. It does not display participant emails or private tokens.

Production email should use a verified sender domain in Resend.

Deployment

The app is designed to deploy on Vercel with a Postgres-compatible production database.

For production, configure the environment variables above in Vercel. The build command runs Prisma migrations for non-local databases before building the Next.js app.

Security

Please report security and privacy issues privately. See SECURITY.md.

License

MIT. See LICENSE.

About

iPaid lets you create one link for shared bills. Friends pick their name, confirm when they pay, and you get an email when everyone is done.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages