Our midlife crisis has a registration page now. Mark and I signed up for HYROX Utrecht: 8 km running plus sleds, wall balls and burpees. The name is silly. The cause is serious. We're raising €1,500 for KWF cancer research ❤️ https://acties.kwf.nl/fundraisers/MarkandGeraldsmidlifecrisis
Gerald Versluis
@jfversluis.dev
Engineer @microsoft.com (.NET) | content creator | speaker | gamer | .NET MAUI, Blazor, C# | posts & opinions on personal title | He/Him | Talk about what you love, not what you don't. 📍 Maastricht, NL 🎥 YouTube.com/@jfversluis 🔌 jfversluis.dev
“Generate unit tests” leaves a lot unsaid. A new open-source test agent learns the repo, framework, and test command before writing tests. It completed 140/152 benchmark tasks vs 120/152 for stock Copilot. https://devblogs.microsoft.com/dotnet/polyglot-unit-testing-agent/
Publishing to NuGet.org with an API key? Aug 17: new keys max out at 30 days. Nov 1: older keys expire. If CI still uses a key, look at Trusted Publishing now. https://devblogs.microsoft.com/dotnet/strengthening-nuget-supply-chain-security-reducing-api-key-lifetime/
More reasoning is not always better. Copilot cloud agent now lets you set it per task. Less for small changes, more for migrations or messy bugs. More reasoning can use more credits. https://github.blog/changelog/2026-08-03-customize-the-reasoning-level-for-copilot-cloud-agent
Join @jfversluis.dev for #HYPElessAI – Episode #2: Stop Watching AI Demos and Start Using It. Discover how #AI really fits into a developer's daily workflow. No hype. No fake demos. Just practical techniques you can start using immediately. Tickets 👉 hypeless-ai.updateconf.net #Developers #Coding
XAML is getting a serious upgrade in .NET 11. Global and implicit XML namespaces, source generation, C# expressions in XAML, incremental Hot Reload, and performance improvements are all on the way for .NET MAUI. At MAUI Day Skopje, Stéphane Delcroix will break it all down.
Update Talk | @jfversluis.dev & @kajetanduszynski.bsky.social Most AI demos don't work on your legacy app. Here's what actually does. Want the complete session? 👉 now.updateconf.net 🚀 Join Gerald live online! #HYPElessAI #2: Stop Watching AI Demos 👉 hypeless-ai.updateconf.net youtu.be/aOAImoqnC7I
Want to get started with .NET MAUI the right way? Join @jfversluis.dev for a hands-on workshop covering REST APIs, JSON, lists, location, maps and theming. Expect practical best practices and a look at the tooling used by the .NET MAUI team. 🐒 #dotnetmaui #MauiDay
I made two contributions to the GitHub Copilot CLI! Fellow content creators should be happy. Streamer mode now: - Hides the timestamps on your prompts - Suppresses the "update available" notification Look out for it in a next release! 👀
One shot with GitHub Copilot Desktop: @mauiday.net event app with data coming from Sessionize, branding taken from the website, used MAUI DevFlow so that the agent could self-verify and adjust. Is it perfect? Not yet, but also I could not have done this in the time Copilot did.
What’s next for .NET MAUI? At #MAUIDay Cologne, Gerald Versluis will explore where .NET MAUI stands today, what .NET 11 brings. Discover how AI, performance, quality, native experiences and developer productivity are shaping the future of cross-platform apps.
Copilot CLI tip: restrict tools before the task starts. If I only want repo work, I do not want the agent trying web searches or unrelated commands. Use available/denied tools to shape the session up front. Fewer detours. Less approval noise. Less wasted context.
Copilot CLI remote control feels like a small feature until you use it. Start a session with --remote, walk away, then steer it from GitHub.com or GitHub Mobile when it needs approval or direction. Very handy for long-running fixes where the terminal is not where you are.
Saturday Copilot save list: 1. Keep sessions PR-sized 2. Ask for bug review, not “thoughts” 3. Give broken-test tasks a stop condition The pattern is boring but useful: smaller scope, clearer constraints, easier review.
Copilot CLI prompt template for broken tests: Goal: make this test pass. Failing command: ... Failure: ... Constraints: keep public behavior. Validation: rerun the same command. Stop if: the fix needs product/design input. Report: root cause, files changed, test result.
The one thing I want for the GitHub Copilot desktop app now is a way to go over all my sessions that have an open PR that is not merged and tell me the latest state of each so I don't have to poll them all myself with: news?
The Copilot app/CLI habit I keep coming back to: one session should be one PR-sized change. Not “make the app better”. More like: • fix this failing test • add this validation rule • update this API call and its tests Small scope. Clear diff. Easier review.
If you build apps with .NET MAUI, we would really appreciate a few minutes of your time. There is a .NET MAUI survey open now to help us understand what is working, what still hurts, and where we should focus next. Survey: https://nam.dcv.ms/ikqOCfb9K3 Thank you!
My favorite kind of refactor is the one users never notice. Delete dead code. Rename the confusing thing. Move setup into one place. Add the guard clause that makes the impossible state impossible. No demo. No screenshots. Just less code that can hurt you later.
Got something to share with the .NET MAUI community? The CFP for #MAUIDay Cologne is open. We’re looking for practical talks, real-world lessons, technical deep dives, workshops, and fresh ideas from across the .NET MAUI ecosystem. 📍 Cologne 📆 Closes 1st August
GitHub Actions tip: stop giving GITHUB_TOKEN more access than the job needs. A build job usually needs read access. A release job may need write access. An issue/comment bot needs something else again. Set permissions per workflow or job. Start small, then add only what breaks.
A Copilot code review prompt I like: “Review this diff for bugs only. Ignore style unless it changes behavior. Focus on edge cases, async flow, nullability, threading, resource lifetime, and tests that should exist but do not.” Much better than “what do you think?”
If your .NET solution has package versions scattered across project files, future you has cleanup waiting. Central Package Management moves versions into Directory.Packages.props. Projects reference the package. One file owns the version. Less dependency archaeology.
MAUI startup feels slow? Do not optimize from vibes. Add timestamps around: 1. App/process start 2. App constructor 3. first page + viewmodel creation 4. first data call 5. first frame after navigation Then fix the biggest gap, not the loudest guess.
One HttpClient per request is not the fix. It owns a connection pool. Dispose it constantly and you churn connections/ports. Use one of these: • long-lived HttpClient + PooledConnectionLifetime • short-lived clients from IHttpClientFactory
Steal this .NET MAUI release check before you ship: 1. Cold start on a real device 2. Light/dark switch while running 3. Deep link with real parameters 4. Network off/on 5. Rotate, resume, background 6. Fresh install + upgrade install Boring? Yes. Finds bugs? Also yes.
.NET MAUI tip: stop checking the app theme every time you need a color. AppThemeBinding lets XAML pick Light/Dark resources, and update when the system theme changes. Less theme plumbing. Fewer dark mode surprises. https://learn.microsoft.com/dotnet/maui/user-interface/system-theme-changes
Saturday .NET catch-up list: 1. Test a .NET MAUI preview SDK locally without breaking your machine 2. Move NuGet publishing away from long-lived API keys 3. Watch the SkiaSharp 4 MAUI standup Practical stuff for the weekend. Links below.
Friday afternoon hot take: The best developer tools are the ones you barely notice. Not flashy. Not full of ceremony. Just boring little things that quietly remove friction until you forget how annoying the old workflow was. What boring tool deserves more credit?
Missed the .NET MAUI Community Standup yesterday? SkiaSharp 4 has arrived. If you build anything drawing-heavy, custom UI-ish, or just like pixels behaving properly, this one is worth catching up on. https://www.youtube.com/watch?v=V_EO32C0AlY