Your personalized morning briefing

Weather + your calendar + an interesting quote

What you will receive

Good morning! Here's your briefing

just now

☀️ San Francisco: 62°F, partly cloudy

Today's schedule:
• 9:00 AM - Team standup
• 2:00 PM - Client call
• 4:30 PM - Review session

"The only way to do great work is to love what you do."
— Steve Jobs

Have a great day!

How it works

  1. 1Humrun fetches weather for your location
  2. 2It pulls your calendar events for today
  3. 3AI combines everything into a friendly briefing

You configure

San Francisco

City name for weather

https://calendar.google.com/calendar/ical/...

Public URL to your calendar ICS file

America/New_York

Timezone for displaying events

View Python code
import requests
from icalendar import Calendar
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo
import os

# Config from secrets
CALENDAR_URL = os.environ["CALENDAR_ICS_URL"]
LOCATION = os.environ.get("LOCATION", "New York")

# Get user's timezone
tz = ZoneInfo(os.environ.get("TIMEZONE", "UTC"))

# Now "today" is correct for the user
today = datetime.now(tz).date()
tomorrow = today + timedelta(days=1)

# --- Fetch calendar events ---
response = requests.get(CALENDAR_URL)
cal = Calendar.from_ical(response.text)

events_today = []
for event in cal.walk('VEVENT'):
    dtstart = event.get('dtstart')
    if dtstart:
        event_date = dtstart.dt
        # Handle all-day events (date) vs timed events (datetime)
        if hasattr(event_date, 'date'):
            event_date = event_date.date()

        if event_date == today:
            summary = str(event.get('summary', 'No title'))
            time_str = ""
            if hasattr(dtstart.dt, 'strftime') and hasattr(dtstart.dt, 'hour'):
                time_str = dtstart.dt.strftime('%I:%M %p') + " - "
            events_today.append(f"{time_str}{summary}")

# --- Fetch weather ---
weather_url = f"https://wttr.in/{LOCATION}?format=%C+%t"
weather = requests.get(weather_url).text.strip()

# --- Get a quote (free API) ---
quote_response = requests.get("https://zenquotes.io/api/today")
quote_data = quote_response.json()[0]
quote = f'"{quote_data["q"]}" — {quote_data["a"]}'

# --- Build the briefing ---
briefing = f"""Good morning!

☀️ Weather in {LOCATION}: {weather}

📅 Today's schedule:
"""

if events_today:
    for event in sorted(events_today):
        briefing += f"  • {event}\n"
else:
    briefing += "  No events scheduled.\n"

briefing += f"""
💭 Quote of the day:
{quote}

Have a great day!
"""

print(briefing)
Suggested schedule: Every day at 7 AMNotifications: After every run
Browse more templates