FlipSignal is a production-minded MVP for a reseller intelligence SaaS. It helps users review curated leads, estimate real profit after fees, and move deals from sourced to sold without relying on spreadsheets.
- Public marketing pages:
/,/pricing,/login,/signup - Authenticated app shell:
/app - Lead feed with plan gating, filters, and save/skip/bought actions
- Profit calculator with modular marketplace fee presets
- Saved deals workflow with statuses and actual profit tracking
- Email alert preferences with a cron-ready alert endpoint
- Seeded data for leads, fee profiles, demo users, and sample deals
- Real subscription-aware gating for Free, Pro, and Premium plans
- Next.js 16 App Router
- TypeScript
- Tailwind CSS v4
- Prisma + PostgreSQL
- NextAuth credentials auth
- Zod + React Hook Form
- Stripe checkout scaffolding
- Resend email scaffolding
prisma/
schema.prisma
seed.ts
scripts/
verify-pass2.ts
src/
actions/
app/
(marketing)/
(dashboard)/app/
api/
components/
app/
auth/
ui/
domains/
alerts/
deals/
fees/
leads/
lib/
auth/
types/
public/
images/leads/
Vault/
FlipSignal/
Copy .env.example to .env and fill in what you need.
cp .env.example .envRequired for local app + database:
DATABASE_URLNEXTAUTH_URLNEXTAUTH_SECRET
Optional for billing:
STRIPE_SECRET_KEYSTRIPE_STARTER_PRICE_IDSTRIPE_SELLER_PRICE_IDSTRIPE_POWER_PRICE_IDSTRIPE_WEBHOOK_SECRET
Optional for alerts:
RESEND_API_KEYRESEND_FROM_EMAILALERTS_CRON_SECRET
docker run --name flipsignal-postgres \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=flipsignal \
-p 5432:5432 \
-d postgres:16Use this local URL:
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/flipsignal"Any standard Postgres provider works. Neon, Supabase, Railway, or RDS are all fine for this MVP.
pnpm install
pnpm prisma:generate
pnpm db:push
pnpm db:seed
pnpm devOpen http://localhost:3000.
If port 3000 is already in use, start the dev server on another port:
pnpm dev -- --port 3002All seeded users use the same password:
demo1234
Accounts:
demo@flipsignal.app→ Freepro@flipsignal.app→ Propremium@flipsignal.app→ Premiumadmin@flipsignal.app→ Admin + Premium access
New signups always start on Free.
pnpm dev
pnpm build
pnpm start
pnpm lint
pnpm prisma:generate
pnpm db:push
pnpm db:seed
pnpm db:studioStripe is wired as a real extension point, but not a full production billing system yet.
/pricingsubmits to/api/billing/checkout- If Stripe env vars are configured, checkout sessions can be created
- In local development, signed-in users can switch plans directly from
/pricingto test gating end to end - Subscription syncing, webhook handling, and customer portal flows are intentionally left for the next phase
Alert preferences are fully stored in the database and plan-gated.
- Cron-ready endpoint:
POST /api/alerts/run - Requires
Authorization: Bearer $ALERTS_CRON_SECRET - Uses Resend when configured
- Sends matched leads based on selected categories and ROI threshold
These checks passed during implementation:
pnpm lint
pnpm verify:pass2
pnpm buildpnpm verify:pass2 runs a database-backed sanity check for the main MVP flows:
- Free / Pro / Premium lead visibility and gating
- Calculator domain logic
- Save → buy → list → sell deal lifecycle
- Free-plan saved-deal limit
The app is ready for a standard Next.js deployment on Vercel or a Node-based host.
Recommended production setup:
- Deploy app on Vercel
- Use managed Postgres
- Store all env vars in the platform
- Add a scheduled job or cron to call
/api/alerts/run - Add Stripe webhooks before turning on live paid plans
- Full Stripe subscription lifecycle management
- Admin UI for lead ingestion and moderation
- Automated lead sourcing
- SMS/push alerts
- Advanced analytics/event tracking
- Add Stripe webhooks and sync subscription status into
Subscription - Add an admin lead entry workflow for manual curation
- Add richer deal analytics on sold inventory
- Add scheduled alert execution in deployment