Skip to main content

Latest Articles

Thoughts on development, technology, and best practices

4 min read

Sitemap stability: why lastmod should never be new Date()

A common Next.js sitemap bug: setting lastmod to the current date on every build. Google sees every page as 'updated' on every deploy, diluting your crawl priority. Here's the fix.

next.jsperformance
5 min read

Deploying Next.js to Vercel vs Fly vs Railway: real numbers from 3 client builds

I've deployed production Next.js apps on Vercel, Fly.io, and Railway. Here are the actual costs, cold start times, deployment experience, and tradeoffs from real projects — not benchmarks.

next.jsperformance
5 min read

Tailwind 4 migration from Tailwind 3: the 90-minute path

I migrated a 40-component Next.js project from Tailwind 3 to Tailwind 4 in 90 minutes. Here's the step-by-step, what broke, what the codemod missed, and the one gotcha that cost me 20 minutes.

next.jsperformance
5 min read

Dependabot for a solo dev: the grouped config I actually ship

Dependabot without configuration sends 30 PRs/week and becomes noise you ignore. Here's the grouped config that sends 2-3 PRs/week with meaningful updates — the setup I use on every client project.

securitynext.js
6 min read

Progressive enhancement in the RSC era: what still works, what doesn't

Server Components changed which progressive enhancement patterns are viable. Forms work better than ever. Client interactivity requires more thought. Here's what I've learned shipping RSC apps to real users.

next.jsux
5 min read

Cookie banners done right (and legally) — the Slovakia/EU minimum

Most cookie banners are either illegal (pre-checked boxes, no reject option) or overkill (enterprise consent platforms for a 5-page site). Here's the minimum legally compliant setup for small sites in the EU.

security
5 min read

A/B testing on a small-traffic site: when it works, when it's cargo cult

Most small sites don't have enough traffic for A/B testing to produce real results. Here's the math on when it works, what to do instead, and how to avoid fooling yourself with statistics.

uxperformance
5 min read

Image optimization in Next.js 16: what changed, what to reach for

Next.js image handling has evolved significantly. Here's the current state of next/image, when to use it, when to skip it, and the optimizations that actually move Lighthouse scores.

next.jsperformance
5 min read

OG image generation in Next.js 16 that doesn't cost you sleep

Dynamic OG images make your links look professional on Twitter and Slack. Here's the setup that works in production without edge-case surprises — and the approaches I stopped using.

next.jsperformance
5 min read

Schema.org for service businesses: the JSON-LD every portfolio should have

Most developer portfolios ship zero structured data. Here are the 4 JSON-LD blocks that help Google understand your service business — with copy-paste code for Next.js.

performancenext.js
6 min read

Postgres vs DynamoDB vs SQLite for a new SaaS: the honest default

Every new SaaS needs a database. Postgres, DynamoDB, and SQLite each have a sweet spot. Here's when to pick each one, based on projects I've actually shipped.

performance
5 min read

Server Actions in production: 4 things I won't do again

Server Actions simplify mutations in Next.js. But after shipping them on three client projects, I've collected four patterns that looked fine in development and broke in production.

next.js
5 min read

Post-launch: the 30-day stabilization plan every founder should ask for

The first 30 days after launch are when most preventable issues surface. Here's the week-by-week stabilization plan I run on every client project — and what to ask your developer for if they don't offer one.

performancesecurity
5 min read

App Router vs Pages Router in 2026: still a real question?

Next.js has had App Router for over two years. Pages Router still works. If you're starting a new project or maintaining an existing one, here's the honest state of things in 2026.

next.js
5 min read

The feature we talked a client out of building — and why they thanked us later

A client wanted real-time collaborative editing in their MVP. We said no. Six months after launch, they told us it was the best decision we made together. Here's why.

case-studypricing
4 min read

The 23-item pre-launch checklist I run before every client go-live

Every client project gets this checklist before launch. 23 items across security, performance, SEO, monitoring, and legal. Most take 5 minutes. Together they prevent 90% of post-launch fires.

performancesecurity
5 min read

Choosing a CMS for a dev-built Next.js site: Sanity, Payload, or raw MDX?

I've shipped Next.js projects with all three. Here's when each one is the right call, what breaks at scale, and why I default to raw MDX for most solo-dev sites.

next.js
5 min read

When Lighthouse CI dropped 20 points — 8 hours to find it

Performance score fell from 96 to 76 overnight. No code changes, no new dependencies. The cause was a combination of a Vercel edge function cold start and an image that wasn't lazy-loaded.

performancenext.js
5 min read

How to run a weekly demo cadence with your developer so nothing surprises you at launch

