Files
pw/src/pages/en/index.astro
T

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 &amp; 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>