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:
parent
581ebbeaf7
commit
fe933a713f
8 changed files with 273 additions and 2 deletions
|
|
@ -118,6 +118,9 @@
|
|||
"placeholders": { "n": { "type": "int" } }
|
||||
},
|
||||
"storeReloadTooltip": "Aktualisieren",
|
||||
"storeTodayBadge": "HEUTE",
|
||||
"storeTodayDeck": "Von der F∆I-Redaktion",
|
||||
"storeTodayDismissTooltip": "Für diese Sitzung ausblenden",
|
||||
"storePillInstalled": "installiert",
|
||||
"storePillUpdate": "Update",
|
||||
"storeUpdateButton": "Update auf {version}",
|
||||
|
|
|
|||
|
|
@ -119,6 +119,9 @@
|
|||
"placeholders": { "n": { "type": "int" } }
|
||||
},
|
||||
"storeReloadTooltip": "Reload",
|
||||
"storeTodayBadge": "TODAY",
|
||||
"storeTodayDeck": "From the F∆I editor",
|
||||
"storeTodayDismissTooltip": "Hide for this session",
|
||||
"storePillInstalled": "installed",
|
||||
"storePillUpdate": "update",
|
||||
"storeUpdateButton": "Update to {version}",
|
||||
|
|
|
|||
|
|
@ -692,6 +692,24 @@ abstract class AppLocalizations {
|
|||
/// **'Reload'**
|
||||
String get storeReloadTooltip;
|
||||
|
||||
/// No description provided for @storeTodayBadge.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'TODAY'**
|
||||
String get storeTodayBadge;
|
||||
|
||||
/// No description provided for @storeTodayDeck.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'From the F∆I editor'**
|
||||
String get storeTodayDeck;
|
||||
|
||||
/// No description provided for @storeTodayDismissTooltip.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Hide for this session'**
|
||||
String get storeTodayDismissTooltip;
|
||||
|
||||
/// No description provided for @storePillInstalled.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
||||
|
|
|
|||
|
|
@ -363,6 +363,15 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get storeReloadTooltip => 'Reload';
|
||||
|
||||
@override
|
||||
String get storeTodayBadge => 'TODAY';
|
||||
|
||||
@override
|
||||
String get storeTodayDeck => 'From the F∆I editor';
|
||||
|
||||
@override
|
||||
String get storeTodayDismissTooltip => 'Hide for this session';
|
||||
|
||||
@override
|
||||
String get storePillInstalled => 'installed';
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue