Code Agency

#architecture

21 articles tagged architecture.

18 min read

The version you can't take back: releasing a React Native app when the store is in the middle

The fix took forty minutes and a quarter of your users still hit the bug three weeks later, because a mobile release is a copy on somebody else's device. What over-the-air updates genuinely replace, the minimum-version gate you have to ship in v1 or never, why your API is permanently multi-version, and the autumn maintenance window nobody schedules.

mobilereactdevopsarchitectureapi
14 min read

One login for the whole stack: OIDC on the tools you already self-host

Every self-hosted tool ships its own user table, and a leaver has to be removed from all of them. The identity provider we put in front of Grafana, Metabase, ArgoCD and the custom apps — which parts map cleanly, why Odoo is the awkward one, and what you owe the thing once everything depends on it.

securitydevopskubernetesarchitecture
16 min read

The column you can't just rename: schema changes without a maintenance window

A rename is the cheapest thing a database does and one of the most dangerous things a deploy does, because two versions of your application are always live at once. Expand, backfill, contract — the release boundary that makes it safe, the locks that bite anyway, and what changes when Odoo owns the schema.

postgresqldevopsarchitectureodoodevelopment
13 min read

LISTEN/NOTIFY in practice: realtime features without a message broker

Postgres can push an event to your app the moment a row commits. The trigger that catches every writer including the ERP, the listener that survives a reconnect without losing a change, the pooler that silently breaks all of it, and the bulk import that turns a live board into 40,000 notifications.

postgresqlarchitecturenextjsdevelopment
18 min read

The stale screen problem: offline-first signage that fails loudly

A dark screen is a support ticket. A screen still showing last week's price is a lie in your store, and nothing in a normal monitoring stack will tell you about it. Content as a versioned bundle instead of a URL, day-parts that depend on a clock you don't control, expiry as a safety feature, and telemetry that reports what's actually on the glass.

signagearchitecturedevopsmonitoring
13 min read

WordPress, headless or custom: a decision framework without dogma

Three good answers to "we need a website", each right for a different shape of requirements. The five questions that actually decide it — who edits, what it talks to, whether visitors change state, who owns it in three years, and what the risk surface has to look like — plus the two migrations that go wrong in both directions.

wordpressheadlessarchitecturebusinessdevelopment
13 min read

The invalidation tax: where TanStack Query ends and TanStack DB begins

In an internal tool, the same order is on screen in five places at once, and every mutation has to remember all five. What a client-side store fixes that a cache can't — collections, live queries, optimistic writes that roll back on their own, and the working set that has to fit in a browser.

reacttanstackarchitectureerpdevelopment
19 min read

Two-way SMS for service businesses: confirmations that answer back

A reminder tells the customer something. A confirmation tells your calendar something — and only one of those lets you refill the slot. The virtual number that makes replies possible, the matching problem nobody warns you about, parsing what people actually type in three languages, and the Odoo automations that reschedule without a human.

smsautomationodooarchitecture
18 min read

SMS for 2FA: what it's still good for, and what it isn't

SIM-swap risk is real; so is the customer who will never install an authenticator app. An honest matrix of SMS OTP against TOTP and passkeys — plus the attack that shows up on your invoice instead of your incident channel, the network APIs that turn a phone number back into a useful signal, and why the recovery path decides your real security level, not the login screen.

securitysmsarchitecture
14 min read

Transactional and marketing e-mail: why we run two platforms, not one

One shared sending platform means your invoice inherits your campaign's spam score — but reputation is only the argument people already know. The queue that starves password resets behind 80,000 newsletters, the suppression list that must never be shared, and the consent boundary a platform should enforce rather than trust you to remember.

emailarchitecturedeliverabilitymarketing
15 min read

Payment methods across EU markets: one shop, local trust everywhere

Bancontact in Belgium, iDEAL in the Netherlands, TWINT in Switzerland — conversion follows familiarity, and a card form is not a neutral default. How we structure Mollie or Stripe so every market pays the way it expects, why asynchronous methods are the part that actually breaks your order flow, and what the cost conversation looks like when someone finally has it.

paymentsecommercearchitecturebusiness
13 min read

Abandoned carts, owned infrastructure: recovery flows on our mailing platform

Roughly seven in ten carts never become an order, and the people who filled them are the warmest audience your shop will ever have. The three-mail sequence we build, the event pipeline that fires it, and why we run it on the same platform that sends your newsletters instead of renting the flow from a US SaaS.

ecommercemarketingautomationarchitecture
10 min read

Search that sells: Postgres tsvector vs Meilisearch vs Typesense

Visitors who use search buy at several times the rate of visitors who browse — which makes the search box a conversion feature, not a technical checkbox. When the database you already run is enough, when typo tolerance pays for itself, and the sync problem that is the real project either way.

postgresqlecommerceperformancearchitecture
9 min read

Media on the CDN, code on the origin: a delivery strategy that ages well

Next.js will happily serve your JS bundles from a CDN with one config line. We stopped doing that. Hashed chunks belong to the build that emitted them; images outlive every deploy — and treating both as 'assets' is how a rollback turns into a cache-purge incident.

performancearchitecturedevopsnextjs
7 min read

A marketing site with no CMS: MDX, git and a build pipeline

No database, no admin panel, no plugin updates. Content is MDX in the repo, frontmatter is a Zod schema that fails the build, review is a pull request — and publishing is a merge. The architecture behind this website, and the case where you shouldn't copy it.

nextjsarchitecturedevelopmentjamstack
7 min read

Server Components for ERP data: where the fetch belongs now

React Server Components moved the data question out of the client bundle and into the render. For pages backed by an ERP, that's not a trend to adopt blindly — it's a boundary worth drawing precisely.

reactnextjsarchitecture
7 min read

TanStack Start for internal tools: when you don't need Next.js

Every custom build ships two frontends — the one your customers see and the one only your client's own staff opens. The first earns Next.js. The second is usually paying a tax for machinery it never uses.

reacttanstacknextjsarchitecturedevelopment
7 min read

Odoo's external API surface: JSON-2, REST and when to build your own

Every integration starts with the same question: how do we talk to Odoo? The honest trade-offs between the stock JSON-2 API, community REST modules and a purpose-built gateway — and the one question that picks the right door per consumer.

odooapiarchitecture
7 min read

Postgres is enough: queues, search and pub/sub without five more containers

Before a two-developer project grows a Redis, a RabbitMQ and an Elasticsearch, look at what the database you already run can do. SKIP LOCKED queues, tsvector search, LISTEN/NOTIFY — and the measured signals that tell you when to graduate.

postgresqlarchitecturedevelopmentperformance