In my Blazor projects, the business logic has been tested with xUnit for a long time, but the components themselves were not. If an @if showed the wrong button, I only saw it by opening the page. In this post, we add a bUnit test project to a Blazor application and cover the cases I run into most often.
How I built arbitres.ca with Claude and Copilot
Part 2 in the “Behind arbitres.ca” series: Part 1 – Scheduling umpires without Excel | Version française
In the first article, I introduced arbitres.ca and its stack. Here I move on to the method. At the end of July, the repository had 280 commits, 68 specs and 9 skills, built up over about two and a half months of evenings.
[Read More]arbitres.ca: scheduling baseball umpires without Excel
Part 1 in the “Behind arbitres.ca” series: Part 2 – How I built it with AI | Version française
Someone close to me umpires in minor league baseball. That’s how I saw the way associations handle their umpire assignments, often with an Excel file and a bunch of text messages. I also wanted a project big enough to really test Blazor and Supabase, and the way I work with AI.
[Read More]Build an MCP server in C# and plug it into Claude Code
Part 3 in the “Agent Skills” series: Part 1 – What an agent skill is | Part 2 – Create your own skill | Version française
In the first article and the second one of this series, we saw what a skill is and how to create one. A skill gives instructions to the agent, but it doesn’t give it access to new data or new systems. For that, you need tools, and that’s the role of MCP.
[Read More]Structured Outputs with Ollama and .NET
Part 6 in the “Local AI with Ollama and .NET” series: Part 1 – Ollama and .NET | Part 2 – Local RAG | Part 3 – AI Agents | Part 3.5 – MCP Server | Part 4 – Microsoft Agent Framework | Part 5 – Aspire | Version française
Asking a local model to reply in JSON directly in the prompt works most of the time. The problem is the rest of the time: the parsing blows up, and rarely at a good moment. Here’s a simple trick to get reliable JSON with Ollama and .NET.
[Read More]Orchestrating Ollama and Blazor with .NET Aspire
Part 5 in the “Local AI with Ollama and .NET” series: Part 1 – Ollama and .NET | Part 2 – Local RAG | Part 3 – AI Agents | Part 3.5 – MCP Server | Part 4 – Microsoft Agent Framework | Version française
Through the rest of the series, Ollama ran by hand: installed locally on the machine, the ollama pull done manually, and the .NET app pointing at Ollama’s local address hardcoded. It works, but it’s several manual steps to repeat on every machine. Aspire takes care of this configuration. I wanted to see what it changes.
Top 10 C# 13/14 and .NET 9/10 Features
Retrospective, Lessons Learned, and v2 Roadmap
This post is part of the Voice Assistant on Raspberry Pi series.
Six articles and two evenings later, we have a French-language voice assistant running entirely on two Raspberry Pi 4s.
[Read More]Function Calling: Teaching Tools to the Assistant
This post is part of the Voice Assistant on Raspberry Pi series.
In article #5, we injected weather data into every conversation, even for questions like “what’s your name?”. That wastes tokens. Function calling fixes this: the LLM decides when it needs a tool and only calls it when the question actually warrants it.
The complete code for this article is available on GitHub.
[Read More]Real-Time Weather and Swapping to the Claude API
This post is part of the Voice Assistant on Raspberry Pi series.
The assistant responds well, but it has no idea what the weather is like outside. We wire up Open-Meteo, a free, key-less weather API. And while we’re at it, we swap Ollama for the Claude API: a single line in appsettings.json.
The complete code for this article is available on GitHub.
[Read More]