The weekly demo is the single most effective tool for keeping your MVP on track. Here's the exact format I use with every client: what to show, what to ask, and what red flags to watch for.

hiring
6 min read

GDPR for small SaaS: the 5-hour setup that's enough

You don't need a €10K legal audit to be GDPR compliant. Here's the minimum viable compliance setup I implement for every EU-facing SaaS: what to do, what to skip, and what actually matters.

security
5 min read

The vercel.json that silently broke my sitemap for a month

A single redirect rule in vercel.json caused my sitemap to return HTML instead of XML. Google stopped indexing new pages for 4 weeks. Here's how I found it and the debugging process.

performancenext.js
6 min read

Technical SEO every developer should ship by default (and which most skip)

The 12-item technical SEO checklist I run on every Next.js project. Most developers skip at least 5 of these. Each one takes under 30 minutes to implement.

performancenext.js
4 min read

Typed environment variables in Next.js without t3-env

A 40-line setup for fully typed, validated environment variables in Next.js. No external dependencies, runtime validation on startup, and IntelliSense everywhere.

next.jssecurity
6 min read

Why my Stripe test mode passed and production failed

Everything worked in Stripe test mode. Then we went live and payments silently failed. The root cause was a combination of webhook signing, idempotency keys, and a metadata field that test mode ignores.

stripesecurity
6 min read

The landing-page patterns that actually move conversion for B2B SaaS

I've built 12+ SaaS landing pages. These 7 patterns consistently lift conversion — not because they're clever, but because they reduce friction at the exact point where visitors hesitate.

uxperformance
5 min read

The Sentry setup that catches useful errors (not noise)

My production Sentry config for Next.js: filtering out hydration spam, grouping by cause, and alerting on things that actually matter. With real config examples.

performancenext.js
7 min read

QR check-in at scale: 12K+ scans/event without a crash

How I built a QR check-in system that handles 3,000-seat events with offline support, JWT-signed tickets, and sub-200ms scan times. Architecture, code, and production numbers.

performancesecurityreact-native
7 min read

next-intl vs next-i18next: the switching cost I actually paid

I migrated a production Next.js site from next-i18next to next-intl. Here's why, how long it took, what broke, and whether I'd do it again.

next.jsi18nperformance
7 min read

Why your Upwork MVP stalled (and what to do instead)

The Upwork hiring model breaks down for MVPs. Here's why it happens, the pattern behind every stalled project I've rescued, and the alternative that actually ships.

hiringpricing
9 min read

Real-time WebSocket patterns for ticketing and chat: a production playbook

Patterns from two production systems: a ticketing platform handling 12K concurrent seat selections and a team chat with presence indicators. What worked, what didn't, and the architecture behind both.

next.jsperformancecase-study
8 min read

Vercel vs Cloudflare vs self-hosted Next.js: the 2026 cost+DX table

Real costs from 3 client deployments. Where Vercel is worth it, where Cloudflare saves money, and when self-hosting makes sense. Numbers, not opinions.

next.jsperformancepricing
9 min read

What to ship in your MVP and what to cut — with 5 real examples

The hardest part of scoping an MVP isn't building it — it's deciding what not to build. Five real projects, five cut lists, and the framework I use to decide.

pricinghiring
6 min read

The bug that only shipped on iPhone SE

A checkout flow that worked on every device except a 4-inch screen. How a 44px touch target, a fixed footer, and Safari's address bar combined into a bug nobody could reproduce in the office.

performanceuxcase-study
8 min read

Supabase vs Railway vs Neon: pricing breakpoints and when each one bites

Three Postgres hosting options I've shipped on. Where each one is cheapest, where it gets expensive, and the migration cost nobody talks about.

next.jsperformancepricing
6 min read

Should you build a native app or a mobile-first web app? A founder's decision tree

Not a technology debate — a business decision. When native is worth the cost, when a web app is enough, and the 5 questions that make the answer obvious.

hiringreact-nativepricing
9 min read

Red flags to avoid when hiring a developer for your startup

Seventeen warning signs across calls, contracts, and portfolios — the ones founders usually notice in retrospect and wish they'd caught earlier.

hiringmvppricing
6 min read

The Postgres index that cost me 3 days to find

A dashboard query that should have been 40ms was taking 6 seconds. The fix was one CREATE INDEX statement. Finding which one took three days.

performancecase-study
9 min read

Offline-first React Native: how we kept seat selection smooth on a 3G train

The architecture that made a 12K-seat picker feel instant with 0 bars of signal. State sync, optimistic writes, the queue that survives app kills, and the edge cases nobody warns you about.

react-nativeofflinemobile
8 min read

Shipping Next.js i18n right: routing, SEO, and RSC gotchas

