1.1.0 - 2026-02-12
Added
- React Native iOS app (
ios/ directory) — native mobile client using Expo
- API key authentication flow — enter key from web settings to connect
- Schedule screen with AI summary, first meeting time, and visual timeline
- Weather card with feels-like temperature display
- Day navigation with arrows and swipe gestures (±30 day range)
- Pull-to-refresh and force-regenerate actions
- Dark theme matching the web app's visual design
- EAS Build configuration for TestFlight and App Store submission
1.0.0 - 2026-02-12
Added
- Summary API —
GET /api/summary and POST /api/summary/generate with per-user API key auth (Authorization: Bearer <key>)
- API key management in settings page (generate, copy, regenerate)
- Google Calendar OAuth2 integration (connect/disconnect flow)
- Single-call schedule engine via Claude Haiku — classifies events and generates natural summary in one API call
- Fallback summary (basic event listing) when no API key is set
- Smart timing: shows today's schedule; switches to tomorrow after the last event ends
- Fetches events from all user calendars (work, personal, shared, subscribed)
- Auto-detects user timezone from Google Calendar settings
- Event classification (meeting vs reminder) — integrated into single Haiku call
- Horizontal visual timeline bar (blue=meeting, amber=reminder, gray=free, half-hour granularity)
- Weather forecast via Open-Meteo API (free, no API key)
- PostgreSQL-backed session management (connect-pg-simple)
- User token storage with auto-refresh
- Login page and summary page (server-rendered, dark theme)
/auth/google, /auth/google/callback, /auth/logout routes
/status page (moved from /) for server/database health
- Database migrations on startup (
src/db/schema.js)
- Settings page (
/settings) — configurable ignored event patterns and summary style
- Event location data included in prompt for better classification
- Summary uses
<em> tags for key details with muted/bright visual hierarchy
- Ignore patterns filter events from both summary and timeline (default: "office hour, focus time")
- Summary style setting appended to AI prompt for tone/depth control
- Location detection via browser geolocation + Nominatim reverse geocoding for accurate weather
- First meeting time displayed prominently at top of schedule card
- Day navigation arrows — browse previous/next day schedules via
?date=YYYY-MM-DD (±30 day range)
- Date-specific weather forecast for navigated days (within Open-Meteo's 16-day forecast window)
- Prompt deduplication rule — avoids redundant mentions of similar events
- Summary paragraph breaks — AI splits morning/afternoon into separate paragraphs
- PostgreSQL-backed schedule cache (2-hour TTL) — replaces in-memory cache, survives restarts
schedule_cache table for persisting Anthropic API responses
- Fly.io deployment (
fly.toml, Dockerfile, .dockerignore)
- Public changelog page (
/changelog) — renders CHANGELOG.md as styled HTML
- Automatic summary pre-generation — hourly cron job pre-warms schedule cache for all users so summaries load instantly; configurable via
PREGEN_SCHEDULE env var
- MCP (Model Context Protocol) server at
/mcp — exposes get_schedule and generate_schedule tools for AI assistants; uses Streamable HTTP transport; authenticates via API key
- MCP server instructions — connecting AI assistants receive a description of mydayis, available tools, REST API endpoints, auth methods, and response shape
- Copyable MCP example prompt in settings — includes server URL and API key, ready to paste into Claude or any MCP-compatible assistant
- Login page now explains what mydayis does and notes read-only Google Calendar access
Fixed
- Deduplicate events that appear on multiple calendars (same title + start time)
Changed
- Initialized from plc/starter template
- Renamed from myapp to mydayis (port 3768)
GET / now shows login or schedule summary instead of status page
- Added googleapis, express-session, connect-pg-simple, luxon dependencies