feat(meditate): the app: Today, Explore, Profile, the sitting and its bells

halkyon_meditate_flutter on halkyon_app and halkyon_ui (ADR 0038): the
first start, sign-in and account as every Halkyon app's, a bar below
medium windows and a rail with the icon from medium on, fern washes,
Settings in cards (Sync, the operator's, Sitting, Practice, the
account, What's new, About, the version), English and German.

- Today: a greeting by the hour, Sit now at 5, 10, 20 minutes and the
  timer's own length, the practice of the day, the week with the days
  in a row, favourites, recently sat (D9).
- Explore: six practices of Halkyon's own, written for the app, found
  by a search without case or accents, by goal and by kind; each page
  with how it goes, its lengths, its heart and Start (D4, D10).
- The sitting, over the tabs: its time from the clock, a ring counting
  down, the cue of the moment, Pause and End, the bells at the start,
  between and at the end, the screen kept on; ended early, kept from a
  minute on where the person says so (D5, D6).
- Profile: every Halkyon app's, then the person's practice: minutes,
  sittings, days, the week and every sitting kept, to delete (D8).
- Settings and sittings sealed with the person's key and synced (D7).

The bells are synthesised by apps/meditate/tool/bells.py, the icon is
Lucide's sprout from cobalt through pacific into fern
(tool/app_icons.py). Releases and the deploy are a later step.

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 09:25:30 +01:00
commit cb026dce8d
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -0,0 +1,190 @@
{
"@@locale": "en",
"appTitle": "Halkyon Meditate",
"@appTitle": {
"description": "The app's name: the window's title, and where halkyon_app's texts name the app."
},
"launchProduct": "Meditate",
"@launchProduct": {
"description": "The app's word in its wordmark, under \"Halkyon\"."
},
"instanceFirstStartSubtitle": "Choose the instance to keep your practice on. Someone runs each one; you can add others later.",
"accountTitle": "Account",
"accountDeleteMessage": "Your account is deleted on the server and on all your devices, with every sitting kept. This can't be undone.",
"aboutTitle": "About Halkyon Meditate",
"settingsTitle": "Settings",
"settingsVersion": "Version {version} (build {build})",
"@settingsVersion": {
"placeholders": {
"version": {
"type": "String"
},
"build": {
"type": "String"
}
}
},
"keysMissing": "This device can't save: it doesn't hold your account's keys. Sign in with your password or recovery phrase to add them.",
"shellTabToday": "Today",
"shellTabExplore": "Explore",
"shellTabProfile": "Profile",
"greetingMorning": "Good morning",
"greetingAfternoon": "Good afternoon",
"greetingEvening": "Good evening",
"greetingNight": "A quiet night",
"minutesUnit": "min",
"@minutesUnit": {
"description": "Minutes, after a number typed or stepped."
},
"minutes": "{minutes} min",
"@minutes": {
"description": "A length in minutes, short, on chips and rows.",
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"todaySitNow": "Sit now",
"todaySitNowHint": "A silent sitting with bells, as long as you choose.",
"todayPracticeOfDay": "Practice of the day",
"todayThisWeek": "This week",
"streakDays": "{count, plural, =0{No days in a row yet} =1{1 day in a row} other{{count} days in a row}}",
"@streakDays": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"favouritesTitle": "Favourites",
"favouritesNone": "No favourites yet. Mark a practice with its heart in Explore.",
"recentTitle": "Recently sat",
"recentNone": "Nothing sat yet.",
"silentTimer": "Silent timer",
"sittingRow": "{date} · {minutes} min",
"@sittingRow": {
"description": "A sitting kept: when it began and how long it was sat.",
"placeholders": {
"date": {
"type": "String"
},
"minutes": {
"type": "int"
}
}
},
"exploreSearch": "Search practices",
"exploreGoals": "What brings you here?",
"exploreAll": "All",
"exploreNoMatch": "No practice matches.",
"goalCalm": "Calm down",
"goalSleep": "Sleep",
"goalFocus": "Focus",
"goalBegin": "Begin",
"kindBreathing": "Breathing",
"kindBody": "Body",
"kindAwareness": "Awareness",
"kindKindness": "Kindness",
"kindSleep": "Sleep",
"kindPause": "Pause",
"practiceStart": "Start",
"practiceLength": "Length",
"practiceHowItGoes": "How it goes",
"practiceFavourite": "Add to favourites",
"practiceUnfavourite": "Remove from favourites",
"practiceGone": "This practice isn't in this version of the app.",
"practiceBreathCountingTitle": "Counting breaths",
"practiceBreathCountingSummary": "Count each out-breath from one to ten, then begin again.",
"practiceBreathCountingCue1": "Sit comfortably. Let the breath come and go by itself.",
"practiceBreathCountingCue2": "With each out-breath, count: one, two, and on up to ten.",
"practiceBreathCountingCue3": "Lost count? Notice it kindly and begin again at one.",
"practiceBreathCountingCue4": "Let the counting go. Rest with the breath as it is.",
"practiceThreeMinutePauseTitle": "Three-minute pause",
"practiceThreeMinutePauseSummary": "A short stop in the day: notice, gather, widen.",
"practiceThreeMinutePauseCue1": "What is here right now? Thoughts, feelings, sensations.",
"practiceThreeMinutePauseCue2": "Gather your attention on the breath, low in the belly.",
"practiceThreeMinutePauseCue3": "Widen it to the whole body, and to the room around you.",
"practiceBodyScanTitle": "Body scan",
"practiceBodyScanSummary": "Move your attention slowly through the body, from the feet up.",
"practiceBodyScanCue1": "Lie or sit comfortably. Feel where the body meets the ground.",
"practiceBodyScanCue2": "Bring your attention to your feet and legs. Just notice.",
"practiceBodyScanCue3": "Move up through the belly, the back and the chest.",
"practiceBodyScanCue4": "Notice the hands, the arms, the shoulders and the neck.",
"practiceBodyScanCue5": "The face and the head. Then feel the whole body at once.",
"practiceOpenAwarenessTitle": "Open awareness",
"practiceOpenAwarenessSummary": "Rest your attention on nothing in particular, and let whatever comes pass.",
"practiceOpenAwarenessCue1": "Begin with a few breaths, settling in.",
"practiceOpenAwarenessCue2": "Let the breath go. Notice sounds as they come and go.",
"practiceOpenAwarenessCue3": "Thoughts may come too. See them arrive, and leave.",
"practiceOpenAwarenessCue4": "Simply be aware, with nothing to do.",
"practiceLovingKindnessTitle": "Kind wishes",
"practiceLovingKindnessSummary": "Wish yourself and others well, one circle after the other.",
"practiceLovingKindnessCue1": "Think of yourself: may I be safe, may I be at ease.",
"practiceLovingKindnessCue2": "Think of someone dear to you: may you be safe, may you be at ease.",
"practiceLovingKindnessCue3": "Think of someone you hardly know, and wish them the same.",
"practiceLovingKindnessCue4": "Let the wishes spread to everyone, everywhere.",
"practiceSettlingForSleepTitle": "Settling for sleep",
"practiceSettlingForSleepSummary": "Slow the breath and let the day go before you sleep.",
"practiceSettlingForSleepCue1": "Lie down. Let the bed carry your weight.",
"practiceSettlingForSleepCue2": "Breathe out a little longer than you breathe in.",
"practiceSettlingForSleepCue3": "Let the day's thoughts drift past like clouds.",
"practiceSettlingForSleepCue4": "Nothing more to do. Let sleep come when it comes.",
"timerCue": "Sit in silence. The bell tells you when it is over.",
"sittingPause": "Pause",
"sittingResume": "Resume",
"sittingEnd": "End",
"sittingPaused": "Paused",
"sittingDoneTitle": "Well sat",
"sittingDoneMessage": "{minutes, plural, =1{1 minute sat.} other{{minutes} minutes sat.}}",
"@sittingDoneMessage": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"sittingDone": "Done",
"sittingEndTitle": "End the sitting?",
"sittingEndMessage": "{minutes, plural, =1{1 minute sat so far. Keep it among your sittings?} other{{minutes} minutes sat so far. Keep them among your sittings?}}",
"@sittingEndMessage": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"sittingKeep": "Keep",
"sittingDiscard": "Discard",
"sittingSitOn": "Sit on",
"profileTabPractice": "Practice",
"figuresMinutes": "Minutes",
"figuresSittings": "Sittings",
"figuresDays": "Days",
"historyTitle": "Your sittings",
"sittingDelete": "Delete",
"sittingDeleteTitle": "Delete this sitting?",
"sittingDeleteMessage": "It goes from your figures on all your devices.",
"settingsSitting": "Sitting",
"bellTitle": "Bell",
"bellBowl": "Singing bowl",
"bellSmallBell": "Small bell",
"bellWoodBlock": "Wooden block",
"startBellTitle": "Bell at the start",
"intervalTitle": "Bells between",
"intervalNone": "None",
"intervalEvery": "Every {minutes} min",
"@intervalEvery": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"keepScreenOnTitle": "Keep the screen on",
"keepScreenOnHint": "While a sitting runs",
"timerLengthTitle": "Silent timer's length",
"settingsPractice": "Practice",
"showStreakTitle": "Show the days in a row",
"showStreakHint": "On Today and in your Profile"
}