feat(meditate): the dream journal, a fourth tab, Today's morning card

ADR 0038, D14. A dream (`Dream`) holds the night it belongs to (the
morning's date, today's by default), an optional title, its text, the
marks lucid, nightmare and recurring, a clarity of 1 to 5, the mood on
waking and free labels, and when it was written; a row each in `dream`,
sealed for its row with the person's key as the sittings
(`DreamRepository` on `SealedRows`, `SyncDreamGateway`), followed by
`JournalCubit` for every screen.

- The Journal, between Explore and Profile: dreams by month, the
  newest first, searched over title, text and labels as Explore
  searches, filtered by marks, `+` above the bar; empty, it says that
  entries are sealed on the device before they sync.
- A dream's screen over the tabs: a new one with its text first and
  focused, the rest folded below; a kept one to read, with Edit and
  Delete (asked first); leaving one written but not saved asks first.
- Today, from 4 to 12 o'clock while last night has no dream, a gentle
  card leading to a new one; Settings' Journal card switches it off
  (`dreamPrompt` in the sealed settings, schema 1 kept).
- Profile's Practice: this month's dreams and the lucid ones, once the
  journal holds one.
- English and German texts; What's new 0.1.0 names the journal; the
  account's deletion says it takes the dreams too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-03 14:19:10 +01:00
