Zum Hauptinhalt springen

Zurรผck zum Devlog

Dienstag, 17. Mรคrz 2026

Feature

9 Commits

8 min Lesezeit

Mukke Music Player, Calendar E2E Tests & Pre-Commit Fixes

Mukke als offline-first iOS Music Player ins Monorepo aufgenommen. Calendar Playwright E2E Tests, Pre-Commit Hook Fixes und Auth Verbesserungen.

T

Till Schneider

Autor

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

FeatureBeschreibung
Offline-FirstAlle Daten lokal in SQLite
Local FilesImport aus dem lokalen Dateisystem
Background Audioexpo-audio mit Background Mode
PlaylistsErstellen, Bearbeiten, Sortieren
MetadataID3 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 SuiteTestsBeschreibung
Navigation6View-Wechsel, Datum-Navigation
Event CRUD8Erstellen, Bearbeiten, Lรถschen
Drag & Drop4Event verschieben, Resize
Keyboard5Shortcuts, Focus Management
Responsive3Mobile, 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

BereichCommitsHighlights
Mukke1Offline-first Music Player
Calendar E2E126 Playwright Tests
Pre-Commit1eslint-config, type-check entfernt
Auth2403 Unverified, Password Length
Traces2EAS Build, TestFlight
Calendar Docs1Settings Audit
Bot Services1Build Fix

Nรคchste Schritte

  1. Mukke Player - Background Audio und Lock Screen Controls
  2. Calendar E2E - Recurring Events Tests
  3. Traces TestFlight - Erster interner Build
  4. Test Coverage - Unit Tests fรผr Contacts und Todo

Tags

#mukke #music-player #expo #e2e-tests #playwright #pre-commit #auth #traces