← Back to portfolio

Daily Briefing

Problem

Every morning I was opening five or six tabs — weather forecast, Google Calendar, a news aggregator, my task manager, university portal announcements — and mentally stitching together what my day looked like. The friction wasn’t any single source; it was the context-switching across all of them. I wanted one page that answered “what does today look like?” in under 30 seconds, regenerated automatically before I woke up.

Approach

I built a Python pipeline that runs on a GitHub Actions cron schedule (5:30 AM SGT daily). It pulls from a set of APIs — OpenWeatherMap for forecast, Google Calendar API for the day’s events, a news RSS feed filtered to topics I care about, and Todoist for outstanding tasks. The pipeline normalises everything into a single JSON structure, then feeds it into an Astro static site generator that produces a clean, single-page HTML dashboard. The output is pushed to GitHub Pages, so the live URL always shows today’s briefing with zero manual intervention.

Hard parts

Authentication across multiple APIs with different auth schemes (OAuth2 for Google Calendar, API keys for weather and tasks, no auth for RSS) was the first hurdle — I ended up building a small credential manager that reads secrets from GitHub Actions environment variables and handles token refresh for Google. The second challenge was making the pipeline resilient to partial failures: if the news API is down, the briefing should still render with weather and calendar intact. I implemented a per-source try/catch that degrades gracefully, marking failed sections as “unavailable” rather than crashing the entire run.

Outcome

The dashboard has run every day for over three months without manual intervention, with a 98% success rate (the 2% being transient API timeouts that self-recover the next day). It reduced my morning routine overhead from about five minutes of tab-juggling to a single glance. The project demonstrates pipeline reliability, multi-source data integration, and the kind of automation-first thinking that data engineering roles look for. The live dashboard is always available at its GitHub Pages URL.