Deeve Technologies
Client workWeb Application

Deeve Technologies Portfolio, Next.js Rebuild

This site: my portfolio rebuilt from a custom WordPress theme onto Next.js 16, React 19 and Supabase, with in-page Cal.com booking, a Brevo contact form and CSS-only motion.

ClientDeeve Technologies
RoleFull-stack developer
Year2026
TypeWeb Application
The deeve.info home page: the headline, the stats row and the profile card for Dinnes D.
The book a call page on deeve.info, with its own Cal.com calendar, time zone picker and 30 or 45 minute choice
The contact page on deeve.info, with the send a message form and its reply time, location and hours
Overview

The site you are reading: my portfolio rebuilt from WordPress onto Next.js 16, React 19 and Supabase, and deployed on Vercel.

It replaces my own custom WordPress theme, which stays online at old.deeve.info for reference.

Built with
Next.jsReactSEOSupabaseTailwind CSSTypeScriptVercel
The problem

What was in the way

My previous portfolio was a custom WordPress theme I had outgrown. Every change meant PHP templates, a plugin to update and a database to back up, and the booking, contact and tool pages each worked a different way.

A portfolio that sells development work has to be the best example of it. Mine had become slower to change than the client sites it described.

Moving 38 case studies, eleven services and two research papers across also had to keep every old URL working, so nothing already ranking in Google would break on launch day.

What I built

Eight parts, each with a reason

Content in Supabase, rendered ahead of time

Every project, service, paper and product lives in Supabase under row level security, read with the public key only. Pages are generated at build time, so a visitor never waits on a database query.

Booking on the page, not a redirect

The book a call page draws its own calendar from the Cal.com API: grouped times, a 30 or 45 minute choice and the visitor's own time zone. A server action makes the booking, so nobody is sent off to another site.

No email address anywhere

Contact runs through the form and the calendar only. A test fails the build if an email address or a mailto link appears in any page, component, feed or piece of structured data.

Built for search and AI assistants

A generated sitemap with real update dates, robots rules held shut until launch day, JSON-LD for each page type, and an llms.txt built from the same content, so AI assistants get a clean map of the site.

Motion in CSS only

Hover lifts, scroll entrances, a reading progress ring on back to top and the pulsing Let's talk button are all CSS, with no animation library. Visitors who ask for reduced motion keep the fades and lose the movement.

A contact form that reaches the inbox

Messages go through the Brevo HTTP API rather than SMTP, in a branded email template. Cloudflare Turnstile filters bots, every field is validated on the server, and typed values survive an error instead of being wiped.

Old links still land

Every URL from the WordPress site is kept or redirected from one redirect table, retired blog posts and paginated archives included, so existing search rankings carry over to the new build.

A live GitHub graph and a shop

The about page reads my public GitHub contribution calendar on the server, cached for a day. The shop lists products on sale in US dollars beside the ones still in development.

How it was built

The engineering underneath

Next.js 16React 19 and TypeScript on the App Router, styled with Tailwind CSS v4 design tokens
SupabaseEvery project, service and paper read under row level security with the public key only
VercelDeployed from GitHub on every push, after lint, types and tests pass in CI

Next.js 16 on the App Router with React 19 and TypeScript in strict mode, styled with Tailwind CSS v4. Every colour, radius, shadow and type step is a design token in one stylesheet, and components take tokens rather than raw values.

Pages are server components by default; only the calendar, the form and a few toggles run in the browser. The Content Security Policy allows the site itself and Cloudflare Turnstile and nothing else, because Supabase, Cal.com, Brevo and GitHub are all called from the server.

Database changes are versioned migrations, dry run before every push. A Vitest suite pins the design rules as well as the logic: section spacing, heading sizes, select arrows, the no-email rule and the motion kit. GitHub Actions runs lint, formatting, types and tests on every push.

Next.jsReactSEOSupabaseTailwind CSSTypeScriptVercel
More work

Projects like this

All projects
Why it matters for your project

I build software, and I measure whether it works.

The same questions I research are the ones I ask on client builds: is it reliable, is it fast, is it easy to use, and is it secure. Those four drove satisfaction in my ICT portal study, and they shape how I scope and test every project.