Writing
Technical notes, architectural decisions and lessons from building things. Some short, some still taking shape.
Connecting Client Errors to Backend Diagnostics
Correlation identifiers, structured logs and telemetry in Culina's web-to-API workflow.
Designing Applications Around Decisions
How review, consent and document workflows make product design more concrete than a collection of screens.
Organizing .NET Applications Around Use Cases
How Culina and Elysion use ASP.NET Core, MediatR and explicit persistence boundaries within a single API.
Database Design Starts with Relationships
What Culina's food catalog and Elysion's operational records reveal about modeling data beyond a single screen.
Modular Boundaries Without Microservices
Comparing Muninn's NestJS modular monolith with the layered .NET backends in Culina and Elysion.
Native Mobile Clients and Shared Contracts
Culina's SwiftUI client shows what can be shared with a web app, while Muninn highlights the limits of that reuse.
Offline Editing Needs More Than a Retry Button
How Muninn combines encrypted local drafts, repeatable requests and visible conflicts to preserve journal work.
Qb8s Infrastructure — A Technical Workbench
Personal infrastructure for software development, experimentation and hosting self-managed services.
Keeping React Applications Close to Their API Contracts
Generated clients, server-state management and shared UI boundaries across Culina, Elysion and Muninn.
Browser Encryption and Recovery in Muninn
How encrypted journal content shapes search, recovery and the boundaries of a privacy promise.
From Azure Pipelines to Argo CD
How Culina and Elysion separate application builds from version-controlled deployment configuration.
