Personal APIs
Appearance
Personal APIs
Data aggregation system for self-quantification and AI context enhancement
Architecture Overview
Built on Nuxt / Nitro with basic caching layer. All endpoints return JSON and support CORS for cross-origin requests from mobile apps and AI assistants.
Base URL: `https://ejfox.com/api/`
Core Philosophy
- AI Context Enhancement - Provide rich personal data to language models
- Self-Quantification - Track KPIs aligned with personal improvement goals
- Data Sovereignty - Own your data instead of just feeding the surveillance machine
- API-First Design - Choose services that offer data egress and avoid data silos
Active Endpoints
Health & Fitness
- /api/health - Apple Health aggregated metrics
- /api/health-raw - Raw health data for deeper analysis
Tracks: daily steps, exercise minutes, stand hours, distance, heart rate variability
Productivity & Learning
- /api/rescuetime - RescueTime productivity analytics
- /api/leetcode - LeetCode problem-solving progress
- /api/monkeytype - MonkeyType typing speed metrics
- /api/chess - Chess.com rating and puzzle stats
Development
- /api/github - GitHub contribution patterns and repo activity
- /api/stats - Aggregated development metrics
Creative & Content
- /api/photos - Personal photo platform statistics
- /api/lastfm - Last.fm music listening history (10+ years)
- /api/words-this-month - Writing output tracking
Predictions & Analysis
- /api/predictions - Personal forecasting and goal tracking
Technical Implementation
Data Sources
- Apple Health - via HealthKit exports and processing
- GitHub API - commit patterns, repo activity, contribution graphs
- RescueTime API - time tracking and productivity metrics
- Chess.com API - game history and ratings
- Last.fm API - scrobbling data going back 10+ years
- LeetCode scraping - problem completion and difficulty tracking
- MonkeyType - typing test results and WPM progression
Caching Strategy
Most endpoints implement intelligent caching:
- Health data - Updates every 4 hours
- GitHub activity - Updates every hour
- Music listening - Updates every 30 minutes
- Static metrics - Cached for 24 hours
Response Format
All endpoints return JSON with consistent structure: ```json {
"data": { /* endpoint-specific data */ }, "meta": { "cached_at": "2025-05-28T10:30:00Z", "source": "api_name", "updated": "recent" | "stale" }
}