Commit Graph

  • e4ac3ae51c refactor(native): central Button component + sweep across devices/plan flows chahinebrini 2026-05-15 23:31:26 +02:00
  • e8ea00568e feat(native): devices page — 2-line entries, single UIMenu CTA, dynamic counter, slimmer buttons chahinebrini 2026-05-15 23:10:09 +02:00
  • 8851f36f65 fix(native): protectedDevices store — unwrap response shape chahinebrini 2026-05-15 23:02:26 +02:00
  • db7875fb34 feat(ops/mdm): AdGuard ClientID handshake — nginx + watcher chahinebrini 2026-05-15 22:41:38 +02:00
  • 42a8223bfc feat(native): auto-detect Mac activation via Supabase Realtime chahinebrini 2026-05-15 22:41:25 +02:00
  • 0e4c3787c2 feat(backend): DoH handshake endpoint for protected-device auto-activation chahinebrini 2026-05-15 22:41:17 +02:00
  • db377da7ce fix(native): realtime disconnect bug — accessToken callback + AppState handler chahinebrini 2026-05-15 21:48:54 +02:00
  • cd5efab6e1 feat(native): use expo-device for reliable device-info headers chahinebrini 2026-05-15 21:45:33 +02:00
  • 60f608d891 fix(backend): backfill device name/model/osVersion on touch + auto-register chahinebrini 2026-05-15 21:27:58 +02:00
  • e1ba0ebeaf chore(native): bump versionCode/buildNumber to 7 for device-info + i18n release chahinebrini 2026-05-15 21:17:43 +02:00
  • d55cbc11b2 fix(native): mail-sheet modal-conflict + google-oauth picker + feed-bg contrast chahinebrini 2026-05-15 21:16:34 +02:00
  • 804d4a5861 feat(native): device-info api headers + DeviceLimitSheet UI + profile i18n sweep chahinebrini 2026-05-15 21:16:22 +02:00
  • 5b1f89e749 feat(backend): device-info schema + merge heuristic + test-user detection chahinebrini 2026-05-15 21:16:05 +02:00
  • 0452007daf chore(native): bump iOS buildNumber 4 → 6 for fr-locale + lyra-voice release chahinebrini 2026-05-15 16:41:13 +02:00
  • fb29c061c3 chore(native): bump android versionCode to 6 for fr-locale + lyra-voice release chahinebrini 2026-05-15 11:03:43 +02:00
  • 10219e5f68 feat(i18n): add french as 3rd app language chahinebrini 2026-05-15 11:03:37 +02:00
  • 740589db5b chore(native): bump android versionCode to 5 for mail-page-ui release chahinebrini 2026-05-14 20:58:56 +02:00
  • a0d67f33a8 feat(native): realtime debug page + protected-devices array guard chahinebrini 2026-05-14 22:15:57 +02:00
  • d9bb7ef91a feat(native): lyra voice picker UI + me-hydration chahinebrini 2026-05-14 22:15:49 +02:00
  • 76f8595a4f feat(backend): lyra voice picker for legend (mvp) chahinebrini 2026-05-14 22:15:42 +02:00
  • f2e3c00943 refactor(mail): remove groq llm layer — deterministic pipeline only chahinebrini 2026-05-14 22:15:32 +02:00
  • 343f9ab567 fix(mail): DSGVO Art. 17 — manuelles Sample-Cleanup bei Account-Delete chahinebrini 2026-05-14 08:29:32 +02:00
  • bdd93668ae feat(mail): multi-layer classifier — Brand+Random, Relay-Decoder, Score, Groq + ML-Sampling chahinebrini 2026-05-14 08:19:51 +02:00
  • c218287c5e fix(mail): legend bottom-aligned mit donut-baseline für visuelle zentrierung chahinebrini 2026-05-14 01:08:53 +02:00
  • 1d93ada275 fix(mail): revert marginBottom hack — layout was breaking out of card chahinebrini 2026-05-14 01:02:56 +02:00
  • 778d3b6746 fix(mail): legend vertikal zentral gegenüber donut-center-number chahinebrini 2026-05-14 00:57:18 +02:00
  • 55cba9a3fe fix(mail): legend takes natural width inside card + bar-chart always trims to hit-range chahinebrini 2026-05-14 00:53:08 +02:00
  • b47ac2427e fix(mail): legend rows justify-between + per-connection chart sparse-data zoom chahinebrini 2026-05-14 00:48:51 +02:00
  • aac6c00720 fix(mail): donut card layout — justify-start statt center chahinebrini 2026-05-14 00:36:12 +02:00
  • 2ea0cfec96 fix(mail): donut card layout from scratch — center, breathing room, no truncation chahinebrini 2026-05-14 00:33:39 +02:00
  • 4580a197dd fix(mail): reactive page (refresh stats + status on scan/connect) + center donut+legend chahinebrini 2026-05-14 00:16:53 +02:00
  • 30ed4b90b4 chore(native): bump build number to 4 for staging release chahinebrini 2026-05-14 00:02:49 +02:00
  • 8075c8e79c feat(mail): outlook-OAuth scan + daemon initial-sweep + page polish v4 chahinebrini 2026-05-13 23:55:18 +02:00
  • fd1cb912f7 fix(idle-daemon): sync MS_OAUTH_SCOPES with backend — drop User.Read, add email chahinebrini 2026-05-13 23:33:39 +02:00
  • 2e285beefd chore(mail): bump distribution donut to 240 + trim card padding chahinebrini 2026-05-13 23:31:06 +02:00
  • c8a18baf75 chore(mail): drop distribution chart title + bump donut width 168→200 chahinebrini 2026-05-13 23:28:37 +02:00
  • 1dfb0c647c feat(mail-page): polish v3 + shared HalfDonut + status-dot heartbeat-aware chahinebrini 2026-05-13 23:23:45 +02:00
  • 206941e5e1 fix(mail-page): UX polish — FAB-revert, legend cap, activity NaNd, instant heartbeat chahinebrini 2026-05-13 22:55:50 +02:00
  • 432d9d27a3 feat(mail-page): hero-donut + FAB + collapsible bar-chart + legend truncation chahinebrini 2026-05-13 22:39:45 +02:00
  • cb5c193980 fix(mail/oauth): add email OIDC scope — id_token Email-Claim für Personal-Accounts chahinebrini 2026-05-13 22:21:31 +02:00
  • 09d85180b6 fix(mail/oauth): drop User.Read scope — MS rejects multi-resource at /token chahinebrini 2026-05-13 22:16:01 +02:00
  • 7fb76465f0 fix(mail): explicit imports for MS-OAuth handlers (createOauthPendingState et al.) chahinebrini 2026-05-13 21:25:43 +02:00
  • fc69a14f25 feat(mail): outlook oauth — full end-to-end (backend + daemon + frontend) chahinebrini 2026-05-13 21:04:14 +02:00
  • 275637f0b0 feat(mail): separate mail_blocked_stats table — preserves charts beyond 24h cleanup chahinebrini 2026-05-13 19:13:24 +02:00
  • b7909d77e4 feat(mail): custom title + settings collapsible + stats charts + provider filter chahinebrini 2026-05-13 19:06:01 +02:00
  • 0ab635c74a feat: art-9 consent flow + outlook-oauth schema + cooldown patterns + mail draft persist chahinebrini 2026-05-13 16:35:18 +02:00
  • 01d515d137 feat(rebreak-native): persistent FaceID-sign-in + iOS-grouped UI + Outlook guard + sparkline cooldowns chahinebrini 2026-05-13 16:15:54 +02:00
  • a3f892ddac fix(native/mail): duplicate add-button in empty state + intro hints in ConnectMailSheet chahinebrini 2026-05-12 23:39:22 +02:00
  • 3eaf3f098a refactor(rebreak-native): migrate device sheets to FormSheet, delete KeyboardAwareSheet (phase 3C) chahinebrini 2026-05-12 22:12:35 +02:00
  • f24c364c81 feat(rebreak-native): KeyboardAwareScreen composable + full-screen form migration (phase 3A) chahinebrini 2026-05-12 22:12:29 +02:00
  • 7ec4be810b feat(rebreak-native): AppAlert composable, avatar compression, FamilyControls gate chahinebrini 2026-05-12 21:47:18 +02:00
  • e48a3187a6 chore(rebreak-native): expose familyControlsEnabled flag to the JS bundle chahinebrini 2026-05-12 21:39:37 +02:00
  • 7ad523f8ba feat(rebreak-native): phase 2 sheet standardisation — SheetFieldStack + FormSheet migrations chahinebrini 2026-05-12 21:37:46 +02:00
  • 448d64dbd5 fix(ios): re-enable family-controls entitlement for development builds chahinebrini 2026-05-12 21:30:45 +02:00
  • a841b32c31 feat(rebreak-native): <FormSheet> — one reusable bottom-sheet composable (phase 1) chahinebrini 2026-05-12 21:03:17 +02:00
  • 52fd1bcce3 feat(rebreak-native): Android counterpart for the app lock chahinebrini 2026-05-12 20:42:52 +02:00
  • 4a17c7942d fix(rebreak-native): don't crash on old dev-clients missing ExpoLocalAuthentication chahinebrini 2026-05-12 19:57:53 +02:00
  • aa9466aa92 feat(rebreak-native): Face ID app lock (opt-in) chahinebrini 2026-05-12 19:41:56 +02:00
  • 5d2db6d642 fix(ios): register RebreakURLFilter extension with EAS for credential generation chahinebrini 2026-05-12 17:50:48 +02:00
  • 398b7b9d58 fix(ios): two real build blockers — FC entitlement and extension dev team chahinebrini 2026-05-11 23:57:43 +02:00
  • 572766ab88 fix(ios): broaden resource-bundle signing fix — disable code-signing on all Pods targets chahinebrini 2026-05-11 23:48:29 +02:00
  • ac956b8311 fix(ios): config plugin to disable code-signing for pod resource bundles chahinebrini 2026-05-11 23:35:32 +02:00
  • 1a201289cc chore(eas): drop the update channels (no expo-updates installed yet) chahinebrini 2026-05-11 23:30:18 +02:00
  • c004dc7517 chore(eas): preview profile → distribution: store (for TestFlight uploads) chahinebrini 2026-05-11 23:11:07 +02:00
  • 5b12f14a90 feat(rebreak-native): Nuxt-style splash, domain normalization on blur, app-wide keyboard fix chahinebrini 2026-05-11 22:58:59 +02:00
  • 0bad2185ec chore(ios): set ios.buildNumber to 3 (matches Android versionCode) for TestFlight chahinebrini 2026-05-11 22:42:50 +02:00
  • af87893eb9 fix(android): self-heal — restart VpnService if it should be running but isn't chahinebrini 2026-05-11 20:10:43 +02:00
  • 4492c7b265 feat(blocker): reactivation only re-arms the VPN/filter; a11y setup is first-time-only chahinebrini 2026-05-11 18:46:21 +02:00
  • 3c2aee7bda fix(android): tamper-lock can't linger armed while protection is off (stuck "locked" UI) chahinebrini 2026-05-11 18:34:45 +02:00
  • fc7a243c9b refactor(android): a11y service is now tamper-lock only — no browser URL filtering chahinebrini 2026-05-11 17:42:05 +02:00
  • a80cc8b08d fix(rebreak-native): track custom native module source (was swallowed by .gitignore) chahinebrini 2026-05-11 17:22:22 +02:00
  • 5291a8a95a fix(realtime): domainRealtime CHANNEL_ERROR — wrong filter column + missing publication chahinebrini 2026-05-11 17:19:37 +02:00
  • 33f411ab55 feat(blocker): post-cooldown disable shows a11y-settings notice (DiGA — user must be able to fully exit) chahinebrini 2026-05-11 17:12:39 +02:00
  • aac709ec41 fix(android): forceDisable disarms the tamper-lock — protection stayed enforced after cooldown chahinebrini 2026-05-11 16:59:58 +02:00
  • 184a601616 fix(blocker): relabel deactivate button 'Wie funktioniert der Cooldown?' → 'Schutz deaktivieren' (+ lock-open icon), remove debug marker chahinebrini 2026-05-11 16:51:09 +02:00
  • 4bed8a1e5a debug(blocker): temporary red marker at bottom of ProtectionDetailsSheet ScrollView (to diagnose the 'can't scroll to the bottom' report — revert after) chahinebrini 2026-05-11 16:48:38 +02:00
  • d5b753d329 fix(blocker): trim ProtectionDetailsSheet bottom padding (was over-padded → empty space under the bottom button) chahinebrini 2026-05-11 16:46:57 +02:00
  • 4e73d2ac92 fix(blocker): ProtectionDetailsSheet — taller sheet (0.9) + bigger bottom padding so the bottom button clears the nav bar chahinebrini 2026-05-11 16:44:26 +02:00
  • 6870f71265 feat(blocker): __DEV__ test-cooldown toggle (40s) + auto-disable on elapse + safe-area fixes for deactivation sheets chahinebrini 2026-05-11 16:40:58 +02:00
  • 335945fe2c feat(tier): plan limits Rev.2 + downgrade reconciliation + change-preview (Phase 2 backend) chahinebrini 2026-05-11 16:23:02 +02:00
  • 51697c3aa4 feat(tier): plan-change briefing sheet + over-limit cards (Phase 2 UI) chahinebrini 2026-05-11 16:21:47 +02:00
  • 16c2e40242 chore(android): versionCode 3 (build v0.1.0 vc3 — icon fix + updates) chahinebrini 2026-05-11 16:18:03 +02:00
  • 17ad591c3f docs(pricing): synthesis — the design constraint is 'avoid 1-star reviews' + the must-have corollaries chahinebrini 2026-05-11 16:01:11 +02:00
  • 83d4e93f38 docs(pricing): mail=safety-feature for this audience, target-group device/mailbox reality, founding-members (first 100 → Pro) chahinebrini 2026-05-11 16:00:30 +02:00
  • 45f57bfda7 docs(pricing): capture the strategic bet — full protection = Legend-only, by design chahinebrini 2026-05-11 15:56:34 +02:00
  • c2ad1a1780 docs(pricing): capture conversion philosophy (membership/community framing, not frustration-gating) chahinebrini 2026-05-11 15:55:36 +02:00
  • 2dcff6408c feat(chat): redesign chat list + conversation view chahinebrini 2026-05-11 15:52:45 +02:00
  • 7369912d60 feat(dev): switch plan-override to POST /api/dev/set-plan + add Settings debug row chahinebrini 2026-05-11 15:51:14 +02:00
  • 5c9f3f687f docs(pricing): §0.5 Rev.2 — incorporate accepted strategist critique chahinebrini 2026-05-11 15:51:11 +02:00
  • a8e638ed88 feat(profile): replace system-crop with custom gesture-based AvatarCropSheet chahinebrini 2026-05-11 15:51:09 +02:00
  • 3da76bcb15 docs(pricing): §7 — strategist's marketing critique of the final plan chahinebrini 2026-05-11 15:49:50 +02:00
  • e93f580f3b docs(pricing): final tier decision (User 2026-05-11) + open impl points chahinebrini 2026-05-11 15:44:26 +02:00
  • eb871073f2 feat(backend): __DEV__ /api/dev/set-plan — user sets own plan (non-prod only) chahinebrini 2026-05-11 15:44:26 +02:00
  • 14452b2a46 refactor(native): Pressable → TouchableOpacity sweep (style-fn swallows Android styles) chahinebrini 2026-05-11 15:43:10 +02:00
  • 1ad964f54b fix(backend): alias NUXT_*_BOT_USER_ID env vars in start-staging.sh chahinebrini 2026-05-11 15:37:38 +02:00
  • f6852be760 fix(native): useUserPlan derive from useMe (was a stale module cache) chahinebrini 2026-05-11 15:18:59 +02:00
  • 790b5e5c24 feat(admin): surface Lyra-Posts page in nav + dashboard grid chahinebrini 2026-05-11 15:06:12 +02:00
  • 297ad7437b fix(android): adaptive icon — white bg + padded dark logo (was zoomed/clipped) chahinebrini 2026-05-11 15:06:12 +02:00
  • c6a4b04383 chore(deps): pin metro-* family to 0.83.3 via pnpm.overrides chahinebrini 2026-05-11 15:06:12 +02:00
  • 385f0b42a9 fix(android): blocker toggles + invisible avatar + adaptive icon chahinebrini 2026-05-11 14:52:42 +02:00