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 →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 →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 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 →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 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 →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 →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 →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 →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 →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 →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 →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 →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 →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 →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 →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.