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
6 changes: 3 additions & 3 deletions .audit-allowlist.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
"expires": "2026-12-31"
},
{
"id": "GHSA-vfj7-8cjw-p6xm",
"package": "braces",
"reason": "Stack-Exhaustion DoS: kein gepatchter Release; nur via micromatch/patch-package (Dev-Tooling)",
"id": "GHSA-mrhx-c7xc-m3w5",
"package": "zod",
"reason": "Speicher-DoS bei übergroßen Collections: nur noch zod@3 via expo -> @expo/cli (Build-Tooling, validiert lokale Konfiguration); kein gepatchter 3.x-Release, @expo/cli verlangt ^3.25.76. Root-zod (eslint-plugin-react-hooks) auf 4.6.7 gehoben.",
"expires": "2026-12-31"
}
]
Expand Down
58 changes: 28 additions & 30 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,48 +7,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- Bestätigungsdialog vor destruktiven Aktionen als Helper `confirmDestructive()` in `utils/platform.ts` (Web: `window.confirm`, nativ: `Alert.alert` mit destruktivem Button); die drei kopierten Web/Native-Verzweigungen in `creative.tsx`, `gallery.tsx` und `DrawPhase.tsx` entfallen. `SoundManager` und `SentryService` nutzen `isWeb` statt direkter `Platform.OS`-Checks (#360)
- Die Logik „Zeichnung in eine Fläche einpassen" (Bounding Box → Skalierung/Offset) liegt jetzt einmal in `utils/drawingTransform.ts` (`computeFitTransform`) statt viermal kopiert in Web-/Native-Zeichenfläche und ShareService web/native; Verhalten unverändert (#359)

### Changed
## [1.9.0] - TBD (versionCode 71)

- Replay: Die Skalierung der Zeichnung wird aus der **gesamten** Zeichnung berechnet, nicht aus den gerade sichtbaren Pfaden — die Zeichnung erscheint von Anfang an in Endgröße und wandert nicht mehr mit. Dadurch können fertige Pfade und Fills in Web und Android zwischen den Frames wiederverwendet werden (pro Frame höchstens 2 statt N Flood-Fills) (#366)
- Web-Zeichenfläche: Beim Malen wird nur noch der Live-Strich über einen gecachten Snapshot der fertigen Zeichnung gelegt. Vorher liefen bei jeder Mausbewegung alle Striche und alle Flood-Fills (volle `getImageData`/`putImageData`-Durchläufe) erneut (#358)
Änderungen seit der Play-Store-Version 1.8.0 (versionCode 69).

### Fixed
### Added

- Web: Füllungen verschwanden (u. a. auf dem Ergebnis-Screen), wenn die Canvas-Breite nicht ganzzahlig war (z. B. `screenWidth * 0.44` = 184,8 px). Die Pixelmaße der Web-Zeichenfläche werden jetzt abgerundet, damit Canvas-Attribut, `getImageData` und Flood-Fill dieselbe Zeilenbreite verwenden
- „Von Level 1 neu starten" setzt den Galerie-Speicherstatus zurück (vorher blieb „In Galerie speichern" ggf. gesperrt)
- Ergebnis-Feedback wechselte bei jedem Re-Render, weil die rotierende Nachricht im Render gewählt wurde — jetzt einmal pro Bewertung; DE/EN-Texte für 1–2 Sterne laufen nicht mehr auseinander
- Pause-Vorschlag nach jedem 5. abgeschlossenen Level (5, 10, 15) mit „Hauptmenü" und „Weiter" (#337)
- Impressum und Datenschutz im Über-Dialog der Einstellungen, in allen 7 Sprachen (#330)
- Micro-Animationen auf den Kern-Screens: Press-Feedback auf Kacheln und Buttons, `prefers-reduced-motion`-aware (`PressableScale`, `PulseView`)
- Auffindbarkeit außerhalb des Play Stores: Play-Store-Badge + deutsche Kurzbeschreibung im README, Web-only Install-Hinweis auf der Startseite, deutsche Keywords/Open-Graph-/JSON-LD-Auszeichnung der Landing Page
- Attributions-Parameter (`referrer` mit UTM-Tags) an allen Play-Store-Links — Installationen aus der Web-Demo werden in der Play Console als eigene Quelle sichtbar (`constants/ExternalLinks.ts`)
- Crawlbarer `<noscript>`-Inhalt der Landing Page inkl. echtem Play-Store-Link statt Expos „You need to enable JavaScript"-Platzhalter
- `docs/WEB_DISCOVERABILITY.md` — Trichter, Attribution und Rendering-Besonderheiten des Web-Builds

### Changed

- Web-Install-Hinweis auf der Startseite als dezente Textzeile statt umrahmter Karte mit Emoji und Untertitel
- Store-/OG-Grafik: Schritt „Denken" zeigt eine Denkblase mit dem Haus-Motiv des App-Icons statt der Mascot-Figur
- Startseite entschlackt: „Spiel starten" ist die einzige auffällige Aktion (ohne Dauer-Puls); Tägliche Challenge als dezenter Textlink darunter (ohne ⚡, Farbrahmen, Countdown); Level/Galerie/Freies Malen als einfarbige Textlinks im Footer; Statistik als eine Textzeile statt drei Emoji-Karten; Streak-Badge und schwebende Sterne entfernt — die Serie steht nur noch in Malis Begrüßung
- Neues App-Icon, Adaptive-Icon und Splash-Screen (Haus-Motiv statt Frosch) in ruhigerem, entsättigtem Hellblau `#A9DCEB` statt `#60D5FA`; nativer Splash über das `expo-splash-screen`-Plugin (#304, #338)
- Design-System einheitlich auf Blau statt Violett (Primärfarbe kontraststark `#0585AD`, WCAG-tauglich für Text/Buttons) (#306)
- Einstellungen thematisch gruppiert: Erscheinungsbild, Personalisieren, Elternbereich (#336)
- Startseite entschlackt: „Spiel starten" ist die einzige auffällige Aktion (ohne Dauer-Puls); Tägliche Challenge als dezenter Textlink darunter; Level/Galerie/Freies Malen als einfarbige Textlinks im Footer; Statistik als eine Textzeile statt drei Emoji-Karten; Streak-Badge und schwebende Sterne entfernt — die Serie steht nur noch in Malis Begrüßung
- Merke-Phase: dünner, einfarbiger Restzeit-Balken statt 80px-Countdown-Kreis mit Gelb/Rot-Warnfarben (war bei 3 s Anzeigezeit dauerhaft im Warnmodus)
- App-Icon/Splash/Store-Grafik: ruhigeres, entsättigtes Hellblau `#A9DCEB` statt `#60D5FA`
- Replay: Die Skalierung der Zeichnung wird aus der **gesamten** Zeichnung berechnet — die Zeichnung erscheint von Anfang an in Endgröße und wandert nicht mehr mit. Fertige Pfade und Fills werden in Web und Android zwischen den Frames wiederverwendet (pro Frame höchstens 2 statt N Flood-Fills) (#366)
- Web-Zeichenfläche: Beim Malen wird nur noch der Live-Strich über einen gecachten Snapshot der fertigen Zeichnung gelegt statt bei jeder Mausbewegung alle Striche und Flood-Fills neu zu zeichnen (#358)
- Web-Install-Hinweis auf der Startseite als dezente Textzeile statt umrahmter Karte; Store-/OG-Grafik zeigt eine Denkblase mit dem Haus-Motiv des App-Icons
- Intern: `LevelImageDisplay.tsx` in einzelne Render-Dateien unter `components/levelImages/` aufgeteilt (#309); `computeFitTransform()` (#359) und `confirmDestructive()` (#360) ersetzen mehrfach kopierte Logik; Daily-Challenge-/Onboarding-Speicherung nutzt den gemeinsamen `StorageManager`-Fallback (#320); ungenutzte Dependency `react-native-svg-web` entfernt (#321)

### Fixed

- Web/PWA-Icon (`public/apple-touch-icon.png`) und OG-Bild (`public/feature-graphic.png`) zeigten noch alte bzw. abgeschnittene Motive — werden jetzt von `scripts/generate-icon-assets.js` mit erzeugt
- `apple-touch-icon`-Link in `app/_layout.tsx` ohne `/DrawFromMemory`-Basispfad

### Added

- Auffindbarkeit außerhalb des Play Stores: Play-Store-Badge + deutsche Kurzbeschreibung im README, Web-only Install-Banner (`WebInstallBanner`) im sichtbaren Bereich der Startseite, deutsche Keywords/Open-Graph-/JSON-LD-Auszeichnung der Landing Page
- Attributions-Parameter (`referrer` mit UTM-Tags) an allen Play-Store-Links — Installationen aus der Web-Demo werden in der Play Console als eigene Quelle sichtbar (`constants/ExternalLinks.ts`)
- Crawlbarer `<noscript>`-Inhalt der Landing Page inkl. echtem Play-Store-Link statt Expos „You need to enable JavaScript"-Platzhalter
- `docs/WEB_DISCOVERABILITY.md` — Trichter, Attribution und Rendering-Besonderheiten des Web-Builds
- Konfetti, Jubel-Sound und Abzeichen-Prüfung blieben aus, wenn zwei Runden hintereinander dieselbe Sternzahl bekamen (#371)
- Darkmode: Strichmännchen und „Nur Umriss merken"-Modus waren auf dunklem Hintergrund unsichtbar (#335)
- „Von Level 1 neu starten" setzt den Galerie-Speicherstatus zurück (vorher blieb „In Galerie speichern" ggf. gesperrt)
- Ergebnis-Feedback wechselte bei jedem Re-Render — jetzt einmal pro Bewertung; DE/EN-Texte für 1–2 Sterne laufen nicht mehr auseinander
- Web: Füllungen verschwanden (u. a. auf dem Ergebnis-Screen), wenn die Canvas-Breite nicht ganzzahlig war; die Pixelmaße der Web-Zeichenfläche werden jetzt abgerundet
- Web/PWA-Icon (`public/apple-touch-icon.png`) und OG-Bild (`public/feature-graphic.png`) zeigten alte bzw. abgeschnittene Motive; `apple-touch-icon`-Link ohne `/DrawFromMemory`-Basispfad
- PWA-/Homescreen-Tags fehlten im Deployment (`app/+html.tsx` wird bei `web.output: "single"` nicht gerendert — Tags werden jetzt im Post-Build injiziert); `scripts/post-build.js` präfixierte `/DrawFromMemory`-Pfade doppelt; `scripts/deploy-ghpages.sh` lief ohne `post-build.js`/`update-cache-version.js`
- Sitemap listet die beiden echten Datenschutzseiten statt nur der Startseite

### Fixed
### Security

- PWA-/Homescreen-Tags (u. a. Apple-Touch-Icon) fehlten im Deployment: `app/+html.tsx` wird bei `web.output: "single"` nicht gerendert — die Tags werden jetzt im Post-Build injiziert
- `scripts/post-build.js` präfixierte bereits mit `/DrawFromMemory` beginnende Pfade ein zweites Mal
- `scripts/deploy-ghpages.sh` führte weder `post-build.js` noch `update-cache-version.js` aus — manuelle Deployments gingen ohne SEO-Tags und ohne Subpfad-Korrektur live
- Sitemap listet die beiden echten Datenschutzseiten statt nur der Startseite
- Abhängigkeiten per `npm audit fix` aktualisiert (u. a. `brace-expansion`, `js-yaml`, `browserslist`, `metro`/`image-size`, `compression`, `handlebars`, `shell-quote`, `source-map-js`); CI-Audit-Gate mit befristeter Allowlist für Findings ohne Upstream-Fix (#348)

## [1.3.4] - 2026-04-21

Expand Down
7 changes: 3 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
**Merke und Male** — Gedächtnistraining-App für Kinder (React Native / Expo).
Spieler sehen ein Bild kurz, zeichnen es aus dem Gedächtnis, vergleichen das Ergebnis.

- **Aktuell: v1.9.0** (package.json + app.json; versionCode 70)
- **Aktuell: v1.9.0** (package.json + app.json; versionCode 71) — **Play Store: v1.8.0 / versionCode 69**; v1.9.0 ist Release-Kandidat auf `testing` (versionCode 70 wurde nie im Store veröffentlicht)
- **Mindestanforderung Android: API 26 (Android 8.0 Oreo)** — Nexus 6 (max. API 25) wird nicht mehr unterstützt (Issue #172, geschlossen)
- **Live Demo:** https://s540d.github.io/DrawFromMemory/
- **Repo:** https://github.com/S540d/DrawFromMemory
Expand Down Expand Up @@ -62,8 +62,7 @@ npm run build:doctor # Preflight-Checks vor lokalem Build (Disk/JD
npm run build:android # EAS Build (Android, Production)
npm run build:android:preview # EAS Build (Android, Preview APK)
npm run build:android:local # Lokaler EAS-Build (preview; :local:production für production)
npm run prepare-release # Vorbereitungs-Script für Release
npm run validate # Vollständige Release-Validierung
npm run validate # Release-Validierung (Versionen, CHANGELOG, Lint, tsc, Tests, Audit, Web+Android-Bundle)
npm run deploy:ghpages # Deployment auf GitHub Pages
```

Expand Down Expand Up @@ -245,7 +244,7 @@ Niemals `rotation`/`origin`-Props an SVG-Elemente geben, die auch auf Web gerend

## Wachstums-Roadmap (Issue #219)

Übergeordneter Plan für nachhaltiges Wachstum im Play Store. Stand `main` @ v1.9.0 / versionCode 70. **Play Store noch nicht auf v1.9.0** (Release-Aufgabe Issue #267). `testing` liegt primär mit Tech-Debt/Infra voraus (kein User-Facing-Feature-Rückstand). Themen-Packs sind über `LevelImage.pack?: string` getaggt; neue Packs brauchen Render-Dateien in `components/levelImages/` + Registry-/Pool-Einträge, visueller Stil verbindlich laut [`docs/ILLUSTRATION_STYLEGUIDE.md`](docs/ILLUSTRATION_STYLEGUIDE.md).
Übergeordneter Plan für nachhaltiges Wachstum im Play Store. Stand: Play Store @ v1.8.0 / versionCode 69, `main` @ v1.9.0 / versionCode 70 (nie veröffentlicht), `testing` @ v1.9.0 / versionCode 71 = Release-Kandidat (Release-Aufgabe Issue #267). `testing` enthält gegenüber `main` auch User-Facing-Änderungen (neues Icon/Farben, Pause-Dialog, Einstellungs-Gruppierung, Impressum, Startseiten-Redesign) — Details im `CHANGELOG.md` unter [1.9.0]. Themen-Packs sind über `LevelImage.pack?: string` getaggt; neue Packs brauchen Render-Dateien in `components/levelImages/` + Registry-/Pool-Einträge, visueller Stil verbindlich laut [`docs/ILLUSTRATION_STYLEGUIDE.md`](docs/ILLUSTRATION_STYLEGUIDE.md).

Vollständige P0/P1/P2-Statustabellen und Themen-Pack-Architektur-Details: [`docs/ROADMAP.md`](docs/ROADMAP.md).

Expand Down
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
"test:ci": "jest --ci --coverage --maxWorkers=2",
"validate:svg-counts": "node scripts/validate-svg-counts.js",
"validate": "./scripts/validate-release.sh",
"prepare-release": "./scripts/prepare-release.sh",
"deploy:ghpages": "./scripts/deploy-ghpages.sh",
"prepare": "husky install",
"postinstall": "patch-package"
Expand Down
192 changes: 0 additions & 192 deletions scripts/prepare-release.sh

This file was deleted.

Loading
Loading