Produktiver Tag mit 9 Commits รผber mehrere Apps hinweg:
- Mukke - Offline-first iOS Music Player mit Expo und SQLite
- Calendar E2E Tests - Playwright Tests fรผr die Web App
- Pre-Commit Hook - eslint-config Dependency Fix, type-check entfernt
- Auth Fixes - 403 fรผr unverified Email, Password Min Length
- Traces - EAS Build fรผr TestFlight konfiguriert
Mukke: Offline-First Music Player
Mukke ist ein neuer offline-first iOS Music Player. Die App verwaltet lokale Musikdateien mit SQLite als Datenbank und bietet Background Audio Playback.
Architektur
apps/mukke/
โโโ apps/
โ โโโ web/ # SvelteKit Web App (Playlist Management)
โ โโโ src/
โ โ โโโ routes/
โ โ โ โโโ (app)/
โ โ โ โ โโโ library/ # Musik-Bibliothek
โ โ โ โ โโโ playlists/ # Playlist-Verwaltung
โ โ โ โ โโโ player/ # Audio Player
โ โ โ โโโ +layout.svelte
โ โ โโโ lib/
โ โ โโโ stores/ # Svelte 5 Runes Stores
โ โ โโโ db/ # SQLite Integration
โ โ โโโ components/ # UI Komponenten
โ โโโ package.json
โโโ package.json
Key Features
| Feature | Beschreibung |
|---|---|
| Offline-First | Alle Daten lokal in SQLite |
| Local Files | Import aus dem lokalen Dateisystem |
| Background Audio | expo-audio mit Background Mode |
| Playlists | Erstellen, Bearbeiten, Sortieren |
| Metadata | ID3 Tag Parsing fรผr Artist, Album, Cover |
Technologie Stack
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Mukke iOS App โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Expo SDK 55 + expo-router โ
โ expo-audio (Background Playback) โ
โ expo-file-system (Local Storage) โ
โ expo-sqlite (Metadata Database) โ
โ NativeWind (Styling) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Datenbank Schema
CREATE TABLE tracks (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
artist TEXT,
album TEXT,
duration INTEGER,
file_path TEXT NOT NULL,
cover_art_path TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE playlists (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE playlist_tracks (
playlist_id TEXT REFERENCES playlists(id),
track_id TEXT REFERENCES tracks(id),
position INTEGER,
PRIMARY KEY (playlist_id, track_id)
);
Calendar: Playwright E2E Tests
Umfassende E2E Tests fรผr die Calendar Web App mit Playwright.
Test Coverage
| Test Suite | Tests | Beschreibung |
|---|---|---|
| Navigation | 6 | View-Wechsel, Datum-Navigation |
| Event CRUD | 8 | Erstellen, Bearbeiten, Lรถschen |
| Drag & Drop | 4 | Event verschieben, Resize |
| Keyboard | 5 | Shortcuts, Focus Management |
| Responsive | 3 | Mobile, Tablet, Desktop |
Test Beispiel
test('should create a new event via click', async ({ page }) => {
await page.goto('/calendar');
// Click on a time slot
await page.locator('[data-timeslot="10:00"]').click();
// Fill event form
await page.getByLabel('Title').fill('Team Meeting');
await page.getByLabel('Description').fill('Weekly sync');
await page.getByRole('button', { name: 'Save' }).click();
// Verify event appears
await expect(page.getByText('Team Meeting')).toBeVisible();
});
CI Integration
# In der Pipeline
- name: Calendar E2E Tests
run: pnpm --filter @calendar/web test:e2e
Pre-Commit Hook Fixes
Der Pre-Commit Hook hatte zwei Probleme:
1. Fehlende eslint-config Dependency
"devDependencies": {
+ "@manacore/eslint-config": "workspace:*",
"lint-staged": "^15.0.0"
}
2. type-check entfernt
type-check im Pre-Commit war zu langsam (30+ Sekunden) und blockierte den Workflow.
// lint-staged.config.js
module.exports = {
'*.{ts,tsx,js,jsx}': [
'eslint --fix',
'prettier --write',
- 'tsc --noEmit',
],
'*.{svelte}': [
'prettier --write',
- 'svelte-check',
],
};
Type-Checking lรคuft weiterhin in der CI Pipeline.
Auth Verbesserungen
403 fรผr Unverified Email
Bisher erhielten Nutzer mit unbestรคtigter E-Mail einen generischen 401 Error. Jetzt gibt es einen expliziten 403 mit klarer Fehlermeldung.
if (!user.emailVerified) {
throw new HttpException(
{
statusCode: 403,
error: 'email_not_verified',
message: 'Please verify your email address before logging in.',
},
HttpStatus.FORBIDDEN
);
}
Password Min Length
Die Mindestlรคnge fรผr das Reset-Password wurde von 6 auf 8 Zeichen angehoben, um mit der Registration รผbereinzustimmen.
const resetPasswordSchema = z.object({
- password: z.string().min(6),
+ password: z.string().min(8),
token: z.string(),
});
Traces: EAS Build fรผr TestFlight
EAS Build fรผr die Traces App konfiguriert, inkl. TestFlight Distribution.
{
"build": {
"production": {
"distribution": "store",
"ios": {
"buildConfiguration": "Release"
}
},
"preview": {
"distribution": "internal",
"ios": {
"simulator": false
}
}
},
"submit": {
"production": {
"ios": {
"appleId": "[email protected]",
"ascAppId": "traces-app-id"
}
}
}
}
Calendar Settings Audit
Dokumentation aller Calendar Settings mit aktuellem Status und geplanten Erweiterungen erstellt.
Zusammenfassung
| Bereich | Commits | Highlights |
|---|---|---|
| Mukke | 1 | Offline-first Music Player |
| Calendar E2E | 1 | 26 Playwright Tests |
| Pre-Commit | 1 | eslint-config, type-check entfernt |
| Auth | 2 | 403 Unverified, Password Length |
| Traces | 2 | EAS Build, TestFlight |
| Calendar Docs | 1 | Settings Audit |
| Bot Services | 1 | Build Fix |
Nรคchste Schritte
- Mukke Player - Background Audio und Lock Screen Controls
- Calendar E2E - Recurring Events Tests
- Traces TestFlight - Erster interner Build
- Test Coverage - Unit Tests fรผr Contacts und Todo