reclaim/app/lib/pages/about_page.dart
flemming-it e08cedcd3f feat(brand): rename product to Recl∆Im (Reclaim) across app, bundle, docs
Recl∆Im — the F∆I product line for Pflicht-basierte
Wirkungsanalyse und Reform-Vorschlags-Pipelines. Replaces the
working title 'Law-Heatmap', which described the demo view
rather than the platform. Heatmap, Norms list, Hub view,
Methodik are now four panes of the same Recl∆Im app.

Renames in this commit:

  Flutter package      lawheatmap_app   -> reclaim_app
  macOS bundle id      ai.flemming.lawheatmapApp -> ai.flemming.reclaim
  macOS PRODUCT_NAME   lawheatmap_app   -> reclaim_app
  Theme tokens         LawHeatmapColors/Space/Radius/Typography/Theme
                       -> Reclaim*
  Surface card         LawHeatmapCard   -> ReclaimCard
  Top-level widget     LawHeatmapApp    -> ReclaimApp
  Theme files          lawheatmap_theme.dart/lawheatmap_tokens.dart
                       -> reclaim_theme.dart/reclaim_tokens.dart
  Widget file          lawheatmap_card.dart -> reclaim_card.dart
  Build script         build-macos.sh paths and headline string
  Docs                 MACHBARKEITSSTUDIE.md, METHODIK.md, RUN.md,
                       app/README.md, flow YAML
  UI strings           'F∆I Law-Heatmap' / 'Law-Heatmap'
                       -> 'Recl∆Im' / 'Recl∆Im (F∆I)' for vendor-
                       prefixed contexts

flutter analyze: clean. flutter test: 2/2 passing.

The local working directory stays fai_lawheatmap/ for now —
the dir is referenced by the .claude project metadata; renaming
it would break session continuity for no real gain. The Forgejo
repo was renamed via API in the same change-set (fai/lawheatmap
-> fai/reclaim), with the legacy slug serving a redirect
courtesy of Forgejo's built-in rename handling.

Signed-off-by: flemming-it <sf@flemming.it>
2026-06-18 13:42:55 +02:00

129 lines
5 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
import '../theme/reclaim_tokens.dart';
import '../widgets/reclaim_card.dart';
class AboutPage extends StatelessWidget {
const AboutPage({super.key});
@override
Widget build(BuildContext context) {
final t = Theme.of(context).textTheme;
return SingleChildScrollView(
padding: const EdgeInsets.all(ReclaimSpace.xl),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Methodik & Quellen', style: t.displaySmall),
const SizedBox(height: ReclaimSpace.xs),
Text(
'Wie das System bewertet, woran es sich messen lässt.',
style: t.bodyLarge?.copyWith(color: ReclaimColors.mute),
),
const SizedBox(height: ReclaimSpace.lg),
ReclaimCard(
accent: true,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Drei nicht verhandelbare Sätze',
style: t.headlineSmall),
const SizedBox(height: ReclaimSpace.md),
Text(
'1. Wir bewerten Pflichten, nicht Gesetze.\n'
'2. Jede Zahl trägt die Tier-Stufe ihres schwächsten '
'Bestandteils. Kein figürlich-runder Wert ohne Quelle.\n'
'3. Kein Output verlässt das System ohne Juristen-Gate '
'(`system.approval@^0`).',
style: t.bodyLarge?.copyWith(height: 1.7),
),
],
),
),
const SizedBox(height: ReclaimSpace.lg),
ReclaimCard(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Methodische Vorbilder', style: t.headlineSmall),
const SizedBox(height: ReclaimSpace.sm),
_bullet(t,
'Standardkostenmodell (SKM) — Nationaler Normenkontrollrat. P × F × T × h.'),
_bullet(t,
'Coupette / Katz / Bommarito 2021 — Netzwerkanalyse deutsches Bundesrecht (Graph-Schema).'),
_bullet(t,
'Mercatus QuantGov / RegData — NLP-basierte Pflicht-Klassifikation (must/shall/may).'),
_bullet(t,
'EU Better Regulation Toolbox + REFIT — Cost-Benefit + Evaluations-Methodik.'),
_bullet(t,
'Akoma Ntoso 1.0 (OASIS) + LegalRuleML — XML-Format und Deontik-Datenmodell.'),
_bullet(t,
'UK Better Regulation Framework — Regulatory Policy Committee als unabhängige Letzt-Validierung.'),
],
),
),
const SizedBox(height: ReclaimSpace.lg),
ReclaimCard(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('4-Tier-Evidenz-Modell', style: t.headlineSmall),
const SizedBox(height: ReclaimSpace.sm),
_bullet(t,
'T1 — amtlich/peer-reviewed: NKR, DESTATIS, ifo, ZEW, BMWK, SVR, IfM Bonn.'),
_bullet(t,
'T2 — Verbands-Erhebung: DIHK, IHK Berlin, ZDH, BDI Mittelstand, BVMW, HDE.'),
_bullet(t,
'T3 — eigene strukturierte Erhebung (Phase 2/3, DSGVO-anonymisiert).'),
_bullet(t,
'T4 — qualitatives Signal: Petitionen, openPetition, mein.berlin.de, Foren — nur Pain-Indikator.'),
],
),
),
const SizedBox(height: ReclaimSpace.lg),
ReclaimCard(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Plattform', style: t.headlineSmall),
const SizedBox(height: ReclaimSpace.sm),
Text(
'Ch∆In v0.16.0 — Vendor: F∆I = Flemming.AI. '
'Hub. Module. Flow. Deterministisch, WASM-sandboxed, '
'tamper-evident Audit-Log (CHAIN-EVENT-V3), '
'Apache 2.0, CRA-ready.',
style: t.bodyLarge?.copyWith(height: 1.6),
),
],
),
),
],
),
);
}
Widget _bullet(TextTheme t, String text) {
return Padding(
padding: const EdgeInsets.only(bottom: ReclaimSpace.sm),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(top: 6, right: 10),
child: Container(
width: 5,
height: 5,
decoration: const BoxDecoration(
color: ReclaimColors.signal,
shape: BoxShape.circle,
),
),
),
Expanded(
child: Text(text, style: t.bodyLarge?.copyWith(height: 1.6)),
),
],
),
);
}
}