Add PunktFri Flask landing page

- Landing page with hero, problemet, målgruppe, idé, disclaimer sections
- Signup form → SQLite + file log (navn, email, domæner, egne_ns, kommentar)
- /tak confirmation page
- /admin with HTTP Basic Auth
- /health endpoint
- Mobile-first minimal CSS, Danish throughout
- Honest 'under undersøgelse' framing — no premature organisational claims
This commit is contained in:
Henrik Jess Nielsen
2026-04-26 18:20:54 +02:00
parent 6fce8985b4
commit 7fe85dfe2c
9 changed files with 1011 additions and 0 deletions

47
templates/admin.html Normal file
View File

@@ -0,0 +1,47 @@
{% extends "base.html" %}
{% block title %}Admin — PunktFri{% endblock %}
{% block content %}
<div class="admin-section">
<h1>Tilmeldinger</h1>
<p class="admin-meta">{{ count }} tilmelding{{ 'er' if count != 1 else '' }} i alt</p>
{% if signups %}
<div class="table-wrapper">
<table class="signups-table">
<thead>
<tr>
<th>#</th>
<th>Navn</th>
<th>E-mail</th>
<th>Domæner</th>
<th>Egne NS</th>
<th>Kommentar</th>
<th>Tidspunkt</th>
</tr>
</thead>
<tbody>
{% for s in signups %}
<tr>
<td>{{ s.id }}</td>
<td>{{ s.navn }}</td>
<td>{{ s.email }}</td>
<td>{{ s.domaener }}</td>
<td>
<span class="badge-{{ s.egne_ns }}">{{ s.egne_ns | upper }}</span>
</td>
<td>{{ s.kommentar or '—' }}</td>
<td style="white-space:nowrap; color:#6b7280;">{{ s.timestamp }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="empty-state">
<p>Ingen tilmeldinger endnu.</p>
</div>
{% endif %}
</div>
{% endblock %}

29
templates/base.html Normal file
View File

@@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="da">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="PunktFri — non-profit registratorinitiativ for selvhostere med egne navneservere.">
<title>{% block title %}PunktFri{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<header>
<nav>
<a href="/" class="logo">Punkt<span>Fri</span></a>
</nav>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<div class="footer-inner">
<p><strong>PunktFri er ikke live endnu.</strong> Dette er en interessetilkendegivelse — ingen forpligtelse, ingen faktura, intet abonnement.</p>
<p>Kontakt: <a href="mailto:info@punktfri.dk">info@punktfri.dk</a></p>
<p class="footer-small">PunktFri er en idé under undersøgelse. Ingen forening er stiftet, ingen akkreditering er søgt.</p>
</div>
</footer>
</body>
</html>

161
templates/index.html Normal file
View File

@@ -0,0 +1,161 @@
{% extends "base.html" %}
{% block title %}PunktFri — Din domæneaftale. Ingen forhandler.{% endblock %}
{% block content %}
<!-- 1. Hero -->
<section class="hero">
<h1>PunktFri</h1>
<p class="tagline">"Din domæneaftale. Ingen forhandler. Ingen bullshit."</p>
<p class="intro">
Punktum dk tvinger fra 2026 alle .dk-domæneejere til at bruge en kommerciel forhandler.
Det rammer dig, der kører egne navneservere og aldrig har haft brug for hjælp.
Vi undersøger om vi kan gøre noget ved det — på vores egne præmisser.
</p>
</section>
<!-- 2. Problemet -->
<section class="section">
<div class="section-inner">
<h2>Problemet</h2>
<p>
Punktum dk ændrer reglerne. Fra 2026 kan du ikke längre administrere dit .dk-domæne direkte
— du skal have en akkrediteret forhandler som mellemled. Uanset om du har brug for dem eller ej.
</p>
<ul class="problem-list">
<li><strong>1. juli 2026:</strong> Nye .dk-domæner kræver en forhandler. Ingen direkte registrering mere.</li>
<li><strong>1. juli 2028:</strong> Alle eksisterende .dk-domæner skal overføres til en forhandler.</li>
<li><strong>Selvhostere rammes direkte:</strong> Kører du egne navneservere og har altid klaret dig selv hos Punktum dk, skal du nu have et administrativt mellemled — mod din vilje.</li>
<li><strong>Prisstigningen er reel:</strong> Kommercielle forhandlere opkræver typisk 90150 kr/år per domæne. Du betalte ~50 kr direkte. Det er dobbelt til tredobbelt pris for et lag du ikke har bedt om.</li>
<li><strong>Ingen teknisk gevinst:</strong> Du mister ikke kontrol over dine navneservere — men du tvinges alligevel til at betale en forhandler for at "hjælpe" dig.</li>
</ul>
</div>
</section>
<!-- 3. Hvem er PunktFri for? -->
<section class="section">
<div class="section-inner">
<h2>Er det noget for dig?</h2>
<p>PunktFri er tænkt til en meget specifik gruppe. Vær ærlig med dig selv.</p>
<div class="target-grid">
<div class="target-box not-for">
<h3>Ikke for dig hvis</h3>
<ul>
<li>Du vil have webhosting</li>
<li>Du vil have DNS-hosting</li>
<li>Du har brug for support på "min hjemmeside virker ikke"</li>
<li>Du ikke ved hvad en navneserver er</li>
<li>Du leder efter den billigste registrar</li>
</ul>
</div>
<div class="target-box is-for">
<h3>For dig hvis</h3>
<ul>
<li>Du kører egne navneservere (BIND, PowerDNS, Knot osv.)</li>
<li>Du har administreret direkte hos Punktum dk i årevis</li>
<li>Du vil beholde fuld kontrol over din infrastruktur</li>
<li>Du bare har brug for et tyndt administrativt lag mod Punktum dk</li>
<li>Du er ligeglad med support, panels og features</li>
</ul>
</div>
</div>
</div>
</section>
<!-- 4. Idéen bag PunktFri -->
<section class="section">
<div class="section-inner">
<h2>Idéen bag PunktFri <span class="status-badge">Under undersøgelse</span></h2>
<p>
PunktFri er på nuværende tidspunkt en idé — ikke en organisation.
Vi undersøger om det er muligt og realistisk at etablere følgende:
</p>
<ul class="idea-items">
<li>En non-profit forening der ansøger om akkreditering som registrator hos Punktum dk</li>
<li>Kostprismodel — ingen markup, ingen upsell, ingen abonnementsservice du ikke har bedt om</li>
<li>Demokratisk struktur — medlemmerne bestemmer, ikke investorer eller kommercielle interesser</li>
<li>Du beholder dine egne navneservere fuldstændigt — vi rører ikke din infrastruktur</li>
<li>Minimal administration: vi håndterer kun det formelle forhold til Punktum dk på dine vegne</li>
</ul>
<p style="margin-top: 1.25rem; font-size: 0.875rem; color: #6b7280;">
Intet er besluttet endnu. Denne side er til for at afdække om der er nok interesse til at
det kan bære sig — juridisk, økonomisk og praktisk.
</p>
</div>
</section>
<!-- 5. Hvad PunktFri IKKE er -->
<section class="section">
<div class="section-inner">
<h2>Hvad PunktFri ikke er</h2>
<p>For at undgå enhver tvivl:</p>
<ul class="not-list">
<li>En hostingudbyder</li>
<li>En DNS-udbyder</li>
<li>En supportlinje</li>
<li>En forretning</li>
<li>Et panel med features</li>
<li>Noget du betaler for nu</li>
</ul>
</div>
</section>
<!-- 6. Signup -->
<section class="section form-section">
<div class="section-inner">
<h2>Er du interesseret?</h2>
<p class="lead">Tilmeld dig som interesseret — det forpligter dig til ingenting.</p>
<p class="disclaimer">
Vi bruger dine oplysninger til at vurdere om der er tilstrækkelig interesse til at gå videre.
Ingen spam, ingen salg, ingen automatiske abonnementer. Kun en enkelt opdatering når vi ved mere.
</p>
{% if error %}
<div class="error-msg">{{ error }}</div>
{% endif %}
<form class="signup-form" method="post" action="/">
<div class="form-group">
<label for="navn">Navn <span style="color:#ef4444">*</span></label>
<input type="text" id="navn" name="navn" required autocomplete="name" placeholder="Dit navn">
</div>
<div class="form-group">
<label for="email">E-mail <span style="color:#ef4444">*</span></label>
<input type="email" id="email" name="email" required autocomplete="email" placeholder="du@eksempel.dk">
</div>
<div class="form-group">
<label for="domaener">
Antal .dk-domæner du administrerer <span style="color:#ef4444">*</span>
</label>
<input type="number" id="domaener" name="domaener" required min="1" placeholder="fx 3">
<span class="hint">Inkludér alle domæner du selv holder styr på</span>
</div>
<div class="form-group">
<label>Kører du egne navneservere? <span style="color:#ef4444">*</span></label>
<div class="radio-group">
<label>
<input type="radio" name="egne_ns" value="ja" required>
Ja
</label>
<label>
<input type="radio" name="egne_ns" value="nej">
Nej
</label>
</div>
</div>
<div class="form-group">
<label for="kommentar">Kommentarer eller spørgsmål <span style="color:#475569; font-weight:400">(valgfrit)</span></label>
<textarea id="kommentar" name="kommentar" placeholder="Har du tanker om modellen, bekymringer, eller noget vi bør tænke over?"></textarea>
</div>
<button type="submit" class="submit-btn">Ja, jeg er interesseret</button>
</form>
</div>
</section>
{% endblock %}

21
templates/tak.html Normal file
View File

@@ -0,0 +1,21 @@
{% extends "base.html" %}
{% block title %}Tak — PunktFri{% endblock %}
{% block content %}
<section class="tak-section">
<div class="tak-card">
<div class="tak-icon"></div>
<h1>Tak for din tilmelding</h1>
<p>Vi har noteret din interesse. Ingen forpligtelse, ingen faktura, intet abonnement.</p>
<p>
Vi vender tilbage med en enkelt opdatering, når vi ved om der er tilstrækkelig
interesse til at gå videre med idéen.
</p>
<p style="font-size: 0.8rem; color: #9ca3af;">
Spørgsmål? Skriv til <a href="mailto:info@punktfri.dk" style="color: #6366f1;">info@punktfri.dk</a>
</p>
<a href="/" class="back-link">← Tilbage til forsiden</a>
</div>
</section>
{% endblock %}