The stack, as a walkthrough

Six chapters from the Cloudflare edge to a PostgreSQL row, told through the work that shipped: investment banking, church management, school operations, and this site.

01 · the front door

Blazor on the edge

Every product here starts as a Blazor WebAssembly app written in C#, styled with Tailwind, and served as static files from Cloudflare Pages. Pages are prerendered so the content lands before the runtime wakes up, then the app takes over in the browser.

C#Blazor WASMTailwindCloudflare Pages

Field note This page is chapter 1 eating its own cooking: static HTML first, WebAssembly second.

02 · the brain

APIs that speak fluent C#

Behind every screen sits a .NET API built in layers: an application core of commands and queries, validation behaviors, and a Result type instead of thrown exceptions. CalBank's core banking work and the GraceGraph API both run on this shape.

.NETC#RESTClean Architecture

Field note The shared kernel owns its Result, Guard and outbox abstractions outright: zero package references.

03 · the memory

PostgreSQL with fences

GraceGraph runs many churches on one PostgreSQL database. Row-level security fences each tenant at the database, events record what happened, and a transactional outbox publishes them only after the commit lands.

PostgreSQLEF CoreEvent sourcingOutbox

Field note The API cannot leak what it cannot see: tenant scope is set per request, verified by tests.

04 · the pulse

Where the money moves

At Turntabl I was a contingent engineer inside Morgan Stanley's investment banking division, working interest-rate derivative flows in Scala and Kafka on MSSQL, with Splunk watching the pipelines.

ScalaKafkaMSSQLSplunk

Field note Performance work in this chapter cut transaction reporting time by 60 percent.

05 · the pocket

Flutter in real pockets

Mobile is where the stack meets daily life: the mediLaw app, the myRhino companion, a KNUST invigilators register, and now Adesua's attendance for Ghanaian basic schools. Dart and Flutter ship one codebase to both stores.

FlutterDartKotlin

Field note The KNUST invigilators app that replaced paper registers is Adesua's grandparent.

06 · the rig

Shipped is a daily practice

Everything above runs in Docker containers built by GitHub Actions: the GraceGraph API and outbox worker on an Oracle VM behind Caddy, with PostgreSQL backups that get restore-drilled, not just taken.

DockerGitHub ActionsCaddyOracle VM

Field note A backup you have never restored is a rumor. The drill runs restore-verify against a throwaway database.

The fine print

House rules

END_TO_END_OWNERSHIP

I take responsibility for features from the database to the screen. I build and support them through to production.

DATA_INTEGRITY

Correctness is not optional. I manage data changes in compliance with quality policies to keep systems secure.

PROBLEM_SOLVING

I troubleshoot system integration and workflow errors to minimize downtime and disruptions.

SECURE_BY_DEFAULT

Security is part of my development workflow. I focus on code quality, not on after-the-fact fixes.

DISTRIBUTED_SYSTEMS

I build backend services and integrate new features into existing platforms.

MENTORING

I support the team's growth by mentoring interns and new joiners on Git, Scala, and engineering best practices.

Where this stack goes to work.

The same chapters, running as products: GraceGraph for churches, Adesua for schools, and the portfolio you are reading.

Domains · investment banking · fintech · e-commerce · real estate