A studyset of 1,200 flashcards froze the window for seconds on opening
(7.4 s in a debug test; a release build is faster but still grows with
every card), long enough for the desktop to offer to kill the app: the
tabs held each list as one child of a scrolling view, shrink-wrapped, so
every row was built and laid out at once, and again on every change.
The tabs are now CustomScrollViews holding each list's slivers, built as
they scroll into view (0.07 s for the same 1,200 cards). What a list says
in place of its rows sits in SliverCentered.
On the desktop, Flutter's default drag handle lay over each card's "…",
so a press there began a drag rather than opening the options. Cards now
move in a Reorder mode, as paths do: Reorder beside the tabs (with two
cards or more, all showing), a grip in place of each card's options,
Done to end it. ReorderToggle and liftWhileDragged are shared with the
paths.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Also drops the Column around the Library import sheet's one entry
(avoid_single_child_in_multi_child_widgets).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Export content, in the studyset's options, writes the studyset and
everything inside it as one readable Markdown document (decided
2026-10-08: no re-importable archive before the public tier's release
files): its title, secondary title, description and licence, then its
flashcards (answers below their questions, choices as task lists),
notes, learning paths (steps with their kinds, answers, feedback and
sources), PDFs and bibliography, then each sub-studyset a level deeper.
Rich text keeps its formatting; formulas go between dollars, callouts
become quotes, spoilers HTML details, YouTube videos links. With files
(images, sounds, PDFs) it keeps a .zip of the document and them under
files/; a file this device can't have is named and counted.
Saving goes through a FileSaver: file_selector's dialog on the desktop,
file_picker's (Android's Storage Access Framework) on phones, a direct
dependency now at the version the editor already brings.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Beside search, as in the old app: Import offers an Anki deck, which
becomes a studyset of its own named after its top deck (or its file),
its subdecks inside as chosen. The studyset is made only once the
import starts, so closing the sheet before leaves nothing behind.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Import content gains Flashcards: pasted, or from a CSV or TSV file, one
card per line, split at its first tab, comma or semicolon (a .csv picks
commas), lines without both sides left out. Quoted fields are read as
spreadsheets write them, and a UTF-8 byte order mark is ignored. The
cards come in at the studyset's end with the origin "text", so the
dashboard doesn't count them as written.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Wherever the old menus offered it: the studyset's options, a path's
(in the list and in the runner), a note's, and a PDF's, all on the
shared sheet the cards use: when it was made (from its UUID v7 id) and
last changed where that is kept, its ids to copy (parent, studyset,
PDF), and for a PDF its file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
On the tinted ground, one card holds the path's details (title,
secondary title, a line, the description row, a line, its tags behind an
Add tags chip) and one below holds its steps under their header, lines
between them, filling the window at least.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
A note is one card on the tinted ground: its title, its tags behind an
Add tags chip, a line, then its text. The app bar says only how saving
stands; its "Note in …" title goes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
The path runner's top bar gains the path's options behind …: Reset
progress (starts it afresh at its first step, with an Undo that goes to
the progress itself and so outlives the runner) and Delete (asks,
closes the path, offers Undo). The way on is one wide button in the
middle of a footer set apart by a line, the same on every step, with
Back in a round button's room beside it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
On phones the topics' drawer ends on one row: New sub-studyset at the
start, the bibliography at the end. The rail takes what its foot ends
on, and keeps its foot while topics are rearranged or missing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
On a phone the four chips wrapped onto a second row; they now stay on
one and scroll.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
The read-only view passed its alignment to the text alone, which the
editor lays out only as wide as itself, so a centred face stayed at the
start. It now aligns top-level paragraphs and headings that have no
alignment of their own; lists, quotes and the rest keep the start, and
an alignment chosen in the format bar wins.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
A path shows its route and its secondary title above its title, dimmed
once completed; its options open below the … button, or where the finger
presses for a long press, and resetting its progress asks first. While
the paths are reordered, each keeps its route and secondary title beside
the handle.
Profile sits on the screen itself, a list as wide as readable text,
without a card; Explore on the plain surface too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
The Study pill reads "Learn 12 flashcards" in the app bar and "Learn 12"
floating, "Study" with nothing due, and is off with nothing to study,
saying so. With a path not finished, a chevron beside it offers to start
or continue the path: a menu in the app bar, a Study mode sheet on
phones. The floating bar rises above the licence line, which takes two
lines at most.
Add material offers a path, flashcards, a note and a PDF, in that order;
imports moved to the options' Import content, which asks for a learning
path or an Anki deck. The options read Edit, Move, Study options, Import
content, Reset progress, Archive, Delete. The bibliography is an outlined
round button above the content, and on phones at the foot of the topics.
The tabs sit on a line of their own across the card, what the tab shown
offers beside them: the flashcards' filter and options, and on the paths
Reorder once there are two, which turns them into handles to drag. An
empty tab says so in its middle; tapping the open tab again returns to
its top, and pulling a tab down syncs. The breadcrumb's steps are plain
links between "›", the studyset itself bold. A long description is cut at
a fixed height, measured, with Read more opening it whole under the
studyset's title. A studyset that no longer exists leads back to the
library.
The topics: All topics on the primary colour, in view also while they
are rearranged; each topic with the study it invites in a round icon,
what it holds ("Empty" with nothing, files counted too), and its options
(now with Reset progress) behind "…" or a long press where the finger
is; New sub-studyset at the foot below a line, the list with its
scrollbar always shown. All topics opens Add material while nothing is
due.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Home: plain cards on the surface, 16 dp apart, the goal first and the
Pomodoro timer after it in a new dashboard. The streak chip sits centred
in the app bar, and its sheet shows the days inside a big flame and the
week as marks over the weekdays' initials, with a word on today in a box.
The week names its day as "Thursday, Oct 8" and its days carry no
tooltip. The heatmap scrolls its weekdays with the weeks, outlines the
days to come, and names a day's activities with its date. The goal card
has a ring of 5 dp, a check once met and a pencil, and its sheet saves
across its width with Remove goal below. Arranging puts an eye on each
widget's corner and lifts the one picked up, with a tap the hand feels;
with every widget hidden, Customise brings arranging back. The stepper
moves to core, where the goal's sheet takes it too.
Library: the counts line includes files (PDFs); Refresh in the app bar
and pulling the list down sync now; a list that can't be read offers
Retry, which reads it again; the star keeps its square corners.
Studyset sheet: "Title *", the secondary title explained behind a
question mark, Inherit as a box beside the colour, and the description
in up to three lines with a chevron. Move sheet: round marks, the
studyset itself marked as current, the top level only while it is
inside another, archived studysets last under their heading, the
destination named in the footer, and a new studyset to move into, made
only once the move is.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
A studyset's notes and learning paths are routes of the Library tab, as
its screen is, so the navigation stays beside them; studying, cards, PDFs
and settings still take the whole window. App bars stay flat when content
scrolls under them: Material 3's tint flickers as an overscroll crosses
the edge again and again. The sync trouble dot shows on the Settings cogs
only; Home has a cog of its own now, so the Profile tab needn't carry it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Finding today's burials in the review log meant reading every review the
cards ever had, once more in the library's progress, the card list and
each round. card.buriedAt holds it instead, read with the cards those
screens read anyway. The sync engine merges a row's fields one by one, so
a burial and a move of the same card on two devices both stand (a sync
test checks it). The review log's bury mode is gone.
The migration adds one nullable column, on the server and on devices:
ALTER TABLE "card" ADD COLUMN "buriedAt" (timestamp without time zone on
the server, INTEGER in SQLite); existing rows read as not buried. Apps
built before it stop syncing until they are updated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
The header's Undo takes back ratings, burials and deletions, last first,
across the session's rounds and from the end of a round, and shows the
card again. A card deleted during a session is held (DelayedDeletions.hold)
until the session ends, then goes after the usual time to undo, so the
message offering Undo still works; if the app is killed first, the card
stays. Undo on a burial's or deletion's message takes back that step alone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
With tags narrowing a session, new cards of theirs to learn, and cards
of other tags due for review, the session asks first ("You have reviews
due"): Review first studies the reviews due across every tag, round
after round, the tags not applying until none is left (the session
settings say so meanwhile); Learn anyway learns the tags' new cards;
Cancel leaves. A new session asks again.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
The session settings' new Vocabulary section quizzes words as multiple
choice: their meaning (the default), their reading, the expression for
the meaning, or the reading and the meaning in turn ("Mixed"). The
wrong answers come from the other words studied; none of the word's
own meanings counts as wrong, whatever its case. A word without what is
asked, or without two others to draw from, stays a word to flip. It is
asked the same way each time it comes, and rated as any card.
The settings keep both (`quizVocabulary`, `quizAspect`; settings schema
5), on every device.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Deleting a card, from the list or while studying, asks first ("Delete
flashcard?"), then offers Undo for a few seconds ("Flashcard deleted").
Meanwhile the card leaves every list and session; once the time to
undo is over, its revisions are blanked and it is deleted for good, as
notes and studysets already are (CardDeletions, a DelayedDeletions).
Undo while studying puts the card back into the round where it was.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
"More info", in a card's menu while studying or in the list, shows when
it was made and last changed (its ids say), its id and its studyset's
(and its PDF's), each copied with a tap, and how often it was studied
and when last. The sheet is a shared one, for notes and paths to follow.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
A word with senses (as a dictionary gives them) shows them when its
answer shows: numbered when there are several, each with its label, its
translations and its grammar codes, small and slanted, their meaning on
hover. A word usually written in kana shows its reading from the start:
its kanji are rarely seen, so there is nothing to hide. The composer
writes the senses' translations, adds and removes senses, and keeps the
codes as they came.
The codes' short forms and meanings are the dictionary's own English
(JMdict's entities), kept as data beside the cards.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
- "Report an error", from a card's menu while studying or in the list:
a category (typo, grammar, content, other) and a note. The card is
marked to be fixed, and still studied; the list shows the category
(the note on hover), and "Resolve report" takes it back. A report is
a revision of the card, so it follows it to every device.
- The list buries a card until tomorrow and brings it back ("Unbury"),
showing "Buried" meanwhile.
- Each of these says so with an Undo.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
A card of any type can carry up to six hints and an explanation, both
rich text. They are written in the composer, added from its menu (or
Ctrl+Alt+H / Ctrl+Alt+E), each removed on its own; blank ones aren't
kept. While studying, "Hints" under the question opens them one at a
time, and "Explanation" comes with the answer.
Card schema 5 holds them (`hints`, `explanation`), and with them what a
card needs next: a report that something on it is wrong (`report`:
category, note, when) and a word's senses with their grammar codes
(`senses`; a word's meanings then come from them, and its first sense
says whether it is usually written in kana). Each merges as a field of
its own.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
"Bury until tomorrow" in a card's menu sets it aside for the rest of the
local day: it leaves the round, and no session or count takes it until
the next day begins; its schedule stays as it was. Undo, offered for a
few seconds, brings it back into the round.
A burial is an entry of its own in the review log (mode "bury"), as a
fresh start is: no synced table changes, older app versions skip it as
a mode they don't know, and it never counts as studying.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Settings has a Study card: the Pomodoro profiles, and a switch "Show
the Pomodoro timer while studying" (on unless switched off). Like the
appearance, it is the device's own setting.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
- Lock screen (header): a light scrim takes every touch; a tap shows
Unlock for three seconds. Time locked doesn't count to the session's,
and a running Pomodoro timer pauses, going on once unlocked (also
when the session is left locked).
- Undo last rating (header): takes back one rating at a time within the
round, its review deleted from the log, the round as it was; the card
shows again from its question. Starting a round anew, or deleting a
card, clears what can be undone.
- The review log deletes entries of any kind made at a moment (resets
and ratings alike).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
- Studying a studyset that has sub-studysets and cards of its own
first asks: everything (suggested) or this studyset only. Without
either, it starts straight away. Alone, the back-first setting
applies as usual and a turn of it is kept (a study button's focus
may now leave the side to the settings).
- A session that can't be read says so, with Retry; a rating that
can't be kept says so below the card, which stays to be rated
again.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
- Above every studied card (but a matching one): the PDF it came from,
its tags on one line ("+2 tags" for the rest) or "Add tags", and a
menu to tag, edit or delete it; the session follows (an edited card
shows as saved, a deleted one leaves the round).
- On phones, a front/back or vocabulary card swiped right is rated
Good, left Bad; it tilts over the colour it heads for, and springs
back when let go early.
- The session's settings: "Settings", a 48 dp Save that warns mid-round
("Heads up!"), steppers in an outlined box ("20 / day", "5 / 50"),
the order in an outlined dropdown, the chosen tags with the rest
behind "Filter by tags" / "+3 more".
- A studyset's study options: Save above Reset to defaults, the
description small, reviews a day in steps of 25.
- One stepper look everywhere (study, Pomodoro profiles), its buttons
"Decrease" and "Increase".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
The study session, reworked:
- Ratings are coloured tiles with a face each (frown, meh, smile,
laugh), when the card comes back below them with a clock ("in 1
min", "in 3 days"), always shown, so a card can be rated without
revealing it; at most 540 dp wide, centred.
- Cards are centred in a section card: the question large, then a line
with 24 dp on either side and the answer a size smaller, or "Show
answer" 40 dp below; a tap anywhere on the card shows or hides the
answer. Read-only rich text takes a text style and an alignment.
- Words show their reading small above the expression once answered,
and several meanings numbered.
- Choice, matching and map cards: Check below the card, the ratings in
its place once checked; options marked before their text; matching
lists the categories first, then what is left to place; the map
fills the card with one caption below it.
- Header and progress on a band of their own; title start-aligned,
the Pomodoro timer only to watch, the back-first toggle in every
state; leaving a round under way asks first.
- Cramming goes round the round; back is there with two cards or more,
skipping always.
- The end of a round: the cards done of those due, accuracy (OK counts
half) and time, over the whole session.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
A source is now shared by learning paths and studysets (core/citation/):
authors as full names, year, title, what it is a part of, publisher,
ISBN, link, and a citation kept as a file brought it. formatCitation
cites it in APA 7, MLA 9 or Chicago 18: it inverts and abbreviates
names itself (particles, suffixes, names written as already cited stay),
sets a work of its own in italics and a part of something apart from
the whole, and writes a missing year as "n.d." in APA and Chicago.
- Settings: a Citations card per device, with a preview and a link to
the style's own guide.
- Studysets: a Bibliography button opens the works cited, to read and,
behind its pencil, to change (studyset schema 4).
- Steps: sources edited through the same sheet, opened from an
"N sources" button in the runner (step schema 2; schema 1 reads on).
- Path import: steps' sources, text kept as written, the old format's
"citation" read as what a source is part of.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Found on the Pixel 9a with v0.2.1:
- Do Not Disturb while focusing: switching it on opens Android's list
of apps with Do Not Disturb access; once the person allowed it there
and came back, the switch was still off, saying the app may not, and
had to be switched on again. The profile's sheet now looks again when
the app comes back, and the switch goes on by itself once allowed.
- The timer's notification, posted while Android was still asking for
leave to notify at the first start, showed nowhere until the timer
next changed. It is now posted again as soon as notifications are
allowed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
From the snap, nothing showed in the top bar: AppArmor refused the
item's bus name (dbus_bind org.freedesktop.StatusNotifierItem-<pid>-1),
which snapd's desktop plug doesn't grant, contrary to what the research
found. The item is now laid out as libayatana-appindicator lays itself
out, within what snapd v2.77's desktop-legacy plug allows: at
/org/ayatana/NotificationItem/halkyon_learn, the only path from which
the label's signal (XAyatanaNewLabel) may come, and registered with the
watcher by that path under the connection's own name, binding no name
at all. Checked against GNOME's watcher here: it registers as the
system's own indicators do.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Asked for on 2026-10-07: the rest day moves from below the week into the
week's header, between the day shown and Today and the arrows. From
medium windows on it stays a chip; on a phone, where the date, a chip
and the arrows don't fit in a row, it is a snowflake toggle with "Rest
day" as its tooltip.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Found on the laptop: the outlines at a sheet's left (a text field, the
round buttons) were shaved by half a pixel, and the scrollbar lay over
the fields at the right. The sheet's room at its sides was around its
scroll view, so the body's outlines lay on the scroll view's edge: a
scroll view cuts what it holds there, an outline's outer, antialiased
half pixel included, which shows wherever the edge falls between two
pixels, as with a dialog centred in a window of odd width; and its
scrollbar runs along that edge. The room now lies inside the scroll
view, and the title and the footer keep their own.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Found on the laptop: the Pomodoro profile's last switches (Do Not
Disturb among them) lay below the visible part of the sheet, and
nothing said so: the body scrolled right up to the pinned buttons.
Every sheet (SheetScaffold) now has, as Material 3 has scrolling
dialogs, a line above the footer while some of the body lies below and
one under the title while some lies above, and a scrollbar beside the
body, always shown on the desktop in place of the one Material shows
only while scrolling.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Found testing on the laptop: deleting the chosen profile left the
choice pointing at it, and a timer running on it went on with the
deleted profile's lengths and name. Deleting it now chooses the first
profile left, and the timer goes on with that one, its phase keeping
its end.
The top bar's suggestion didn't show with the app started from
VSCodium's terminal, which sets XDG_CURRENT_DESKTOP to Unity for what
it starts. The app now asks the bus whether GNOME's Shell is there.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Decided 2026-10-07: where GNOME's top bar shows no icons (the
AppIndicator extension missing or off), the timer shows in the app
alone, and no notification stands in for it. The Pomodoro card says
that the timer can count down in the top bar, with a button that asks
GNOME Shell to switch the extension on where it is installed or to
install it (GNOME's own dialog), or opens its page on
extensions.gnome.org where Shell can't be asked; until the person says
not to suggest it again. An app can't install or switch on a Shell
extension by itself. The alert at a phase's end stays.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Decided 2026-10-07: the codecs write the newest schema every time, as
before, rather than the oldest one that holds what is there. An older
app loses sight of a studyset or of the settings once a newer one has
written them, until it is updated too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
A review of the timer found:
- Stop in the notification with the app swiped away took the timer
away there, but the app showed it again at its next start. The
service now leaves a mark the app takes when it starts, and the timer
it kept is forgotten.
- Pause, Resume and Skip did nothing with the app gone: since Android
12 a service may not start an activity from a notification's button.
The notification is posted again with buttons that open the app.
- A timer kept while the app was closed was shown as it was before it
caught up, so its ended phase alerted a second time. It is now caught
up before it first shows.
- Dart's timers sleep with the device, so a phase that ended while the
phone or laptop slept went unnoticed until the app came back. While a
phase runs the timer looks every 15 seconds, and on Android the
alarm's receiver wakes it too.
- On Linux, changes that came at once overlapped on the bus (an
indicator registered twice, notifications left over, a ticking label
never stopped); they now go one at a time. The indicator registers
again when GNOME's watcher restarts, and with a watcher that only
turns up later.
- Changing the running profile could put the timer outside its cycle
("Focus 6 of 4", the Live Update's bar past its end); where it is
stays within the new cycle, and a phase waiting at its full length
takes the new length. A countdown past its end shows 00:00.
- Writes of the kept timer go one at a time, and a closed timer arms no
more timers.
- The alert no longer renames the timer's notification channel, and a
German hint said the alert came at the device's end.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
A review found three edges of the study options:
- Saving a studyset's study options without changing anything wrote
the defaults as its own, so it stopped following the person's new
cards a day and was written in the newer schema older apps skip. It
now keeps no options of its own.
- The library's badges read the person's new cards a day only when
something else changed; a change to the setting now refreshes them.
- A person's random order shuffled the whole round, undoing the
studyset's Reviews first or New first. The reviews and the new cards
are now each shuffled, the order between them kept.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
The importer said what was wrong with a file in English sentences built
in the data layer, the last English left in a German app. It now names
the problem, the step it is in and what the problem names (a field, a
type, a number), and the studyset screen puts it into words: "Step 2:
unknown "type": quiz." or "Schritt 2: unbekannter „type“: quiz.". The
format's own field names stay as they are in the file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Home has a Pomodoro timer (decided 2026-10-07, after Goodtime): the
profile it runs, chosen there while no timer is set, the time left of
the phase, and Start, Pause or Resume, Skip and Stop. While studying, a
small countdown sits in the study screen's header, and a tap pauses it
or goes on. A phase that ends leads to the next, which starts by itself
where the profile says so and otherwise waits, paused at its full
length.
Profiles follow the person to every device, in their settings (schema
4, still written as schema 3 while the profiles are as they come, so
older apps go on reading the settings): Classic, 25 minutes of focus,
5 of break and 15 after four, and 52/17 without long breaks, built in;
both can be changed, more added and deleted, from Home's card or from
Settings. A profile can start breaks and focus by themselves, and keep
the device quiet while focusing. The running timer is the device's own,
kept in the person's folder: closed and opened again, the app catches
up with the phases that ran out meanwhile.
Android: the app's own foreground service (Kotlin, specialUse, as
Goodtime does) shows an ongoing notification counting the phase down,
with Pause or Resume, Skip and Stop; on Android 16 it is a Live Update,
its progress bar the profile's cycle, each phase a segment, focus in
cobalt and breaks in copper. An exact alarm (USE_EXACT_ALARM) alerts
with sound and vibration when the phase ends, also with the app
closed, and Do Not Disturb goes on while focusing once the person
allowed it, the filter before given back afterwards. No notification
plugin: flutter_local_notifications has Live Updates only in a
prerelease that needs compileSdk 37; androidx.core 1.18, which the
build resolved already, has every API needed.
Linux, over the session bus (package:dbus, already in the build): where
the desktop shows icons in its top bar (GNOME with the AppIndicator
extension, which Ubuntu has built in; KDE) the timer counts down there,
the buttons in the icon's menu, as a StatusNotifierItem written in Dart
on the names and paths the snap's desktop plug allows; elsewhere a
notification with the buttons says until when the phase runs. An alert
with sound ends each phase while the app runs, and GNOME's banners stay
off while focusing, through gsettings. xdg-desktop-portal's Background
status, the planned fallback, serves Flatpaks only.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
A studyset's options in the library now offer, as on its own screen,
Edit, Move to…, Study options, Import from Anki, Archive and Delete.
Moving goes through the same sheet and says where the studyset went;
importing reads an Anki deck into it as Add material does.
Study options say how a studyset is studied, on every device: how many
new cards it starts a day (by default as the person's study settings
say), how many reviews it brings a day (no limit by default; cards in
their learning steps come anyway), and whether reviews or new cards
come first, or the new ones spread evenly among the reviews. They live
in the studyset's payload, schema 3; a studyset without them is still
written in schema 2, so that older apps, which skip a payload in a
newer schema whole, keep seeing every studyset nobody gave options.
Editing a studyset keeps its options, and Reset to defaults takes them
away.
The study queue takes each studyset's limits for its own cards and the
order of the studyset studied; a card's schedule now knows when it was
last reviewed, to count the reviews of the day. Sessions, the round's
end and the library's badges all count the same way, the badges now
with the person's own number of new cards a day too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
Settings offers English (UK), English (US) and Deutsch after the
device's language, each named in its own language. app_en.arb, the
template, is now British English (colour, centre) and the fallback for
any language the app doesn't speak; app_en_US.arb overrides the five
messages American English spells differently, and app_en_GB.arb is
empty, there so that Material's texts and dates are British too. The
German translation says "du" and keeps one set of terms throughout
(Lernset, Karteikarte, Lernpfad; Anki's own Stapel and Unterstapel in
the Anki import). arb_files_test checks that German has every message
of the template and that every translation keeps its placeholders.
resolveAppLocale picks the first language the device prefers that the
app speaks, in its country's variant where there is one; other English
is British, and a country alone never picks a language (Spanish in the
United States isn't American English), which Flutter's own resolution
would do.
Both MaterialApps take material_ui's GlobalMaterialLocalizations
delegates: gen-l10n's list brings flutter_localizations', which serve
only package:flutter/material.dart, so material_ui's widgets found no
Material texts in German and threw.
The editor's own text blocks show our placeholders while empty (list
item, to-do, quote, heading, and the desktop's / hint): the editor's
own follow a locale of their own, process-wide, in few languages. The
last texts written into widgets (the person's data failing to open,
the cards failing to read, the About dialog) moved into the arb files.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>