<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="da">
    <title>x2q</title>
    <subtitle>x2q er en personlig blog med noter om software, Linux, netværk, betalinger, hjemmeservere, madlavning og diverse sideprojekter. Online siden 2010.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://www.x2q.net/da/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://www.x2q.net"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-20T00:00:00+00:00</updated>
    <id>https://www.x2q.net/da/atom.xml</id>
    <entry xml:lang="da">
        <title>elpriser.org — danske elpriser time for time</title>
        <published>2026-04-20T00:00:00+00:00</published>
        <updated>2026-04-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.x2q.net/da/post/elpriser-org-danske-elpriser-time-for-time/"/>
        <id>https://www.x2q.net/da/post/elpriser-org-danske-elpriser-time-for-time/</id>
        
        <content type="html" xml:base="https://www.x2q.net/da/post/elpriser-org-danske-elpriser-time-for-time/">&lt;p&gt;&lt;strong&gt;TL;DR —&lt;&#x2F;strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;elpriser.org&quot;&gt;elpriser.org&lt;&#x2F;a&gt; viser den &lt;strong&gt;reelle elpris time for time i Danmark&lt;&#x2F;strong&gt; — ikke kun spotprisen. Den samler Nord Pool-spotprisen, din lokale nettarif (&lt;code&gt;netselskab&lt;&#x2F;code&gt;), Energinets system- og transmissionstariffer, elafgiften og 25 % moms. Data kommer fra &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.energidataservice.dk&#x2F;&quot;&gt;Energi Data Service&lt;&#x2F;a&gt; og opdateres dagligt, når Nord Pool offentliggør de kommende 24 timer omkring kl. 13. DK1 (Vestdanmark) og DK2 (Østdanmark). Dansksproget, gratis, intet login.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hvad-koster-el-faktisk-i-danmark&quot;&gt;Hvad koster el faktisk i Danmark?&lt;&#x2F;h2&gt;
