Laravel or NestJS for a new backend
PHP or Node for a greenfield service: what each ecosystem gives you for free, where hosting and hiring differ, and the conditions that actually decide it.
Write-ups from production: what broke, what I measured, and what I'd do again.
PHP or Node for a greenfield service: what each ecosystem gives you for free, where hosting and hiring differ, and the conditions that actually decide it.
The slowest Laravel pages are usually one loop issuing a query per row. How to make N+1 visible, fix it with eager loading, and stop it coming back.
Cache::remember is the easy part. Stampedes, tags, TTL jitter, locks and what actually belongs in the cache on a busy Laravel application.
A queued job will run twice and fail at the worst time. Configuring tries and backoff, making jobs safe to retry, and reading the failed_jobs table before users do.
Dropping a hosted CMS for files in the repo: exporting the content, converting rich text, keeping every URL alive, and verifying nothing was lost.
A canonical pointing at the wrong URL tells Google to drop the page. The five ways it goes wrong, and how to audit every canonical on a site in an afternoon.
October's Brotli out-of-bounds write gives remote code execution through fetch() and body parsing. Plus the TLS fixes shipped beside it, and why npm trusted publishing did not end supply-chain worms.
The PHP bugs attackers actually scan for, why each one works, and what the fix looks like in code — from CVE-2024-4577 to type juggling, unserialize and uploads that run.
Two defensible choices with different bills. What each costs on day one and in month twelve, and the few conditions that genuinely decide it.
NestJS asks for decorators and modules before it gives anything back. What each piece is actually for, and how to use the container without over-engineering.
Middleware runs in the order you register it, and most Express bugs are that sentence ignored. Correct ordering, async errors, and one handler that owns responses.
Express gives you a router and no opinions. The folder layout, boundaries and conventions that keep a Node API readable once it is twenty routes and three developers.
EXPLAIN tells you what MySQL decided to do. How to read the rows, type and key columns, spot the three patterns that cause most slow queries, and fix them.
One tenant seeing another's records is the bug you cannot apologise your way out of. Shared tables, schemas or databases — and how to make the choice enforceable.
Query builders promise type safety, raw SQL promises control. What each actually costs in a TypeScript service, and the hybrid most teams end up with.
RAG pricing is not the model price. Embeddings, retrieved context, system prompt and retries all bill per answer — how to work out the number before you ship.
Memory that climbs until the process restarts. How to tell a leak from a cache, take heap snapshots safely, and read the comparison that names the culprit.
A Lighthouse run in CI turns performance into a test. How to set budgets that fail a pull request without failing on noise, and what to gate versus warn on.
Shipping less JavaScript starts with knowing what is in it. Reading the build output, running the analyzer, and the four imports that usually explain the size.
A NAT gateway bills per hour and per GB, and private subnets route almost everything through it. How to spot the charge and fix it with VPC endpoints.
Retries are not optional, so duplicate requests are not either. Idempotency keys, natural keys and upserts that make a replayed request cost nothing.
CLS is caused by content that arrives without reserved space: images, fonts, ads and client-only widgets. How to find each shift and reserve space for it.
A feature list for a CRM that ships: the six that earn their place in v1, the five that can wait, and the ones that quietly cost more than they return.
LCP is usually one element and one slow step. How to find both in Next.js: the image, the font, the server response, and the render path that delays them.
A cost model for custom CRM development: what drives the number, where budgets overrun, and how an off-the-shelf subscription compares over three years.
A technical SEO checklist for Next.js: canonical host, metadata, sitemap, robots, structured data, and the checks that catch regressions before they ship.
Next.js 16 upgrade notes: async params everywhere, typed PageProps, middleware renamed to proxy, a Tailwind 4 gotcha, and the docs inside node_modules.
Transparent zlib compression for a Yii2 Redis cache: the envelope format, why level 6 beats level 1, and a rollout that can be undone with one env var.
Read-only users, a source-to-local DB map, structure-only tables for PII, and gzip streaming: the small Bash script I use to debug safely with real data.
Lessons from building a Node.js SEO crawler with ~100 checks: robots.txt matching is subtle, soft 404s are everywhere, and why every rule needs a source.
How to build a real estate CRM in 2026: the buyer-requirement data model, a site-visit pipeline, portal lead capture, and matching buyers to listings.
When custom CRM development beats Salesforce, and how to build one that lasts: the data model, pipeline state machine, idempotent lead capture and scope.
A measurement-driven guide to Next.js performance: Core Web Vitals, shipping less JavaScript, images, fonts, caching and deferring third-party scripts.
Build a production RAG chatbot with Next.js, Postgres and pgvector: chunking, retrieval, streaming, and the cost, caching and guardrails tutorials skip.
Google ignores llms.txt and ~97% of published files get zero AI crawler requests. Publish one anyway, in twenty minutes, then spend the real time on crawler access and answer-first pages.
Add semantic search and RAG with pgvector inside the Postgres you already run — and when a dedicated vector database like Pinecone is actually worth it.
How to improve First Contentful Paint in a Next.js app: measuring it, shipping less JavaScript, taming fonts, deferring scripts and serving static HTML.
Caching in the App Router is opt-in since Next.js 15, which inverts most guides written for 14. The four caches, what makes a route dynamic, and Cache Components in 16.