Small donations that add up. Change connects a user's bank account, rounds up everyday purchases, and allocates the spare change toward charitable goals the user sets.
Most people want to give back, but regular donations are easy to forget and hard to budget. Small, automatic contributions make it effortless to support causes consistently.
Change turns everyday spending into impact:
- Link a bank account via Plaid.
- Pick charities and set goals.
- Automatically round up eligible purchases and allocate the change.
- Celebrate when a goal is completed.
- Onboarding flow for charity selection and goal setting.
- Donation modes: priority (fill goals in order) or random (spread impact).
- Charity discovery with filters and curated lists.
- Transaction roundup tracking and donation batching.
- Goal completion emails.
- Frontend: Next.js App Router UI for onboarding, dashboard, and settings.
- Backend: Next.js Route Handlers for API endpoints and webhooks.
- Database: Supabase Postgres for users, charities, goals, transactions, and donations.
- Integrations:
- Plaid for bank account linking and transaction syncing.
- GlobalGiving for featured charity data.
- SMTP (Nodemailer) for email notifications.
- User links their bank account via Plaid Link.
- Plaid transactions are synced and stored in Supabase.
- Each transaction is rounded up and allocated based on the user's donation mode.
- When a charity goal is completed, an email is sent.
- Donations can be batched once thresholds are met.
lib/plaid/*: Plaid client and sync utilities.lib/donations/*: Round-up calculation, allocation, and batching.lib/charities/data.ts: Curated and local charities.lib/email/sendDonationEmail.ts: Goal completion emails.
app/api/plaid/create-link-token/route.ts: Plaid Link init.app/api/plaid/exchange-token/route.ts: Exchange public token.app/api/plaid/webhook/route.ts: Plaid webhooks.app/api/charities/route.ts: Charity feed (curated + GlobalGiving).
- Next.js 16 (App Router)
- React 19
- Supabase (Auth + Postgres)
- Plaid
- GlobalGiving API
- Tailwind CSS
- Nodemailer
npm install
npm run devSet these in .env:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYPLAID_CLIENT_IDPLAID_SECRETPLAID_ENVPLAID_WEBHOOK_URLGLOBALGIVING_API_KEYSMTP_HOSTSMTP_PORTSMTP_USERSMTP_PASSSMTP_FROMSMTP_SECURE
- This repo contains both product UX and the full transaction-to-donation pipeline.