fix(ui): stat-tile overflow + visible build version

Two issues:

1. _StatTile in the Doctor page overflowed by ~6px on narrow
   widths because the Row containing the icon + label "AUDIT
   CHAIN" with letterSpacing=0.6 didn't fit in the ~90px
   constraint per tile (4 tiles in a Row sharing the page
   width). Fix: smaller icon (16→14), tighter gap, label wrapped
   in Flexible with TextOverflow.ellipsis, and the longest label
   shortened "AUDIT CHAIN" → "AUDIT" with the chain count moved
   to the subtitle.

2. The new redesign was easy to mistake for the previous build
   from the outside. Add a small monospaced version line right
   under "F∆I Studio" in the sidebar header:

       F∆I Studio
       v0.7.1 · warm-minimalism

   Self-identifying — "wrong build" is now visible without
   reading the about dialog.

Bumps fai_studio 0.7.0 -> 0.7.1.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-05-05 22:41:26 +02:00
parent 671194c105
commit d5631177e0
3 changed files with 28 additions and 12 deletions

View file

@ -16,6 +16,11 @@ import 'theme/theme.dart';
import 'theme/tokens.dart';
import 'widgets/widgets.dart';
/// Studio's own build version. Bump on every UI commit so the
/// running app self-identifies visible in the sidebar header
/// and quick-glance proof that you're seeing the current build.
const String kStudioVersion = '0.7.1';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// Restore the persisted endpoint and theme mode before the
@ -218,7 +223,15 @@ class _Sidebar extends StatelessWidget {
fontWeight: FontWeight.w600,
),
),
const SizedBox(height: FaiSpace.xs),
const SizedBox(height: 2),
Text(
'v$kStudioVersion · warm-minimalism',
style: FaiTheme.mono(
size: 10,
color: theme.colorScheme.primary,
),
),
const SizedBox(height: FaiSpace.md),
// Connection pill.
Padding(
padding: const EdgeInsets.symmetric(horizontal: FaiSpace.lg),

View file

@ -142,10 +142,10 @@ class _SummaryStrip extends StatelessWidget {
),
const SizedBox(width: FaiSpace.md),
_StatTile(
label: 'Audit chain',
label: 'Audit',
value: snapshot.chainHealthy ? '' : '',
subtitle:
'${snapshot.eventChainVerified}/${snapshot.eventChainTotal} verified',
'${snapshot.eventChainVerified}/${snapshot.eventChainTotal} chain',
icon: Icons.shield_outlined,
tone: snapshot.chainHealthy
? FaiPillTone.success
@ -196,16 +196,19 @@ class _StatTile extends StatelessWidget {
children: [
Row(
children: [
Icon(icon, size: 16, color: theme.colorScheme.onSurfaceVariant),
const SizedBox(width: FaiSpace.sm),
Text(
Icon(icon, size: 14, color: theme.colorScheme.onSurfaceVariant),
const SizedBox(width: FaiSpace.xs),
Flexible(
child: Text(
label.toUpperCase(),
overflow: TextOverflow.ellipsis,
style: theme.textTheme.labelSmall?.copyWith(
color: theme.colorScheme.onSurfaceVariant,
letterSpacing: 0.6,
letterSpacing: 0.5,
fontSize: 10,
),
),
),
],
),
const SizedBox(height: FaiSpace.sm),

View file

@ -1,7 +1,7 @@
name: fai_studio
description: "F∆I Studio — desktop GUI for the F∆I hub"
publish_to: 'none'
version: 0.1.0
version: 0.7.1
environment:
sdk: ^3.11.0-200.1.beta