&lt;p&gt;“Spotprisen”, du ser på de fleste energidashboards, er kun én del af regningen. Den pris, du rent faktisk betaler pr. kWh, består af seks elementer:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Spotpris&lt;&#x2F;strong&gt; — sættes time for time på Nord Pool-markedet for det kommende døgn.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Nettarif&lt;&#x2F;strong&gt; — betales til dit lokale netselskab. Varierer efter selskab og tidspunkt (lav-, mellem- og spidslast).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Systemtarif&lt;&#x2F;strong&gt; — betales til Energinet, den danske TSO.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Transmissionstarif&lt;&#x2F;strong&gt; — betales også til Energinet.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Elafgift&lt;&#x2F;strong&gt; — statslig afgift på forbrug.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Moms&lt;&#x2F;strong&gt; — 25 % oven i alt det andet.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;De fleste prissider viser kun det første tal. Nogle få viser ét eller to mere. Ingen, jeg kunne finde, viste alle seks time for time, for begge prisområder, med den rigtige nettarif automatisk valgt for brugerens netselskab. Det er præcis det, elpriser.org gør.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;de-to-prisomrader-dk1-og-dk2&quot;&gt;De to prisområder: DK1 og DK2&lt;&#x2F;h2&gt;
&lt;p&gt;Danmark er delt i to elprisområder geografisk — Storebælt skiller dem — og de har ofte forskellig pris i samme time:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DK1 — Vestdanmark.&lt;&#x2F;strong&gt; Jylland og Fyn. Mere vind-domineret.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DK2 — Østdanmark.&lt;&#x2F;strong&gt; Sjælland, Lolland, Falster, Møn og Bornholm. Tættere forbundet med Sverige (SE4) og Tyskland.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Når vinden blæser kraftigt i Jylland, kan DK1 være billig, mens DK2 er dyr. Når en forbindelse er nede, vokser forskellen yderligere. elpriser.org viser begge områder side om side.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hvilket-netselskab-har-du&quot;&gt;Hvilket netselskab har du?&lt;&#x2F;h2&gt;
&lt;p&gt;Du kan ikke selv vælge dit netselskab — det afhænger af din adresse — men den nettarif, de opkræver, er en betydelig del af regningen, og den varierer med &lt;strong&gt;15–25 øre&#x2F;kWh i spidslast&lt;&#x2F;strong&gt; mellem billigste og dyreste, hvilket svarer til &lt;strong&gt;~500–1.000 kr&#x2F;år&lt;&#x2F;strong&gt; for en typisk husstand.&lt;&#x2F;p&gt;
&lt;p&gt;Groft rangeret spidslast-tariffer pr. 2025:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Område&lt;&#x2F;th&gt;&lt;th&gt;Netselskab&lt;&#x2F;th&gt;&lt;th&gt;Spidslast-tarif (øre&#x2F;kWh)&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;DK1&lt;&#x2F;td&gt;&lt;td&gt;RAH Net&lt;&#x2F;td&gt;&lt;td&gt;~33&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;DK1&lt;&#x2F;td&gt;&lt;td&gt;Trefor&lt;&#x2F;td&gt;&lt;td&gt;~37&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;DK1&lt;&#x2F;td&gt;&lt;td&gt;N1&lt;&#x2F;td&gt;&lt;td&gt;~46&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;DK2&lt;&#x2F;td&gt;&lt;td&gt;Cerius&lt;&#x2F;td&gt;&lt;td&gt;~47&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;DK2&lt;&#x2F;td&gt;&lt;td&gt;Radius&lt;&#x2F;td&gt;&lt;td&gt;~65&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Mindre selskaber (Konstant, Nord Energi, Vores Elnet, El-net Kongerslev og andre) har egne tariffer. På elpriser.org vælger du dit eget, og den all-in time-for-time-pris tilpasser sig.&lt;&#x2F;p&gt;
&lt;p&gt;Du kan ikke skifte netselskab, men du &lt;strong&gt;kan&lt;&#x2F;strong&gt; flytte forbrug — vaskemaskine, opvaskemaskine, EV-ladning, varmepumpe — ned i lavsats-timerne. Time-grafen findes til lige præcis det.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;historiske-yderpunkter&quot;&gt;Historiske yderpunkter&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rekord-høj:&lt;&#x2F;strong&gt; 16,69 kr&#x2F;kWh (spotpris ex. moms) i DK2, kl. 19 den 5. september 2022 under energikrisen.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Rekord-lav:&lt;&#x2F;strong&gt; −2,76 kr&#x2F;kWh i DK1, kl. 14 den 2. juli 2023, hvor vindproduktionen overskød forbruget.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Negative priser er ikke en fejl: når produktionen er høj og forbruget lavt, betaler producenterne forbrugerne for at aftage strømmen. Moderne prisstyrede varmepumper og EV-ladere kan læne sig ind i det.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sadan-er-elpriser-org-bygget&quot;&gt;Sådan er elpriser.org bygget&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Statisk HTML&lt;&#x2F;strong&gt;, genskabt én gang om dagen efter Nord Pools day-ahead-auktion omkring kl. 13 CET.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Datakilde&lt;&#x2F;strong&gt;: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.energidataservice.dk&#x2F;&quot;&gt;Energi Data Service&lt;&#x2F;a&gt;, Energinets åbne data. Ingen API-nøgler nødvendige.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Strukturerede data&lt;&#x2F;strong&gt;: &lt;code&gt;schema.org&#x2F;WebApplication&lt;&#x2F;code&gt; og &lt;code&gt;FAQPage&lt;&#x2F;code&gt; udsendes på hver side, så Google kan vise priserne direkte i søgeresultater og AI-oversigter.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Hosting&lt;&#x2F;strong&gt;: en lille origin bag Cloudflare. Cachebar hele døgnet; purges ved det daglige rebuild.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Sprog&lt;&#x2F;strong&gt;: kun dansk. Domænenavnet burde have været et fingerpeg.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Det hele er et enkeltsporet værktøj: ingen tracking, intet login, ingen nyhedsbrev-popover, ingen “10 måder at spare på strømmen”-lister.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ofte-stillede-sporgsmal&quot;&gt;Ofte stillede spørgsmål&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;hvor-ofte-opdaterer-elpriser-org&quot;&gt;Hvor ofte opdaterer elpriser.org?&lt;&#x2F;h3&gt;
&lt;p&gt;Én gang om dagen, efter at Nord Pools day-ahead-auktion offentliggør næste døgn omkring kl. 13 CET. Intradag-justeringer vises ikke; de fleste forbrugere afregnes alligevel efter day-ahead-prisen.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;er-prisen-med-eller-uden-moms&quot;&gt;Er prisen med eller uden moms?&lt;&#x2F;h3&gt;
&lt;p&gt;Med. Headline-tallet på elpriser.org er all-in pr. kWh: spotpris + tariffer + afgift + 25 % moms. Du kan folde det ud og se opdelingen.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hvorfor-er-priserne-forskellige-i-dk1-og-dk2&quot;&gt;Hvorfor er priserne forskellige i DK1 og DK2?&lt;&#x2F;h3&gt;
&lt;p&gt;Danmark har to fysisk adskilte elprisområder, forbundet via Storebælt. Når forbindelsen er fuldt udnyttet, eller når vindproduktionen adskiller sig markant mellem øst og vest, clearer de to områder på forskellige Nord Pool-priser.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kan-jeg-se-opdelingen-af-hver-komponent&quot;&gt;Kan jeg se opdelingen af hver komponent?&lt;&#x2F;h3&gt;
&lt;p&gt;Ja. Hver time-celle kan foldes ud for at vise spotpris, hver tarif-komponent, elafgift og moms.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;far-jeg-reelt-negative-priser-nar-engrosprisen-bliver-negativ&quot;&gt;Får jeg reelt negative priser, når engrosprisen bliver negativ?&lt;&#x2F;h3&gt;
&lt;p&gt;Det afhænger af din kontrakt. Rene spotpris-kontrakter videregiver Nord Pools råpris — tariffer og afgift gælder stadig, så all-in-prisen kan gå svagt negativ eller bare meget lav. Fastpris-kontrakter gør ikke.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hvorfor-kun-dansk&quot;&gt;Hvorfor kun dansk?&lt;&#x2F;h3&gt;
&lt;p&gt;Data, regulering, netselskabs-strukturen og målgruppen er alle danske. En engelsk version ville oversætte kontekst, ikke indhold.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hvor-kommer-data-fra&quot;&gt;Hvor kommer data fra?&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.energidataservice.dk&#x2F;dataset&#x2F;elspotprices&quot;&gt;Energi Data Service&lt;&#x2F;a&gt; (Nord Pool-spot) og Energinets tarifdata. Begge er officielle, offentlige datasæt fra den danske TSO.&lt;&#x2F;p&gt;
&lt;p&gt;Lille, fokuseret, intet login, ingen tracking. Sådan bør forbruger-energiværktøjer se ud.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="da">
        <title>winniemethmann.com — fra WordPress til Astro</title>
        <published>2026-04-19T00:00:00+00:00</published>
        <updated>2026-04-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.x2q.net/da/post/winniemethmann-com-astro-portfolio/"/>
        <id>https://www.x2q.net/da/post/winniemethmann-com-astro-portfolio/</id>
        
        <content type="html" xml:base="https://www.x2q.net/da/post/winniemethmann-com-astro-portfolio/">&lt;p&gt;&lt;strong&gt;TL;DR —&lt;&#x2F;strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;winniemethmann.com&quot;&gt;winniemethmann.com&lt;&#x2F;a&gt; er portfolien for en dansk madfotograf og opskriftsudvikler. I et årti var det et WordPress-site. Jeg byggede det om oven på &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;astro.build&quot;&gt;Astro&lt;&#x2F;a&gt; med &lt;strong&gt;content collections&lt;&#x2F;strong&gt; (typet Markdown) i stedet for et CMS, &lt;strong&gt;Sharp + AVIF&lt;&#x2F;strong&gt; til billedpipelinen og &lt;strong&gt;Astros i18n-routing&lt;&#x2F;strong&gt; (dansk som standard, engelsk på &lt;code&gt;&#x2F;en&#x2F;&lt;&#x2F;code&gt;). Build-tid: ~30 sekunder. Output: ~70 % mindre. Intet admin-panel, ingen plugin-opdateringer, ingen bot-prøvet login-endpoint.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hvorfor-vaek-fra-wordpress&quot;&gt;Hvorfor væk fra WordPress&lt;&#x2F;h2&gt;
