Modern Next.js portfolio for Isaiah Francois plus a private admin job-ops CRM with approval-only outreach workflows.
- Next.js App Router + TypeScript
- Tailwind CSS + shadcn-style UI primitives
- Framer Motion
- Supabase Auth
- Supabase Postgres + Prisma ORM
- TanStack Query + Jotai (admin state/data)
- Resend (contact + approved outreach send)
- Playwright smoke tests
- Routes:
/,/projects,/experience,/about,/resume,/contact - Recruiter-first sections and FinanceFlow emphasis
- Contact form with Zod validation, Turnstile verification, and in-memory rate limit
- SEO metadata, OpenGraph image route, sitemap, and robots
- Routes:
/admin,/admin/leads,/admin/templates,/admin/drafts,/admin/settings - Supabase login + allowlist enforcement via
ADMIN_ALLOWLIST_EMAILS - Leads CRUD + CSV import/export
- Templates CRUD with variable helper and live preview
- Draft generation flow: lead + template + optional highlight notes
- Approval-only sending:
QUEUED -> APPROVED -> SENT - Send throttles: max daily cap + per-minute cap
- Audit logs for generate, approve, and send
Copy .env.example to .env.local and configure:
NEXT_PUBLIC_SITE_URLNEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYDATABASE_URLRESEND_API_KEYADMIN_ALLOWLIST_EMAILSADMIN_MAX_SENDS_PER_DAYTURNSTILE_SITE_KEYTURNSTILE_SECRET_KEYOPENAI_API_KEY(optional)CALENDLY_API_TOKEN(optional, enables live scheduling)CALENDLY_EVENT_TYPE_URI(optional, enables live scheduling)CALENDLY_EVENT_LABEL(optional)NEXT_PUBLIC_CALENDLY_TIMEZONE(recommended, defaults toAmerica/New_York)
- Install dependencies:
pnpm install- Configure env:
cp .env.example .env.local- Generate Prisma client:
pnpm prisma:generate- Run migrations against your configured database:
pnpm prisma:migrate:dev- Start the app:
pnpm dev- Create a Supabase project.
- Add URL + anon key to
.env.local. - Create admin users in Supabase Auth.
- Set
ADMIN_ALLOWLIST_EMAILSto the exact admin emails. - Ensure email/password sign-in is enabled for admin login flow.
- Prisma schema:
prisma/schema.prisma - Migration files:
prisma/migrations/* - Deploy migrations in CI/CD with:
pnpm prisma:migrateRun quality checks:
pnpm lint
pnpm typecheck
pnpm buildRun Playwright smoke tests:
pnpm test:e2eGitHub Actions workflow (.github/workflows/ci.yml) runs on push/PR to main:
- Install dependencies
- Lint
- Typecheck
- Unit test step (auto-skips when no unit test script exists)
- Build
- Playwright smoke tests (Chromium)
- Configure all required env vars in your hosting provider.
- Set production Supabase and Postgres values.
- Apply Prisma migrations during deploy.
- Configure Turnstile site/secret keys for production spam protection.
- Configure Resend API key and verified sender domain for production outreach.