fix: UI opschonen — homepage, disclaimers, navigatie

- Homepage: geen Grondwet-hoofdstukken meer, wel duidelijke links
  naar volledige tekst, AI-samenvatting, en historie
- Disclaimer op homepage: neutraal (geen "AI-verrijkt")
- Disclaimer op /grondwet: "automatisch omgezet van XML naar Markdown"
- /grondwet: blauwe banner met link naar AI-samenvatting
- Statistieken herordend (regelingen eerst)
This commit is contained in:
Coornhert 2026-03-30 12:07:36 +02:00
parent 9e254cc953
commit 8ee8522bdc
3 changed files with 37 additions and 27 deletions

View file

@ -35,28 +35,18 @@ def _get_store() -> RegelingStore:
@router.get("/", response_class=HTMLResponse) @router.get("/", response_class=HTMLResponse)
def homepage(request: Request) -> HTMLResponse: def homepage(request: Request) -> HTMLResponse:
"""Homepage met zoekbalk en Grondwet overzicht.""" """Homepage — project intro, zoekbalk, links."""
store = _get_store() store = _get_store()
tekst = store.get_tekst(BWB_GRONDWET) or "" tekst = store.get_tekst(BWB_GRONDWET) or ""
# Tel artikelen en hoofdstukken
artikelen = len(re.findall(r"^### Artikel", tekst, re.MULTILINE)) artikelen = len(re.findall(r"^### Artikel", tekst, re.MULTILINE))
versies = store.get_versies(BWB_GRONDWET) versies = store.get_versies(BWB_GRONDWET)
# Extraheer hoofdstukken voor de inhoudsopgave
hoofdstukken = []
for match in re.finditer(r"^## (.+)$", tekst, re.MULTILINE):
titel = match.group(1).strip()
anchor = re.sub(r"[^\w\s-]", "", titel.lower()).replace(" ", "-")
hoofdstukken.append({"titel": titel, "anchor": anchor})
return templates.TemplateResponse(request, "index.html", { return templates.TemplateResponse(request, "index.html", {
"stats": { "stats": {
"artikelen": artikelen, "artikelen": artikelen,
"versies": len(versies), "versies": len(versies),
"regelingen": len(store.list_regelingen()), "regelingen": len(store.list_regelingen()),
}, },
"hoofdstukken": hoofdstukken,
}) })

View file

@ -11,7 +11,7 @@
</div> </div>
<form class="search-box" action="/zoeken" method="get"> <form class="search-box" action="/zoeken" method="get">
<input type="text" name="q" placeholder="Zoek in de Grondwet... bijv. 'privacy' of 'mag mijn baas mijn e-mail lezen?'" autofocus> <input type="text" name="q" placeholder="Zoek in de wetgeving... bijv. 'privacy' of 'mag mijn baas mijn e-mail lezen?'" autofocus>
<select name="mode"> <select name="mode">
<option value="keyword">Keyword</option> <option value="keyword">Keyword</option>
<option value="semantic">Semantisch</option> <option value="semantic">Semantisch</option>
@ -20,28 +20,39 @@
</form> </form>
<div class="stats"> <div class="stats">
<div class="stat">
<div class="stat-number">{{ stats.regelingen }}</div>
<div class="stat-label">regelingen</div>
</div>
<div class="stat"> <div class="stat">
<div class="stat-number">{{ stats.artikelen }}</div> <div class="stat-number">{{ stats.artikelen }}</div>
<div class="stat-label">artikelen</div> <div class="stat-label">artikelen in de Grondwet</div>
</div> </div>
<div class="stat"> <div class="stat">
<div class="stat-number">{{ stats.versies }}</div> <div class="stat-number">{{ stats.versies }}</div>
<div class="stat-label">historische versies</div> <div class="stat-label">historische versies</div>
</div> </div>
<div class="stat">
<div class="stat-number">{{ stats.regelingen }}</div>
<div class="stat-label">regelingen</div>
</div>
</div> </div>
<h2>Grondwet voor het Koninkrijk der Nederlanden</h2> <h2>Aan de slag</h2>
<div style="display: flex; flex-direction: column; gap: 1rem; margin: 1.5rem 0;">
<a href="/grondwet" style="display: block; padding: 1.2rem; border: 2px solid var(--color-accent); border-radius: 8px; text-decoration: none;">
<strong style="font-size: 1.1rem;">Lees de Grondwet</strong><br>
<span style="color: var(--color-muted);">De volledige tekst, doorzoekbaar en met versiehistorie</span>
</a>
<a href="/grondwet/samenvatting" style="display: block; padding: 1.2rem; border: 2px solid var(--color-accent-light); border-radius: 8px; text-decoration: none;">
<strong style="font-size: 1.1rem;">Samenvatting in begrijpelijk Nederlands</strong><br>
<span style="color: var(--color-muted);">AI-gegenereerde samenvatting per hoofdstuk (B1-niveau)</span>
</a>
<a href="/historie" style="display: block; padding: 1.2rem; border: 2px solid var(--color-accent-light); border-radius: 8px; text-decoration: none;">
<strong style="font-size: 1.1rem;">Bekijk de wijzigingshistorie</strong><br>
<span style="color: var(--color-muted);">Zie precies wat er veranderde bij elke grondwetswijziging</span>
</a>
</div>
<div class="disclaimer"> <div class="disclaimer">
Dit is een AI-verrijkte weergave van de Grondwet. Raadpleeg altijd WetGit is geen officiele bron van wetgeving. Raadpleeg altijd
<a href="https://wetten.overheid.nl/BWBR0001840">wetten.overheid.nl</a> voor de officiele tekst. <a href="https://wetten.overheid.nl">wetten.overheid.nl</a> voor de authentieke tekst.
</div> </div>
{% for h in hoofdstukken %}
<h3><a href="/grondwet#{{ h.anchor }}">{{ h.titel }}</a></h3>
{% endfor %}
{% endblock %} {% endblock %}

View file

@ -8,12 +8,21 @@
BWB-ID: {{ bwb_id }} | BWB-ID: {{ bwb_id }} |
<a href="https://wetten.overheid.nl/{{ bwb_id }}">Officiele tekst</a> | <a href="https://wetten.overheid.nl/{{ bwb_id }}">Officiele tekst</a> |
<a href="/historie">{{ versies }} versies</a> <a href="/historie">{{ versies }} versies</a>
{% if has_summary %} | <a href="/grondwet/samenvatting">AI-samenvatting</a>{% endif %}
</p> </p>
{% if has_summary %}
<div style="background: var(--color-accent-light); border-radius: 8px; padding: 1rem 1.2rem; margin: 1.5rem 0;">
<a href="/grondwet/samenvatting" style="text-decoration: none;">
<strong>Samenvatting in begrijpelijk Nederlands beschikbaar</strong><br>
<span style="color: var(--color-muted);">AI-gegenereerde samenvatting per hoofdstuk (B1-niveau)</span>
</a>
</div>
{% endif %}
<div class="disclaimer"> <div class="disclaimer">
Dit is geen officiele bron. Raadpleeg altijd Dit is de volledige wettekst, automatisch omgezet van XML naar Markdown.
<a href="https://wetten.overheid.nl/{{ bwb_id }}">wetten.overheid.nl</a>. Raadpleeg altijd <a href="https://wetten.overheid.nl/{{ bwb_id }}">wetten.overheid.nl</a>
voor de authentieke tekst.
</div> </div>
{{ content_html | safe }} {{ content_html | safe }}