This project is under active development and is NOT production-ready. Signatures collected through this platform are not legally binding. Do not use this software for real contracts, legal agreements, or any scenario requiring enforceable electronic signatures.
An e-signature SaaS platform built with Next.js, Supabase, and Stripe. Upload PDFs, send signing links, and collect electronic signatures with audit trails.
- Node.js 20+
- npm
- Stripe CLI (for webhook testing)
- Docker (required for local Supabase)
# Clone and run the setup script
./setup.shThe setup script will:
- Install dependencies
- Create your
.env.localfrom the template - Prompt you to fill in required values
- Start the dev server
# Install dependencies
npm install
# Copy env template
cp env.template apps/web/.env.local
# Fill in your keys (Supabase, Stripe, Upstash)
# Start local Supabase (requires Docker)
npx supabase start
# Start dev server
npm run devcp env.template .env
# Fill in values in .env
docker compose up --buildOpen http://localhost:3000.
| Command | Description |
|---|---|
npm run dev |
Start dev server (all workspaces) |
npm run build |
Production build |
npm run lint |
ESLint |
npm run typecheck |
TypeScript check |
npm run test |
Jest tests |
npm run format |
Prettier format |
npm run local:stripe |
Forward Stripe webhooks locally |
SimplySigned/
├── apps/web/ # Next.js app
├── packages/
│ ├── shared/ # Shared types (@ssigned/shared)
│ └── ssigned/ # SDK component (not published)
├── supabase/ # Migrations, edge functions
├── docs/ # Design docs
└── turbo.json # Turborepo config
- Next.js 16 with App Router and React 19
- Supabase for auth, database, storage, and realtime
- Stripe for billing and checkout
- Turborepo monorepo with npm workspaces
- shadcn/ui + Tailwind CSS 4
- Zustand for client state
- Jest + Playwright for testing
Copy env.template to get started. Required services:
| Variable | Service | Purpose |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Supabase | API endpoint |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY |
Supabase | Client-side auth |
SUPABASE_SERVICE_ROLE_KEY |
Supabase | Server-side operations |
STRIPE_SECRET_KEY |
Stripe | Payment processing |
STRIPE_WEBHOOK_SECRET |
Stripe | Webhook verification |
STRIPE_PRICE_API_USAGE |
Stripe | Metered billing price ID |
STRIPE_METER_EVENT_NAME |
Stripe | Metered billing event name |
UPSTASH_REDIS_REST_URL |
Upstash | Rate limiting |
UPSTASH_REDIS_REST_TOKEN |
Upstash | Rate limiting |
WEBHOOK_ENCRYPTION_KEY |
Local | Webhook secret encryption |
Generate the encryption key:
openssl rand -base64 32Development only. Not production-ready. Not legally binding.
Core features implemented:
- Document upload, send, and signing flow
- Multi-signer support with per-signer tracking
- Stripe billing (free/starter/pro plans)
- Developer API with bearer token auth
- Webhook delivery with HMAC-SHA256 signing
- Realtime dashboard updates
See CLAUDE.md for detailed architecture and route documentation.
Private. All rights reserved.