Repository navigation
Conversation
Play Store hat bereits 1.7.1 (vc 67, via nie-gemergtem Tag v1.7.1). main stand auf 1.7.0/66 → auf 1.7.2/68 hochgezogen (vc > 67, neuer Name). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chore: Version 1.7.2 / versionCode 68
Beim SDK-54→55-Upgrade waren beide Module auf SDK-54-Versionen zurückgeblieben (expo-file-system@18, expo-sharing@13) und brachen den Android-Build mit Kotlin-Compile-Fehlern gegen expo-modules-core@55 (Unresolved reference 'AppDirectoriesModuleInterface', 'overrides nothing'). - expo-file-system ~18.0.12 → ~55.0.23 - expo-sharing ~13.0.1 → ~55.0.21 (+ Plugin-Eintrag in app.json) Lokaler Production-Build (vc68) baut damit erfolgreich durch und ist korrekt mit dem Play-Store-Key signiert. Verbleibende Versions-Drifts (RN, expo-router, reanimated u.a.): #276 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ter docs/ Texte aus Issue #243 (live seit Juni 2026) als gepflegte Vorlage ins Repo übernommen: Titel, manuell geprüfte Kurzbeschreibungen (7 Sprachen) und Langbeschreibung (EN + DE) inkl. Pflege-Hinweisen. Docs-Index aktualisiert. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Dn1NRntX3V2MASwCQqNwjy
Reichweite außerhalb des Stores: die Web-Demo bekommt echte SEO-Metadaten (Title, Description mit "Gedächtnistraining Kinder App", Keywords, OG-/ Twitter-Tags, JSON-LD) via expo-router/head, da der Web-Export im "single"-Output-Modus app/+html.tsx ignoriert. Zusätzlich ein Web-only Footer mit Play-Store-Link und Datenschutz-Versprechen auf der Startseite, sowie ein per Env-Flag aktivierbares, privacy-freundliches Analytics-Script (Plausible-kompatibel, no-op ohne EXPO_PUBLIC_PLAUSIBLE_DOMAIN) als Messgrundlage für zukünftige Reichweiten-Entscheidungen.
* Add Android large-screen compatibility for Play Store (Issue #278) Set orientation to "default" instead of forcing portrait, and add a config plugin that patches the generated AndroidManifest.xml with android:resizeableActivity="true" on MainActivity, since Expo has no built-in app.json field for it. Verified via `expo config --type introspect` that the generated manifest carries both changes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ErESLx67f6bi4CYk5yUUgs * style: Prettier-Formatierung nach Merge von testing --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: S540d <S540d@users.noreply.github.com>
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
…276) react-native 0.83.2→0.83.6, react-native-reanimated ~4.2.2→^4.2.1, react-native-safe-area-context ~5.7.0→~5.6.2, babel-preset-expo ~55.0.8 ergänzt — Sollstand laut `npx expo install --check` für Expo SDK 55. Der Bump zieht Gradle 9.0.0 über @react-native/gradle-plugin mit, dessen gebündelter foojay-resolver-convention 0.5.0 aber inkompatibel ist (NoSuchFieldError: JvmVendorSpec.IBM_SEMERU, entfernt in Gradle 8.8+). Bekannter Upstream-Bug (react/react-native#56287). Fix via patch-package: foojay 0.5.0→1.0.0. postinstall-Hook wendet den Patch auch im EAS-npm-install an. Lokaler EAS-Preview-Build grün, APK auf Testgerät installiert, 415 Tests grün. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Native Projekte werden bei jedem Build frisch generiert (expo prebuild / EAS Local Build) und gehören nie ins Repo — expo-doctor warnt aktiv davor. Konfiguration läuft über app.json + plugins/. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
npm run build:doctor prüft vor dem Build die Fallstricke, die real Zeit gekostet haben: Disk (<5 GB Skia-Blocker), JDK/Toolchain, foojay-Pin (Issue #276), Expo-Dependency-Sollstand, hängende Gradle-Daemons, Branch. Verwandelt kryptische Gradle-Abbrüche in klare ✅/⚠️ /❌-Diagnosen. Hintergrund: Die Build-Reibung dieser (simplen) App stammt komplett aus dem mehrschichtigen Expo/RN/Gradle/JDK-Stack, nicht aus dem App-Code. Der Doctor macht Toolchain-Drift früh und verständlich sichtbar, statt ihn erst im Gradle-Stacktrace auftauchen zu lassen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat: SEO basics for web landing page (title, meta description, OG tags, robots.txt, sitemap.xml) Expo web export (output: "single") ignores app/+html.tsx, so the served index.html only got title/description/theme-color from app.json. Extended scripts/post-build.js to inject robots meta, Open Graph and Twitter Card tags, and a canonical link into the deployed index.html (and only that page, to avoid duplicate-content signals on the privacy-policy pages). Also adds public/robots.txt and public/sitemap.xml. Part of S540d/project-templates#95 * style: prettier formatting for post-build.js --------- Co-authored-by: S540d <S540d@users.noreply.github.com>
Sammelt seit dem letzten Store-Release (1.7.2/vc68) angesammelten Feature-Content (Mascot & Altersstufen, Themen-Packs, Tablet-Layout, SEO-Basics, foojay/Gradle-9-Fix) für den nächsten main-Merge.
…questClose) - scripts/post-build.js: Title-Rewrite nur noch für index.html anwenden, wenn expo-router bereits einen nicht-leeren Titel gesetzt hat — verhindert, dass privacy-policy.html/-en.html/PRIVACY_POLICY.html beim GitHub-Pages-Deploy den App-Titel statt ihres eigenen erhalten. - components/AgeGroupModal.tsx: onRequestClose ergänzt (No-Op, da das Modal als verpflichtendes Erst-Start-Gate ohne Abbrechen-Option gedacht ist) — konsistent mit allen anderen Modals im Code, die onRequestClose setzen.
Retention-Verbesserung: Primäraktionen werden sichtbar hervorgehoben und alle wichtigen Tap-Ziele geben taktiles Feedback. Neue wiederverwendbare Primitiven in AnimatedPrimitives.tsx: - PressableScale: generischer Pressable mit Spring-Scale-Down beim Drücken, taktiles Feedback für schmucklose Kacheln (prefers-reduced-motion-aware) - PulseView: sanfter Dauer-Puls als Aufmerksamkeits-Hinweis für Primär-CTAs (enabled-Prop, prefers-reduced-motion-aware) - AnimatedButton respektiert jetzt ebenfalls prefers-reduced-motion Anwendung: - Home: Hero-CTA "Spiel starten" pulsiert dezent und reagiert auf Press; Daily-Challenge und Sekundär-Kacheln bekommen Press-Feedback + gestaffelte Eingangs-Animation (AnimatedCard-Stagger) - Result: "Weiter"/"Nochmal"-CTA pulsiert nach Bewertung (zieht in die nächste Runde) + Press-Feedback - Draw: primäre "Fertig"-Aktion mit Press-Feedback Tests: neue AnimatedPrimitivesExtras-Suite (PressableScale/PulseView inkl. reduced-motion-Verhalten); AnimatedPrimitives-Mock in GamePhaseComponents und reanimated-Mock in HomeScreen entsprechend ergänzt. Alle 421 Tests grün, ESLint sauber. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019QxVwP7sLZr4K5kZ54HGBq
…ative behoben Onboarding-Flow (klarere Nutzerführung, First-Run): - markOnboardingDone() wird jetzt bereits beim bewussten Tippen auf „Spielen!" gesetzt, nicht erst nach der ersten Sternebewertung. Zuvor erschien der Vollbild-OnboardingModal bei JEDEM App-Start erneut, wenn ein Erst-Nutzer die erste Runde abbrach (Home/Zurück) — eine typische Reibung, die neue Nutzer vertreibt. Die In-Game-Coach-Marks (?tutorial=1) führen weiterhin durch die erste Runde. Der bestehende Post-Rating-Aufruf in game.tsx bleibt als idempotentes Sicherheitsnetz. TypeScript: - ShareService.native.ts nutzt jetzt `expo-file-system/legacy` — Expo SDK 54+ verschob die klassische Datei-API (cacheDirectory, writeAsStringAsync, EncodingType) dorthin; der Default-Export bietet nur noch die neue File/Paths-Klassen-API. Behebt die zwei vorbestehenden tsc-Fehler ohne Verhaltensänderung. `npx tsc --noEmit` ist jetzt vollständig sauber (0 Fehler). Tests: neue OnboardingModal-Suite (Start markiert Onboarding als erledigt + startet Tutorial; Skip markiert erledigt + schließt). Alle 423 Tests grün, ESLint sauber. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019QxVwP7sLZr4K5kZ54HGBq
…-r7df11 feat: Micro-Animationen, klarere First-Run-Führung + TS-Cleanup
…Feedback) (#292) * Freies Malen statt Kreativ, Icons in Über & Support entfernt Startbildschirm: "Kreativ" -> "Freies Malen", Emoji vor dem Button-Text entfernt. Einstellungen: Icons im Über & Support-Grid entfernt, nur noch Text-Labels. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q632GFu8Zky7cApYi8E5j6 * docs: CLAUDE.md um Startbildschirm-/Einstellungen-Anpassungen (PR #292) ergänzen --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: S540d <S540d@users.noreply.github.com>
npm audit fix behebt die HIGH-severity brace-expansion-Schwachstelle (GHSA-mh99-v99m-4gvg, GHSA-rgw5-rvv9-x895) sowie die moderate postcss-Lücke (GHSA-fxqj-rqcc-2cmp), ohne Breaking Changes — nur package-lock.json betroffen. CI (npm audit --audit-level=high) wäre sonst beim nächsten Push fehlgeschlagen. Verbleibend: 12 moderate Findings (uuid-Chain über xcode/@expo/config- plugins), nur via --force mit Downgrade auf expo@46.0.21 behebbar — bewusst nicht automatisiert, siehe CLAUDE.md Security-Sektion. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HJE41SBJh9ufy8Az43vtzV
Die required Status Checks wurden repo-übergreifend aus dem testing-Gate entfernt (neues Ruleset protect-testing: deletion + non_fast_forward + pull_request, aber keine CI-Checks). CI-Läufe auf testing-PRs sind damit nicht mehr merge-relevant und reine Ressourcenverschwendung. Der push-Trigger bleibt unverändert; das Gate greift voll beim PR testing → main. Co-authored-by: S540d <S540d@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…ebrochener Breite Das canvas-Attribut schneidet Nachkommastellen ab, getImageData und floodFillPixels rechneten aber mit der übergebenen (gebrochenen) Breite. Bei z. B. screenWidth * 0.44 = 184,8 stimmte die Zeilenadressierung nicht mehr und Fills verschwanden still (auf dem Ergebnis-Screen und auf Geräten mit gebrochener Fensterbreite auch in der Zeichenphase). width/height werden jetzt am Komponentenanfang abgerundet. Regressionstest prüft ganzzahlige Canvas-Maße und getImageData-Argumente; im Browser bei 420 px Viewport verifiziert (vorher keine Fills im Ergebnis, jetzt sichtbar). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
Konflikt nur in components/__tests__/DrawingCanvas.web.test.tsx (beide PRs hängen neue describe-Blöcke am Dateiende an): beide Testgruppen behalten. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
…tive-Dialog (#360) - utils/platform.ts: confirmDestructive({ title, message, confirmLabel, cancelLabel, onConfirm }) — window.confirm im Web, Alert.alert mit destruktivem Button nativ - creative.tsx, gallery.tsx, DrawPhase.tsx: eigene Web/Native-Verzweigungen, // platform-safe-Kommentare und ungenutzte Platform/Alert-Imports entfernt - SoundManager, SentryService: isWeb statt Platform.OS; redundanter Web-Check in den Haptics-Guards entfällt (Haptics wird nur nativ geladen) - Tests: Web- und Native-Zweig des Helpers (isoliert pro Plattform) ReviewManager und ParentalGate bleiben bewusst bei Platform.OS (Laufzeit- Check, ihre Tests setzen Platform.OS dynamisch). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
#359) Bounding Box der Striche → Skalierung/Offset stand fast identisch in DrawingCanvas.web.tsx, DrawingCanvas.native.tsx (getScaledPaths), ShareService.ts und ShareService.native.ts (computeScaleOffset); nur das Padding unterschied sich (10 Canvas, 40 Export). - utils/drawingTransform.ts: computeFitTransform(paths, width, height, padding) + IDENTITY_TRANSFORM, ohne React-Native-Abhängigkeit - alle vier Stellen nutzen den Helper (-138 Zeilen) - Tests: Randfälle (leer, nur Fills, Einzelpunkt, Linie, Padding) und ein Äquivalenztest gegen die bisherige Implementierung für 300 zufällige Zeichnungen Verhalten unverändert; im Browser pixelidentisch (Ergebnis-Canvas, Replay-Mitte, Replay-Ende) gegenüber dem Stand davor. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
Konflikt nur in CHANGELOG.md (beide PRs ergänzen einen Eintrag unter "Changed"): beide Einträge behalten. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
…unde lastCheckedRatingRef wurde beim Zurücksetzen des Ratings auf 0 (neue Runde) nicht zurückgesetzt, daher wurde z.B. 5 Sterne nach 5 Sternen übersprungen: kein Konfetti, keine Abzeichen-Prüfung. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfCKFu51beRuwRbDYQRaJd
Nirgends referenziert (app.json, Code, Docs, Scripts). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfCKFu51beRuwRbDYQRaJd
- CHANGELOG: [Unreleased] zu [1.9.0] konsolidiert (doppelte Abschnitte zusammengeführt), fehlende Änderungen seit Play-Store-Version 1.8.0 ergänzt (Pause-Dialog, Einstellungs-Gruppierung, Impressum, Icon/Farben, Darkmode-Fix, Konfetti-Fix #371) - CLAUDE.md: Versionsstand (Store 1.8.0/69, testing 1.9.0/71) korrigiert - validate-release.sh: stammte aus dem 1x1-Trainer (App.tsx, Android/ Gradle) und lief hier ins Leere; jetzt projektspezifisch (Versionen, versionCode > letzter Tag, CHANGELOG, Lint, tsc, SVG, Jest, Audit-Gate, Web- und Android-Bundle) - .audit-allowlist.json: braces-Eintrag ohne Treffer entfernt Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfCKFu51beRuwRbDYQRaJd
Vorlage aus der Store-Ersteinrichtung, verwies auf nicht vorhandene Docs (PLAY_STORE_METADATA.md, DEPLOYMENT_GUIDE.md). Release-Prüfung übernimmt npm run validate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfCKFu51beRuwRbDYQRaJd
- Root-zod (via eslint-plugin-react-hooks) 4.4.3 -> 4.6.7, nur Lockfile - zod@3 unter @expo/cli: kein gepatchter 3.x-Release, @expo/cli verlangt ^3.25.76 -> befristet bis 2026-12-31 in .audit-allowlist.json (Build- Tooling, nicht im App-Bundle; Muster wie node-forge, #348) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfCKFu51beRuwRbDYQRaJd
chore: Release 1.9.0 (versionCode 71) auf testing vorbereiten
Behebt GHSA-7wch-p9px-956x, GHSA-jc66-7q78-782g, GHSA-8hrf-8g6f-7xwp, GHSA-hqq3-7jhf-c5jx, GHSA-5x38-2vff-x55p. Nur Build-Tooling (expo -> @expo/cli), gezielt per npm update statt audit fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e-forge-Eintrag entfernen GHSA-qr28-fpjm-wq7f: Fix nur in decode-uri-component 0.5.1 (ESM-only, inkompatibel mit query-string@7 aus expo-router) bzw. expo-router 58 (SDK-Major). Befristet bis 2026-12-31, mit dem nächsten SDK-Upgrade auflösen. GHSA-86w9-cpqp-85rv ist durch node-forge 1.4.2 behoben. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(deps): node-forge 1.4.2 + Audit-Allowlist (decode-uri-component)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs: CHANGELOG-Datum für 1.9.0 setzen
…ver-Crash) Play-Store-Crash v1.8.0 (ZTE P963F91, Android 12): JSApplicationIllegalArgumentException 'connectAnimatedNodes: Animated node with tag (parent) does not exist'. iconRotation.interpolate() und die Transform-Arrays wurden bei jedem Render neu erzeugt. Re-Renders des Root-Layouts während des Splash (Sprach-/Font-/Theme-Init) hängten so Native-Driver-Nodes ab und neu an; auf Fabric kann connectAnimatedNodes dann einen bereits verworfenen Node referenzieren. Jetzt per useMemo stabil, Komponente zusätzlich memoisiert. Regressionstest ergänzt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(splash): Native-Driver-Crash connectAnimatedNodes beheben
chore(release): v1.9.1 (versionCode 72)
Löst die Squash-Scheinkonflikte für den Release-PR v1.9.1 auf. Alle Konflikte zugunsten von testing (ours); der Inhalt ist identisch mit testing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chore: main in testing zusammenführen (Squash-Scheinkonflikte v1.9.1)
🔀 Mergeability-Report✅ Konfliktfrei mergebar ( CI-Checks: ✅ keine fehlgeschlagenen Checks ⏳ dev-standards-audit / dev-standards-audit Merge-Checkliste
Kostenlos generiert von reusable-mergeability.yml · keine API-Kosten · review-gate: |
Release 1.9.1 / versionCode 72 für den Play Store. Freigabe für den main-Merge liegt vom Nutzer vor.
Gegenüber
main(1.9.0 / vc71, nie veröffentlicht):connectAnimatedNodes: Animated node with tag (parent) does not exist(Crash: connectAnimatedNodes – Animated node with tag (parent) does not exist (Splash, v1.8.0) #381, fix(splash): Native-Driver-Crash connectAnimatedNodes beheben #382)🤖 Generated with Claude Code