A little housekeeping for jedmund.com
Phase 1 Batch 8: Admin & Misc type safety improvements - PHASE 1 COMPLETE Fixed 11 any-type errors across 7 files: 1. src/lib/admin/autoSave.svelte.ts (1 error) - Fixed catch block: e: unknown (line 98) 2. src/lib/admin/autoSave.ts (1 error) - Fixed catch block: e: unknown (line 85) 3. src/lib/admin/autoSaveLifecycle.ts (2 errors) - Fixed controller type: AutoSaveStore<unknown, unknown> (line 13) 4. src/lib/admin/api.ts (1 error) - Fixed body cast: body as FormData (line 61) 5. src/lib/server/api-utils.ts (3 errors) - Fixed jsonResponse data: unknown (line 5) - Fixed isValidStatus parameter: unknown (line 46) - Fixed isValidPostType parameter: unknown (line 54) 6. src/lib/stores/project-form.svelte.ts (1 error) - Fixed setField value: unknown (line 57) 7. src/lib/stores/toast.ts (2 errors) - Fixed error callback: error: unknown (line 70) - Fixed custom component: unknown (line 85) Progress: 0 any-type errors remaining! PHASE 1 TYPE SAFETY: COMPLETE (103 errors fixed) |
||
|---|---|---|
| .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