Skip to content
View arnelirobles's full-sized avatar

Block or report arnelirobles

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
arnelirobles/README.md

Arnel Robles

.NET engineer, 14 years in production software. I build headless CMS, event-driven backends, and developer tooling.

Everything below is open source and self-hostable, under @BaryoDev. No paid tier, no seat cap, no metered anything.


Upstream

Nine merged fixes and five accepted bug reports in libraries I run in production, across three repos totalling 13k stars. Each was found by using the thing, not by browsing for issues.

Project What was wrong
umbraco/Umbraco-CMS ★5.2k Instances sharing a database failed each other's requests registering the same OpenIddict application. #23599, #23727, shipped in 17.7 and 18.2
testcontainers/testcontainers-dotnet ★4.4k MongoDB replica-set init was not idempotent, so a reused container hung against a one-hour timeout. #1731, #1735. A reused Couchbase container then stalled on the first step of configuring a cluster that was already configured. #1736
JasperFx/marten ★3.5k HardDeleteWhere could not remove already soft-deleted rows, and returned cleanly either way. #5215, #5202, #5240. The parameterised MatchesJsonPath overload threw on every call, so no one could have been using it. #5289

Four of the five reports were fixed by the projects' own maintainers rather than by me, which is the part worth pointing at: the report carried enough evidence for someone else to act on it.

Reported Outcome
marten#5239 A projection's event loader reported a ceiling it never scanned, so events could be skipped permanently. Confirmed by the maintainer as silent, permanent data loss, and fixed in #5242.
marten#5234 Event masking and stream compaction wrote across tenants under partitioned event tenancy. Fixed in #5236.
marten#5222 An audit reported a check as passing that it had not actually performed. Fixed in #5231.
umbraco#23598 The Delivery API's subscriber guard can never match, because the server role is not elected until after the boot notification it reads from. Being fixed by an Umbraco developer in #23801 for 17.8 and 18.3, a change spanning 21 files.
testcontainers#1732 A readiness check counted log lines and compared the count for equality, so a container either hung against a one-hour timeout or was reported ready before the server was listening. Two other users confirmed it independently. Fixed in #1735.

upstream-fixes writes each one up, and carries a runnable reproduction for marten#5215 against published NuGet packages, so you can watch that bug appear on one version and disappear on the next rather than take my word for it.


barakoCMS

Open-source headless CMS for .NET. Event-sourced on Marten and PostgreSQL, multi-tenant, user-defined content schemas, 13 opt-in modules, an event-triggered workflow engine, and a Next.js admin UI.

100 endpoints and 857 tests, run against real PostgreSQL and MinIO through Testcontainers. On .NET 10 and Marten 9. MPL-2.0, and every module is included rather than sold separately.

The 4.0 work is merged and waiting on a tag: four auth and file-access holes closed, backup and restore with CI proving a restore, GDPR erasure, tenancy resolved from a domain, content references, multi-architecture non-root images, an SBOM, and a WCAG pass.

Live at playground.baryo.dev/barakocms. Typed client: barako-client. baryo.dev itself is rendered from it.


.NET libraries

Each solves one problem, ships to NuGet, and is tested rather than described.

Project
Verdict Result pattern with a zero-allocation core, eight packages. The allocation promise is the product, so it is enforced by benchmark rather than asserted in a README: 0 B and 0 collections measured over 1.6M operations on 8 threads.
Mapsicle Object mapping, thirteen packages at 2.1.0, one test project per integration. Benchmarked on x64 and arm64 against AutoMapper and Mapperly, and the published numbers say where it loses as well as where it wins.
Carom Resilience: retry, timeout, circuit breaker, bulkhead, rate limiting, fallback, hedging. Zero dependencies in the core, netstandard2.0 upward, 341 tests run on both .NET 8 and .NET 10.
Talaan Spreadsheet and CSV reader, xlsx and CSV, zero dependencies. barakoCMS consumes it as a published package rather than a project reference, so the packaging is exercised for real.

Umbraco packages

Project
umbraco-pwa Turns an Umbraco site into an installable, offline-capable app. On the Umbraco Marketplace, 0.4.0 on NuGet.
umbraco-read-aloud Read-aloud for an Umbraco site using Microsoft Edge neural TTS.

TypeScript and JavaScript

