KA
--:--000
KaiAdeyemi
Lisbon · UTC+1Get in touch

Full-stackDeveloper

My goal is to write maintainable, clean and understandable code — so the next person to open the file, usually me, has an easy afternoon.

… /About me …

Hello. I'm Kai, a full-stack developer. Six years of shipping Go on the back, TypeScript on the front, and the boring infrastructure that keeps both honest.

Front-end

TypeScriptReactNext.jsVueSvelteRedux ToolkitTanStack QueryVitestPlaywright

Styles

TailwindSCSSPostCSSCSS ModulesRadixMotion

Back-end

GoGinsqlcNodeNestJSPythonFastAPIPostgreSQLRedisKafkagRPCGraphQL

DevOps

DockerKubernetesTerraformGitHub ActionsNginxGrafanaOpenTelemetry

Some of my favourite technologies, topics and tools — the ones I reach for without thinking.

@kai-adeyemi
Placeholder portrait: a figure in a leather jacket seen from behind, facing the sea
placeholder image · replace with your own

Selected

4 of 11 · 2024—2026

  1. Accounting service2026

    Ledger

    A double-entry ledger where every balance is a fold over immutable entries, and every write is safe to retry.

    • Idempotency keys on every posting, so a retried request can never double-count.
    • Balances are derived, never stored — a replay of the entry log reproduces any account at any instant.
    • The whole thing fits in one binary and one database, which is the point.

    GoPostgreSQLgRPCKafka

    Source
  2. Deploy console2025

    Waypoint

    One console for forty services: rollout state, live log tail, and a rollback that costs a single keystroke.

    • Streams pod events over a single multiplexed socket instead of polling thirty endpoints.
    • Rollback is a first-class control, not a page buried behind a confirmation dialog.
    • Keyboard-first: every action has a shortcut, and the shortcut is printed next to it.

    TypeScriptNext.jsKubernetes APIWebSocket

    Source
  3. Log search2025

    Sift

    Full-text search across two years of archived logs without keeping a single one of them hot.

    • Bloom filters on cold objects mean most queries never touch object storage at all.
    • Query results stream as they resolve, so the first matching line lands before the scan finishes.
    • Retention is a policy file, not a cron job somebody has to remember.

    GoClickHouseS3Parquet

    Source
  4. Design-system runtime2024

    Cadence

    Tokens compiled to CSS variables, with a visual diff that fails the build when a component quietly drifts.

    • One source of truth compiles to CSS variables, Figma variables and native theme files.
    • Every component ships a snapshot; a pixel move over threshold blocks the merge.
    • Deprecations are codemods, so removing a token is a pull request rather than a memo.

    TypeScriptTailwindRadixPlaywright

    Source

Writing

… /notes on things that broke …

01 05

  • 2026.029 min

    The simplest useful thing you can build with Kafka and Go

    A three-service pipeline, one topic, and the smallest amount of Docker that still teaches you what partitions actually do.

    GoKafkaDocker

  • 2025.1112 min

    Postgres row locks, explained by drawing them

    Every deadlock I have shipped was a wait-for graph I could not see. So I started drawing them, and they stopped happening.

    PostgreSQLConcurrency

  • 2025.097 min

    A gRPC gateway you can actually debug

    Trace IDs that survive the proxy hop, errors that keep their status code, and a reflection endpoint you leave switched on.

    gRPCObservability

  • 2025.0611 min

    Why your list re-renders, and the four fixes in order

    Measure first. Then memo, then split the context, then lift the key. Reaching for the fourth one first is how components rot.

    ReactPerformance

  • 2025.0314 min

    Shipping a column rename without a maintenance window

    Expand, dual-write, backfill, verify, contract. Five deploys instead of one, and nobody notices any of them.

    MigrationsPostgreSQL

… /where the years went …

Work

Employment history
PeriodCompanyRoleStack
2024 1 yr 9 mosNorthbound SystemsStaff engineerGo & TypeScript
2022 20242 yrs 1 moFieldnoteFull-stack developerNode & React
2021 202211 mosHalcyon LabsFrontend developerReact & Vue
2019 20211 yr 8 mosMercator DigitalFull-stack developerPython & JavaScript

Work experience

6 years 5 months