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
- 1Humrun fetches weather for your location
- 2It pulls your calendar events for today
- 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 AM•Notifications: After every run