Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 75 additions & 1 deletion PRIVACY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SourceBraid Privacy

Last updated: September 12, 2026
Last updated: October 12, 2026

SourceBraid is open-source software that stores captured sources in a GitHub
repository selected and controlled by the user. The Chrome/iOS capture clients,
Expand Down Expand Up @@ -30,6 +30,44 @@ describes the implementation prepared for its release.
settings. Installing or publishing the plugin does not by itself transfer an
archive or make its repository public.

## Local iOS reader and Apple Intelligence development candidate

The unreleased reader reads Markdown and assets from the configured GitHub
archive using authenticated GET requests to `api.github.com`. Credentials stay
in the existing shared Keychain. Archive identity separates local caches;
changing repository, branch, or root clears the previous active archive cache
and in-memory chat. Downloads and a disposable SQLite search index are stored
inside the app's cache container, excluded from backup, with iOS file protection.
File sizes and access timestamps are used locally to evict cached files.

Warm starts restore local metadata. An empty cache initially downloads at most
seven Markdown files. System-scheduled background refresh uses the same
authenticated GitHub GET endpoint to update new/changed documents in bounded
batches; it does not generate AI answers or load external images. iOS controls
execution, and Background App Refresh can be disabled in system settings.
Manual refresh remains available; sign-out cancels scheduled work.

Chat explicitly uses Apple's on-device system model when it is available.
Questions, bounded document excerpts, and a short conversation context are
processed locally; this implementation does not call Private Cloud Compute,
OpenAI, or a SourceBraid AI server. Chat history is kept in memory and cleared
on an archive switch or local-data removal. Reader, search, and chat do not
write or delete GitHub content. The separate Share Extension still saves
captures using the permissions described above.

External images remain placeholders until the user chooses to load them for
the current document. That action contacts HTTPS source websites through a
separate session without the GitHub token or persistent cookies. Opening an
original source or GitHub link uses the system browser. Shortcuts expose only
loaded archive entities and require local device authentication. Source links
verify which excerpts were supplied; they do not guarantee the factual accuracy
of generated answers.

**Remove local data** deletes the active archive's downloads and search cache.
**Sign out** additionally removes the shared GitHub credential and recent-capture
list. These actions clear in-memory chat and leave GitHub files and history
intact. SourceBraid does not log credentials, questions, or archive content.

## Prepared hosted ChatGPT service

The separate service in `chatgpt-mcp/` is prepared for
Expand Down Expand Up @@ -102,6 +140,42 @@ Codex-Plugin nutzt lokale Zugangsdaten, Markdown-Kopien und einen neu
aufbaubaren SQLite-Index. Es kann nach Vorschau und neuer ausdrücklicher
Bestätigung Clips löschen oder Metadaten migrieren.

Der noch unveröffentlichte iOS-Reader liest Markdown und Assets per
authentifiziertem GET von `api.github.com`. Zugangsdaten bleiben im vorhandenen
gemeinsamen Schlüsselbund. Downloads und der verwerfbare SQLite-Suchindex
liegen mit iOS-Dateischutz im vom Backup ausgeschlossenen App-Cache.
Dateigrößen und Zugriffszeiten dienen ausschließlich der lokalen Cache-Begrenzung.
Ein Wechsel von Repository, Branch oder Stammordner entfernt den vorherigen
aktiven Cache und den Chat aus dem Arbeitsspeicher.

Starts mit vorhandenem Cache stellen lokale Metadaten wieder her. Ein leerer
Cache lädt zunächst höchstens sieben Markdown-Dateien. Systemgeplante
Hintergrundaktualisierung nutzt denselben authentifizierten GitHub-GET-Endpunkt
für neue/geänderte Dokumente in begrenzten Paketen; sie erzeugt keine
KI-Antworten und lädt keine externen Bilder. iOS steuert die Ausführung;
Hintergrundaktualisierung lässt sich in den Systemeinstellungen deaktivieren.
Manuelles Aktualisieren bleibt möglich; Abmelden storniert geplante Arbeit.

Der optionale Chat nutzt ausdrücklich Apples lokales Systemmodell, sofern
verfügbar. Fragen, begrenzte Quellenauszüge und ein kurzer Gesprächskontext
werden auf dem Gerät verarbeitet; diese Implementierung ruft weder Private
Cloud Compute noch OpenAI oder einen SourceBraid-KI-Server auf. Chatverlauf
bleibt im Arbeitsspeicher. Reader, Suche und Chat verändern keine GitHub-Dateien;
die separate Share Extension speichert weiterhin Captures.

