Skip to content

Colophon

How this site is built

This site is the work sample. If you are deciding whether to hire me, the reasoning below is more useful than any claim I could make about it — including the parts that are still wrong.

Framework

Next.js 16.3, App Router

Server Components mean database content arrives as HTML rather than as a client-side fetch, which is what makes the site readable by crawlers and answer engines without executing JavaScript.

Rendering

Cache Components

Every page is prerendered to a static shell and revalidated by tag. A page view is not a database round trip, and a database incident cannot take the marketing site down. Publishing through the CMS invalidates a tag instead of triggering a redeploy.

Database

PostgreSQL on Neon, Drizzle ORM

Reads go over Neon’s stateless HTTP driver — the WebSocket pool opened one socket per build worker and Neon dropped them mid-build, which failed roughly one deploy in three. A WebSocket handle is kept for the transactional work that commerce will need.

Styling

Tailwind CSS v4, OKLCH tokens

Colours in OKLCH so light and dark stay perceptually matched, and so accent lightness can be tuned for contrast independently of hue. Amber is reserved for measured numbers and never used for an action, so data is never confusable with a button.

Type

Bricolage Grotesque, Inter Tight, JetBrains Mono

Self-hosted, so there is no third-party font request on the critical path. Monospace is a primary voice rather than a code font — it is what makes the site read as instrumentation instead of saying so.

Motion

CSS scroll-driven animations

Reveals cost no IntersectionObserver, no hydration and no main-thread budget. Where unsupported, elements render in their finished state; under prefers-reduced-motion, everything stops.

Architecture

Feature-based modules

Each domain owns its components, queries, actions and schemas, and exposes only a server and a client barrel. Cross-feature imports fail lint rather than review, so the boundary holds without anyone having to remember it.

Hosting

Hostinger Business, Node.js app

Deployed from GitHub on push. The same platform that runs the client systems in the case studies, which means the operational knowledge is shared rather than duplicated.

Known issues

What is still wrong

Published deliberately. Anyone can list what went well.

The Content-Security-Policy does not reach the browser

The app sets a full policy, but Hostinger’s CDN replaces it at the edge with its own `upgrade-insecure-requests`. Re-applying it from middleware made no difference, so the middleware was removed rather than left running for nothing. Every other security header passes through. Open with Hostinger support, and it must be resolved before the admin CMS ships.

No testimonials

The previous portfolio carried three, but none had a verifiable source and one referenced a payment integration that a Bangladesh-based merchant cannot have had. They were removed rather than migrated. Every other claim on this site can now be checked — the case studies show the work itself, and the 68% bundle reduction is reproducible by rebuilding that client. This is the one thing left that only a client can give.

Want this level of care on yours?

Every decision above was made for a stated reason, and every one is reversible. That is what I bring to a client project too.