Author's Companion
A cross-platform writing companion that keeps project context in the conversation.
// in brief// kurz gesagt
Flutter and Supabase rebuild of the writing companion: cross-platform workspace, account-aware sync, retrieval-driven context, voice input, and a shared product shell for desktop, mobile, and web.
- RoleRolle
- Product Design + Cross-platform DevProduktdesign + Cross-platform Dev
- Built withEntwickelt mit
- Flutter · Dart · Supabase
- FormatFormat
- Product App
// the decisions behind the screen// die entscheidungen hinter dem screen
Keep story context in the eyelineStory-Kontext im Blick behalten
The active chapter, conversation, project context, and memory are visible in one working view. That reduces context reconstruction between a question and the next sentence.Aktives Kapitel, Konversation, Projektkontext und Memory sind in einer Arbeitsansicht sichtbar. Das reduziert den Wiederaufbau von Kontext zwischen einer Frage und dem nächsten Satz.
Progressive disclosureSchrittweise Offenlegung
Voice, drafting, critique, prompt templates, project notes, and system context are separate modes rather than one overloaded composer. The writer can expand the toolset only when the task calls for it.Voice, Drafting, Critique, Prompt-Templates, Projektnotizen und Systemkontext sind getrennte Modi statt eines überladenen Composers. Der Werkzeugkasten erweitert sich erst, wenn die Aufgabe es verlangt.
// a technical decision// eine technische entscheidung
Context before generation, across every platformKontext vor der Generierung, auf jeder Plattform
Before a response is requested, the companion brings together recent turns, the active chapter, and only the memories relevant to the current writing task.Bevor eine Antwort angefragt wird, führt der Companion die letzten Turns, das aktive Kapitel und nur die für die aktuelle Schreibaufgabe relevanten Memories zusammen.
final priorTurns = await _conversationRepository.fetchRecentTurns(
projectId: project.id,
chapterId: chapter?.id,
limit: 8,
);
final retrievedMemories = await _memoryNotesRepository
.retrieveRelevantMemories(
projectId: project.id,
chapterId: chapter?.id,
query: retrievalQuery,
configuration: settings.retrievalConfig,
);
final systemPrompt = ConversationPromptBuilder.systemPrompt(
project: project,
chapter: chapter,
retrievedMemories: retrievedMemories,
settings: settings,
);// outcome// ergebnis
A working cross-platform shell with authentication, workspace navigation, conversation orchestration, mobile smoke tests, Supabase migrations, account-aware ownership, and a clear release path for iOS, Android, desktop, and web.
// selected screens// ausgewählte ansichten
18 screens