Latest Articles
Thoughts on development, technology, and best practices
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.