Client Project
Chosen Fintech: Marketing Website & Admin CMS
Marketing website and content-management platform for a Ghana-based fintech: a financial-literacy Academy, blog, events, projects, a crypto/fiat donate page, and a full admin CMS in one Next.js app.

Overview
Chosen Fintech is the official website and content platform for Chosen Fintech Solutions, a fintech focused on financial inclusion and digital empowerment across Ghana and Africa. I built it as a single, self-contained Next.js 16 / React 19 application: the public marketing site, a financial-literacy Academy, a blog, an events and projects showcase, a donate page, and a complete admin CMS all live in one codebase, backed by its own PostgreSQL database and App Router route handlers - no separate backend service to run or deploy.
The Problem
The organisation needed a credible public presence and, more importantly, the ability to keep it current without a developer in the loop. It had to publish financial-education content and articles, list events and projects, accept enquiries and contributions, and let non-technical staff manage all of it safely. A traditional split of a separate backend plus a static site would have meant more infrastructure to run and pay for than a small team needed, while an off-the-shelf CMS wouldn't cover the bespoke Academy, events, and donation flows.
The Solution
I built everything as one deployable Next.js app. Public pages are Server Components with per-page SEO metadata, Open Graph images, and canonical URLs; the backend is exposed through App Router route handlers under /api, protected by middleware-based authentication and role checks. Content resources (posts, Academy guides, events, projects, gallery, team) share a consistent CRUD pattern with published-only public reads and publish/feature toggles, all editable from a /dashboard back-office with rich-text authoring (TinyMCE) and live preview. Security is handled without a heavy auth service: stateless sessions signed with jose and stored in cookies, role-based access control on dashboard routes, email-based two-factor authentication with short-lived one-time codes, single-use expiring tokens for password reset, bcrypt-hashed passwords, and per-IP rate limiting on sensitive endpoints via Upstash Redis. Media is stored on Cloudinary, transactional and contact-form email goes out over SMTP with a honeypot and rate limit guarding the public form, and the donate page accepts crypto or fiat contributions.
Outcome
Chosen Fintech runs its entire online presence from one Next.js deployment on Vercel, with no separate backend to maintain. Staff publish Academy guides, blog posts, events, and projects, manage the team and gallery, and handle enquiries entirely from the dashboard. Folding the API into App Router route handlers kept the whole platform to a single codebase and deploy, which is a good fit for a small team, and the build pipeline runs database migrations before each deploy so the schema and site stay in sync. Auth, 2FA, and rate limiting are built in rather than bolted on, so the admin area is protected out of the box.