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>
129 lines
5 KiB
Dart
129 lines
5 KiB
Dart
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)),
|
||
),
|
||
],
|
||
),
|
||
);
|
||
}
|
||
}
|