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.

Why reviewing AI-generated code is often more expensive than writing it yourself
The modern approach to development increasingly comes down to one claim β€” AI should write the code, and the developer just steers it and checks the results. The fact that reviewing generated code well enough to trust it is often slower than writing it yourself gets quietly left out.
Read β†’
Telegram Login Widget vs Mini App auth in .NET β€” two validation schemes, one JWT
Part 13 of building a Telegram task tracker solo. Users asked for a web version outside Telegram, so it needed its own login. Adding the Telegram Login Widget meant a second validation scheme alongside the Mini App's β€” and both end at the same JWT, because the app barely depends on Telegram past login.
Read β†’
One card from a Telegram album β€” handling media groups and edits in a bot, without timeout hacks
Part 12 of building a Telegram task tracker solo. Telegram delivers an album as a burst of separate messages and an edit as a fresh update β€” here is how to turn a media group into a single record without the usual timeout accumulator, and how to treat an edit as an update instead of a duplicate.
Read β†’
Saving media from a Telegram bot β€” store the preview, stream the original
Part 11 of building a Telegram task tracker solo. Teaching the capture bot to handle photos and video, and the storage decision behind it β€” keep small previews on disk, stream full files straight from Telegram on demand without buffering them in memory, using nginx range-request passthrough, instead of re-hosting everything.
Read β†’
Why users kept choosing Telegram Saved Messages over our bot β€” and what we changed
Part 10 of building a Telegram task tracker solo. The story of a product mistake β€” we added epic and status selection to the bot, but real users kept using Saved Messages β€” and how we fixed it.
Read β†’
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 β†’
Telegram Mini App authentication in .NET end to end β€” initData validation, JWT issuing and the Nuxt frontend
Part 8 of building a Telegram task tracker solo. The full Telegram Mini App authentication flow in a real .NET and Nuxt app β€” validating the initData signature on the server with HMAC-SHA256, issuing and using a JWT bearer, reading the user from HttpContext, and why CORS matters.
Read β†’
Deploying a Nuxt Telegram Mini App. Setting up HTTPS on nginx with Let's Encrypt. A new mini app via BotFather
Part 7 of building a Telegram task tracker solo. How to deploy a Nuxt Mini App with the nginx + HTTPS + Let's Encrypt combo, set up automatic certificate renewal with certbot, register the mini app in BotFather, and test it locally through ngrok.
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 β†’
From Telegram Saved Messages to a real task tracker β€” defining the user path
Part 3 of building a Telegram task tracker solo. Why Saved Messages is not convenient for managing tasks, which minimal scenario Laraue Boards started from, and why the user path is defined before development begins.
Read β†’
Prototyping the interface with AI before writing code
Part 2 of building a Telegram task tracker solo. Why we start with the interface, how AI HTML prototypes replaced Figma, and how the first Laraue Boards prototype turned out.
Read β†’
Building a Jira alternative solo β€” why we are doing it and the repository links
Part 1 of building a Telegram task tracker solo with AI. What problem we are solving, why the world needs another task tracker, and which two repositories the article series is built on.
Read β†’
How we decide what to build β€” validating a product idea in a crowded market
Validating a product idea before writing code β€” researching the market, testing the idea in public, and using AI to judge whether it is realistic to compete for the keywords you need.
Read β†’
How we build β€” engineering principles for working on real products
The engineering principles Laraue projects follow β€” start from the user path, do not overcomplicate ahead of time, split logic into layers, isolate third-party integrations, and where AI helps and where it is not allowed near the codebase.
Read β†’
Building an AI-Powered Real Estate Ranking System with C#, Ollama, and a Custom Crawler
A technical deep-dive into an open-source real estate aggregator for Saint Petersburg β€” covering the C# / .NET 9 architecture, Ollama vision model integration, custom crawler design, and the ideality scoring formula.
Read β†’
Laraue Boards β€” an open source task tracker with Telegram integration and a lightweight Jira alternative
An open source task tracker that turns Telegram messages into cards on a kanban board. Send a message to the bot, get a card you can work with in the web app or the Mini App. Free, and the code is open.
Read β†’
Using Ollama in C# and .NET β€” Local LLM Integration With Structured Output
How to integrate Ollama with C# and .NET β€” native HTTP API, structured JSON output, vision model image analysis, and a typed NuGet adapter that generates schemas from C# classes automatically. No cloud API required.
Read β†’
EF Core Triggers in C# β€” How to Write Database Triggers With Fluent Syntax and Expression Trees
A deep dive into Laraue.EfCoreTriggers β€” how to define database triggers in C# using fluent syntax, how the library translates expression trees to SQL, and how to extend it for new database providers.
Read β†’