feat(studio): editorial Today hero on the store (v0.30.0)

App-store research shows that the most loved discovery
surfaces — Apple's Today tab being the canonical example —
work because editors tell stories instead of stacking
algorithmic recommendations. F∆I has no surveillance budget
and no monetization pressure, so we lean fully into editorial
curation.

This commit adds `_StoreTodayHero`, the first surface a
browsing operator sees:

- Single curated story per release, kept const in
  [_kCurrentTodayStory] so the narrative is reviewable in code
  review and ships in the audit log via the binary hash. No
  CMS, no network, no surveillance.
- Bilingual content shipped inline (`titleEn`/`titleDe`,
  `bodyEn`/`bodyDe`) so KRITIS deployments don't need a
  translation backend.
- Gradient backdrop with hero icon, deck, narrative paragraph,
  optional CTA. Visual treatment matches Apple Today's
  hierarchy: badge → headline → body → action.
- Auto-hides whenever a filter is active so a purposeful
  search isn't pushed below the fold.
- Per-session dismiss button — no permanent suppression, the
  next Studio launch shows it again so a release-bumped story
  has a chance to be seen.

Current story (Studio v0.30.x) directs operators to the new
recommended-sources strip, closing the loop between editorial
context and one-click action.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-05-08 12:44:39 +02:00
parent 581ebbeaf7
commit fe933a713f
8 changed files with 273 additions and 2 deletions

View file

@ -345,6 +345,15 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get storeReloadTooltip => 'Aktualisieren';
@override
String get storeTodayBadge => 'HEUTE';
@override
String get storeTodayDeck => 'Von der F∆I-Redaktion';
@override
String get storeTodayDismissTooltip => 'Für diese Sitzung ausblenden';
@override
String get storePillInstalled => 'installiert';