# Pledge Now, Pay Later > Convert "I'll donate later" into tracked pledges with automatic payment follow-up. Free forever for UK charities. ## Features - **15-Second Pledge Flow**: Mobile-first, 3-screen donor experience - **QR Code Attribution**: Every pledge tied to event + volunteer/table - **Pay by Bank Transfer**: Zero fees — unique reference for matching - **Direct Debit**: GoCardless integration for automatic collection - **Automated Reminders**: 4-step follow-up sequence (export/webhook) - **Bank Statement Reconciliation**: Upload CSV, auto-match payments - **CRM Export**: Full attribution data ready for import - **Pipeline Dashboard**: Track pledges from new → paid ## Quick Start ### Prerequisites - Node.js 18+ - Docker & Docker Compose - npm or pnpm ### Setup ```bash # 1. Clone and install cd pledge-now-pay-later npm install # 2. Start database docker compose up -d # 3. Run migrations npx prisma migrate dev --name init # 4. Seed demo data npx prisma db seed # 5. Start dev server npm run dev ``` Visit [http://localhost:3000](http://localhost:3000) ### Demo URLs - **Landing**: http://localhost:3000 - **Donor Flow**: http://localhost:3000/p/demo - **Dashboard**: http://localhost:3000/dashboard ## Tech Stack | Layer | Technology | |-------|-----------| | Frontend | Next.js 14 (App Router) | | Language | TypeScript | | Styling | Tailwind CSS + shadcn/ui | | Database | PostgreSQL 16 | | ORM | Prisma | | QR Codes | qrcode (node) | | CSV Parsing | PapaParse | | Icons | Lucide React | | Auth | NextAuth.js (ready) | ## Architecture ``` src/ ├── app/ │ ├── api/ # API routes │ │ ├── analytics/ # Event tracking │ │ ├── dashboard/ # Stats & pipeline │ │ ├── events/ # CRUD + QR management │ │ ├── exports/ # CRM pack CSV │ │ ├── imports/ # Bank statement matching │ │ ├── pledges/ # Create, update, mark paid │ │ ├── qr/ # Resolve QR tokens │ │ └── webhooks/ # Reminder event polling │ ├── dashboard/ # Staff UI │ │ ├── events/ # Event management + QR codes │ │ ├── pledges/ # Pledge pipeline │ │ ├── reconcile/ # Bank CSV import │ │ ├── exports/ # Download CRM data │ │ ├── settings/ # Org config │ │ └── apply/ # Fractional CTO upsell │ └── p/[token]/ # Donor pledge flow │ └── steps/ # Amount → Payment → Identity → Instructions ├── components/ui/ # Reusable UI components └── lib/ # Core utilities ├── prisma.ts # DB client ├── reference.ts # Bank-safe ref generator ├── qr.ts # QR code generation ├── matching.ts # Bank statement matching ├── reminders.ts # Reminder sequences ├── analytics.ts # Event tracking ├── exports.ts # CRM export formatting └── validators.ts # Zod schemas ``` ## API Reference | Endpoint | Method | Purpose | |----------|--------|---------| | `/api/qr/{token}` | GET | Resolve QR code → event info | | `/api/pledges` | POST | Create pledge | | `/api/pledges/{id}` | PATCH | Update pledge status | | `/api/pledges/{id}/mark-initiated` | POST | Donor "I've paid" | | `/api/events` | GET/POST | List & create events | | `/api/events/{id}/qr` | GET/POST | Manage QR sources | | `/api/events/{id}/qr/{qrId}/download` | GET | Download QR PNG | | `/api/dashboard` | GET | Dashboard stats | | `/api/imports/bank-statement` | POST | Upload & match CSV | | `/api/exports/crm-pack` | GET | Download CRM CSV | | `/api/webhooks` | GET | Poll pending reminders | | `/api/analytics` | POST | Track events | ## Payment Reference Format References follow format: `PREFIX-XXXX-NN` - **PREFIX**: Configurable per org (default: PNPL), max 4 chars - **XXXX**: 4-char alphanumeric (human-safe: no 0/O, 1/I/l) - **NN**: Amount in pounds (helps manual matching) - Total max 18 chars (UK BACS limit) Example: `PNPL-7K4P-50` (£50 pledge) ## Reminder Sequence | Step | Delay | Message | |------|-------|---------| | 0 | T+0 | Payment instructions with bank details | | 1 | T+2 days | Gentle nudge | | 2 | T+7 days | Impact story + urgency | | 3 | T+14 days | Final reminder + easy cancel | Reminders auto-stop when pledge is marked paid. ## License Proprietary — © Omair. All rights reserved.