Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/app/components/contact/contact-card.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ const LINKEDIN_PATH =
<p
class="text-foreground/65 mb-6 max-w-[29ch] text-[18px] leading-[1.4] tracking-tight sm:text-[22px]"
>
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.
</p>
<app-cta-row label="See projects" />
Expand Down
2 changes: 1 addition & 1 deletion src/app/components/hero/hero.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import { PortraitMorphComponent } from './portrait-morph.component';
</h1>

<p class="text-foreground/65 max-w-[36ch] text-[22px] leading-[1.4] tracking-tight">
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.
</p>

Expand Down
2 changes: 1 addition & 1 deletion src/app/pages/about-page.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import { ContactCardComponent } from '../components/contact/contact-card.compone
<strong class="text-foreground font-semibold">full-stack software engineer</strong>
in Vienna working primarily in
<strong class="text-foreground font-semibold">C# / .NET</strong> with
<strong class="text-foreground font-semibold">Angular</strong> and React on the
<strong class="text-foreground font-semibold">React</strong> 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.
Expand Down
2 changes: 1 addition & 1 deletion src/app/portfolio-data.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});

Expand Down
22 changes: 16 additions & 6 deletions src/app/portfolio-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -307,15 +318,15 @@ 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)',
'Roslyn Analyzers & Source Generators',
'EF Core Β· PostgreSQL',
'REST / OpenAPI',
'LLM Agent Infrastructure',
'LLM Evaluation & Calibrated Abstention',
'Testing (xUnit Β· NUnit Β· Vitest)',
'Docker Β· CI/CD',
];
Expand All @@ -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' },
Expand Down
9 changes: 5 additions & 4 deletions src/app/profile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down