Add NO/UK/PL translations to all 6 doc pages
Per-page translation arrays in translations/*.php (EN/NO/UK/PL) for korrespond-about, korrespond-guide, korrespond-tech, timeline-about, timeline-guide, and timeline-tech. Generated via Azure gpt-4o-mini; Norwegian legal/institution terms preserved as-is in all languages. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+61
-59
@@ -8,6 +8,9 @@ $langPath = '/korrespond-about.php';
|
||||
$toolsLogin = 'https://dobetternorge.no/tools-login.php?return=' . urlencode('/korrespond.php');
|
||||
$registerUrl = 'https://dobetternorge.no/register.php';
|
||||
$ctaUrl = $isAuthed ? '/korrespond.php' : ($toolsLogin);
|
||||
|
||||
$_pt = require __DIR__ . '/translations/korrespond-about.php';
|
||||
$t = $_pt[$uiLang] ?? $_pt['en'];
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="<?= htmlspecialchars($uiLang) ?>">
|
||||
@@ -44,21 +47,20 @@ $ctaUrl = $isAuthed ? '/korrespond.php' : ($toolsLogin);
|
||||
<?php endforeach; ?>
|
||||
</nav>
|
||||
<?php if ($isAuthed): ?>
|
||||
<a href="/korrespond.php" class="lt-nav__cta lt-nav__cta--enter">Open Korrespond →</a>
|
||||
<a href="/korrespond.php" class="lt-nav__cta lt-nav__cta--enter"><?= htmlspecialchars($t['nav_open']) ?></a>
|
||||
<?php else: ?>
|
||||
<a href="<?= htmlspecialchars($toolsLogin) ?>" class="lt-nav__cta">Sign in</a>
|
||||
<a href="<?= htmlspecialchars($toolsLogin) ?>" class="lt-nav__cta"><?= htmlspecialchars($t['nav_signin']) ?></a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Doc nav: links to all 3 doc pages -->
|
||||
<nav class="kdoc-doc-nav" aria-label="Korrespond documentation">
|
||||
<div class="kdoc-doc-nav__inner">
|
||||
<a href="/korrespond-about.php" class="is-active">About</a>
|
||||
<a href="/korrespond-guide.php">User guide</a>
|
||||
<a href="/korrespond-tech.php">How it works</a>
|
||||
<a href="/korrespond-about.php" class="is-active"><?= htmlspecialchars($t['nav_about']) ?></a>
|
||||
<a href="/korrespond-guide.php"><?= htmlspecialchars($t['nav_guide']) ?></a>
|
||||
<a href="/korrespond-tech.php"><?= htmlspecialchars($t['nav_howit']) ?></a>
|
||||
<?php if ($isAuthed): ?>
|
||||
<a href="/korrespond.php">← Open the tool</a>
|
||||
<a href="/korrespond.php"><?= htmlspecialchars($t['nav_opentool']) ?></a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -66,33 +68,33 @@ $ctaUrl = $isAuthed ? '/korrespond.php' : ($toolsLogin);
|
||||
<!-- Hero -->
|
||||
<section class="kdoc-hero" style="background: linear-gradient(rgba(0,20,60,0.82),rgba(0,20,60,0.88)), url('assets/images/korrespond/hero-marketing.png') center/cover no-repeat;">
|
||||
<div class="kdoc-hero__inner">
|
||||
<p class="kdoc-hero__kicker">AI Correspondence · Norwegian Authorities · Hard-RAG Grounded</p>
|
||||
<h1 class="kdoc-hero__title">Draft the letter that changes everything.</h1>
|
||||
<p class="kdoc-hero__sub">Korrespond turns your situation into a polished, statute-grounded letter, email, or court filing — always in Norwegian bokmål plus your working language, side by side. Every § citation is verified against 220,000+ indexed legal passages before it reaches you.</p>
|
||||
<p class="kdoc-hero__kicker"><?= htmlspecialchars($t['hero_kicker']) ?></p>
|
||||
<h1 class="kdoc-hero__title"><?= htmlspecialchars($t['hero_title']) ?></h1>
|
||||
<p class="kdoc-hero__sub"><?= htmlspecialchars($t['hero_sub']) ?></p>
|
||||
|
||||
<div class="kdoc-hero__stats">
|
||||
<div class="kdoc-hero__stat">
|
||||
<strong>220K+</strong>
|
||||
<span>legal passages indexed</span>
|
||||
<span><?= htmlspecialchars($t['stat_legal']) ?></span>
|
||||
</div>
|
||||
<div class="kdoc-hero__stat">
|
||||
<strong>11</strong>
|
||||
<span>authority presets</span>
|
||||
<span><?= htmlspecialchars($t['stat_authority']) ?></span>
|
||||
</div>
|
||||
<div class="kdoc-hero__stat">
|
||||
<strong>4</strong>
|
||||
<span>output types</span>
|
||||
<span><?= htmlspecialchars($t['stat_output']) ?></span>
|
||||
</div>
|
||||
<div class="kdoc-hero__stat">
|
||||
<strong>3</strong>
|
||||
<span>pipeline passes</span>
|
||||
<span><?= htmlspecialchars($t['stat_pipeline']) ?></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="kdoc-hero__ctas">
|
||||
<a href="<?= htmlspecialchars($ctaUrl) ?>" class="kdoc-btn-primary">Try Korrespond free →</a>
|
||||
<a href="/korrespond-guide.php" class="kdoc-btn-secondary">User guide</a>
|
||||
<a href="/korrespond-tech.php" class="kdoc-btn-secondary">How it works</a>
|
||||
<a href="<?= htmlspecialchars($ctaUrl) ?>" class="kdoc-btn-primary"><?= htmlspecialchars($t['btn_try']) ?></a>
|
||||
<a href="/korrespond-guide.php" class="kdoc-btn-secondary"><?= htmlspecialchars($t['btn_guide']) ?></a>
|
||||
<a href="/korrespond-tech.php" class="kdoc-btn-secondary"><?= htmlspecialchars($t['btn_howit']) ?></a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -100,23 +102,23 @@ $ctaUrl = $isAuthed ? '/korrespond.php' : ($toolsLogin);
|
||||
<!-- What you get -->
|
||||
<section class="kdoc-section--alt">
|
||||
<div class="kdoc-section">
|
||||
<p class="kdoc-section__eyebrow">What you get</p>
|
||||
<h2 class="kdoc-section__title">Three things no other tool gives you at once.</h2>
|
||||
<p class="kdoc-section__eyebrow"><?= htmlspecialchars($t['what_eyebrow']) ?></p>
|
||||
<h2 class="kdoc-section__title"><?= htmlspecialchars($t['what_title']) ?></h2>
|
||||
<div class="kdoc-features">
|
||||
<div class="kdoc-feature-card">
|
||||
<span class="kdoc-feature-card__icon">🇳🇴</span>
|
||||
<h3 class="kdoc-feature-card__title">Always Norwegian + your language</h3>
|
||||
<p class="kdoc-feature-card__body">The canonical draft is always Norwegian bokmål — the legally operative form. Your working language (English, Polish, or Ukrainian) appears side-by-side as a reference column. Copy either version with one click.</p>
|
||||
<h3 class="kdoc-feature-card__title"><?= htmlspecialchars($t['f1_title']) ?></h3>
|
||||
<p class="kdoc-feature-card__body"><?= htmlspecialchars($t['f1_body']) ?></p>
|
||||
</div>
|
||||
<div class="kdoc-feature-card">
|
||||
<span class="kdoc-feature-card__icon">📜</span>
|
||||
<h3 class="kdoc-feature-card__title">Hard-RAG: no hallucinated statutes</h3>
|
||||
<p class="kdoc-feature-card__body">Every § number in the draft is traced to a specific retrieved passage from the legal corpus before it reaches you. The self-check pass strips any citation that can't be verified. If no statute fits — the draft says so plainly, without fake references.</p>
|
||||
<h3 class="kdoc-feature-card__title"><?= htmlspecialchars($t['f2_title']) ?></h3>
|
||||
<p class="kdoc-feature-card__body"><?= htmlspecialchars($t['f2_body']) ?></p>
|
||||
</div>
|
||||
<div class="kdoc-feature-card">
|
||||
<span class="kdoc-feature-card__icon">⚖️</span>
|
||||
<h3 class="kdoc-feature-card__title">Covers the statutes that matter</h3>
|
||||
<p class="kdoc-feature-card__body">forvaltningsloven (fvl §§ 17, 18, 24-25, 28, 32), barnevernsloven, NAV-loven, opplæringslova, barnehageloven, and EMK Art. 6 & 8 — all reachable by selecting the right recipient body. Optional second pass pulls formal ECHR case citations (Strand Lobben, Johansen, K.O. and V.M.).</p>
|
||||
<h3 class="kdoc-feature-card__title"><?= htmlspecialchars($t['f3_title']) ?></h3>
|
||||
<p class="kdoc-feature-card__body"><?= $t['f3_body_html'] ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -124,31 +126,31 @@ $ctaUrl = $isAuthed ? '/korrespond.php' : ($toolsLogin);
|
||||
|
||||
<!-- How it works (3-step) -->
|
||||
<div class="kdoc-section">
|
||||
<p class="kdoc-section__eyebrow">How it works</p>
|
||||
<h2 class="kdoc-section__title">Describe → retrieve → draft. In under a minute.</h2>
|
||||
<p class="kdoc-section__sub">Three steps from blank form to ready-to-send letter. No legal training required.</p>
|
||||
<p class="kdoc-section__eyebrow"><?= htmlspecialchars($t['how_eyebrow']) ?></p>
|
||||
<h2 class="kdoc-section__title"><?= htmlspecialchars($t['how_title']) ?></h2>
|
||||
<p class="kdoc-section__sub"><?= htmlspecialchars($t['how_sub']) ?></p>
|
||||
|
||||
<div class="kdoc-steps">
|
||||
<div class="kdoc-step-card">
|
||||
<span class="kdoc-step-card__num">1</span>
|
||||
<h3 class="kdoc-step-card__title">Describe your situation</h3>
|
||||
<p class="kdoc-step-card__body">Choose the authority you're writing to, select your output type and tone, and describe what happened. Pick a goal chip (appeal, access to documents, request meeting…) or write your own. Upload the original letter if replying.</p>
|
||||
<p class="kdoc-step-card__example">E.g. “NAV denied my application. I want to appeal and demand a reasoned decision.”</p>
|
||||
<h3 class="kdoc-step-card__title"><?= htmlspecialchars($t['s1_title']) ?></h3>
|
||||
<p class="kdoc-step-card__body"><?= htmlspecialchars($t['s1_body']) ?></p>
|
||||
<p class="kdoc-step-card__example"><?= htmlspecialchars($t['s1_example']) ?></p>
|
||||
</div>
|
||||
<span class="kdoc-step-arrow" aria-hidden="true">→</span>
|
||||
<div class="kdoc-step-card">
|
||||
<span class="kdoc-step-card__num">2</span>
|
||||
<h3 class="kdoc-step-card__title">AI retrieves applicable law & drafts</h3>
|
||||
<p class="kdoc-step-card__body">The pipeline classifies your situation, identifies the relevant statute set for your chosen authority, retrieves the top matching passages from 220,000+ indexed sources, and drafts a formal letter — citing only what it actually found.</p>
|
||||
<p class="kdoc-step-card__example">Produces two-column output: Norsk (bokmål) canonical + your working language reference.</p>
|
||||
<h3 class="kdoc-step-card__title"><?= htmlspecialchars($t['s2_title']) ?></h3>
|
||||
<p class="kdoc-step-card__body"><?= htmlspecialchars($t['s2_body']) ?></p>
|
||||
<p class="kdoc-step-card__example"><?= htmlspecialchars($t['s2_example']) ?></p>
|
||||
<img src="assets/images/korrespond/output-draft.png" alt="Two-column draft output — Norwegian bokmål and English side by side" class="kdoc-step-card__screenshot" loading="lazy">
|
||||
</div>
|
||||
<span class="kdoc-step-arrow" aria-hidden="true">→</span>
|
||||
<div class="kdoc-step-card">
|
||||
<span class="kdoc-step-card__num">3</span>
|
||||
<h3 class="kdoc-step-card__title">Refine with formal citations</h3>
|
||||
<p class="kdoc-step-card__body">Optional second pass: choose Norwegian law, ECHR, or both. The tool rewrites the draft with court-ready citation style — <em>jf. forvaltningsloven § 17</em>, <em>Strand Lobben m.fl. mot Norge, EMD-37283/13, §§ 207–214</em> — and appends a Rettskilder (legal sources) block.</p>
|
||||
<p class="kdoc-step-card__example">Costs one extra credit. Takes ~30 seconds.</p>
|
||||
<h3 class="kdoc-step-card__title"><?= htmlspecialchars($t['s3_title']) ?></h3>
|
||||
<p class="kdoc-step-card__body"><?= $t['s3_body_html'] ?></p>
|
||||
<p class="kdoc-step-card__example"><?= htmlspecialchars($t['s3_example']) ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -156,24 +158,24 @@ $ctaUrl = $isAuthed ? '/korrespond.php' : ($toolsLogin);
|
||||
<!-- Screenshots -->
|
||||
<section class="kdoc-section--alt">
|
||||
<div class="kdoc-section">
|
||||
<p class="kdoc-section__eyebrow">Screenshots</p>
|
||||
<h2 class="kdoc-section__title">See it in action.</h2>
|
||||
<p class="kdoc-section__eyebrow"><?= htmlspecialchars($t['ss_eyebrow']) ?></p>
|
||||
<h2 class="kdoc-section__title"><?= htmlspecialchars($t['ss_title']) ?></h2>
|
||||
<div class="kdoc-gallery">
|
||||
<div class="kdoc-gallery__item">
|
||||
<img src="assets/images/korrespond/form-top.png" alt="Korrespond form — mode toggle, recipient body, output type, tone" class="kdoc-screenshot" loading="lazy">
|
||||
<p class="kdoc-gallery__caption">The intake form: choose recipient body, output type, and tone in seconds.</p>
|
||||
<p class="kdoc-gallery__caption"><?= htmlspecialchars($t['g1_caption']) ?></p>
|
||||
</div>
|
||||
<div class="kdoc-gallery__item">
|
||||
<img src="assets/images/korrespond/output-draft.png" alt="Korrespond output — two-column side-by-side Norwegian and English draft" class="kdoc-screenshot" loading="lazy">
|
||||
<p class="kdoc-gallery__caption">Two-column output: Norwegian bokmål canonical on the left, English reference on the right.</p>
|
||||
<p class="kdoc-gallery__caption"><?= htmlspecialchars($t['g2_caption']) ?></p>
|
||||
</div>
|
||||
<div class="kdoc-gallery__item">
|
||||
<img src="assets/images/korrespond/refine-panel.png" alt="Refine panel with jurisdiction options" class="kdoc-screenshot" loading="lazy">
|
||||
<p class="kdoc-gallery__caption">The optional Refine pass — choose Norwegian law, ECHR, or both.</p>
|
||||
<p class="kdoc-gallery__caption"><?= htmlspecialchars($t['g3_caption']) ?></p>
|
||||
</div>
|
||||
<div class="kdoc-gallery__item">
|
||||
<img src="assets/images/korrespond/output-refined.png" alt="Refined output with formal statute and ECHR citations" class="kdoc-screenshot" loading="lazy">
|
||||
<p class="kdoc-gallery__caption">After refinement: formal citations like <em>jf. opplæringslova § 9 A-4</em> and <em>EMK artikkel 8</em>.</p>
|
||||
<p class="kdoc-gallery__caption"><?= $t['g4_caption_html'] ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -181,30 +183,30 @@ $ctaUrl = $isAuthed ? '/korrespond.php' : ($toolsLogin);
|
||||
|
||||
<!-- Fine-tuned LLM spotlight -->
|
||||
<div class="kdoc-section">
|
||||
<p class="kdoc-section__eyebrow">Under the hood</p>
|
||||
<h2 class="kdoc-section__title">Powered by a purpose-built legal LLM.</h2>
|
||||
<p class="kdoc-section__eyebrow"><?= htmlspecialchars($t['hood_eyebrow']) ?></p>
|
||||
<h2 class="kdoc-section__title"><?= htmlspecialchars($t['hood_title']) ?></h2>
|
||||
<div class="kdoc-llm-spotlight">
|
||||
<div>
|
||||
<span class="kdoc-llm-spotlight__badge">Fine-tuned model</span>
|
||||
<span class="kdoc-llm-spotlight__badge"><?= htmlspecialchars($t['llm_badge']) ?></span>
|
||||
<h3 class="kdoc-llm-spotlight__title">dbn-legal-agent</h3>
|
||||
<p class="kdoc-llm-spotlight__body">A QLoRA fine-tune trained on Norwegian child-welfare and administrative law text. Unlike a general-purpose LLM, dbn-legal-agent understands the procedural vocabulary of forvaltningsloven — what a <em>klage</em> requires, what triggers fvl § 17 consultation rights, how Barnevernet decisions must be reasoned under § 6-3. It runs alongside Azure gpt-4o to shape the structure and register of every draft.</p>
|
||||
<p class="kdoc-llm-spotlight__body"><?= $t['llm_body_html'] ?></p>
|
||||
</div>
|
||||
<div class="kdoc-llm-stats">
|
||||
<div class="kdoc-llm-stat">
|
||||
<strong>QLoRA</strong>
|
||||
<span>fine-tune method</span>
|
||||
<span><?= htmlspecialchars($t['llm_s1']) ?></span>
|
||||
</div>
|
||||
<div class="kdoc-llm-stat">
|
||||
<strong>fvl</strong>
|
||||
<span>procedural vocabulary</span>
|
||||
<span><?= htmlspecialchars($t['llm_s2']) ?></span>
|
||||
</div>
|
||||
<div class="kdoc-llm-stat">
|
||||
<strong>gpt-4o</strong>
|
||||
<span>drafting backbone</span>
|
||||
<span><?= htmlspecialchars($t['llm_s3']) ?></span>
|
||||
</div>
|
||||
<div class="kdoc-llm-stat">
|
||||
<strong>3-pass</strong>
|
||||
<span>pipeline architecture</span>
|
||||
<span><?= htmlspecialchars($t['llm_s4']) ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -213,9 +215,9 @@ $ctaUrl = $isAuthed ? '/korrespond.php' : ($toolsLogin);
|
||||
<!-- Authority coverage -->
|
||||
<section class="kdoc-section--alt">
|
||||
<div class="kdoc-section">
|
||||
<p class="kdoc-section__eyebrow">Authority coverage</p>
|
||||
<h2 class="kdoc-section__title">11 presets. Each loads the right statutes automatically.</h2>
|
||||
<p class="kdoc-section__sub">Selecting a recipient body pre-loads the relevant statute set into the Hard-RAG retrieval. No need to know which laws apply — the tool does that for you.</p>
|
||||
<p class="kdoc-section__eyebrow"><?= htmlspecialchars($t['auth_eyebrow']) ?></p>
|
||||
<h2 class="kdoc-section__title"><?= htmlspecialchars($t['auth_title']) ?></h2>
|
||||
<p class="kdoc-section__sub"><?= htmlspecialchars($t['auth_sub']) ?></p>
|
||||
<div class="kdoc-bodies">
|
||||
<div class="kdoc-body-card">
|
||||
<p class="kdoc-body-card__name">Barnehage</p>
|
||||
@@ -267,14 +269,14 @@ $ctaUrl = $isAuthed ? '/korrespond.php' : ($toolsLogin);
|
||||
|
||||
<!-- CTA strip -->
|
||||
<section class="kdoc-cta-strip">
|
||||
<h2 class="kdoc-cta-strip__title">Ready to draft your letter?</h2>
|
||||
<p class="kdoc-cta-strip__sub">Free for Do Better Norge members. No credit card required.</p>
|
||||
<h2 class="kdoc-cta-strip__title"><?= htmlspecialchars($t['cta_title']) ?></h2>
|
||||
<p class="kdoc-cta-strip__sub"><?= htmlspecialchars($t['cta_sub']) ?></p>
|
||||
<div class="kdoc-hero__ctas">
|
||||
<?php if ($isAuthed): ?>
|
||||
<a href="/korrespond.php" class="kdoc-btn-primary">Open Korrespond →</a>
|
||||
<a href="/korrespond.php" class="kdoc-btn-primary"><?= htmlspecialchars($t['btn_open']) ?></a>
|
||||
<?php else: ?>
|
||||
<a href="<?= htmlspecialchars($toolsLogin) ?>" class="kdoc-btn-primary">Sign in to use Korrespond →</a>
|
||||
<a href="<?= htmlspecialchars($registerUrl) ?>" class="kdoc-btn-secondary">Register free</a>
|
||||
<a href="<?= htmlspecialchars($toolsLogin) ?>" class="kdoc-btn-primary"><?= htmlspecialchars($t['btn_signin_cta']) ?></a>
|
||||
<a href="<?= htmlspecialchars($registerUrl) ?>" class="kdoc-btn-secondary"><?= htmlspecialchars($t['btn_register']) ?></a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
Reference in New Issue
Block a user