Laraue Software Blog β€” C# .NET Development & Open Source

Real code, real decisions, real tradeoffs. We write about what we build β€” .NET libraries, Telegram bots, AI integrations, and the architecture mistakes worth learning from.

When not to use a nullable foreign key β€” modelling the empty state as a default row
Part 9 of building a Telegram task tracker solo. The issue layer in the web app and the database design decision at its centre β€” when a nullable foreign key is the wrong choice and a dedicated default row is better, using issues, epics and the backlog as the example.
Read β†’
Deploying a .NET app and PostgreSQL to a cheap VPS with Docker Compose
Part 6 of building a Telegram task tracker solo. Deploying to a cheap VPS with Docker Compose β€” self-hosted PostgreSQL tuned for 1 GB of RAM, a GitHub CI pipeline running on push to main, and a walkthrough of the Dockerfiles.
Read β†’
Clean Telegram bot architecture in .NET β€” controllers instead of a giant switch
Part 5 of building a Telegram task tracker solo. A clean .NET Telegram bot with ASP.NET-style controllers and middleware instead of a giant switch, a layered solution structure, and EF Core paired with linq2db on the same models for the queries EF Core handles poorly.
Read β†’
Choosing a pet project stack for solo development β€” .NET, PostgreSQL, Nuxt, and why we prefer boring technologies
Part 4 of building a Telegram task tracker solo. The reasons behind .NET 10, PostgreSQL 18, Nuxt 4 and Vue 3. A bit about the MongoDB-to-Postgres migration in a past project that taught us to prefer boring, stable technologies.
Read β†’