Lightweight operations platform for small local businesses.
Hotels, restaurants, artisans, salons β stop managing on WhatsApp and Excel.
OpFlow is a lightweight operations platform built for small local businesses. It replaces the chaos of WhatsApp groups and Excel spreadsheets with a real, purpose-built tool β without the complexity (or price) of enterprise software.
Small businesses manage everything on WhatsApp groups and Excel sheets. Bookings in one place, contacts in another, follow-ups nowhere. Enterprise tools like Salesforce and HubSpot are overkill β too complex, too expensive, too much.
OpFlow gives them exactly what they need: bookings, contacts, follow-ups, messaging, and billing β in one clean dashboard. Nothing more, nothing less.
- Built for small teams: Not enterprise bloat. A salon with 5 employees doesn't need Salesforce.
- WhatsApp-native thinking: Designed around how small businesses actually communicate β quick replies, tags, follow-ups.
- 3-step onboarding: Business info β Plan β WhatsApp. Done. No 45-minute setup wizard.
- Real billing: Stripe Checkout + Customer Portal. Not a pricing page that leads to "Contact Sales."
- Admin panel included: MRR dashboard, user management, and business insights out of the box.
- Free to start: Generous free tier so you can actually try it before paying.
| Feature | What It Does |
|---|---|
| Auth | Email/password + Google OAuth via Supabase |
| Onboarding | 3-step setup wizard (business info β plan β WhatsApp) |
| Dashboard | Stats, quick actions, activity feed |
| Contacts CRM | Search, filter by tags, CSV import |
| Bookings | Calendar view, list view, status management |
| Follow-ups | Task management with priorities and due dates |
| Messaging Inbox | Simulated inbox with quick-reply templates |
| Billing | Stripe Checkout + Customer Portal |
| Admin Panel | MRR dashboard, user management |
opflow/
βββ app/
β βββ (auth)/ # Auth pages (login, register)
β βββ (dashboard)/ # Main app dashboard
β βββ admin/ # Admin panel (MRR, users)
β βββ api/ # API routes
β β βββ bookings/ # CRUD + calendar
β β βββ contacts/ # CRM endpoints
β β βββ followups/ # Task management
β β βββ messages/ # Inbox API
β β βββ stripe/ # Billing webhooks
β β βββ webhooks/ # External integrations
β βββ auth/ # Auth callback handlers
β βββ onboarding/ # Setup wizard
βββ components/ # UI components (shadcn/ui)
βββ hooks/ # React hooks
βββ lib/ # Utilities, Supabase client, Stripe
βββ supabase/ # DB migrations & policies
βββ types/ # TypeScript type definitions
βββ tests/ # Vitest + Playwright
| Layer | Technology |
|---|---|
| Frontend | Next.js 14 (App Router), TypeScript, Tailwind CSS |
| UI Components | shadcn/ui |
| Backend | Next.js API routes + Supabase (Postgres + Auth + Realtime) |
| Database | Supabase Postgres with Row Level Security |
| Payments | Stripe (subscriptions via Checkout + Customer Portal) |
| Resend | |
| Testing | Vitest (unit) + Playwright (e2e) |
| Deployment | Vercel |
| Plan | Price | For |
|---|---|---|
| Free | β¬0 | Trying it out |
| Pro | β¬29/mo | Small teams |
| Business | β¬79/mo | Growing businesses |
cd opflow
npm install
cp .env.example .env.local
# Fill in your Supabase, Stripe, and Resend credentials
npm run dev# Supabase
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
# Stripe
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
# Email
RESEND_API_KEY=re_...# Apply Supabase migrations
cd supabase
supabase db push# Run dev server
npm run dev
# Run unit tests
npm run test
# Run e2e tests
npx playwright test
# Build for production
npm run buildOpFlow deploys to Vercel with zero config:
vercel --prodMake sure to set all environment variables in your Vercel dashboard and configure your Stripe webhook endpoint to https://your-domain.com/api/stripe/webhooks.
Contributions are what make the open-source community such an amazing place!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.
Made with β€οΈ and π by Amine Harch el Korane