A little housekeeping for jedmund.com
Find a file
Justin Edmund 0438daa6e3 fix: replace any types in Apple Music client (10 errors)
Phase 1 Batch 6: Apple Music Client type safety improvements

Fixed 10 any-type errors in 1 file:

src/lib/server/apple-music-client.ts (10 errors)
- Created ExtendedAppleMusicAlbum interface with _storefront property
- Created ExtendedAttributes interface for synthetic album attributes
- Created SyntheticAlbum interface for song-to-album conversions
- Fixed findAlbum: first matchedAlbum cast (line 336)
- Fixed findAlbum: second matchedAlbum cast (line 409)
- Fixed findAlbum: synthetic album return type (line 433)
- Fixed transformAlbumData: parameter type to AppleMusicAlbum | SyntheticAlbum
- Fixed transformAlbumData: isSingle check using ExtendedAttributes (lines 465-471)
- Fixed transformAlbumData: _storefront access using ExtendedAppleMusicAlbum (line 480)
- Fixed transformAlbumData: tracks filter/map to use AppleMusicTrack type (lines 498-499)

Progress: 22 any-type errors remaining (down from 32)
2025-11-24 02:27:48 -08:00
.storybook
docs fix: restore AlbumForm save functionality and update cleanup docs 2025-11-24 01:05:30 -08:00
prd docs: add PRD for privacy-friendly analytics 2025-11-03 23:03:44 -08:00
prisma fix: add missing migration for project header visibility fields 2025-11-23 06:05:42 -08:00
scripts fix: continuing to migrate to pnpm 2025-11-23 03:25:20 -08:00
src fix: replace any types in Apple Music client (10 errors) 2025-11-24 02:27:48 -08:00
static
tests chore: auto-fix linting issues with eslint --fix 2025-11-23 04:48:06 -08:00
.env.example Apple Music API 2025-06-13 21:22:39 -04:00
.gitignore fix: remove dev.db from git and configure Railway properly 2025-11-23 03:33:59 -08:00
.node-version
.npmrc fix: remove dev.db from git and configure Railway properly 2025-11-23 03:33:59 -08:00
.prettierignore
.prettierrc
CLAUDE.md
eslint.config.js lint: disable svelte/no-at-html-tags rule for trusted content 2025-11-24 05:45:14 +00:00
LOCAL_SETUP.md
package.json lint: remove unused imports and variables (11 fixes) 2025-11-23 14:26:56 +00:00
pnpm-lock.yaml lint: remove unused imports and variables (11 fixes) 2025-11-23 14:26:56 +00:00
railpack-plan.json fix: upgrade to pnpm 10 for psn-api compatibility 2025-11-23 03:50:52 -08:00
README.md feat: enhance editor with drag handle and UI improvements 2025-06-25 01:06:46 +01:00
svelte.config.js
SVG_ANALYSIS_REPORT.md fix: drag handle actions now affect the correct block 2025-06-26 10:33:27 -04:00
test-db.ts
test-form-loading.js
tsconfig.json
vite.config.ts fix: resolve scss global import path 2025-10-07 04:55:30 -07:00

jedmund.com

Personal portfolio website built with SvelteKit featuring a content management system for showcasing creative work, writing, and personal interests.

Features

  • Content management system for organizing and displaying various types of media
  • Photo galleries with masonry layout and infinite scrolling
  • Blog/journal section for long-form writing
  • Music listening history integration via Last.fm API
  • Gaming activity tracking from Steam and PlayStation
  • Project showcase pages with detailed case studies
  • Responsive design with customizable themes

Tech Stack

  • SvelteKit with Svelte 5 (Runes mode)
  • Redis for caching external API responses
  • SCSS for styling
  • Integration with Last.fm, Steam, PSN, iTunes, and Giant Bomb APIs

Development

Install dependencies:

npm install

Start development server:

npm run dev

Build for production:

npm run build

Environment Variables

Required environment variables:

  • LASTFM_API_KEY - Last.fm API key for music data
  • REDIS_URL - Redis connection URL for caching

Optional environment variables:

  • DEBUG - Enable debug logging for specific categories (e.g., DEBUG=music for music-related logs)

Commands

  • npm run dev - Start development server
  • npm run build - Build for production
  • npm run preview - Preview production build
  • npm run check - Type check with svelte-check
  • npm run lint - Check formatting and linting
  • npm run format - Auto-format code with prettier

Database Management

Quick Start

Sync remote production database to local development:

# This backs up both databases first, then copies remote to local
npm run db:backup:sync

Prerequisites

  1. PostgreSQL client tools must be installed (pg_dump, psql)

    # macOS
    brew install postgresql
    
    # Ubuntu/Debian
    sudo apt-get install postgresql-client
    
  2. Set environment variables in .env or .env.local:

    # Required for local database operations
    DATABASE_URL="postgresql://user:password@localhost:5432/dbname"
    
    # Required for remote database operations (use one of these)
    REMOTE_DATABASE_URL="postgresql://user:password@remote-host:5432/dbname"
    DATABASE_URL_PRODUCTION="postgresql://user:password@remote-host:5432/dbname"
    

Backup Commands

# Backup local database
npm run db:backup:local

# Backup remote database
npm run db:backup:remote

# Sync remote to local (recommended for daily development)
npm run db:backup:sync

# List all backups
npm run db:backups

Restore Commands

# Restore a backup to local database (interactive)
npm run db:restore

# Restore specific backup to local
npm run db:restore ./backups/backup_file.sql.gz

# Restore to remote (requires typing "RESTORE REMOTE" for safety)
npm run db:restore ./backups/backup_file.sql.gz remote

Common Workflows

Daily Development

Start your day by syncing the production database to local:

npm run db:backup:sync

Before Deploying Schema Changes

Always backup the remote database:

npm run db:backup:remote

Recover from Mistakes

# See available backups
npm run db:backups

# Restore a specific backup
npm run db:restore ./backups/local_20240615_143022.sql.gz

Backup Storage

All backups are stored in ./backups/ with timestamps:

  • Local: local_YYYYMMDD_HHMMSS.sql.gz
  • Remote: remote_YYYYMMDD_HHMMSS.sql.gz

Safety Features

  1. Automatic backups before sync operations
  2. Confirmation prompts for all destructive operations
  3. Extra protection for remote restore (requires typing full phrase)
  4. Compressed storage with gzip
  5. Timestamped filenames prevent overwrites
  6. Automatic migrations after local restore