Project
rnxjs Reactive UI framework. Bootstrap-native, no build step. Suite green on every pull request after four URL-sanitisation fixes and a CI gate that could not fail before. Worked examples.
rnxORM Node.js ORM, integration-tested against PostgreSQL, SQL Server and MariaDB rather than mocked.
pwa-kit Install prompt for Android and iOS, a network-first service worker, and the helpers around them.
read-aloud Read-aloud for any site. Headless controller, web component, word highlighting.
feed-slurp RSS and Atom fetching in the browser.
dopaminejs Game feel engine: juice, rewards and feedback for HTML5 games. Built with it.
BaryoDev.Libraries.JavaScript Zero-dependency TypeScript utilities on npm.

Tooling in Go

Project
BaryoVM PaaS-style deploys onto your own cheap VMs. Agentless, over SSH, one binary. Every BaryoDev deploy goes through it, which is how its gaps get found.
Baryo.CLI Local AI chat on Docker Model Runner. Models run on your machine, no API keys, nothing leaves the laptop.

Writing

Mostly postmortems of my own mistakes, and decisions with the reasoning attached.

My benchmark said my library was 2x faster. It was not. A performance gate that could not have failed for its own reason, and what it took to make it resolve what it reports
We built a modular CMS and deliberately did not make the modules plugins Runtime assembly loading forecloses Native AOT permanently, and a plugins folder is a place where writing a file runs code
Your ORM is reading your lambdas with a regex What lambda-parsing query builders actually do, and where that breaks
Migrating from Polly to Carom The Polly maintenance fee is reasonable, the mechanism is the problem, and here is a pattern-by-pattern migration
Mapsicle 2.1: honest numbers against AutoMapper Two architectures, medians of repeated runs, and a section on where it loses
The tenant filter that only worked on the way in A multi-tenant event-sourcing bug that reads correctly and leaks on the way out
One cheap VM, nineteen containers, no platform What running everything on one box costs, and what it saves
What two hundred issues taught us about building with AI Where AI-assisted work fails quietly, and which gates catch it

More at baryodev.medium.com.


How I work

Tests that cannot fail are the defect I look for first: a mock returning what the real dependency never returns, an assertion satisfied by a type's default value, a benchmark that prints and exits zero. Before trusting a gate I break the thing it guards and check it goes red.

Decisions that are expensive to reverse get written down with the reasoning, not just the outcome, so the next person can disagree with the argument rather than guess at it.

AI-assisted daily, held to the same gates as everything else.


Stack

Languages C#, TypeScript, JavaScript, Go, SQL Backend .NET 8 to 10, ASP.NET Core, REST and GraphQL, microservices, event sourcing, CQRS-influenced design Messaging RabbitMQ, SQS, SNS, webhooks, background jobs Data PostgreSQL, SQL Server, Marten, Redis Cloud AWS (CDK, ECS, Fargate), Azure (Functions, App Services, DevOps), Oracle Cloud, Docker Testing xUnit, NUnit, Moq, Testcontainers, Playwright, Vitest, BenchmarkDotNet, security scanning in CI


📫 arnelirobles@gmail.com · 🌐 baryo.dev · ✍️ baryodev.medium.com

Pinned Loading

  1. BaryoDev/Verdict BaryoDev/Verdict Public

    Start with zero-allocation core. Scale to enterprise features through opt-in packages. Never compromise on speed.

    C# 11 1

  2. BaryoDev/barakoCMS BaryoDev/barakoCMS Public

    A headless CMS suite for .NET: an event-sourced engine, opt-in modules, an admin UI, and a PWA kit.

    C# 4 4

  3. BaryoDev/Carom BaryoDev/Carom Public

    Carom is a zero-dependency resilience library that enforces best practices by default.

    C# 2 1

  4. BaryoDev/dopaminejs BaryoDev/dopaminejs Public

    Progression mechanics for web apps: XP, levels, achievements and timezone-correct daily streaks

    JavaScript

  5. BaryoDev/Mapsicle BaryoDev/Mapsicle Public

    Mapsicle is a high-performance, modular object mapping ecosystem for .NET.

    C# 1 1

  6. BaryoDev/umbraco-pwa BaryoDev/umbraco-pwa Public

    Turn an Umbraco site into an installable, offline-capable app, and see who installed it from your own backoffice. Free, self-hosted, no third-party dashboard.

    C# 1 2