Strammere tekster
Build & Deploy / deploy (push) Successful in 2m53s

This commit is contained in:
Asger Geel Weirsøe
2026-10-31 14:51:01 +01:00
parent 288205630e
commit 7e13068dd2
13 changed files with 21 additions and 32 deletions
+1 -1
View File
@@ -20,7 +20,7 @@
hændelses- og eskaleringsprocedurer, evaluering og hændelsesregister
* Selvhosting: Proxmox-homelab med ~50 LXC/VM'er bag egen SSO (Authentik)
* Fuld-stack: Java, Go, Python, TypeScript og LLM-drevne workflows
* Licenseret radioamatør (B-licens, OZ0AGW).. protokoller uden kabler
* Licenseret radioamatør (B-licens, OZ0AGW)
* Jagttegn (2020) og stor naturinteresse.. fugle, planter og tidlige morgener
ERFARING UDDANNELSE
+1 -4
View File
@@ -9,7 +9,4 @@
Stak: Astro + Bun + Tailwind, statisk output
Hosting: egen Proxmox-infrastruktur (LXC), nginx bag NPMplus
CI/CD: self-hosted Gitea Actions
Ingen JS-frameworks. Ingen cookies-bannere. Bare HTML der opfører sig ordentligt.
/* TAK */
Til alle der stadig læser humans.txt. I er de ægte.
Ingen JS-frameworks.
+1 -2
View File
@@ -33,8 +33,7 @@ const { title, description, image, type, publishedTime, modifiedTime, tags, json
/ ___ \\ ___) | |_| | |___| _ <
/_/ \\_\\____/ \\____|_____|_| \\_\\
Hej, kildekode-læser. Du er min slags.
Statisk Astro, ingen frameworks, self-hosted på Proxmox.
Statisk Astro, self-hosted på Proxmox.
Prøv Cmd/Ctrl+K.. eller den gamle kode: op op ned ned venstre højre venstre højre B A.
-->`} />
<script is:inline>
+1 -1
View File
@@ -8,7 +8,7 @@ import Chat from '../components/Chat.astro';
<p class="mt-4 max-w-2xl text-muted">
En lille chat med <strong class="text-text">Claude</strong> fra Anthropic, der har læst mit CV og denne
side og svarer på spørgsmål om mig.. fx <em>“hvad har Asger lavet med Peppol?”</em> eller
<em>“hvilken stack kører hans homelab?”</em>. Den ved kun noget om mig.. alt andet må du google selv.
<em>“hvilken stack kører hans homelab?”</em>. Den svarer kun på spørgsmål om mig.
</p>
<Chat />
+1 -2
View File
@@ -40,11 +40,10 @@ const stack = [
<p class="mt-3 max-w-2xl text-sm text-muted">
Fundet noget der ser forkert ud? Skriv til <a class="text-accent hover:underline" href="mailto:asger@weirsoe.dk">asger@weirsoe.dk</a>.
Der ligger også en <a class="text-accent hover:underline" href="/.well-known/security.txt">security.txt</a> (RFC 9116).
Og ja, der er en <a class="text-accent hover:underline" href="/humans.txt">humans.txt</a> til de nysgerrige.
</p>
</section>
<p class="mt-10 text-sm text-muted">
Hvad der ellers kører i racket: se <a class="text-accent hover:underline" href="/uses">uses</a>.
Se også <a class="text-accent hover:underline" href="/uses">uses</a>.
</p>
</Base>
+1 -2
View File
@@ -228,8 +228,7 @@ const sprog = ['Dansk (modersmål)', 'Engelsk (flydende i tale og skrift)'];
</p>
<p class="mt-3 text-sm text-muted">
Jeg er desuden licenseret radioamatør med <strong class="text-text">B-licens</strong> og kaldesignalet
<strong class="text-text">OZ0AGW</strong>.. samme fascination af protokoller, rækkevidde og
infrastruktur som til daglig, bare uden kabler.
<strong class="text-text">OZ0AGW</strong>.
</p>
</div>
</section>
+1 -1
View File
@@ -8,7 +8,7 @@ import Chat from '../../components/Chat.astro';
<p class="mt-4 max-w-2xl text-muted">
A small chat with <strong class="text-text">Claude</strong> from Anthropic. It has read my CV and this
site and answers questions about me.. try <em>“what incident response experience does Asger have?”</em>
or <em>“what runs in his homelab?”</em>. It only knows about me, so for anything else you are on your own.
or <em>“what runs in his homelab?”</em>. It only answers questions about me.
</p>
<Chat lang="en" />
+2 -2
View File
@@ -172,8 +172,8 @@ const skills = [
<h2 class="text-sm font-semibold uppercase tracking-widest text-accent">Projects and interests</h2>
<p class="mt-4 text-sm text-muted">
I run a self-hosted Proxmox environment with around 50 containers and virtual machines,
single sign-on through Authentik, central logging and monitoring. My family uses it every day,
which makes for honest incident reviews. I have contributed to qutebrowser and Stregsystemet,
single sign-on through Authentik, central logging and monitoring. My family uses it every day.
I have contributed to qutebrowser and Stregsystemet,
and I am a licensed radio amateur (call sign <strong class="text-text">OZ0AGW</strong>).
</p>
</div>
+4 -4
View File
@@ -24,7 +24,7 @@ const faqs = [
},
{
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.',
a: 'Yes. I hold a category B licence with the call sign OZ0AGW.',
},
];
---
@@ -71,8 +71,8 @@ const faqs = [
<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: '/en/chat', title: 'Ask my CV', desc: 'A small chat with Claude that has read my CV and answers questions about me.' },
{ href: '/status', title: 'Homelab status', desc: 'Live status for the public parts of my homelab.' },
{ 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) => (
@@ -82,7 +82,7 @@ const faqs = [
</a>
))}
</div>
<p class="mt-3 text-xs text-muted/80">Pro tip: press <kbd class="wt-kbd">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>
<p class="mt-3 text-xs text-muted/80">Press <kbd class="wt-kbd">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">
+4 -4
View File
@@ -31,7 +31,7 @@ const faqs = [
},
{
q: 'Er Asger Weirsøe radioamatør?',
a: 'Ja. Jeg har B-licens og kaldesignalet OZ0AGW, og jeg bestod radioamatørprøven lørdag den 18. maj 2024. Amatørradio er den analoge parallel til det jeg laver til daglig: protokoller, rækkevidde og infrastruktur, bare uden kabler.',
a: 'Ja. Jeg har B-licens og kaldesignalet OZ0AGW, og jeg bestod radioamatørprøven lørdag den 18. maj 2024.',
},
{
q: 'Hvad er Asger Weirsøes baggrund?',
@@ -83,8 +83,8 @@ const jsonLd = [profilePage, faqPage(faqs)];
<div class="mt-5 grid gap-4 sm:grid-cols-2">
{[
{ href: '/nemhandel', title: 'NemHandel-opslag', desc: 'Slå et CVR-nummer op og se om virksomheden er registreret i NemHandelsregisteret, og hvilke profilpakker den understøtter.' },
{ href: '/chat', title: 'Spørg mit CV', desc: 'En lille chat med Claude, der har læst mit CV og svarer på spørgsmål om mig. Prøv den af.' },
{ href: '/status', title: 'Homelab-status', desc: 'Live driftsstatus for de offentlige dele af mit homelab. Self-hosted, selvfølgelig.' },
{ href: '/chat', title: 'Spørg mit CV', desc: 'En lille chat med Claude, der har læst mit CV og svarer på spørgsmål om mig.' },
{ href: '/status', title: 'Homelab-status', desc: 'Live driftsstatus for de offentlige dele af mit homelab.' },
{ href: '/now', title: 'Now', desc: 'Hvad jeg roder med lige nu, plus et aktivitets-heatmap fra min egen Gitea.' },
{ href: '/profiler', title: 'Profil-opslag', desc: 'Søgbart opslag over Nemhandel OIOUBL- og Peppol BIS/PINT-profiler: id\'er, dokumenter og typisk brug.' },
{ href: '/ubl', title: 'UBL-tjek', desc: 'Træk en faktura ind og få profil, syntaks og EN 16931-status afkodet. Alt sker i browseren, filen forlader aldrig din maskine.' },
@@ -95,7 +95,7 @@ const jsonLd = [profilePage, faqPage(faqs)];
</a>
))}
</div>
<p class="mt-3 text-xs text-muted/80">Pro-tip: tryk <kbd class="wt-kbd">Ctrl/⌘ K</kbd> og hop direkte til alt, eller <code class="rounded bg-surface-2 px-1.5 py-0.5">curl asger.weirsøe.dk</code> i en terminal.</p>
<p class="mt-3 text-xs text-muted/80">Tryk <kbd class="wt-kbd">Ctrl/⌘ K</kbd> og hop direkte til alt, eller <code class="rounded bg-surface-2 px-1.5 py-0.5">curl asger.weirsøe.dk</code> i en terminal.</p>
</section>
<section class="mt-16">
+1 -1
View File
@@ -110,6 +110,6 @@ import Base from '../layouts/Base.astro';
</script>
<p class="mt-10 text-xs text-muted/80">
Til nørderne: API’et er frit tilgængeligt: <code class="rounded bg-surface-2 px-1.5 py-0.5">curl https://asger.weirsøe.dk/api/nemhandel/&lt;cvr&gt;</code> (rate-limited).
API: <code class="rounded bg-surface-2 px-1.5 py-0.5">curl https://asger.weirsøe.dk/api/nemhandel/&lt;cvr&gt;</code> (rate-limited).
</p>
</Base>
+1 -2
View File
@@ -2,12 +2,11 @@
import Base from '../layouts/Base.astro';
const STATUS_URL = 'https://status.weircon.dk/status/weircon';
---
<Base title="Status" description="Live driftsstatus for mit homelab.. self-hosted Uptime Kuma, selvfølgelig." noindex>
<Base title="Status" description="Live driftsstatus for mit homelab, målt med Uptime Kuma." noindex>
<h1 class="text-4xl font-bold tracking-tight">Status</h1>
<p class="mt-4 max-w-2xl text-muted">
Live status for de offentlige dele af mit homelab, målt af en self-hosted
<a class="text-accent hover:underline" href="https://uptime.kuma.pet" target="_blank" rel="noopener">Uptime Kuma</a>.
Når man drifter ~50 containere selv, er det rart at vide hvornår man har smadret noget.
</p>
<div class="mt-8 wt-card wt-card--flush">
+2 -6
View File
@@ -9,7 +9,7 @@ const sections = [
{ name: 'NPMplus', note: 'Reverse proxy og TLS-terminering på kanten. Alt trafik ind går her igennem.' },
{ name: 'Authentik', note: 'Self-hosted SSO (OIDC/LDAP). Én identitet til alle tjenester, bygget fra source.' },
{ name: 'Gitea + Gitea Actions', note: 'Egen git-hosting og CI/CD. Denne side deployes automatisk ved push.' },
{ name: 'MariaDB / Redis / PostgreSQL', note: 'Databaser som dedikerede containere, host-pinned brugere og det hele.' },
{ name: 'MariaDB / Redis / PostgreSQL', note: 'Databaser som dedikerede containere.' },
{ name: 'Matomo', note: 'Self-hosted analytics, first-party og uden tredjeparter.' },
{ name: 'WireGuard', note: 'Tunneler og netns-baserede egress-profiler til alt der skal ud af huset på en pæn måde.' },
],
@@ -18,7 +18,7 @@ const sections = [
title: 'Udvikling',
items: [
{ name: 'Linux + code-server', note: 'Udvikling foregår i en dedikeret LXC med VS Code i browseren.' },
{ name: 'Java · Go · Python · TypeScript', note: 'Arbejdshestene. Java til Peppol/eDelivery-verdenen, Python/TS til alt det andet.' },
{ name: 'Java · Go · Python · TypeScript', note: 'Java til Peppol/eDelivery-verdenen, Python/TS til alt det andet.' },
{ name: 'Claude Code', note: 'LLM-drevne workflows, fra blogindlæg til Proxmox-administration.' },
{ name: 'Docker', note: 'Hvor det giver mening. Ellers foretrækker jeg native installationer i LXC.' },
],
@@ -51,8 +51,4 @@ const sections = [
</div>
</section>
))}
<p class="mt-10 text-sm text-muted">
Nysgerrig på hvordan siden selv er skruet sammen? Se <a class="text-accent hover:underline" href="/colophon">kolofonen</a>.
</p>
</Base>