JustEdi Platform
A multi-brand personal platform built from scratch: five sub-brands behind feature flags, a custom admin CMS, Paystack-powered digital product sales, and transactional email, all on Next.js and Supabase.
Overview
JustEdi is the platform this portfolio site itself runs on: a personal brand hub built with Next.js and Supabase, hosting five sub-brands (EdiCodes, EdiCourses, EdiCooks, EdiFinds, EdiTalks) behind independent feature flags, with a fully custom admin CMS and e-commerce flow behind it.
Architecture
- Next.js App Router with route groups separating the public site from an authenticated
/adminarea, deployed on Vercel. - Supabase for Postgres, auth, and file storage: a server-only admin client bypasses RLS for privileged CMS operations, kept strictly separate from the public anon client.
- Brand feature flags: each sub-brand (
NEXT_PUBLIC_BRAND_*_ENABLED) can be toggled independently, so a brand can be built and staged without being live, then switched on with a one-line env change instead of a deploy.
Admin CMS
A custom-built content system, not a page builder: dedicated editors for blog posts, recipes, portfolio projects, and digital products, a shared media library with upload and copy-to-clipboard, and a reusable DataTable / FilterBar / ActionMenu component library so every list view (orders, subscribers, downloads, products) behaves consistently.
Digital Product Sales
EdiCourses sells digital products through a real payment flow, not a placeholder:
- Paystack checkout integration with server-side verification on callback.
- Idempotent order fulfillment: safe to re-run even if a webhook and the redirect callback both fire for the same transaction.
- Signed, expiring download links: short-lived signed URLs with a capped download count, rather than permanent public file links.
Transactional email via Resend: welcome emails on newsletter signup, contact form delivery, and purchase download links, all from branded templates.
Testing & CI
Playwright end-to-end tests cover the public-facing forms (contact, newsletter), running in GitHub Actions on every push.
Why It Matters
This isn't a demo, it's the live infrastructure behind the site you're looking at right now: real payments, real content, real users.