Externe Bilder werden erst nach Auswahl der Ladeaktion für den aktuellen
Beitrag über eine separate HTTPS-Sitzung ohne GitHub-Token und dauerhafte
Cookies angefordert. Original- und GitHub-Links öffnen den Systembrowser.
Kurzbefehle liefern nur geladene Archiv-Einträge und verlangen lokale
Geräteauthentifizierung. Quellenlinks prüfen die bereitgestellten Auszüge,
garantieren aber nicht die sachliche Richtigkeit einer KI-Antwort.

„Lokale Daten entfernen“ löscht Downloads und Suchcache des aktiven Archivs;
„Abmelden“ entfernt zusätzlich das gemeinsame GitHub-Zugangstoken und die
Liste zuletzt gespeicherter Captures. Beide Aktionen leeren den Chat im
Arbeitsspeicher und erhalten GitHub-Dateien und Git-Historie. SourceBraid
protokolliert keine Zugangsdaten, Fragen oder Archivinhalte.

Der gehostete ChatGPT-Dienst unter `https://mcp.sourcebraid.com/mcp` ist
vorbereitet, aber noch nicht bereitgestellt oder öffentlich freigegeben. Nach
Bereitstellung verbindet OAuth 2.1 mit PKCE S256 ChatGPT mit SourceBraid. Ein
Expand Down
12 changes: 12 additions & 0 deletions README.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,18 @@ Nach einmaliger Einrichtung von Repository und Token können URLs, ausgewählter
Text, Safari-Artikel mit relevanten Bild-Assets, PDFs und andere Dateien über
das Teilen-Menü an das konfigurierte private Archiv gesendet werden.

Der iOS-Release-Kandidat **1.1.0** ergänzt einen Markdown-Reader, die neuesten
sieben Beiträge, Offline-Downloads und Volltextsuche, optionalen lokalen
Apple-Intelligence-Chat mit Quellenlinks sowie adaptive iPad-/iPhone-Duo-Navigation.
Der Maintainer hat die Veröffentlichung nach einem eigenen Funktionstest am
15. Oktober 2026 freigegeben. Xcode-Cloud-Distribution und App-Store-Verfügbarkeit
werden getrennt verfolgt; die Freigabe belegt keinen erfolgreichen Cloud-Build
oder Store-Release. Siehe [Release-Hinweise 1.1.0](docs/IOS_RELEASE_1.1.0.de.md),
[Umsetzungs- und Testprotokoll](docs/IOS_IMPLEMENTATION_TESTING.de.md)
und [verbleibende Geräteprüfungen](docs/IOS_DEVICE_ACCEPTANCE.de.md). Native
Navigation für Neueste/Suche/Chat und begrenzte Hintergrundaktualisierung stehen
im [UI- und Refresh-Konzept](docs/IOS_READER_REFRESH_UX.de.md).

## Android-Roadmap

Android ist bewusst nicht Teil der ersten Veröffentlichung. Das Feedback aus
Expand Down
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,18 @@ After one-time repository and token setup, URLs, selected text, Safari articles
with relevant image assets, PDFs, and other files can be sent to the configured
private archive through the system share sheet.

The iOS **1.1.0** release candidate adds a Markdown reader, the latest seven
clips, offline downloads and full-text search, optional on-device Apple
Intelligence chat with source links, and adaptive iPad/iPhone Duo navigation.
The maintainer approved publication after a hands-on functional check on
October 15, 2026. Xcode Cloud distribution and App Store availability are tracked
separately; approval does not establish a successful cloud build or store release.
See the [1.1.0 release notes](docs/IOS_RELEASE_1.1.0.md),
[implementation and test record](docs/IOS_IMPLEMENTATION_TESTING.md), and
[remaining device checks](docs/IOS_DEVICE_ACCEPTANCE.md). Native
Latest/Search/Chat navigation and bounded background refresh are described in
the [UI and refresh concept](docs/IOS_READER_REFRESH_UX.md).

## Android roadmap

Android is intentionally not part of the first release. Feedback from the
Expand Down
85 changes: 85 additions & 0 deletions docs/IOS_BRAND_APPEARANCE.de.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# SourceBraid: Markenfarben der App

12. Oktober 2026 · [English](IOS_BRAND_APPEARANCE.md)

