A little housekeeping for jedmund.com
Phase 1 Batch 3: Route Pages type safety improvements Fixed 10 any-type errors across 7 route page files: 1. src/routes/+page.ts (1 error) - Added PaginationInfo interface for fetchProjects return type 2. src/routes/admin/+layout.svelte (1 error) - Changed children prop from any to Snippet type 3. src/routes/admin/albums/+page.svelte (1 error) - Changed Album.content from any to EditorData type 4. src/routes/admin/universe/+page.svelte (1 error) - Changed form prop from any to Record<string, unknown> | null | undefined 5. src/routes/albums/[slug]/+page.svelte (4 errors) - Added AlbumPhoto and AlbumData interfaces - Fixed photo map parameters to use AlbumPhoto - Fixed extractContentPreview to accept EditorData | null - Fixed generateAlbumJsonLd to accept AlbumData 6. src/routes/albums/+page.svelte (1 error) - Changed coverPhoto.colors from any to ColorPalette[] 7. src/routes/photos/[id]/+page.svelte (1 error) - Changed navigateToPhoto parameter from any to PhotoItem | null Progress: 67 any-type errors remaining (down from 77) |
||
|---|---|---|
| .storybook | ||
| docs | ||
| prd | ||
| prisma | ||
| scripts | ||
| src | ||
| static | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| .node-version | ||
| .npmrc | ||
| .prettierignore | ||
| .prettierrc | ||
| CLAUDE.md | ||
| eslint.config.js | ||
| LOCAL_SETUP.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| railpack-plan.json | ||
| README.md | ||
| svelte.config.js | ||
| SVG_ANALYSIS_REPORT.md | ||
| test-db.ts | ||
| test-form-loading.js | ||
| tsconfig.json | ||
| vite.config.ts | ||
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 dataREDIS_URL- Redis connection URL for caching
Optional environment variables:
DEBUG- Enable debug logging for specific categories (e.g.,DEBUG=musicfor music-related logs)
Commands
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run check- Type check with svelte-checknpm run lint- Check formatting and lintingnpm 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
-
PostgreSQL client tools must be installed (
pg_dump,psql)# macOS brew install postgresql # Ubuntu/Debian sudo apt-get install postgresql-client -
Set environment variables in
.envor.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
- Automatic backups before sync operations
- Confirmation prompts for all destructive operations
- Extra protection for remote restore (requires typing full phrase)
- Compressed storage with gzip
- Timestamped filenames prevent overwrites
- Automatic migrations after local restore