Blog
A builder's notes
AI-assisted development, serverless architecture on AWS and modern frontend. All learned building real products.
How to survive as a programmer in the AI era (without turning cynical or naive)
AI isn't coming for your job — it's coming for your tasks. What's really changing, which skills are appreciating, and which ones are quietly losing value.
Read article →Your API is not an MCP server: designing tools an agent can actually use
Wrapping your REST endpoints one by one is the fastest way to build a useless MCP. Granularity, schemas that teach, the caller identity, and idempotency for when the model retries.
Read article →Lambda vs PostgreSQL: the day you run out of connections
A connection pool and an ephemeral function are two ideas that contradict each other. Why connections run out, what RDS Proxy actually fixes, and what you can fix for free before paying for it.
Read article →Loading states: that centered spinner is a product decision
While the data loads there is a screen almost nobody designs. Skeletons that do not shift, streaming with Suspense, and the delay trick that makes an app feel fast.
Read article →CloudFront in front of your app: why your hit rate is 30%
Adding a CDN is not caching. The cache key, your origin's Cache-Control and how you invalidate decide whether CloudFront saves you money or just adds one more hop.
Read article →INP: why your app feels slow even when it loads fast
A green LCP does not mean your app responds well. INP measures what the user feels on every click, and fixing it changes how your product is perceived.
Read article →Cheaper embeddings: trimming dimensions and quantizing without losing recall
How I decide how many dimensions to keep and at what precision, and why I almost always end up with a two-phase scheme: small vectors on top, precise ones underneath.
Read article →Forms that work without JavaScript (and better with it)
The progressive enhancement pattern I use for forms: the platform solves the base case, JavaScript only adds layers, and neither path is second-class.
Read article →What's going to happen to software development: predictions with dates (July 2026)
What to expect in the coming months, in 2027 and toward 2030: agents, the future of web and apps, and what happens to programmers. With data, not vibes.
Read article →The NAT Gateway nobody asked for: your VPC's silent bill
Why the most expensive component in many AWS accounts is a networking piece nobody remembers designing, and how VPC endpoints change that equation.
Read article →How to survive as a programmer in the AI era (without turning cynical or naive)
AI isn't coming for your job — it's coming for your tasks. What's really changing, which skills are appreciating, and which ones are quietly losing value.
Read article →The startup stack in July 2026: what I would use today to build a SaaS
An honest map of the ecosystem: coding agents, models, frameworks, infra and the AI layer. What I would pick today and why, with real prices.
Read article →AI-built startups in 2026: the real numbers behind the hype
Cursor, Lovable, Cognition, Base44, Cal AI and the YC data: what they actually earn, with how many people, and which patterns repeat. With charts.
Read article →Fine-tuning, RAG or prompting: how I decide which to use
An honest decision tree for choosing between fine-tuning a model, building RAG, or staying with prompting, with the real cost of each branch.
Read article →Step Functions: when an orchestrator beats chaining Lambdas
Why I move the coordination logic of long processes out of code and into an explicit state machine, and the trade-offs that implies.
Read article →Web Workers: getting heavy work off the main thread
When moving computation to a real worker improves the UI and when it only adds complexity, with the pattern I use to avoid fighting postMessage.
Read article →Semantic caching for LLMs: pay once for answers you already gave
How to use embeddings to detect repeated questions and serve cached answers without calling the model, pitfalls included.
Read article →Container queries: the day I stopped lying to my components
Why media queries break the promise of a reusable component and how container queries actually keep it.
Read article →EventBridge: decoupling services without building a queue monster
When an event bus beats calling services directly or chaining SQS queues, and the trade-offs I accepted adopting it.
Read article →Server Actions in Next.js: where they shine and where I refuse to use them
Server Actions eliminate API boilerplate, but they are not a universal replacement for endpoints. My criteria for deciding.
Read article →Serverless observability: structured logs or debugging blind
In Lambda there is no server to SSH into. How I structure logs, correlate requests, and find failures without losing my mind.
Read article →Rerankers: the piece my semantic search was missing
Embeddings retrieve reasonable candidates; the reranker decides which ones deserve the top. Here is how I combine them without doubling latency.
Read article →File uploads with presigned URLs: let S3 do the heavy lifting
Why I stopped piping files through my backend and how to design the presigned URL flow without security holes.
Read article →Tool calling in production: the LLM doesn't execute, it proposes
The mental model that avoids half the bugs in a tool-using agent: the LLM suggests calls, your code decides whether they run.
Read article →One Zod schema to rule them all: shared client/server validation
Duplicating validation between the form and the API is a source of silent bugs. Here is how I share a single schema across both worlds.
Read article →Islands in Astro: when to hydrate and when not to
Astro's partial hydration isn't magic: it's a per-component decision you make, and getting it wrong costs JavaScript nobody asked for.
Read article →View Transitions in Astro: SPA-like navigation without the SPA weight
How I get smooth page-to-page transitions and state that survives navigation without giving up the HTML Astro serves by default.
Read article →Queues with SQS: retries that don't duplicate work
How I make SQS retries safe in JXBS without sending duplicate emails, charges, or state changes.
Read article →DynamoDB single-table: the pattern that took me longest to get
Why cramming several entities into one DynamoDB table stops looking insane once you think in access patterns instead of entities.
Read article →Lambda or Fargate: how I decide which to use
I stopped asking which is better and started asking what shape the workload has. The answer almost always falls out of that.
Read article →Evals for LLM features: how I know I didn't break anything
Without a set of evals, every prompt or model change is a blind bet. Here is how I built mine.
Read article →Structured outputs with LLMs: how I stopped parsing text by hand
Why function calling and Zod validation turned my LLMs-in-product from a fragile component into a reliable piece of infrastructure.
Read article →OpenTofu modules you won't hate six months from now
Most infrastructure modules age badly. These are the limits I set for myself so they don't.
Read article →RAG in production: chunking matters more than the model
How you split your documents decides more about RAG quality than the LLM you put on top.
Read article →Modeling the domain with types: when the compiler writes your tests
A good type model makes impossible states fail to compile. Here is how I use TypeScript for that.
Read article →Cursor + Claude on a real team: integrating AI without losing quality
What to automate, what to always review, and how to keep the team sharp when AI writes half the code.
Read article →Painless serverless: Amplify, Lambda and DynamoDB for real apps
The architecture behind the Toyota Colombia admin panel: decisions, trade-offs, and what I would change today.
Read article →Offline-first PWAs: apps that work when the signal does not
Service Workers, smart caching and deferred sync for events with spotty connectivity.
Read article →Embeddings + pgvector: semantic matching in PostgreSQL
How we built the JXBS matching engine without adding a dedicated vector database.
Read article →From monolith to per-audience backends: migration lessons
Why we split a shared NestJS backend, and the pnpm DI pitfalls nobody warns you about.
Read article →The design system as a product: maintaining a shared UI library
Versioning, tokens and component discipline when several portals depend on your library.
Read article →No articles match
Try another word or clear the filters.