Skip to main content

Our Blog

Explore our blog posts on web design, development, and digital marketing to stay up-to-date with the latest trends and strategies.

Found 78 blog posts

Claude Code Hooks: How We Turn AI Agent Rules into Deterministic Guardrails
Read Blog
AI & Dev Tools
October 14, 2026

Claude Code Hooks: How We Turn AI Agent Rules into Deterministic Guardrails

A rule in CLAUDE.md is a request the model usually follows; a Claude Code hook runs every time. We share how our team uses PreToolUse, PostToolUse, and Stop hooks to block secret files, auto-format edits, and refuse to finish on failing type-checks.

Read more
Shipping Feature Flags in Next.js with the Vercel Flags SDK
Read Blog
Frontend Engineering
October 8, 2026

Shipping Feature Flags in Next.js with the Vercel Flags SDK

We moved a client's ad-hoc environment-variable flags onto the Flags SDK and the precompute pattern. Here's what the migration looked like and why static rendering was the part worth protecting.

Read more
Migrating vercel.json to vercel.ts: What We Learned Moving to Typed Vercel Config
Read Blog
Frontend Engineering
October 7, 2026

Migrating vercel.json to vercel.ts: What We Learned Moving to Typed Vercel Config

vercel.ts replaces vercel.json with a typed, executable TypeScript config file. Here's what we hit migrating client projects — from caught typos to a config-drift bug caused by Date.now().

Read more
Node.js 20 End-of-Life on Vercel: Our Migration to Node 24 LTS
Read Blog
Frontend Engineering
October 5, 2026

Node.js 20 End-of-Life on Vercel: Our Migration to Node 24 LTS

Node.js 20 went end-of-life on Vercel on October 1, 2026. Here's what actually broke when our team migrated a handful of production projects to Node 24 LTS — and it wasn't application code.

Read more
Migrating Off the Vercel Edge Runtime: Field Notes
Read Blog
Frontend Engineering
October 4, 2026

Migrating Off the Vercel Edge Runtime: Field Notes

Vercel's Edge Runtime is deprecated in favor of Node.js on Fluid Compute — here's what we found migrating Next.js routes off it, and why streaming kept working without changes.

Read more
Why Two Tabs Silently Overwrote Each Other: Field Notes on Lost Updates, Version Columns, and ETags
Read Blog
Backend Engineering
September 27, 2026

Why Two Tabs Silently Overwrote Each Other: Field Notes on Lost Updates, Version Columns, and ETags

We reproduced a bug where two tabs editing the same record silently erased each other's changes, with no error anywhere. Our field notes on why database transactions don't prevent lost updates across HTTP requests, and how a version column, ETag and If-Match headers, and a conflict screen fix it.

Read more
Why a Better System Prompt Won't Stop Prompt Injection: Our Field Notes on the Lethal Trifecta, Scoped Tools, and Untrusted Output
Read Blog
AI Engineering
September 26, 2026

Why a Better System Prompt Won't Stop Prompt Injection: Our Field Notes on the Lethal Trifecta, Scoped Tools, and Untrusted Output

While building a support-inbox assistant with tool access, our team fed it a test ticket with hidden instructions and watched it follow some of them. These are our field notes on why prompt injection is an architecture problem rather than a prompting problem, how the lethal trifecta flags risky LLM features, how we scope tools to the signed-in user, why side effects need human confirmation, and how rendered Markdown becomes an exfiltration channel.

Read more
When Retries Make an Outage Worse: Idempotency Keys, Backoff with Jitter, and Circuit Breakers
Read Blog
Backend Engineering
September 23, 2026

When Retries Make an Outage Worse: Idempotency Keys, Backoff with Jitter, and Circuit Breakers

Naive retries amplify load on a dependency that is already failing. We break down retry amplification, which HTTP failures are safe to repeat, how to implement Idempotency-Key handling with a unique constraint instead of a read-then-write, why full jitter beats fixed backoff, and when a circuit breaker is worth its complexity.

Read more
Why OFFSET Pagination Gets Slower Every Page: Keyset Cursors, Stable Sort Keys, and the Index That Makes Them Work
Read Blog
Backend Engineering
September 21, 2026

Why OFFSET Pagination Gets Slower Every Page: Keyset Cursors, Stable Sort Keys, and the Index That Makes Them Work

We replaced OFFSET pagination in a production feed after deep pages started timing out. This is our engineering write-up on why OFFSET is linear in the offset, how keyset cursors turn paging into an index seek, which composite index the query needs, and the timestamp-precision bug that made our cursors skip rows.

Read more
Why a Deploy Breaks Every Open Tab: Field Notes on ChunkLoadError, Deployment Skew, and Versioned Clients
Read Blog
Frontend Engineering
September 20, 2026

Why a Deploy Breaks Every Open Tab: Field Notes on ChunkLoadError, Deployment Skew, and Versioned Clients

A routine deploy can fill your error tracker with ChunkLoadError from sessions that loaded the page minutes earlier. These are our field notes on why deployment skew is a version mismatch rather than a bundler bug, which four layers it breaks, how Next.js deploymentId and Vercel Skew Protection keep old builds addressable, and how we build a client recovery path that reloads once instead of looping.

Read more
Why Playwright Tests Pass Locally and Fail in CI: Our Field Notes on Auto-Waiting, Test Isolation, and Trace-Driven Debugging
Read Blog
Testing
September 19, 2026

Why Playwright Tests Pass Locally and Fail in CI: Our Field Notes on Auto-Waiting, Test Isolation, and Trace-Driven Debugging

Our end-to-end suites were green on developer machines and intermittently red on CI. These are our field notes on why Playwright flake is a race condition inside the test rather than randomness in the browser, how web-first assertions replace every sleep, how worker-scoped fixtures stop parallel workers sharing data, and why trace: 'on-first-retry' is the highest-value line in playwright.config.ts.

Read more
Why Node Processes Keep Growing: Field Notes on Heap Snapshots, Module-Scope Caches, and Leaks That Only Appear When Instances Are Reused
Read Blog
Full-Stack Engineering
September 15, 2026

Why Node Processes Keep Growing: Field Notes on Heap Snapshots, Module-Scope Caches, and Leaks That Only Appear When Instances Are Reused

A Node service that stays healthy for an hour after every deploy and then climbs is leaking above the request, not inside it. These are our field notes on separating a real leak from garbage-collection sawtooth, capturing heap snapshots with --heapsnapshot-signal, reading the Retainers panel back to a module-scope Map, and why Fluid Compute instance reuse means serverless code leaks like a long-lived server.

Read more

Stay Updated

Subscribe to our newsletter for the latest insights on web design, development, and digital marketing.