# Christian Gennari · .NET-utvecklare i Hudiksvall

> Jag bygger användbar mjukvara kring verkliga problem.

**Christian Gennari** · .NET-utvecklare · Hudiksvall, Sverige

Den här sidan finns på svenska. [English version](https://dev.cgennari.com/en/index.md).

Ge mig ett problem så lyssnar jag, skriver ner vad det egentligen kräver och bygger hela lösningen: databas, gränssnitt och drift. Sedan kan de som använder den sluta tänka på problemet.

Jag är inne i sista delen av min .NET-utbildning på Edugrade: 22 veckors LIA på Statens tjänstepensionsverk (SPV) i Sundsvall, november 2026 till april 2027. Vid sidan om fortsätter jag att bygga [Nostos](https://dev.cgennari.com/sv#nostos), och nyss byggde jag [Lärka](https://dev.cgennari.com/sv#larka) med en klasskamrat.

## Lösningar jag har byggt

Tre projekt, vart och ett byggt kring ett problem jag har sett på nära håll.

### Nostos

Ett hem för ditt läsande.

**Problemet** Läsande, anteckningar och skrivande sker oftast i separata verktyg (en katalog, en e-läsare, en anteckningsapp, en ordbehandlare) och kopplingen mellan en tanke och sidan den kom ifrån går förlorad. Många av verktygen låser dessutom in ditt bibliotek hos någon annan.

**Lösningen** En läs- och skrivmiljö som håller ihop böcker, anteckningar, idéer och utkast. EPUB, PDF, ljudböcker och fysiska böcker samlas i ett bibliotek, en begreppsgraf kopplar ihop idéer över allt du har läst, och en skrivstudio håller källorna bredvid utkastet.

**Tekniken** En .NET 10-backend med Minimal API-endpoints ovanpå ett tjänstelager och EF Core, och en Angular 21-frontend byggd på standalone-komponenter och Signals. Den självhostade versionen körs med SQLite och det lokala filsystemet i Docker Compose. Nostos Cloud är ett separat, privat hostinglager på PostgreSQL som hämtar in open source-produkten som en git-submodul låst till en viss version, så att båda versionerna bygger på exakt samma app. Böckerna kan även nås från e-läsare via en OPDS-katalog.

**För vem** Människor som läser för att tänka och skriva. Öppen källkod (AGPLv3), går att självhosta och finns även som hostad tjänst.

**Teknik:** .NET 10, ASP.NET Core, EF Core, Angular 21, SQLite, PostgreSQL, Docker

**Länkar:** [Webbplats](https://nostos.page) · [Dokumentation](https://docs.nostos.page) · [Källkod](https://github.com/Christian-Gennari/Nostos)

Early access till Nostos Cloud, den hostade tjänsten, är öppet. Jag söker testare, och du får ett gratis år i utbyte. Den självhostade versionen är alltid gratis.

### Lärka

Allt för din utbildning, på ett ställe.

**Vi var två.** Viktor Johansson och jag byggde den som vårt grupprojekt på Edugrade, 2026.

**Problemet** Studenter och lärare på en yrkeshögskola behöver schema, uppgifter, betyg och LIA samlat, i mobilen lika väl som på datorn.

**Lösningen** En lärplattform med en tydlig roll för varje slags användare, och en betygsmodell som följer skolans regler.

**Tekniken** Ett ASP.NET Core-API med EF Core mot PostgreSQL, en Vue-frontend, inloggning med Microsoft och automatiska tester och driftsättning vid varje ändring.

**För vem** Studenter, lärare och administratörer på en yrkeshögskola som Edugrade.

**Teknik:** .NET, ASP.NET Core, EF Core, Vue, PostgreSQL, Docker, GitHub Actions

**Länkar:** [Källkod](https://github.com/discovicke/Larka)

### Ridealong

En riktig webbläsare för alla AI-agenter, med en människa som kan ta ratten.

**Problemet** AI-agenter fastnar överallt där det saknas ett API: instrumentpaneler, adminsidor, allt som kräver inloggning. Headless-webbläsare tar sig inte förbi tvåstegsverifiering, och du ser inte vad de gör.

**Lösningen** En riktig, inloggad webbläsare på din egen server som vilken MCP-klient som helst kan styra. Du följer med live i en webbvisare. När en agent stöter på en 2FA-kod eller en CAPTCHA ber den dig ta över, och fortsätter när du lämnar tillbaka. Flera agenter kan arbeta samtidigt, var och en i sitt eget fönster.

**Tekniken** En låst Docker-container: Brave på en virtuell skärm, Playwright MCP via Chrome DevTools Protocol och en visare i Node.js som strömmar skärmen till alla enheter och skickar pushnotiser. Installationen är ett enda kommando, som också kopplar in de agenter den hittar.

**För vem** Den som låter AI-agenter arbeta i en webbläsare och vill behålla kontrollen, med Claude Code, Codex, Cursor eller någon annan MCP-klient.

**Teknik:** Docker, Brave, Playwright MCP, Node.js, WebSockets · MIT

**Länkar:** [Källkod](https://github.com/Christian-Gennari/ridealong)

### Mindre saker

#### Free AI Commit Message

Commit-meddelanden från din stagade diff, i VS Code och JetBrains.

Ett IDE-tillägg som skriver Conventional Commits utifrån dina stagade ändringar. Det fungerar direkt utan API-nyckel, med din egen gratisnyckel för Gemini, Groq, OpenRouter eller GitHub Models, eller helt offline med en lokal Ollama-modell. Publicerat på VS Code Marketplace, med ett syskonplugin för Rider, IntelliJ IDEA, PyCharm och WebStorm.

**Problemet** Bra commit-meddelanden kräver ansträngning, och de flesta AI-verktyg för commits kräver en betald prenumeration eller API-nyckel innan de gör något alls.

**Så är det byggt** Två native-klienter (TypeScript på VS Code-API:t och Kotlin på IntelliJ Platform) byggda kring samma design för leverantörer och prompter. Ett litet edge-API med nyckelpool och rate limiting driver läget utan konfiguration, medan förfrågningar med egen nyckel går direkt från IDE:n till leverantören.

**Teknik:** TypeScript, VS Code API, Kotlin, IntelliJ Platform, LLM-leverantörer

**Länkar:** [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=christiangennari.free-ai-commit-message) · [Källkod](https://github.com/Christian-Gennari/vscode-extension-free-ai-commit-message) · [Källkod, JetBrains-plugin](https://github.com/Christian-Gennari/jetbrains-plugin-free-ai-commit-message)

#### Scriptorium

En självhostad skrivapp som sparar ren Markdown.

En lugn plats att skriva som sparar allt som rena .md-filer. Ingen databas, inga konton, ingen telemetri, bara du och dina ord.

**Problemet** De flesta skrivappar kommer med molnsynk, konton och proprietära format. Jag ville ha ett minimalistiskt skrivutrymme som respekterar ägande och långsiktighet.

**Så är det byggt** En frontend i vanilla JavaScript och en lätt Node.js-backend. Filerna lagras som Markdown på disk, så de förblir portabla, versionshanterbara och läsbara i vilken editor som helst.

**Teknik:** Node.js, vanilla JavaScript, Markdown, Docker

**Länkar:** [Källkod](https://github.com/Christian-Gennari/Scriptorium)

#### UbuntuSafeSnap

Säkerhetskopiera en Ubuntu-miljö och återställ den på en ny installation.

Ett CLI i .NET 10 som sparar din Ubuntu-konfiguration (paket, dotfiles och konfigurationsfiler) och återställer den efter en ren installation.

**Problemet** Att installera om Ubuntu innebär timmar av att installera paket och göra om dotfiles och inställningar. Befintliga backupverktyg är antingen för breda eller för snäva.

**Så är det byggt** Ett modulärt .NET CLI med separata kommandon för backup och återställning. Ett deklarativt manifest spårar installerade paket, dotfile-sökvägar och systemkonfiguration, så att en ögonblicksbild är reproducerbar och lätt att versionshantera.

**Teknik:** .NET 10, C#, CLI, Linux

**Länkar:** [Källkod](https://github.com/Christian-Gennari/UbuntuSafeSnap)

### Tidigare projekt, byggda för att lära mig ett koncept ordentligt

#### ELLA

Rumsbokning med rollbaserad åtkomst för en skola.

Edugrade Location & Logistics Assistant: ett rumsbokningssystem för skolor, med rollbaserad åtkomstkontroll och validering i realtid. Byggd med Viktor Johansson, André Pontén och Marcus Lööv som grupprojekt på Edugrade.

**Problemet** Att upprätthålla strikta tidsregler och behörighetsnivåer för administratörer, lärare och studenter utan att kodbasen blir rörig.

**Så är det byggt** En MVC-backend på Express med sessionsbaserad autentisering (scrypt), och en modulär frontend i vanilla JavaScript som hanterar state och rendering för hand, ett medvetet sätt att lära sig vad ramverken gör åt en.

**Teknik:** Node.js, Express, vanilla JavaScript, MVC, SQLite, RBAC

**Länkar:** [Källkod](https://github.com/Christian-Gennari/fullstack-booking-system)

#### Ordersystem

Tre ASP.NET Core-tjänster som pratar över HTTP.

En arkitekturövning: ProductService, UserRepository och OrderService körs som separata webb-API:er. Ordrar lagrar bara ID:n och berikas med användar- och produktdata från de andra tjänsterna när de läses.

**Problemet** Att dela upp en domän i tjänster utan att duplicera data, och hantera de fel som uppstår när anropen går över nätverket.

**Så är det byggt** Varje tjänst äger sin data bakom ett repository. OrderService validerar nya ordrar mot de två andra tjänsterna, lagrar bara referenser och översätter fel längre ner i kedjan till tydliga statuskoder (400, 404, 502, 503). Ett delat projekt håller kontrakten.

**Teknik:** ASP.NET Core, mikrotjänster, HTTP + JSON, delade kontrakt

**Länkar:** [Källkod](https://github.com/Christian-Gennari/ordersystem-microservices)

#### Ducklord Chat

Realtidschatt över vanlig HTTP, utan WebSockets.

En chattserver och en Raylib-klient för skrivbordet, byggda för att förstå asynkron kommunikation på djupet. Meddelanden når fram direkt via en egen long polling-arkitektur.

**Problemet** Att bygga en trådsäker chatt med lagring i minnet som klarar samtidiga användare, utan färdiga realtidsbibliotek som SignalR.

**Så är det byggt** En MessageNotifier byggd på TaskCompletionSource väcker väntande long poll-anrop i samma stund som ett meddelande kommer in, och ReaderWriterLockSlim håller lagringen konsekvent vid samtidiga skrivningar.

**Teknik:** .NET 9, ASP.NET Core, Raylib (C#), Long polling, OpenAPI

**Länkar:** [Källkod](https://github.com/Christian-Gennari/DotNetChatServer)

#### Duck Drive

En filhanterare i Google Drive-stil med strikta typer hela vägen.

En filhanterare med drag and drop, fuzzy search i realtid och en egenbyggd filbaserad databas.

**Problemet** Att behålla strikt typsäkerhet i en fullstack-miljö i JavaScript, och hantera filmetadata effektivt utan en databasmotor.

**Så är det byggt** Delade DTO:er som valideras med Zod utgör kontraktet mellan klient och server. Backend kapslar in fil-I/O i en databasliknande DbService, och Angular-frontenden använder Signals för reaktiv sökning.

**Teknik:** Angular 21, Node.js, Zod, delade DTO:er, Signals

**Länkar:** [Källkod](https://github.com/Christian-Gennari/google-drive-clone)

### Små verktyg jag gjorde för att jag behövde dem

- **[OllamaRadar](https://github.com/Christian-Gennari/OllamaRadar)** (C#): Terminalradar som mäter time-to-first-token för Ollama Cloud-modeller och förutspår vilka timmar som är bäst att använda dem.
- **[clipbeam](https://github.com/Christian-Gennari/clipbeam)** (PowerShell): WezTerm-plugin som skickar skärmdumpar från urklipp i Windows till en Linux-server via SSH.
- **[Intentional Pause](https://github.com/Christian-Gennari/intentional-pause)** (HTML): En enfilssida för sidblockerare: ett andetag och en fråga innan du öppnar något distraherande.

## Så arbetar jag

Pussel för sin egen skull lockar mig inte särskilt. Jag trivs med att stanna kvar i ett problem tills det inte längre stör någon.

**Eget företag.** Som medgrundare till ett mediebolag lärde jag mig att översätta en kunds vision till något konkret, och att den snyggaste koden är värdelös om den löser fel problem. Därför börjar jag med att lyssna och skriva ner vad som faktiskt behövs.

**Statsvetenskap.** Studierna gav mig vanan att se hur små delar påverkar helheten. I kod blir det tydliga gränser mellan lagren, så att en del kan ändras utan att resten märker det. Det håller den tekniska skulden låg.

**Medieproduktion.** Åren med video vässade mitt öga för den som sitter på andra sidan skärmen. Jag bygger hela vägen, från databas och API till gränssnitt och drift, och det är upplevelsen för den personen som avgör om det blev bra.

Jag väljer verktyg efter problemet framför mig. Oftast blir det C# och .NET i kärnan, Angular eller React för gränssnittet, PostgreSQL eller SQLite som databas, och Docker och Azure för driften.

### Alla verktyg, och vad jag använder dem till

- **C#, ASP.NET Core, EF Core**: Min primära plattform. En miljö för att bygga robusta, typsäkra och snabba system, från API:er till CLI-verktyg.
- **TypeScript**: Strikt typning för frontend, tillägg och verktyg.
- **Angular**: Struktur för stora frontends. Signals och standalone-komponenter i Nostos.
- **React**: Komponentbaserade gränssnitt.
- **Node.js**: Lätta tjänster, skript och byggverktyg.
- **SQL & SQLite**: Relationsdesign, från inbäddad SQLite till SQL Server.
- **PostgreSQL**: Produktionsdata för den hostade tjänsten Nostos Cloud.
- **Docker**: Reproducerbar självhosting och driftsättning.
- **Azure**: Molntjänster, hosting och AI-tjänster.
- **CSS & SCSS**: Responsiv, modulär styling och designsystem.
- **Git & GitHub**: Versionshantering, pull requests och CI-flöden.

> “To affect the quality of the day, that is the highest of arts.”
>
> Henry David Thoreau, *Walden* (1854)

## När jag inte kodar

När jag inte sitter vid skärmen hittar du mig förmodligen djupt försjunken i en bok. Klassikerna och filosofin är min motvikt till det digitala.

Det finns en vila i att lämna den snabba tekniken för något som fått ta tid. Att stänga datorn efter en dag av problemlösning och i stället möta ett månghundraårigt resonemang ger perspektiv, och låter tankarna röra sig i ett annat tempo.

Jag trivs i kontrasten mellan det exakta i en kodbas och det reflekterande i en essä av Montaigne. Ofta dyker de bästa lösningarna upp just när blicken lyfts från skärmen. Ett utvilat huvud tänker helt enkelt klarare.

*En kväll med västerländsk filosofi.*

*Ute på fjällheden.*

## Vägen hit

**AZ-900: Microsoft Azure Fundamentals** · Microsoft · avklarad 15 februari 2026

[Öppna PDF](https://dev.cgennari.com/az-900_certification.pdf) · [Verifiera hos Microsoft](https://learn.microsoft.com/api/credentials/share/en-us/ChristianGennari-6312/E6A7BEAAFA839CC2?sharingId=FEE77B238421E027)

- **2026–2027** · Statens tjänstepensionsverk (SPV), Sundsvall · *LIA-praktik*. LIA-delen av min utbildning på Edugrade.
- **2025–2027** · Edugrade · *Systemutvecklare .NET med AI-kompetens*. Tvåårig yrkeshögskoleutbildning i modern fullstack-utveckling med C# och .NET, från databasdesign och backend-arkitektur till frontend och Azure AI-tjänster.
- **2022–2025** · Mittuniversitetet · *Kandidatexamen i statsvetenskap*. Fokus på styrning och beslutsprocesser. Studierna lärde mig att analysera komplexa system och använda statistik för att hitta mönster i stora datamängder.
- **2021–2022** · Top of Heart AB · *Kreatör & redigerare*. Ansvarade för videoproduktion från inspelning till färdig leverans, med redigering och export mot strama tidsramar och höga kvalitetskrav.
- **2019–2022** · Toginta Productions · *Medgrundare & Creative Manager*. Grundade och drev ett mediebolag med ansvar för hela leveranskedjan. Lärde mig att prioritera under press, översätta kunders visioner till konkreta leveranser och värdesätta struktur i kreativt arbete.
- **2016–2019** · Hälsingegymnasiet · *Gymnasieexamen, Teknikprogrammet (ICT)*. Inriktning mot informations- och medieteknik. Här väcktes mitt intresse för programmering.

## Kontakt

Oavsett om det gäller en tjänst, en idé, feedback på Nostos eller bara en kaffe är min inkorg öppen.

- [contact@cgennari.com](mailto:contact@cgennari.com)
- [LinkedIn](https://www.linkedin.com/in/christiangennari)
- [GitHub](https://github.com/Christian-Gennari)
- [CV (PDF)](https://dev.cgennari.com/cv/CV.pdf)

---

Canonical: https://dev.cgennari.com/sv · [Markdown](https://dev.cgennari.com/sv/index.md) · [llms.txt](https://dev.cgennari.com/llms.txt) · [llms-full.txt](https://dev.cgennari.com/llms-full.txt)
