How I Built RahatVerse with Next.js, Supabase and Cloudinary
RahatVerse did not start as a product idea. It started as a frustration: my work was scattered across profiles, files and chat threads, and none of it felt like a home. During my HSC studies I set out to build one website that could hold everything — my portfolio, my writing, my photos, and the web development service I run — and let me change any of it without touching code.
This post is the honest build log of that project.
## The stack, and why
The site is a Next.js 16 application on the App Router, written in TypeScript and styled with Tailwind CSS. I chose Next.js because server-side rendering matters to me: when someone — or a search crawler — opens a page, the real content must already be in the HTML, not behind a loading spinner. TypeScript keeps a growing codebase honest, and Tailwind keeps the design system consistent.
The backend is Supabase: PostgreSQL for data and authentication for the admin area. Images live on Cloudinary, whose automatic format and quality optimization keeps a heavy photo gallery fast even on a slow village connection.
Everything is bilingual — Bengali and English — handled with next-intl. Not just the paragraphs: routes, metadata, Open Graph tags and structured data all carry both locales, with canonical URLs and hreflang marking the two versions as the same page.
## The admin CMS behind it
Almost everything you see is controlled from a private admin dashboard: the hero, the about page, the experience timeline, the gallery, services and pricing, portfolio projects, the FAQ, legal pages, and the blog itself. Every section is validated against a schema on the server and in the API, so a malformed config can never break the public site — it simply falls back to safe defaults.
There are a few extras I rely on daily: a live order wizard that computes package pricing, an analytics view built on my own event tracking, a newsletter system, and Nuva — the AI assistant in the corner that answers questions about me and my work.
## Decisions that paid off
Three choices mattered most. First, SSR everywhere it counts: portfolio, experience and blog content render on the server, so pages are crawlable and quick. Second, one source of truth: every public page reads the same validated config that the admin panel writes. Third, honest structured data — a single Person entity and a single WebSite entity in JSON-LD, referenced by ID everywhere, so nothing contradicts itself.
## What I learned
Building a system while studying for exams teaches brutal prioritization: ship the smallest useful version of each feature, then improve it in passes. I also learned that content is harder than code — writing real descriptions of real projects in two languages takes longer than wiring a database.
RahatVerse is a living project. See how it fits together in the portfolio case studies, try the order wizard that powers my service work, or browse the code on GitHub. If you spot a bug, tell me — that is how it gets better.
Rahat Ahmed is a student, teacher and web developer from Sunamganj, Bangladesh, and the creator of RahatVerse.