The i18n mistakes that pass code review and break in production — middleware loops, canonical tags, hreflang traps, and the RSC serialization edge that eats translations silently.

next.jsi18nseo
8 min read

Three rescue projects in numbers: what 'cheap developer' actually cost these founders

Three real projects that came to me broken. What went wrong, what it cost to fix, and the math that shows why the 'cheap' option was the most expensive one.

pricinghiringcase-study
7 min read

I deleted rate limiting from my contact form. Here's why.

Rate limiting is a reflex. On a real portfolio contact form it solved nothing, added a Redis dependency, and broke legitimate submissions. The honest math on when to skip it.

securitynext.jstradeoffs
9 min read

Stripe vs Lemon Squeezy vs Paddle: real tradeoffs from shipping three checkouts

The tax, pricing, and integration differences that only surface after your first 100 paid customers — and the failure modes unique to each.

stripepaymentsstack-choice
9 min read

What €12K actually buys: a line-by-line cost breakdown of a real MVP build

Not a hypothetical. A real project, real line items, real hours. Where the money goes when you hire a solo full-stack developer to build an MVP from scratch.

pricingcase-studyhiring
8 min read

The founder's brief: what to send a developer so you don't waste 8 weeks

A one-page brief template that saves founders weeks of misaligned work. What to include, what to leave out, and the three questions that matter more than any Figma file.

hiringmvppricing
7 min read

React Native vs Flutter for a 2-founder startup: the non-holy-war answer

Both ship. Both are fine. The real decision factors are hiring, web reach, and your team's existing skills — not the framework comparison you find on Reddit.

react-nativeflutterstack-choice
9 min read

From Figma to 8K installs: how we shipped the E7 Shop React Native app

Native iOS + Android companion app for event ticketing. 60fps seat selection, offline QR wallet, 4.8★ rating. 10 weeks, React Native + Expo. The full build story.

case-studyreact-nativeperformance
9 min read

How to scope an MVP so it actually ships in 12 weeks

The scoping mistakes that turn a 12-week build into a 6-month one, and the written artifacts that keep a project on the rails from week 1.

mvphiringpricing
8 min read

Stripe webhooks in production: 6 failure modes nobody warns you about

The failure patterns that only show up after your first 1,000 paid events — signature bugs, retry storms, silent 200s, and the fix for each one.

stripenext.jsdebugging
8 min read

Architecting a ticketing platform for 12K tickets per event: inside E7

End-to-end event ticketing — interactive seat maps, Stripe checkout, real-time WebSockets, QR check-in. 12 weeks from zero to production. The full build story.

case-studynext.jsstripe
6 min read

Next.js vs Remix in 2026: the comparison that actually matters now

The 2023 flame war is over. After Remix merged into React Router 7 and Next.js RSC settled, the honest differences are smaller than the internet thinks — but they're still the wrong ones for most founders.

next.jsstack-choicehiring
7 min read

How I hit Lighthouse 98 on a tri-lingual Next.js site

The wins that actually moved the score, the two I chased that didn't, and the part most Lighthouse tutorials quietly lie about.

next.jsperformancei18n
7 min read

How we rebuilt Etalon Translation in 6 weeks: +34% conversion and Lighthouse 98

A WordPress agency site → Next.js 15. Three locales, MDX blog, 0.8s load time. Full narrative: what we cut, what surprised us, the real numbers.

case-studynext.jsperformance
7 min read

Solo full-stack dev vs agency vs freelancer: the honest comparison

Cost, speed, risk, and fit across the three options every founder considers when hiring for a new build. Where each one wins, where each one burns budget.

hiringmvppricing
6 min read

Fixed scope vs hourly: why I bill by milestone

Every hourly invoice has a second invoice hidden inside it. The case for fixed-scope pricing, when hourly actually wins, and how to press a developer for a fair fixed quote.

pricinghiringmvp
5 min read

What a custom SaaS MVP actually costs in 2026

A line-by-line breakdown of a real €15K MVP build. No 'it depends', no agency markup, no mystery — the real numbers behind a 10-week project.

pricingmvphiring
5 min read

The four-line spam filter that replaced reCAPTCHA on my contact form

Honeypot + time-floor + size limits. No third-party script, no privacy footnotes, no checkbox to click. Two months in and I've had zero spam in my inbox.

securitynext.jsux
1 min read

Server Components: the tradeoff that bit me

A short story about serialization boundaries, icon props, and how I debugged a Next.js error that had no stack trace.

next.jsreactdebugging
1 min read

Hello, world — why I'm writing again

Why this blog exists: short notes from real projects, things I wish I'd known earlier, and the tradeoffs that rarely make it into tutorials.

metawriting