&lt;p&gt;For en portfolio, der opdateres et par gange om måneden, lavede WordPress for meget:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PHP-runtime og MySQL&lt;&#x2F;strong&gt; for et site, der i praksis er statisk.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Titusindvis af plugins&lt;&#x2F;strong&gt; til billedgallerier, kontaktformularer, SEO og caching — hver med sin egen opdaterings­kadence og sikkerhedshuller.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Et halvt-forket tema&lt;&#x2F;strong&gt; med patches, ingen huskede hvorfor var der.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Et admin-login-endpoint&lt;&#x2F;strong&gt;, der blev prøvet flere tusind gange i døgnet af bots.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Gentagne cache-kvaler&lt;&#x2F;strong&gt;, hver gang CDN og plugins var uenige.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Konkret betød det at droppe WordPress:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ingen admin-panel at holde patchet.&lt;&#x2F;strong&gt; WordPress-core, plugin-opdateringer, tema-opdateringer — væk.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ingen database.&lt;&#x2F;strong&gt; Indholdet ligger som Markdown i repoet.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ingen login-flade, bots kan prøve.&lt;&#x2F;strong&gt; Der findes ikke en &lt;code&gt;&#x2F;wp-admin&#x2F;&lt;&#x2F;code&gt; længere.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;~10× hurtigere sideindlæsning&lt;&#x2F;strong&gt; uden cache-lag.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;~70 % mindre samlet build-størrelse&lt;&#x2F;strong&gt; — vi skiftede håndeksporterede JPEG’er ud med AVIF med fornuftige &lt;code&gt;srcset&lt;&#x2F;code&gt;-breakpoints.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Til gengæld mister du den ikke-tekniske redigering. I praksis betød det ingenting: ejeren var gladere for at redigere Markdown end for at kæmpe med WordPress’ blok-editor.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hvorfor-astro&quot;&gt;Hvorfor Astro&lt;&#x2F;h2&gt;
&lt;p&gt;Jeg overvejede Hugo, 11ty, Next.js static export og SvelteKit. Astro vandt på tre konkrete punkter:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Content collections.&lt;&#x2F;strong&gt; En typet, skema-kontrolleret måde at beskrive et portfolio-projekt som en mappe med fotos plus lidt front-matter. Buildet fejler højlydt, hvis noget ikke overholder skemaet. Intet CMS nødvendigt.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;Image&amp;gt;&lt;&#x2F;code&gt;-komponenten.&lt;&#x2F;strong&gt; Astros indbyggede billedpipeline håndterer AVIF + JPEG-fallback + &lt;code&gt;srcset&lt;&#x2F;code&gt; + &lt;code&gt;width&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;height&lt;&#x2F;code&gt; med en one-liner. Sharp er motoren under.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Islands-arkitektur — ikke relevant her.&lt;&#x2F;strong&gt; Siden har ingen interaktive komponenter, så den sender stort set ingen JavaScript.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;content-collections-ikke-et-cms&quot;&gt;Content collections, ikke et CMS&lt;&#x2F;h2&gt;
&lt;p&gt;Hvert portfolio-projekt er en mappe under &lt;code&gt;src&#x2F;content&#x2F;portfolio&#x2F;&lt;&#x2F;code&gt; med et front-matter-skema:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;src&#x2F;content&#x2F;portfolio&#x2F;
├── 2024-kogebogs-editorial&#x2F;
│   ├── index.mdx
│   ├── cover.jpg
│   ├── 01.jpg, 02.jpg, …
└── 2023-forarets-katalog&#x2F;
    ├── index.mdx
    ├── cover.jpg
    └── 01.jpg …
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;index.mdx&lt;&#x2F;code&gt;’s front-matter deklarerer titel, kategori, år og forsidebillede. Astro håndhæver skemaet ved build-tid via &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.astro.build&#x2F;en&#x2F;guides&#x2F;content-collections&#x2F;&quot;&gt;&lt;code&gt;defineCollection&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; med et Zod-skema. Hvis et projekt mangler et forsidebillede eller har en dårlig kategori, fejler buildet.&lt;&#x2F;p&gt;
&lt;p&gt;Kategorier: &lt;strong&gt;madfotografi, opskriftsudvikling, interiør- og haveproduktion, editorial, kogebøger og mode&lt;&#x2F;strong&gt;. At tilføje et nyt projekt er &lt;code&gt;mkdir&lt;&#x2F;code&gt; + &lt;code&gt;cp *.jpg&lt;&#x2F;code&gt; + en kort YAML-front-matter-blok. Ingen admin-UI, ingen database-migration, ingen cache at invalidere.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;billedpipeline-sharp-avif&quot;&gt;Billedpipeline: Sharp + AVIF&lt;&#x2F;h2&gt;
&lt;p&gt;Madfotografi står og falder med billedkvalitet. Astros &lt;code&gt;&amp;lt;Image&amp;gt;&lt;&#x2F;code&gt;-komponent — drevet af &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sharp.pixelplumbing.com&#x2F;&quot;&gt;Sharp&lt;&#x2F;a&gt; — genererer:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AVIF&lt;&#x2F;strong&gt; som primært format. Stort set alle moderne browsere understøtter det nu (se &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;caniuse.com&#x2F;avif&quot;&gt;caniuse&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;JPEG&lt;&#x2F;strong&gt;-fallback med matchende &lt;code&gt;srcset&lt;&#x2F;code&gt;-breakpoints (320, 640, 960, 1280, 1920 px).&lt;&#x2F;li&gt;
&lt;li&gt;Eksplicitte &lt;code&gt;width&lt;&#x2F;code&gt;- og &lt;code&gt;height&lt;&#x2F;code&gt;-attributter, så der er nul layout shift, mens billederne loader.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;loading=&quot;lazy&quot;&lt;&#x2F;code&gt; til billeder under folden og &lt;code&gt;fetchpriority=&quot;high&quot;&lt;&#x2F;code&gt; til heroet.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Tal&lt;&#x2F;strong&gt;: en typisk portfolio-side gik fra ~4,8 MB håndeksporterede JPEG’er til ~1,4 MB AVIF — omkring 70 % reduktion — uden synligt kvalitetstab i de viste størrelser.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;i18n-dansk-som-standard-engelsk-pa-en&quot;&gt;i18n — dansk som standard, engelsk på &#x2F;en&#x2F;&lt;&#x2F;h2&gt;
&lt;p&gt;Astros i18n-routing sidder i &lt;code&gt;astro.config.mjs&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;js&quot;&gt;export default defineConfig({
  i18n: {
    defaultLocale: &amp;quot;da&amp;quot;,
    locales: [&amp;quot;da&amp;quot;, &amp;quot;en&amp;quot;],
    routing: { prefixDefaultLocale: false },
  },
});
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Det giver:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&#x2F;&lt;&#x2F;code&gt; for dansk (standard, uden præfiks).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;&#x2F;en&#x2F;&lt;&#x2F;code&gt; for engelsk.&lt;&#x2F;li&gt;
&lt;li&gt;Hvert indholds-entry deklarerer sit sprog via sin collection og filnavn.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;link rel=&quot;alternate&quot; hreflang&amp;gt;&lt;&#x2F;code&gt; og sitemap genereres fra samme kilde.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Indlæg og portfolio-entries uden oversættelse dukker simpelthen ikke op i det andet sprogs routing — der er ingen forkert-sprog-404.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;deployment-og-build&quot;&gt;Deployment og build&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Output&lt;&#x2F;strong&gt;: fuldt statisk, udgivet som almindelige filer bag Cloudflare.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Build-tid&lt;&#x2F;strong&gt;: ~30 sekunder fra koldt cache, ~6 sekunder inkrementelt.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ingen server, ingen database, ingen løbende kørselstid.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;malbare-forbedringer&quot;&gt;Målbare forbedringer&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Mål&lt;&#x2F;th&gt;&lt;th&gt;WordPress (før)&lt;&#x2F;th&gt;&lt;th&gt;Astro (efter)&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Build &#x2F; deploy-tid&lt;&#x2F;td&gt;&lt;td&gt;ikke relevant&lt;&#x2F;td&gt;&lt;td&gt;~30 s koldt, ~6 s varmt&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Typisk sidestørrelse (portfolio-side)&lt;&#x2F;td&gt;&lt;td&gt;~4,8 MB&lt;&#x2F;td&gt;&lt;td&gt;~1,4 MB&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Largest Contentful Paint&lt;&#x2F;td&gt;&lt;td&gt;~2,8 s&lt;&#x2F;td&gt;&lt;td&gt;~0,9 s&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Time to Interactive&lt;&#x2F;td&gt;&lt;td&gt;~3,5 s&lt;&#x2F;td&gt;&lt;td&gt;~1,1 s&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;JS sendt til klienten&lt;&#x2F;td&gt;&lt;td&gt;~220 KB&lt;&#x2F;td&gt;&lt;td&gt;~0 KB&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Plugins at holde patchet&lt;&#x2F;td&gt;&lt;td&gt;14&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;ofte-stillede-sporgsmal&quot;&gt;Ofte stillede spørgsmål&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kan-en-ikke-teknisk-ejer-stadig-redigere-siden&quot;&gt;Kan en ikke-teknisk ejer stadig redigere siden?&lt;&#x2F;h3&gt;
&lt;p&gt;Ja, til tekstændringer. At redigere Markdown i GitHubs web-editor er i praksis lettere end WordPress’ blok-editor. For nye portfolio-projekter er workflowet: træk billeder ind i en mappe, skriv en lille front-matter-blok, commit. Er det for teknisk, kan man bolte en minimal admin på (Decap CMS, Sveltia CMS eller Keystatic).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hvad-med-seo-efter-flytningen&quot;&gt;Hvad med SEO efter flytningen?&lt;&#x2F;h3&gt;
&lt;p&gt;URL’er blev bevaret, hvor det var muligt. Manglende gamle stier omdirigeres via Cloudflare-regler. Sitemap genereres ved hvert build, og strukturerede data (&lt;code&gt;Person&lt;&#x2F;code&gt;, &lt;code&gt;ImageGallery&lt;&#x2F;code&gt;, &lt;code&gt;Article&lt;&#x2F;code&gt;) udsendes pr. side.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hvorfor-astro-og-ikke-hugo&quot;&gt;Hvorfor Astro og ikke Hugo?&lt;&#x2F;h3&gt;
&lt;p&gt;Hugo er hurtigere og simplere til ren blogging, men Astros typede content collections og førsteklasses &lt;code&gt;&amp;lt;Image&amp;gt;&lt;&#x2F;code&gt;-komponent vandt i det her tilfælde. Til &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.x2q.net&quot;&gt;x2q.net&lt;&#x2F;a&gt; selv endte jeg senere med Zola — men til en portfolio med tung billedpipeline var Astro det rigtige valg.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hvordan-holdes-billederne-organiseret&quot;&gt;Hvordan holdes billederne organiseret?&lt;&#x2F;h3&gt;
&lt;p&gt;Hvert portfolio-projekt har sin egen mappe. Git-repoet er CMS’et. &lt;code&gt;git log&lt;&#x2F;code&gt; fortæller, hvornår et billede blev tilføjet, og hvorfor.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;er-buildet-deterministisk&quot;&gt;Er buildet deterministisk?&lt;&#x2F;h3&gt;
&lt;p&gt;Ja. Samme input giver bit-for-bit identisk output. Sharp er pinned i &lt;code&gt;package.json&lt;&#x2F;code&gt;; det samme er Astro. CI kører på Node LTS.&lt;&#x2F;p&gt;
&lt;p&gt;Hvis du sidder med et WordPress-site, der laver langt mindre, end dets infrastruktur antyder, er Astro en eftermiddag værd.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="da">
        <title>apextowww.com — gratis apex-til-www-omdirigering</title>
        <published>2026-04-18T00:00:00+00:00</published>
        <updated>2026-04-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.x2q.net/da/post/apextowww-com-apex-til-www-omdirigering/"/>
        <id>https://www.x2q.net/da/post/apextowww-com-apex-til-www-omdirigering/</id>
        
        <content type="html" xml:base="https://www.x2q.net/da/post/apextowww-com-apex-til-www-omdirigering/">&lt;p&gt;&lt;strong&gt;TL;DR —&lt;&#x2F;strong&gt; DNS tillader ikke &lt;code&gt;CNAME&lt;&#x2F;code&gt;-records på zoneapex (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.rfc-editor.org&#x2F;rfc&#x2F;rfc1034#section-3.6.2&quot;&gt;RFC 1034 §3.6.2&lt;&#x2F;a&gt;). Det er derfor hostingplatforme som Netlify, Vercel, Cloudflare Pages, Firebase og Heroku beder dig om at sætte &lt;code&gt;www.eksempel.dk&lt;&#x2F;code&gt; op med en &lt;code&gt;CNAME&lt;&#x2F;code&gt; og lader &lt;code&gt;eksempel.dk&lt;&#x2F;code&gt; (selve apex) være et problem, du selv løser. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;apextowww.com&quot;&gt;apextowww.com&lt;&#x2F;a&gt; løser det: peg to &lt;code&gt;A&lt;&#x2F;code&gt;-records og to &lt;code&gt;AAAA&lt;&#x2F;code&gt;-records mod tjenesten, og den udsteder et Let’s Encrypt-certifikat til dit apex og &lt;code&gt;301&lt;&#x2F;code&gt;-omdirigerer hver forespørgsel til &lt;code&gt;https:&#x2F;&#x2F;www.ditdomæne.tld&#x2F;&lt;&#x2F;code&gt; — med sti og querystring bevaret. Gratis, ingen oprettelse, ingen konto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hvorfor-du-ikke-kan-saette-en-cname-pa-apex&quot;&gt;Hvorfor du ikke kan sætte en CNAME på apex&lt;&#x2F;h2&gt;
&lt;p&gt;DNS-specifikationen er entydig: en zoneapex (det “nøgne” domæne som &lt;code&gt;eksempel.dk&lt;&#x2F;code&gt;) skal have en &lt;code&gt;SOA&lt;&#x2F;code&gt;-record og som regel &lt;code&gt;NS&lt;&#x2F;code&gt;-records. &lt;code&gt;CNAME&lt;&#x2F;code&gt; er defineret som et alias, der skal stå alene — den må ikke sameksistere med de &lt;code&gt;SOA&lt;&#x2F;code&gt;- og &lt;code&gt;NS&lt;&#x2F;code&gt;-records, som apex er forpligtet til at have. Derfor kan du godt &lt;code&gt;CNAME www.eksempel.dk → mitsite.netlify.app&lt;&#x2F;code&gt;, men du &lt;strong&gt;kan ikke&lt;&#x2F;strong&gt; &lt;code&gt;CNAME eksempel.dk → mitsite.netlify.app&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Der findes workarounds, og alle er en smule akavede:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ALIAS- &#x2F; ANAME-records.&lt;&#x2F;strong&gt; Leverandørspecifikke hos Cloudflare, Route 53, DNSimple, NS1 og andre. De virker ved at slå målet op bag kulisserne og returnere en &lt;code&gt;A&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;AAAA&lt;&#x2F;code&gt;. Fint, hvis din DNS-udbyder understøtter det; ubrugeligt, hvis ikke.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Fladning på udbyderniveau.&lt;&#x2F;strong&gt; Cloudflares “CNAME flattening” er præcis det, gjort automatisk.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Din egen altid-tændte VPS med &lt;code&gt;301 → www&lt;&#x2F;code&gt;.&lt;&#x2F;strong&gt; Det var det, jeg gjorde for flere domæner — både overkill og en lille vedligeholdelsesskat.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;apextowww er den fjerde mulighed: en andens altid-tændte omdirigerer, driftet for dig.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hvad-apextowww-gor&quot;&gt;Hvad apextowww gør&lt;&#x2F;h2&gt;
&lt;p&gt;Nøjagtig én ting: en &lt;code&gt;301 Moved Permanently&lt;&#x2F;code&gt; fra &lt;code&gt;https:&#x2F;&#x2F;ditdomæne.tld&#x2F;noget?x=y&lt;&#x2F;code&gt; til &lt;code&gt;https:&#x2F;&#x2F;www.ditdomæne.tld&#x2F;noget?x=y&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TLS&lt;&#x2F;strong&gt; udstedes automatisk ved første forespørgsel via Let’s Encrypts HTTP-01-challenge. Ingen ACME-klient at køre selv.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;IPv4 + IPv6&lt;&#x2F;strong&gt; som dual-stack fra starten. Begge record-typer er påkrævet.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;HTTP&#x2F;1.1, HTTP&#x2F;2 og HTTP&#x2F;3&lt;&#x2F;strong&gt; serveres. Selve omdirigeringen er lille, så protokolversion betyder mindre, men det hjælper first-paint, når omdirigeringen ligger i den kritiske sti.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Sti og querystring&lt;&#x2F;strong&gt; bevares, så deep links stadig virker.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ingen oprettelse, intet login, ingen konto.&lt;&#x2F;strong&gt; Hvis DNS er peget korrekt, virker det bare.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;sadan-saetter-du-det-op&quot;&gt;Sådan sætter du det op&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Gå til &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;apextowww.com&quot;&gt;apextowww.com&lt;&#x2F;a&gt; og kopiér de aktuelle IP-adresser (to IPv4, to IPv6).&lt;&#x2F;li&gt;
&lt;li&gt;I din DNS-udbyder: sæt &lt;code&gt;A&lt;&#x2F;code&gt;-records på dit apex, der peger på de to IPv4-adresser. Fjern eventuelle eksisterende &lt;code&gt;A&lt;&#x2F;code&gt;-records på apex.&lt;&#x2F;li&gt;
&lt;li&gt;Sæt &lt;code&gt;AAAA&lt;&#x2F;code&gt;-records på dit apex, der peger på de to IPv6-adresser.&lt;&#x2F;li&gt;
&lt;li&gt;Sørg for, at &lt;code&gt;www.ditdomæne.tld&lt;&#x2F;code&gt; stadig peger på din rigtige host (CNAME til Netlify &#x2F; Vercel &#x2F; Pages &#x2F; osv.).&lt;&#x2F;li&gt;
&lt;li&gt;Vent på DNS-propagering. Besøg &lt;code&gt;http:&#x2F;&#x2F;ditdomæne.tld&#x2F;&lt;&#x2F;code&gt; — den skal nu 301-omdirigere til &lt;code&gt;https:&#x2F;&#x2F;www.ditdomæne.tld&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;apextowww-siden har platform-specifikke guides under &lt;code&gt;&#x2F;netlify-apex-domain-redirect&#x2F;&lt;&#x2F;code&gt;, &lt;code&gt;&#x2F;vercel-apex-domain-redirect&#x2F;&lt;&#x2F;code&gt;, &lt;code&gt;&#x2F;cloudflare-pages-apex-redirect&#x2F;&lt;&#x2F;code&gt;, &lt;code&gt;&#x2F;firebase-hosting-apex-redirect&#x2F;&lt;&#x2F;code&gt; og &lt;code&gt;&#x2F;heroku-apex-domain-redirect&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stak&quot;&gt;Stak&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hetzner ARM64&lt;&#x2F;strong&gt;-servere for billig, strømbesparende compute. ARM64 er ~30 % billigere pr. vCPU hos Hetzner end x86 og kører omdirigereren uden at ryste på hånden.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Caddy-agtig automatisk TLS&lt;&#x2F;strong&gt; med &lt;strong&gt;Let’s Encrypt&lt;&#x2F;strong&gt; HTTP-01-challenges.&lt;&#x2F;li&gt;
&lt;li&gt;Dual-stack &lt;strong&gt;IPv4 + IPv6&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;HTTP&#x2F;1.1, HTTP&#x2F;2, HTTP&#x2F;3&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Offentligt &lt;strong&gt;statisk marketing-site&lt;&#x2F;strong&gt; på Cloudflare Pages, med platform-guides i hver sin URL-sti, så de rangerer uafhængigt på Google for “netlify apex redirect”, “vercel apex domain” osv.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ofte-stillede-sporgsmal&quot;&gt;Ofte stillede spørgsmål&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kan-jeg-bruge-apextowww-sammen-med-cloudflare-dns&quot;&gt;Kan jeg bruge apextowww sammen med Cloudflare DNS?&lt;&#x2F;h3&gt;
&lt;p&gt;Ja — men du skal have Cloudflares proxy (den orange sky) &lt;strong&gt;slået fra&lt;&#x2F;strong&gt; på apex’ens &lt;code&gt;A&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;AAAA&lt;&#x2F;code&gt;-records. Hvis proxien er slået til, opfanger Cloudflare forespørgslen, og Let’s Encrypts HTTP-01-challenge når aldrig frem til apextowww. Når certifikatet er udstedt og forny­es, skal du ikke bøvle videre — bare lad det være slukket.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;understotter-apextowww-wildcards-eller-andre-subdomaener-end-www&quot;&gt;Understøtter apextowww wildcards eller andre subdomæner end www?&lt;&#x2F;h3&gt;
&lt;p&gt;Nej. Tjenesten omdirigerer kun apex til &lt;code&gt;www.&lt;&#x2F;code&gt;. Alt andet bliver liggende hos din rigtige host.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hvad-sker-der-hvis-apextowww-ip-erne-skifter&quot;&gt;Hvad sker der, hvis apextowww-IP’erne skifter?&lt;&#x2F;h3&gt;
&lt;p&gt;Så skal du opdatere dine DNS &lt;code&gt;A&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;AAAA&lt;&#x2F;code&gt;-records. Operatøren offentliggør aktuelle IP’er på forsiden og giver varsel før ændringer. Det er fint for et privat domæne; for noget missionkritisk bør du køre din egen omdirigerer.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;er-der-rate-limit&quot;&gt;Er der rate-limit?&lt;&#x2F;h3&gt;
&lt;p&gt;Der er ingen publiceret hård grænse, men det er en gratis community-tjeneste. Hvis du serverer millioner af apex-omdirigeringer i døgnet, er det tid til at selv-hoste.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hvorfor-ikke-bare-bruge-cloudflares-gratis-plan&quot;&gt;Hvorfor ikke bare bruge Cloudflares gratis plan?&lt;&#x2F;h3&gt;
&lt;p&gt;Cloudflares CNAME-flattening på apex er et fint alternativ, hvis hele din DNS er hos Cloudflare. apextowww er nyttig, når din DNS ikke er hos Cloudflare, eller når du vil have en host-agnostisk omdirigerer, der virker identisk på tværs af domæner.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;er-den-virkelig-gratis&quot;&gt;Er den virkelig gratis?&lt;&#x2F;h3&gt;
&lt;p&gt;Ja. Marginalomkostningen pr. omdirigering på ARM64 er minimal. Ingen reklamer, ingen tracking ud over grundlæggende logs, ingen upsell.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hvorfor-den-findes&quot;&gt;Hvorfor den findes&lt;&#x2F;h2&gt;
&lt;p&gt;Hostingplatforme optimerer efter deres egen onboarding, ikke efter de DNS-selvfølgeligheder, der snubler enhver ny bruger. Det føltes værre at sende folk videre til en fremmeds VPS end selv at drifte én. Nu peger mine egne apex-domæner (inklusive &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.x2q.net&quot;&gt;x2q.net&lt;&#x2F;a&gt;) på apextowww, og jeg har kunnet slukke for den sidste lille omdirigerer-VPS, jeg stadig kørte af historiske grunde.&lt;&#x2F;p&gt;
&lt;p&gt;Det er den slags projekt, der ikke virker interessant, før du har brug for det — og så er det lige præcis det, du skal bruge.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
