Blog
Technical articles on C#/.NET source generation, domain-driven design, metamodeling, DevOps, quality engineering, and building software that builds itself. Each post is drawn from real projects in a 57-project .NET monorepo.
Sections below mirror the sidebar TOC categories one-to-one — every post's category: frontmatter is the single source of truth.
DDD & Modeling
Domain modeling, aggregates, and the metamodel discipline that underpins every DSL on this site.
| Article | Description |
|---|---|
| Modeling, Metamodeling, and Meta-Metamodeling in C# | Implementing a complete meta-metamodeling framework in C# using attributes as the DSL surface and multi-staged Roslyn source generators as the compilation pipeline. |
| Domain-Driven-Design & Code Generation | Domain-Driven Design as a modeling discipline combined with Roslyn source generation to produce typed domain implementations from attributed C# classes. |
| Entity.Dsl: Attribute-Driven EF Core from Domain Models | A 10-part series building an online marketplace domain with Entity.Dsl -- an attribute-based DSL that source-generates EF Core configurations, repositories, unit-of-work, and DI registration from decorated POCO classes. |
| From a Big Ball of Mud to DDD: A Migration Field Guide | A multi-part series on migrating a legacy monolith to Domain-Driven Design -- from diagnosis through Event Storming, incremental refactoring, library extraction, and testing. Follows SubscriptionHub, a 6-year-old SaaS billing platform with 4 teams and 80K lines. |
| Injectable: Compile-Time DI Registration via Source Generation | How a single [Injectable] attribute shifts DI lifetime ownership to the service class and eliminates hand-written registration code through Roslyn source generation. |
| Where Requirements Meet DDD | How the type-safe requirements tracking system maps to Domain-Driven Design concepts -- features as bounded contexts, acceptance criteria as use case specifications, and the hexagonal architecture that connects them all. |
Content & Meta-Modeling
The Content Management Framework series — applying M3 meta-metamodel theory to a full-stack .NET CMF.
| Article | Description |
|---|---|
| Content Management Framework: From Meta-modeling Theory to Full-Stack DDD Code Generation | Applying metamodeling theory to build a Content Management Framework for .NET with six DSLs compiled by Roslyn source generators into a full application stack. |
| Building a Content Management Framework | The full series: from meta-metamodel theory to six DSLs compiled by Roslyn source generators into a complete application stack. Twelve chapters covering vision, feature catalog, M3 foundation, DDD DSL, content modeling, admin generation, workflow orchestration, and more. |
Spec-Driven & Requirements
Type-safe requirements tracking — features as code, acceptance criteria as compiler-enforced contracts, and an unbroken chain from definition to test.
| Article | Description |
|---|---|
| Requirements as Code: A Type-Safe Chain from Feature Definition to End-to-End Testing | A type-safe requirements tracking DSL in C# that makes the compiler enforce the chain from feature definition to specification to implementation to tests. |
| Requirements as Code in TypeScript | Implementing a self-tracking requirements DSL in TypeScript -- where features are abstract classes, acceptance criteria are abstract methods, decorators link tests to features, and the compiler refuses to build if the chain breaks. |
| Onboarding Typed Specifications: From Zero to Compiler-Verified Features | A 7-part series documenting how a personal CV website evolved through four phases -- SPA, static generation, multi-layer testing, and typed specifications -- until the compiler itself could answer: "Is every feature tested?" |
| Auto-Documentation from a Typed System | A 9-part series on building a Document DSL that generates documentation from typed domain DSLs -- from DDD aggregates to deployment runbooks to Grafana dashboards, all as compiler output. |
| Scaling Requirements as Code | A plan for scaling the TypeScript requirements tracking system beyond 20 features -- code generation from Jira, Linear, databases, and YAML files. |
| The No-Spec Cost: Scaling Requirements in Industrial Monorepos | A 6-part series on why industrial monorepos fail -- ServiceProvider god-objects, physical-only boundaries, requirements lost in Jira -- and how Requirements as Projects create compiler-enforced logical boundaries that scale to 50+ projects and 15 teams. |
| Typed Specifications vs. Everything Else | A systematic comparison of typed specifications against Jira, BDD, Allure/TestRail, xUnit traits, directory conventions, wiki matrices, contract testing, and Roslyn source generators -- with code examples, a comparison matrix, and an honest assessment of when each approach fits. |
| tspec: Compiler-Enforced Project Management for Enterprise Teams | A 13-part series designing a B2B enterprise product around typed specifications -- M3 meta-metamodel, language backends, Diem CMF instance, custom workflows, support levels, and a dashboard that replaces Jira's traceability layer. |
| Spec-Driven vs Typed Specifications: Two Philosophies for AI-Assisted Development | A deep comparison between document-driven specification frameworks and compiler-enforced typed specifications. Same problem, radically different solutions. |
| The Human Side of Requirements as Code | When acceptance criteria are abstract methods written alongside the Product Owner, the ubiquitous language stops being a concept and becomes a daily practice. |
Source Generators & DSLs
Roslyn source generators, schema-driven typed APIs, and the family of DSLs they enable.
| Article | Description |
|---|---|
| BinaryWrapper: Type-Safe .NET Wrappers for CLI Binaries | Turn any CLI binary into a typed C# API by scraping its help output and generating version-aware command classes with IntelliSense and structured parsing. |
| Builder Pattern: Creational Pattern | A comprehensive guide to the Builder pattern in .NET with an async-first framework handling circular references, validation accumulation, and concurrent access. |
| Docker Compose Bundle: Unified Types from 32 Schema Versions | Merging 32 Docker Compose JSON Schema versions into one unified C# type system with version metadata, using Roslyn source generators. |
| Traefik Bundle: Typed Configuration from Traefik v3 JSON Schemas | Generating strongly-typed C# models and fluent builders from Traefik v3 JSON Schemas -- with real-world examples covering HTTPS, Let's Encrypt, security headers, rate limiting, circuit breakers, and more. |
| Strongly-Typed Traefik for .NET: A Schema-Driven Source Generator | A ten-part walkthrough of FrenchExDev.Net.Traefik.Bundle -- turning Traefik's official JSON schemas into compile-safe C# models, fluent builders, a TFK001/TFK004 Roslyn analyzer, and a schema-validated YAML/JSON serializer. |
| GitLab.DockerCompose: Typed Configuration from Ruby Templates | An eight-part series on replacing GitLab's untyped GITLAB_OMNIBUS_CONFIG string with compile-time-safe C# models -- generated from 80 versioned gitlab.rb templates by a Roslyn Source Generator. |
| GitLab.Ci.Yaml: Schema-Driven Typed Pipelines for .NET | A 13-part series turning GitLab's official CI JSON Schema into fully typed C# models, fluent builders, and YAML serialization -- with version awareness across 11 GitLab releases, zero runtime reflection, and compile-time safety for every pipeline property. |
| DistributedTask.Dsl: Saga-Driven Distributed Processing from C# Attributes | A 16-part series building a distributed task system with DistributedTask.Dsl -- an attribute-based DSL that source-generates saga orchestrators, typed step contexts, queue consumers, API controllers, listening strategies, and resilience policies from decorated C# classes. |
| Ops DSL Ecosystem: Terraform for C# | A typed, compiler-enforced operational DSL ecosystem. 22 sub-DSLs covering everything from deployment to compliance. Three execution tiers: InProcess, Container, Cloud. |
| Typed Docker: From CLI Strings to Compiled Infrastructure | A sixteen-part series on replacing raw Process.Start calls and hand-written YAML with fully typed, version-aware C# APIs for Docker CLI, Docker Compose CLI, and the Compose specification -- generated from 97 scraped versions and 32 JSON Schemas by Roslyn source generators. |
| Kubernetes.Dsl: Schema-Driven Typed Manifests for .NET | Feed it the Kubernetes OpenAPI v3 spec and CRD schemas in their native YAML/JSON, get fully typed C# models, fluent builders, multi-version awareness across both core K8s and CRD ecosystems, a kubectl wrapper, Roslyn analyzers, and a typed target for every Ops.Dsl sub-DSL -- replacing string-templated YAML across the operational stack. Dev-side, not runtime. |
| QualityGate: Roslyn-Powered Static Analysis and Quality Metrics for .NET | A Roslyn-powered quality gate tool that enforces thresholds for complexity, coupling, cohesion, coverage, and mutation testing at build time. |
Architecture & Patterns
Foundational design patterns, state machines, and the meta-disciplines that keep large codebases honest.
| Article | Description |
|---|---|
| Contention over Convention over Configuration over Code | A 10-part series on how the type system, Source Generators, and Roslyn Analyzers push beyond Convention to a fourth era where the compiler actively fights incorrect code -- and eliminates the double cost of documenting and enforcing conventions. |
| FiniteStateMachine: A Production-Grade Async FSM Framework for .NET | A fully async state machine framework for .NET with three tiers -- Dynamic, Typed, and Rich -- featuring guards, hierarchical states, and Result-based error handling. |
| Nine Patterns, One Framework: Building .NET Infrastructure That Composes | A multi-part series on nine .NET patterns from the FrenchExDev framework -- from Option and Union through Mediator, Saga, and Outbox -- covering design, API, testing, DI integration, and real-world composition. |
| Result Pattern: Give Value to Your Exceptions | The Result pattern makes success and failure explicit in the type system, forcing developers to validate data before moving forward instead of relying on exceptions. |
| 15 State Machines, Zero Frameworks: Architecture of a Terminal-Themed CV Site | A 6-part series on extracting 15 pure state machines from a vanilla JS SPA, migrating to TypeScript with esbuild, and testing them with 98%+ coverage using Vitest and Playwright. |
| From 1270 Lines to State Machines: Rebuilding a Developer CLI | How we replaced a monolithic workflow script with state machine-driven architecture, testable I/O abstraction, and three switchable TUI modes -- using the same patterns as the site's frontend. |
| Don't Put the Burden on Developers | When bugs slip through, tests get skipped, or architecture erodes, the default reaction is "developers should be more careful." That reaction is always wrong. Every recurring failure is a structural gap. |
| MDE and Métacratie: What a Compiler and a Political Framework Have in Common | A cross-disciplinary essay connecting the Model-Driven Engineering work in this blog to the Métacratie philosophical dossier on this site. Seven bridges (layered stack, expressivity theorem, attack on the implicit, end-to-end traceability, fixed point and lineage, operationalized Parliament of Things, Law.DSL), the 1995 Dumas case as central evidence, and a constructive program for a Law.DSL parameterized by META(Ex × Ty). With Foucault, Luhmann, Latour, Sowa, Lessig, and a junction with Catala (INRIA). |
| La carte, la légende, et le compilateur mou | Premier article du blog en français. Onramp vers le diptyque MDE × Métacratie. Korzybski et Tarski publient la même intuition la même année (1933) ; la formule se reformule comme une récursion qui se stabilise au point fixe M3. Pourquoi le territoire et la carte bougent tous les deux, le mini-Source-Generator C# qui montre le refus mécanisé, et le détour biographique par Diem (le CMF PHP de Thibault Duplessis sur lequel j'ai pris le lead fin 2010) où j'ai vécu Korzybski sans le nommer en régénérant le territoire depuis la carte YAML. Avec Hofstadter, Brian Cantwell Smith, Sowa et Whitehead. |
Infrastructure & DevOps
Developer-side infrastructure: file watchers, hot reload, hardened test pipelines, and the HomeLab meta-orchestrator design-in-public.
| Article | Description |
|---|---|
| Infrastructure as Code: My Journey | From Bash scripts to PowerShell modules -- how I learned to automate infrastructure with an anything-as-code philosophy across Docker, Packer, and Vagrant. |
| Hardening the Test Pipeline | How smoke filtering, auto-baseline creation, compliance tracking, and pre-push hooks turned a fragile test suite into a sustainable quality gate. |
| Building a File Watcher That Actually Understands Your Project | A state-machine-driven file watcher with cumulative change batching, smart pipeline resolution, double-buffered builds, and a keyboard-driven TUI -- using nothing but native fs.watch(). |
| Hot Reload Without a Framework: WebSocket, Strategy Resolution, and Zero-Artifact Injection | Extending the file watcher with a WebSocket hot-reload system that knows whether to reload the full page, swap CSS, refresh content, or update the TOC -- all injected at serve-time, never touching disk. |
| HomeLab: A Typed, Plugin-Driven Meta-Orchestrator for Local Infrastructure | Designing HomeLab in public. A CLI-first, SOLID, pipeline + events + plugins meta-orchestrator that talks to Docker, Podman, Packer, Vagrant, Traefik and GitLab -- built on Ops.Dsl and the FrenchExDev toolbelt -- and used to stand up the very GitLab that hosts its own source. 56 parts. |
| HomeLab K8s: Making HomeLab a Real Dev-K8s Enabler with Multi-Client Isolation | K8s.Dsl as a HomeLab plugin. Real kubeadm or k3s clusters on Vagrant VMs. Three topologies that fit in 64 GB. Multi-client isolation for the freelancer with 128 GB. ArgoCD with a generated GitOps repo. Zero forks of HomeLab core. 50 parts. |
This Site / Meta
The story of building this terminal-styled CV site -- from PDF to SPA to static site, the quality infrastructure around it, and the AI collaboration that made it happen.
| Article | Description |
|---|---|
| This Website: From PDF to Terminal-Styled SPA in 72 Hours | How a PDF resume became a terminal-themed, markdown-driven single-page application with Mermaid diagrams, scroll spy, and four color themes in 72 hours. |
| From Terminal-Styled SPA to Static Site | Converting a JavaScript-only SPA into a crawlable static site with progressive enhancement, pre-rendered mermaid diagrams, full SEO, and a shared code architecture. |
| The Journey: Building This Site with Claude | The complete story of how a PDF resume became a terminal-styled SPA, then a static site, then a polished product -- through iterative human-AI collaboration. |
| About Me and This Site: 165 Commits in 10 Days | A data-driven retrospective on how this CV website was built -- git history analysis revealing work patterns, nocturnal coding sessions, and the relentless iteration cycle. |
| Website Front-End Design | Comprehensive design document covering all 28 state machines, CSS animations, DOM events, accessibility patterns, and cross-machine interactions. |
| TocTooltipMachine: From 3 States to 4 | Evolving the TOC tooltip from a 3-state to a 4-state machine with a leaving grace period, typewriter transitions, and smooth re-entry between items. |
| The Loop: Claude + Quality Gates as a Self-Reinforcing Test Cycle | How pairing an AI agent with machine-readable quality gates creates a feedback loop that grinds unit test coverage upward until thresholds are met. |
| Quality to Its Finest: Testing a Terminal-Styled CV Website | A deep dive into multi-layer quality assurance -- 481 unit tests, 54 E2E tests, 229 visual regression screenshots, 121 accessibility audits, property-based fuzzy testing, and a Husky pre-push gate. |
| 838 Chrome Processes for Diagrams: Optimizing Mermaid Static Rendering | How I replaced 838 headless Chrome spawns with a single browser instance and concurrent tabs -- cutting mermaid diagram build time while adding state machines and testable architecture. |