diff --git a/src/app/components/contact/contact-card.component.ts b/src/app/components/contact/contact-card.component.ts index e2f30bd..0108926 100644 --- a/src/app/components/contact/contact-card.component.ts +++ b/src/app/components/contact/contact-card.component.ts @@ -52,7 +52,7 @@ const LINKEDIN_PATH =

- Open to full-stack C# / .NET and React/Angular roles, freelance, and + Open to full-stack C# / .NET and React roles, freelance, and collaboration. Based in Vienna — happy to talk remote or on-site.

diff --git a/src/app/components/hero/hero.component.ts b/src/app/components/hero/hero.component.ts index fd6b03c..289947b 100644 --- a/src/app/components/hero/hero.component.ts +++ b/src/app/components/hero/hero.component.ts @@ -24,7 +24,7 @@ import { PortraitMorphComponent } from './portrait-morph.component';

- I build .NET backends and React/Angular frontends — plus an open-source ecosystem of + I build .NET backends and React frontends — plus an open-source ecosystem of 48 packages with 340k+ downloads.

diff --git a/src/app/pages/about-page.component.ts b/src/app/pages/about-page.component.ts index 6a617fc..c70c36b 100644 --- a/src/app/pages/about-page.component.ts +++ b/src/app/pages/about-page.component.ts @@ -43,7 +43,7 @@ import { ContactCardComponent } from '../components/contact/contact-card.compone full-stack software engineer in Vienna working primarily in C# / .NET with - Angular and React on the + React on the frontend. At RUBICON IT (2023–2025, dual study) I shipped production apps across ASP.NET Core, Blazor, Vue 3, and WPF in an agile team, alongside a Computer Science degree. diff --git a/src/app/portfolio-data.spec.ts b/src/app/portfolio-data.spec.ts index 2ab4d08..dc4d1f9 100644 --- a/src/app/portfolio-data.spec.ts +++ b/src/app/portfolio-data.spec.ts @@ -13,7 +13,7 @@ describe('portfolio content', () => { expect(projects.length).toBeGreaterThanOrEqual(6); expect(experienceEntries.length).toBeGreaterThanOrEqual(2); expect(educationEntries.length).toBeGreaterThanOrEqual(2); - expect(skills).toContain('Angular'); + expect(skills).toContain('React'); expect(stackChips.some((chip) => chip.label === '.NET')).toBe(true); }); diff --git a/src/app/portfolio-data.ts b/src/app/portfolio-data.ts index d4c2ac1..5e44503 100644 --- a/src/app/portfolio-data.ts +++ b/src/app/portfolio-data.ts @@ -66,6 +66,17 @@ export const projects: Project[] = [ tint: '#22b8cf', image: '/projects/dicom-fhir.jpg', }, + { + id: 'abstention-bench', + icon: LucideRadar, + name: 'clinical-abstention-bench', + title: 'Does a medical AI know when it doesn’t know?', + description: + 'A benchmark for calibrated abstention: models must decide when to answer and when to escalate to a human, measured on degraded clinical inputs against a fail-closed .NET evaluation engine.', + meta: 'LLM evaluation · calibrated abstention · .NET', + url: 'https://github.com/ANcpLua/clinical-abstention-bench', + tint: '#e63946', + }, { id: 'errororx', icon: LucideZap, @@ -142,10 +153,10 @@ export const projects: Project[] = [ id: 'tourplanner', icon: LucideMap, name: 'TourPlanner-Angular', - title: 'Angular 21 SPA on a .NET 10 API', + title: 'Full-stack TypeScript SPA on a .NET 10 API', description: 'A full tour-planning single-page app with an OpenAPI-typed client against a .NET 10 backend — 429 tests across NUnit and Vitest, fully Dockerised.', - meta: 'Angular 21 · .NET 10 · 429 tests', + meta: 'TypeScript SPA · .NET 10 · 429 tests', url: 'https://github.com/ANcpLua/TourPlanner-Angular', tint: '#dd0031', image: '/projects/tourplanner.svg', @@ -307,8 +318,7 @@ export const educationEntries: EducationEntry[] = [ export const skills: readonly string[] = [ 'C# / .NET', 'ASP.NET Core', - 'Angular', - 'React & Vue', + 'React', 'TypeScript', 'Messaging & Event-Driven (RabbitMQ)', 'Observability (OpenTelemetry)', @@ -316,6 +326,7 @@ export const skills: readonly string[] = [ 'EF Core · PostgreSQL', 'REST / OpenAPI', 'LLM Agent Infrastructure', + 'LLM Evaluation & Calibrated Abstention', 'Testing (xUnit · NUnit · Vitest)', 'Docker · CI/CD', ]; @@ -330,9 +341,8 @@ export type StackChip = { export const stackChips: StackChip[] = [ { label: '.NET', slug: 'dotnet', bg: '#512BD4', fg: '#ffffff' }, - { label: 'Angular', slug: 'angular', bg: '#dd0031', fg: '#ffffff' }, - { label: 'TypeScript', slug: 'typescript', bg: '#2F74C0', fg: '#ffffff' }, { label: 'React', slug: 'react', bg: '#20232a', fg: '#61dafb' }, + { label: 'TypeScript', slug: 'typescript', bg: '#2F74C0', fg: '#ffffff' }, { label: 'Vue', slug: 'vuedotjs', bg: '#35495e', fg: '#42b883' }, { label: 'PostgreSQL', slug: 'postgresql', bg: '#336791', fg: '#ffffff' }, { label: 'Docker', slug: 'docker', bg: '#2496ED', fg: '#ffffff' }, diff --git a/src/app/profile.ts b/src/app/profile.ts index 370f1d2..3092364 100644 --- a/src/app/profile.ts +++ b/src/app/profile.ts @@ -22,7 +22,7 @@ export const PROFILE_CONTEXT = ` Based in Vienna, Austria. Contact: ${OWNER.email} · GitHub github.com/ANcpLua · NuGet nuget.org/profiles/ANcpLua · LinkedIn linkedin.com/in/alexander-nachtmann. Languages: German (native), English (fluent). ## Summary -Full-stack software engineer working primarily in C# / .NET, with Angular and React on the frontend. Professional experience at RUBICON IT (2023–2025, dual study) across ASP.NET Core, Blazor, Vue, and WPF, alongside a Computer Science degree. Maintains a substantial open-source portfolio — 48 published .NET packages with 340,000+ downloads — and contributes upstream to Microsoft's dotnet/aspnetcore and the OpenTelemetry project. Comfortable across the full stack: REST / OpenAPI backends, single-page frontends (Angular and React), automated testing, CI/CD, and containerised deployment. Especially drawn to event-driven architecture and messaging (RabbitMQ, MassTransit) and to observability (OpenTelemetry) — the areas he digs into for their own sake, well beyond anything a job has required. +Full-stack software engineer working primarily in C# / .NET, with React on the frontend. Professional experience at RUBICON IT (2023–2025, dual study) across ASP.NET Core, Blazor, Vue, and WPF, alongside a Computer Science degree. Maintains a substantial open-source portfolio — 48 published .NET packages with 340,000+ downloads — and contributes upstream to Microsoft's dotnet/aspnetcore and the OpenTelemetry project. Comfortable across the full stack: REST / OpenAPI backends, single-page frontends (React), automated testing, CI/CD, and containerised deployment. Especially drawn to event-driven architecture and messaging (RabbitMQ, MassTransit) and to observability (OpenTelemetry) — the areas he digs into for their own sake, well beyond anything a job has required. ## Experience - RUBICON IT GmbH, Vienna (Aug 2023 – Jun 2025) — Fullstack C# Software Developer, dual study (alternating work/study phases). Built full-stack applications on C#, ASP.NET Core, Blazor, Vue 3, and WPF in an agile team. Backend with EF Core targeting SQL Server and PostgreSQL; messaging via Rebus and Hangfire. Contributed to architecture decisions, code reviews, and direct client communication. @@ -63,15 +63,16 @@ AI Skills Fest 2026 (Microsoft); Agents League: Creative Apps / Reasoning Agents Study Program Representative, FH Technikum Wien (2023–2027, re-elected). External C# lecturer, FH Technikum Wien. 4,200+ hours tracked development (WakaTime). ## Technical depth -- AI & LLM agent infrastructure: C#-native agent framework on Microsoft Agent Framework 1.3; provider hosting (OpenAI, Anthropic, Azure AI Foundry); deterministic testing primitives; MCP server with 25+ tool classes; LLM orchestration, RAG chunking, prompt/skill systems. +- AI & LLM agent infrastructure: C#-native agent framework on Microsoft Agent Framework 1.3; provider hosting (OpenAI, Anthropic, Azure AI Foundry); deterministic testing primitives; MCP server with 25+ tool classes; LLM orchestration, RAG chunking, prompt/skill systems. LLM evaluation: clinical-abstention-bench — a calibrated-abstention benchmark (answer vs. escalate-to-human) on a fail-closed .NET eval engine. - Backend & APIs (.NET): ASP.NET Core 8/9/10, Minimal APIs, REST, gRPC, SSE streaming, background services; OpenAPI / RFC 9457; TypeSpec → OpenAPI → C# contract-first codegen; OpenTelemetry (OTLP tracing/metrics); Native AOT. -- Frontend & TypeScript: Angular 21 (standalone components, signals, RxJS, routing, typed OpenAPI client, Vitest) — full TourPlanner SPA against a .NET 10 API with 259 frontend tests, Dockerised. React 19, TypeScript 5, Vue 3 (Composition API, Quasar, Pinia) on ASP.NET Core in production at RUBICON. Blazor Server + FluentUI; WPF (.NET 8). Shipped live frontends: atelierbella.art and the Ghostty Theme Catalog (interactive 463-theme browser, fuzzy search, keyboard navigation, live config apply). +- Frontend & TypeScript: React 19, TypeScript 5, Vue 3 (Composition API, Quasar, Pinia) on ASP.NET Core in production at RUBICON. Full TourPlanner SPA (typed OpenAPI client, Vitest) against a .NET 10 API with 259 frontend tests, Dockerised. Blazor Server + FluentUI; WPF (.NET 8). Shipped live frontends: atelierbella.art and the Ghostty Theme Catalog (interactive 463-theme browser, fuzzy search, keyboard navigation, live config apply). - Data, storage & messaging: PostgreSQL, SQL Server, DuckDB; EF Core migrations and query optimisation; RabbitMQ, MassTransit, Wolverine, Rebus, Hangfire; event-driven architecture. - Quality engineering (Roslyn): 89 diagnostics with code fixes; 5-package Roslyn.Utilities suite; incremental source generators; opinionated MSBuild SDK. - Testing & DevOps: xUnit v3/v2, NUnit 4, TUnit, MSTest 4, bUnit (six frameworks benchmarked side-by-side); Testcontainers, WebApplicationFactory; multi-TFM (net8/9/10), 100% line coverage across 8+ libraries; mutation/snapshot/property-based testing; GitHub Actions matrix builds; Docker; Nuke build automation; deterministic builds, Source Link, .snupkg symbols. ## Selected public repositories -- ANcpLua/TourPlanner-Angular — Angular 21 SPA + .NET 10 API, OpenAPI typed client, 429 tests, Docker. +- ANcpLua/clinical-abstention-bench — calibrated-abstention LLM benchmark: does a medical AI know when it doesn’t know? +- ANcpLua/TourPlanner-Angular — TypeScript SPA + .NET 10 API, OpenAPI typed client, 429 tests, Docker. - ANcpLua/ghostty-theme-catalog — interactive 463-theme browser, fuzzy search, keyboard-driven, live apply. - ANcpLua/ANcpLua.NET.Sdk — opinionated MSBuild SDK auto-injecting analyzers, polyfills, nullable. - ANcpLua/ANcpLua.Analyzers — 89 Roslyn diagnostics with code fixes.