commit 86c9f4522a
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -127,7 +127,7 @@ abstract class AppLocalizations {
/// No description provided for @accountDeleteMessage.
///
/// In en, this message translates to:
/// **'Your account is deleted on the server and on all your devices, with every sitting kept. This can\'t be undone.'**
/// **'Your account is deleted on the server and on all your devices, with every sitting and dream kept. This can\'t be undone.'**
String get accountDeleteMessage;
/// No description provided for @aboutTitle.
@ -825,6 +825,282 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'On Today and in your Profile'**
String get showStreakHint;
/// No description provided for @shellTabJournal.
///
/// In en, this message translates to:
/// **'Journal'**
String get shellTabJournal;
/// No description provided for @journalSearch.
///
/// In en, this message translates to:
/// **'Search dreams'**
String get journalSearch;
/// No description provided for @journalEmptyTitle.
///
/// In en, this message translates to:
/// **'Your dream journal'**
String get journalEmptyTitle;
/// No description provided for @journalEmpty.
///
/// In en, this message translates to:
/// **'Write down a dream as soon as you wake, before it fades. Every entry is sealed on this device before it syncs: nobody else can read it, not even the instance.'**
String get journalEmpty;
/// No description provided for @journalNoMatch.
///
/// In en, this message translates to:
/// **'No dream matches.'**
String get journalNoMatch;
/// No description provided for @journalAdd.
///
/// In en, this message translates to:
/// **'Write down a dream'**
String get journalAdd;
/// No description provided for @journalFiguresTitle.
///
/// In en, this message translates to:
/// **'Dream journal'**
String get journalFiguresTitle;
/// No description provided for @figuresDreamsThisMonth.
///
/// In en, this message translates to:
/// **'This month'**
String get figuresDreamsThisMonth;
/// No description provided for @figuresLucid.
///
/// In en, this message translates to:
/// **'Lucid'**
String get figuresLucid;
/// No description provided for @markLucid.
///
/// In en, this message translates to:
/// **'Lucid'**
String get markLucid;
/// No description provided for @markNightmare.
///
/// In en, this message translates to:
/// **'Nightmare'**
String get markNightmare;
/// No description provided for @markRecurring.
///
/// In en, this message translates to:
/// **'Recurring'**
String get markRecurring;
/// No description provided for @moodGlad.
///
/// In en, this message translates to:
/// **'Glad'**
String get moodGlad;
/// No description provided for @moodCalm.
///
/// In en, this message translates to:
/// **'Calm'**
String get moodCalm;
/// No description provided for @moodPuzzled.
///
/// In en, this message translates to:
/// **'Puzzled'**
String get moodPuzzled;
/// No description provided for @moodSad.
///
/// In en, this message translates to:
/// **'Sad'**
String get moodSad;
/// No description provided for @moodUneasy.
///
/// In en, this message translates to:
/// **'Uneasy'**
String get moodUneasy;
/// No description provided for @dreamNew.
///
/// In en, this message translates to:
/// **'New dream'**
String get dreamNew;
/// No description provided for @dreamLastNight.
///
/// In en, this message translates to:
/// **'Last night'**
String get dreamLastNight;
/// The night a dream belongs to, named by the morning after it.
///
/// In en, this message translates to:
/// **'Night before {date}'**
String dreamNight(String date);
/// No description provided for @dreamTextHint.
///
/// In en, this message translates to:
/// **'What did you dream?'**
String get dreamTextHint;
/// No description provided for @dreamTitleLabel.
///
/// In en, this message translates to:
/// **'Title (optional)'**
String get dreamTitleLabel;
/// No description provided for @dreamMore.
///
/// In en, this message translates to:
/// **'Night, title, marks and more'**
String get dreamMore;
/// No description provided for @dreamNightLabel.
///
/// In en, this message translates to:
/// **'Night'**
String get dreamNightLabel;
/// No description provided for @dreamMarksLabel.
///
/// In en, this message translates to:
/// **'Marks'**
String get dreamMarksLabel;
/// No description provided for @dreamClarityLabel.
///
/// In en, this message translates to:
/// **'Clarity'**
String get dreamClarityLabel;
/// No description provided for @dreamClarityHint.
///
/// In en, this message translates to:
/// **'How clearly you remember it, 1 to 5'**
String get dreamClarityHint;
/// No description provided for @dreamClarityValue.
///
/// In en, this message translates to:
/// **'Clarity {clarity}/5'**
String dreamClarityValue(int clarity);
/// No description provided for @dreamMoodLabel.
///
/// In en, this message translates to:
/// **'Mood on waking'**
String get dreamMoodLabel;
/// No description provided for @dreamLabelsLabel.
///
/// In en, this message translates to:
/// **'Labels'**
String get dreamLabelsLabel;
/// No description provided for @dreamLabelsHint.
///
/// In en, this message translates to:
/// **'People, places, themes'**
String get dreamLabelsHint;
/// No description provided for @dreamLabelAdd.
///
/// In en, this message translates to:
/// **'Add label'**
String get dreamLabelAdd;
/// No description provided for @dreamSave.
///
/// In en, this message translates to:
/// **'Save'**
String get dreamSave;
/// No description provided for @dreamEdit.
///
/// In en, this message translates to:
/// **'Edit'**
String get dreamEdit;
/// No description provided for @dreamDelete.
///
/// In en, this message translates to:
/// **'Delete'**
String get dreamDelete;
/// No description provided for @dreamDeleteTitle.
///
/// In en, this message translates to:
/// **'Delete this dream?'**
String get dreamDeleteTitle;
/// No description provided for @dreamDeleteMessage.
///
/// In en, this message translates to:
/// **'It goes from your journal on all your devices.'**
String get dreamDeleteMessage;
/// No description provided for @dreamDiscardTitle.
///
/// In en, this message translates to:
/// **'Discard this dream?'**
String get dreamDiscardTitle;
/// No description provided for @dreamDiscardMessage.
///
/// In en, this message translates to:
/// **'What you wrote isn\'t saved.'**
String get dreamDiscardMessage;
/// No description provided for @dreamDiscard.
///
/// In en, this message translates to:
/// **'Discard'**
String get dreamDiscard;
/// No description provided for @dreamWritten.
///
/// In en, this message translates to:
/// **'Written {date}'**
String dreamWritten(String date);
/// No description provided for @todayDreamPrompt.
///
/// In en, this message translates to:
/// **'Write down last night\'s dream'**
String get todayDreamPrompt;
/// No description provided for @todayDreamPromptHint.
///
/// In en, this message translates to:
/// **'Before it fades. Sealed on this device.'**
String get todayDreamPromptHint;
/// No description provided for @settingsJournal.
///
/// In en, this message translates to:
/// **'Journal'**
String get settingsJournal;
/// No description provided for @dreamPromptTitle.
///
/// In en, this message translates to:
/// **'Ask for last night\'s dream'**
String get dreamPromptTitle;
/// No description provided for @dreamPromptHint.
///
/// In en, this message translates to:
/// **'On Today, from 4 to 12 o\'clock, until you write one'**
String get dreamPromptHint;
}
class _AppLocalizationsDelegate