feat(instances): choose the instance, and keep accounts on several
All checks were successful
CI / check (push) Successful in 13m50s
CI / deploy (push) Successful in 1m25s

A new install asks first which instance to keep the person's studysets
on, as Mastodon's apps do: an address, checked to answer as an instance
of Halkyon Learn, or the build's own (learn.halkyon.eu) in one tap.
Nothing is made anywhere before that, not even an anonymous account. An
install from before goes on with the build's instance without asking.

As Moshidon does, the device keeps an account on each instance it was
used with, each signed in with its own folder and session, one in use at
a time. Settings › Switch account lists them: another one switches at
once, anonymous accounts included; Add account chooses another instance;
removing one not in use deletes what the device holds of it. Signing out
ends only the account in use.

The build's own instance keeps its data where installs kept it before
(`people/`, Serverpod's own session key), so they keep everything; other
instances get folders and keys of their own. What the device shares
across instances (its settings, sounds, the Pomodoro timer's place in the
system) is made once and outlives every switch.

The F-Droid listing drops TetheredNet: the app is no longer tied to the
project's instance.

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>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-10 06:00:47 +02:00
commit 7621afaa98
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -1547,6 +1547,67 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get settingsAccount => 'Konto';
@override
String get instanceWelcome => 'Willkommen bei Halkyon Learn';
@override
String get instanceFirstStartSubtitle =>
'Wähle die Instanz, auf der deine Lernsets liegen sollen. Jede betreibt jemand; weitere kannst du später hinzufügen.';
@override
String get instanceAddress => 'Adresse der Instanz';
@override
String instanceUseBuiltIn(String name) {
return '$name verwenden';
}
@override
String get instanceContinue => 'Weiter';
@override
String get instanceAddressRequired => 'Gib die Adresse einer Instanz ein.';
@override
String get instanceAddressInvalid => 'Das ist keine Adresse.';
@override
String instanceUnreachable(String name) {
return 'Unter $name antwortet keine Instanz von Halkyon Learn.';
}
@override
String instanceOpenFailed(String name) {
return 'Die App auf $name konnte nicht geöffnet werden.';
}
@override
String get settingsSwitchAccount => 'Konto wechseln';
@override
String get accountsTitle => 'Konten';
@override
String get accountAdd => 'Konto hinzufügen';
@override
String get accountAddSubtitle =>
'Wähle die Instanz für das Konto, das du hinzufügst.';
@override
String get accountRemoveTooltip => 'Konto entfernen';
@override
String get accountRemoveTitle => 'Konto entfernen?';
@override
String accountRemoveMessage(String name) {
return 'Entfernt das Konto auf $name von diesem Gerät, mit allem, was das Gerät davon hat. Was es synchronisiert hat, bleibt auf $name: Melde dich dort mit GitHub an, um es wiederzuhaben. In ein anonymes Konto kann man sich nicht wieder anmelden.';
}
@override
String get accountRemoveConfirm => 'Entfernen';
@override
String get settingsSignOut => 'Abmelden';