Build & Deploy / deploy (push) Successful in 2m46s
Claude-Session: https://claude.ai/code/session_012LCTmU2ewo8tnM1dByYAoG
105 lines
6.7 KiB
Plaintext
105 lines
6.7 KiB
Plaintext
---
|
|
import { Image } from 'astro:assets';
|
|
import Base from '../../layouts/Base.astro';
|
|
import portrait from '../../assets/asger.png';
|
|
|
|
const highlights = [
|
|
{ title: 'Incident response & compliance', body: 'Led incident and vulnerability response on Danish national e-invoicing infrastructure, and built an ISMS around ISO/IEC 27001 with escalation and post-incident review.' },
|
|
{ title: 'E-invoicing & architecture', body: 'Technical Solution Architect at Digisense A/S, working on Peppol, NemHandel and Oxalis. Before that, tech lead on NemHandel at CGI.' },
|
|
{ title: 'Self-hosting, AI & full-stack', body: 'A Proxmox homelab with around 50 containers and VMs behind SSO (Authentik), and projects from Java, Go and Python to TypeScript and LLM-driven workflows.' },
|
|
];
|
|
|
|
const faqs = [
|
|
{
|
|
q: 'Who is Asger Weirsøe?',
|
|
a: 'I am a computer scientist (M.Sc., Aalborg University) and Technical Solution Architect at Digisense A/S. I have worked on Danish national e-invoicing infrastructure since 2021, and I combine technical depth with business understanding.',
|
|
},
|
|
{
|
|
q: 'What incident response experience does Asger Weirsøe have?',
|
|
a: 'As tech lead on NemHandel at CGI I coordinated recovery from a production database failure during the July 2024 CrowdStrike outage, and led the response to CVE-2022-1471 (SnakeYAML) in the NemHandel reference implementation, where we shipped a fixed release within two weeks. At Digisense I built the ISMS around ISO/IEC 27001, including incident management, escalation and post-incident review.',
|
|
},
|
|
{
|
|
q: 'What does Asger Weirsøe work with?',
|
|
a: 'Solution architecture for electronic invoicing and e-procurement: Peppol (Access Point, eDelivery/AS4 and Oxalis), NemHandel, OIOUBL/UBL and EN 16931. Plus information security, self-hosting, Proxmox and AI.',
|
|
},
|
|
{
|
|
q: 'Is Asger Weirsøe a radio amateur?',
|
|
a: 'Yes. I hold a category B licence with the call sign OZ0AGW. It is the analogue version of what I do at work: protocols, range and infrastructure, just without the cables.',
|
|
},
|
|
];
|
|
---
|
|
<Base title="Asger Weirsøe" description="Asger Weirsøe, computer scientist and Technical Solution Architect. Incident response, ISO/IEC 27001 compliance and Danish national e-invoicing infrastructure."
|
|
lang="en" alternates={[{ lang: 'da', path: '/' }, { lang: 'en', path: '/en' }]}>
|
|
<section class="grid items-center gap-8 py-6 sm:grid-cols-[1fr_auto]">
|
|
<div>
|
|
<div class="flex items-center justify-between gap-4">
|
|
<p class="font-medium text-accent">Hi, I am</p>
|
|
<a href="/" hreflang="da" lang="da" class="rounded-full border border-border px-2.5 py-0.5 text-sm text-muted hover:border-accent hover:text-accent sm:hidden">Dansk</a>
|
|
</div>
|
|
<h1 class="mt-1 text-5xl font-bold tracking-tight sm:text-6xl">Asger Weirsøe</h1>
|
|
<p class="mt-3 text-xl font-semibold text-accent sm:text-2xl">Computer scientist & Technical Solution Architect</p>
|
|
<p class="mt-5 max-w-xl text-lg text-muted">
|
|
M.Sc. in Computer Science from Aalborg University and Technical Solution Architect at Digisense A/S.
|
|
I have spent my career on Danish national <strong class="text-text">e-invoicing infrastructure</strong>,
|
|
where I have led the response when production broke and built the processes that make the next
|
|
response better. In my spare time I run my own Proxmox homelab, tinker with AI projects and get on
|
|
the air as a radio amateur (OZ0AGW).
|
|
</p>
|
|
<div class="mt-7 flex flex-wrap gap-3">
|
|
<a href="/en/cv" class="rounded-xl bg-accent px-5 py-2.5 font-medium text-bg transition-transform hover:-translate-y-0.5">See my CV</a>
|
|
<a href="/en/chat" class="rounded-xl border border-border px-5 py-2.5 font-medium transition-colors hover:border-accent">Ask my CV</a>
|
|
<a href="/en/projects" class="rounded-xl border border-border px-5 py-2.5 font-medium transition-colors hover:border-accent">Projects</a>
|
|
<a href="/" hreflang="da" lang="da" class="hidden rounded-xl border border-border px-5 py-2.5 font-medium transition-colors hover:border-accent sm:inline-block">Dansk</a>
|
|
</div>
|
|
</div>
|
|
<Image
|
|
src={portrait}
|
|
alt="Asger Weirsøe"
|
|
width={260}
|
|
densities={[1, 2]}
|
|
class="mx-auto h-44 w-44 rounded-2xl border border-border object-cover shadow-xl sm:h-56 sm:w-56"
|
|
loading="eager"
|
|
/>
|
|
</section>
|
|
|
|
<section class="mt-14 grid gap-4 sm:grid-cols-3">
|
|
{highlights.map((h) => (
|
|
<div class="rounded-2xl border border-border bg-surface/60 p-5">
|
|
<h2 class="font-semibold tracking-tight">{h.title}</h2>
|
|
<p class="mt-2 text-sm text-muted">{h.body}</p>
|
|
</div>
|
|
))}
|
|
</section>
|
|
|
|
<section class="mt-16">
|
|
<h2 class="text-2xl font-bold tracking-tight">More than a CV</h2>
|
|
<div class="mt-5 grid gap-4 sm:grid-cols-2">
|
|
{[
|
|
{ href: '/en/chat', title: 'Ask my CV', desc: 'A small chat with Claude that has read my CV and answers questions about me. Try it.' },
|
|
{ href: '/status', title: 'Homelab status', desc: 'Live status for the public parts of my homelab. Self-hosted, of course.' },
|
|
{ href: '/ubl', title: 'UBL check (Danish)', desc: 'Drop in an e-invoice and get its profile, syntax and EN 16931 status decoded. It all runs in the browser, the file never leaves your machine.' },
|
|
{ href: '/en/projects', title: 'Projects', desc: 'Tools I maintain and publish on the AUR, Homebrew and Scoop.' },
|
|
].map((c) => (
|
|
<a href={c.href} class="group rounded-2xl border border-border bg-surface/60 p-5 transition-colors hover:border-accent">
|
|
<h3 class="font-semibold tracking-tight group-hover:text-accent">{c.title} →</h3>
|
|
<p class="mt-2 text-sm text-muted">{c.desc}</p>
|
|
</a>
|
|
))}
|
|
</div>
|
|
<p class="mt-3 text-xs text-muted/80">Pro tip: press <kbd class="rounded border border-border bg-surface-2 px-1.5 py-0.5 font-mono text-[0.7rem]">Ctrl/⌘ K</kbd> to jump anywhere, or run <code class="rounded bg-surface-2 px-1.5 py-0.5">curl asger.weirsøe.dk</code> in a terminal.</p>
|
|
</section>
|
|
|
|
<section class="mt-16">
|
|
<h2 class="text-2xl font-bold tracking-tight">Frequently asked questions</h2>
|
|
<div class="mt-5 grid gap-3">
|
|
{faqs.map((f) => (
|
|
<details class="group rounded-2xl border border-border bg-surface/60 p-5">
|
|
<summary class="cursor-pointer list-none font-semibold tracking-tight marker:hidden">{f.q}</summary>
|
|
<p class="mt-3 text-sm text-muted">{f.a}</p>
|
|
</details>
|
|
))}
|
|
</div>
|
|
<p class="mt-6 text-sm text-muted">The blog and the e-invoicing tools are in Danish. Everything on this page is also available <a href="/" hreflang="da" class="text-accent hover:underline">in Danish</a>.</p>
|
|
</section>
|
|
</Base>
|