Diese lokale Anpassung gibt der iOS-/iPadOS-App eine zurückhaltende Identität,
inspiriert von [sourcebraid.com](https://sourcebraid.com/). Warme Papierflächen,
dunkelgrüne Schrift und ein einzelner Petrol-Akzent übertragen den Charakter
der Webseite auf native Apple-Steuerelemente. **Neueste** mit sieben Einträgen,
Navigation, Reader und Hintergrundaktualisierung folgen weiterhin dem
[Reader-Konzept](IOS_READER_REFRESH_UX.de.md).

## Palette und Verwendung

| Semantische Rolle | Hell | Dunkel | Verwendung |
| --- | --- | --- | --- |
| Hintergrund | `#F4F1E9` | `#122C2A` | Hauptfläche des Inhalts |
| Fläche | `#FBFAF6` | `#1C403C` | Listenzeilen, Einstellungsbereiche, Reader-/Chatkarten und Chat-Eingabe |
| Schrift | `#143431` | `#F4F1E9` | Titel und Fließtext |
| Sekundärtext | `#49615E` | `#AEC2BC` | Datum, Metadaten und Erklärungen |
| Akzent | `#166B68` | `#8FD1BF` | Links, gewählte Bereiche und Hauptaktionen |
| Gedämpfte Fläche | `#E6EFE8` | `#214B43` | Ausgewählte Zeilen, Nutzernachrichten und Codeblöcke |
| Trennlinie | `#CCCFC8` | `#35534D` | Dekorative Trennung von Inhalten |
| Beschriftung gefüllter Aktionen | `#FFFFFF` | `#143431` | Text/Symbole auf einer gefüllten Akzentfläche |

Die fünf Hauptfarben des hellen Modus stammen aus dem
[öffentlichen Stylesheet](https://sourcebraid.com/assets/index-C6HlaNR4.css)
der Webseite. Gedämpfte Flächen, Trennlinien und die dunkle Palette sind
Anpassungen für die App. Benannte Farb-Assets bieten helle, dunkle und
kontrastverstärkte Varianten; SwiftUI und der Markdown-Reader verwenden dieselben
semantischen Farben. Reader-Links, Zitate, Code und Tabellen werden einheitlich
gestaltet; der Dokumentinhalt bleibt erhalten.

Die Chat-Eingabe verwendet `BrandSurface`. Ihr Rahmen nutzt ohne Fokus den
Sekundärtext-Farbton und mit Fokus den Akzent. Die Beschriftungsfarbe gefüllter
Aktionen (`onAccent`) gilt auch für den Einstellungsbutton vor der
Archivkonfiguration.

Senden/Stoppen sitzt rechts in derselben abgerundeten Eingabefläche. Ein eigener
reservierter Textbereich verhindert Überlagerung. Tastatur-Ausblenden bleibt bei
Fokus eine separate Aktion neben dem Feld. Reguläres Padding innerhalb des
Safe-Area-Inset schafft mehr Abstand des Composers zur unteren Systemleiste.

Native Schriften, Dynamic Type, SF Symbols, Tab-Leisten, Toolbars, Suchfelder,
Safe Areas und Tastaturverhalten bleiben erhalten. Der Akzent setzt Schwerpunkte,
Papierflächen halten den Lesebereich ruhig. Es werden keine Schrift-, Logo- oder
Quellcodedateien der Webseite und keine dekorativen Kartenmuster übernommen.
Zusätzliche grelle Akzentfarben, verspielte Illustrationen oder gedrehte Karten
sind nicht vorgesehen.

## Kontrast und Barrierefreiheit

Die berechneten Textkontraste der Standardpalette sind:

| Textkombination | Hell | Dunkel |
| --- | --- | --- |
| Schrift auf Hintergrund | 11,89:1 | 13,11:1 |
| Sekundärtext auf Hintergrund (hell) / Fläche (dunkel) | 5,90:1 | 6,08:1 |
| Akzent auf Fläche | 6,03:1 | 6,52:1 |
| Beschriftung gefüllter Aktionen auf Akzent | 6,29:1 | 7,69:1 |

Diese Werte überschreiten 4,5:1 für normalen Text. Dekorative dünne Trennlinien
tragen keine Information allein. Aktionsbeschriftungen, SF Symbols,
Auswahlmarkierungen und Absender bleiben unabhängig von Farbe erkennbar.
Kontrastverstärkte Varianten und Systemmaterialien benötigen eine eigene
Sichtprüfung; die Palettenberechnung prüft nicht jede zusammengesetzte Ansicht.

## Prüfgrenze

Neueste, Suche, Chat, Einstellungen und gerendertes Markdown im hellen/dunklen
Modus, mit erhöhtem Kontrast und vergrößerter Schrift prüfen. Dabei Datum und
Platzhalter, gewählte Tabs, Links, Eingabe-/Sendesteuerung, Quellen, Codeblöcke
und Tabellen auf Lesbarkeit prüfen. Den Eingaberahmen mit und ohne Fokus,
reservierten Platz für Text/Aktion, die separate Tastatur-Ausblendaktion und
Abstand zur unteren Systemleiste prüfen. Auch den Einstellungsbutton der noch
nicht konfigurierten Archivansicht prüfen.
Tastaturfälle sowie kompakte/breite
Übergänge mit synthetischen Inhalten wiederholen. Build-, UI-Test- und
Screenshot-Ergebnisse gehören ins
[Testprotokoll](IOS_IMPLEMENTATION_TESTING.de.md); dieses Konzept behauptet
keine bestandenen Prüfungen.

Diese Änderung ergänzt keine Cache-Anfragen, Hintergrundarbeit, KI-Funktion,
GitHub-Rechte, Netzwerkendpunkte oder Zugangsdatenbehandlung. Die Arbeit bleibt
bis zur Veröffentlichungsfreigabe des Maintainers lokal; kein Commit oder Push
ist freigegeben.
79 changes: 79 additions & 0 deletions docs/IOS_BRAND_APPEARANCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# SourceBraid: app brand colors

October 12, 2026 · [Deutsch](IOS_BRAND_APPEARANCE.de.md)

This local appearance update gives the iOS/iPadOS app a restrained identity
inspired by [sourcebraid.com](https://sourcebraid.com/). Warm paper, deep green
text and a single teal accent carry the website's visual character into native
Apple controls. The seven-entry **Latest** destination, navigation, reader and
background-refresh behavior remain as described in the
[reader concept](IOS_READER_REFRESH_UX.md).

## Palette and application

| Semantic role | Light | Dark | Use |
| --- | --- | --- | --- |
| Canvas | `#F4F1E9` | `#122C2A` | Main content background |
| Surface | `#FBFAF6` | `#1C403C` | List rows, settings sections, reader/chat cards and chat input |
| Ink | `#143431` | `#F4F1E9` | Titles and body text |
| Secondary | `#49615E` | `#AEC2BC` | Dates, metadata and explanatory text |
| Tint | `#166B68` | `#8FD1BF` | Links, selected destinations and primary actions |
| Muted surface | `#E6EFE8` | `#214B43` | Selected rows, user messages and code blocks |
| Separator | `#CCCFC8` | `#35534D` | Decorative content separators |
| Filled-action label | `#FFFFFF` | `#143431` | Text/icons on a solid tint action |

The five principal light colors come from the website's
[public stylesheet](https://sourcebraid.com/assets/index-C6HlaNR4.css).
Muted surfaces, separators and the dark palette are app adaptations. Named
color assets provide light, dark and increased-contrast variants; SwiftUI and
the Markdown reader use the same semantic colors. Reader links, quotations,
code and tables receive consistent treatment while preserving document content.

The chat input uses `BrandSurface`. Its border uses secondary ink without
focus and the accent when focused. The filled-action label color (`onAccent`)
also applies to the Settings button shown before an archive is configured.

Send/Stop appears on the right inside the same rounded input surface, with
a separate reserved area for text so the two cannot overlap. Keyboard dismissal
remains a separate action beside the field while focused. Regular padding inside
the safe-area inset gives the composer more clearance above the lower system bar.

Native fonts, Dynamic Type, SF Symbols, tab bars, toolbars, search controls,
safe areas and keyboard behavior remain in place. The tint supplies emphasis;
paper surfaces keep the reading area quiet. No website fonts, logo files,
source code or decorative card patterns are imported. No additional bright
accent palette, playful illustrations or rotated cards are introduced.

## Contrast and accessibility

Calculated default-palette text contrast ratios are:

| Text pairing | Light | Dark |
| --- | --- | --- |
| Ink on canvas | 11.89:1 | 13.11:1 |
| Secondary on canvas (light) / surface (dark) | 5.90:1 | 6.08:1 |
| Tint on surface | 6.03:1 | 6.52:1 |
| Filled-action label on tint | 6.29:1 | 7.69:1 |

These exceed 4.5:1 for normal text. Decorative thin separators do not carry
information alone. Action labels, SF Symbols, selection markers and sender
labels retain meaning independently of color. Increased-contrast variants and
system materials need separate rendered inspection; a palette calculation
does not verify every composited screen.

## Verification boundary

Inspect Latest, Search, Chat, Settings and rendered Markdown in light/dark mode,
increased contrast and enlarged text. Check legible dates and placeholder text,
selected tabs, links, composer/send controls, sources, code blocks and tables.
Check the input border with and without focus, reserved text/action space,
the separate keyboard-dismiss action and clearance above the lower system bar.
Also check the Settings button in the unconfigured archive view.
Repeat keyboard and compact/wide transitions with synthetic content. Record
build, UI-test and screenshot results in the
[test record](IOS_IMPLEMENTATION_TESTING.md); this concept does not claim those
checks have passed.

This change adds no cache requests, background work, AI operation, GitHub
permission, network endpoint or credential handling. Work stays local until
the maintainer approves publication; no commit or push is authorized.
Loading
Loading