<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Architecture Decisions | LUSTECH on LUSTECH</title><link>https://lustech.se/en/decisions/</link><description>Recent content in Architecture Decisions | LUSTECH on LUSTECH</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 27 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://lustech.se/en/decisions/index.xml" rel="self" type="application/rss+xml"/><item><title>ADR 0001 — Hugo over Astro</title><link>https://lustech.se/en/decisions/0001-hugo-over-astro/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>https://lustech.se/en/decisions/0001-hugo-over-astro/</guid><description>&lt;h2 id="adr-0001--hugo-over-astro" class="relative group"&gt;ADR 0001 — Hugo over Astro &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#adr-0001--hugo-over-astro" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Accepted · &lt;strong&gt;Date:&lt;/strong&gt; 2024-01 (recorded retroactively 2026-04)&lt;/p&gt;
&lt;h3 id="context" class="relative group"&gt;Context &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#context" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;We needed a static site for LUSTECH. Constraints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bilingual (Swedish default, English secondary), 5–10 pages today, blog posts planned&lt;/li&gt;
&lt;li&gt;One person maintaining it; no dedicated frontend specialist&lt;/li&gt;
&lt;li&gt;Self-hosted on Coolify; no Vercel-specific tricks&lt;/li&gt;
&lt;li&gt;Build pipeline must work for years without npm rot&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The realistic candidates were Hugo, Astro, Next.js (static export), and Eleventy.&lt;/p&gt;</description></item><item><title>ADR 0002 — No JavaScript framework</title><link>https://lustech.se/en/decisions/0002-no-js-framework/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>https://lustech.se/en/decisions/0002-no-js-framework/</guid><description>&lt;h2 id="adr-0002--no-javascript-framework" class="relative group"&gt;ADR 0002 — No JavaScript framework &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#adr-0002--no-javascript-framework" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Accepted · &lt;strong&gt;Date:&lt;/strong&gt; 2024-01 (recorded retroactively 2026-04)&lt;/p&gt;
&lt;h3 id="context" class="relative group"&gt;Context &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#context" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;After &lt;a href="https://lustech.se/en/decisions/0001-hugo-over-astro/"&gt;ADR 0001&lt;/a&gt; settled on Hugo, the next call: how do we handle the parts of the site that need to run code in the browser?&lt;/p&gt;
&lt;p&gt;What we actually need browser-side:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Theme toggle (dark / light)&lt;/li&gt;
&lt;li&gt;AI-badge popover open/close&lt;/li&gt;
&lt;li&gt;Smooth-scroll on in-page anchors&lt;/li&gt;
&lt;li&gt;Scroll-to-top button&lt;/li&gt;
&lt;li&gt;Contact form: timing check, honeypot, base64 token, content filter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it. No live updates, no client-side routing, no server-state rendering.&lt;/p&gt;</description></item><item><title>ADR 0003 — Self-hosted Umami for analytics</title><link>https://lustech.se/en/decisions/0003-self-hosted-umami/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>https://lustech.se/en/decisions/0003-self-hosted-umami/</guid><description>&lt;h2 id="adr-0003--self-hosted-umami-for-analytics" class="relative group"&gt;ADR 0003 — Self-hosted Umami for analytics &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#adr-0003--self-hosted-umami-for-analytics" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Accepted · &lt;strong&gt;Date:&lt;/strong&gt; 2024-01 (recorded retroactively 2026-04)&lt;/p&gt;
&lt;h3 id="context" class="relative group"&gt;Context &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#context" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;We wanted basic analytics: page views, referrers, country-level geographies, and conversion tracking on the contact form. Constraints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GDPR-clean &lt;strong&gt;without&lt;/strong&gt; a cookie consent banner (banners hurt UX and bias data)&lt;/li&gt;
&lt;li&gt;No data sold to or shared with ad networks&lt;/li&gt;
&lt;li&gt;Aligned with the open-source brand we sell to clients&lt;/li&gt;
&lt;li&gt;Cheap or free at our traffic levels&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Options considered: GA4, Plausible (cloud), Plausible (self-hosted), PostHog (cloud), Umami (self-hosted).&lt;/p&gt;</description></item></channel></rss>