A very specific but tiny automation that emails me a weekly briefing of my upcoming course assignments (w/ Google Gemini) and calendar events. It runs quietly on a Raspberry Pi via cron so I can pretend I have a personal academic assistant who helps me procrastinate.
I genuinely struggle with keeping up with assignments and deadlines across multiple courses. It also doesn't help that I might not be the greatest at paying attention in class. My calendar only covers assignment deadlines posted, but readings and other tasks are burried in syllabi PDFs. Some professors are great about updating calendars, others not so much, and this helps me stay on top of things. It also answers the age-old question that I would normally ask my professors all the time about whether we have an assignment or reading due next week, to which they would always reply:
"It's in the syllabus."
Now I have a script that tells me.
It basically fetches my calendar feed (ICS) and filters events in a specific 8-day window. It then uploads syllabus PDFs to Gemini 2.5 Flash and extracts assignments, readings, quizzes, exams, and other tasks within that window. Finally, it compiles everything into a neat HTML email and sends it to me.
The 8-day window runs from “next Monday” through the following Monday (inclusive). That last day is included so that I don't get anxiety attacks on Sunday nights about whether I missed something due on the following Monday.
- Update your Raspberry Pi and install Python dependencies:
sudo apt-get update
sudo apt-get install -y python3-pip
pip3 install --upgrade pip
pip3 install requests icalendar python-dotenv pytz google-genai- Clone this repository:
git clone https://github.com/khalby786/whatsinthesyllabus.git
cd whatsinthesyllabus- Put in all the right tokens and stuff in your
.env:
# This for Google Gemini
GOOGLE_API_KEY=your_google_api_key_here
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=465
SENDER_EMAIL=your_email@example.com
# For Gmail, use an App Password if you have 2FA enabled.
SENDER_PASSWORD=your_smtp_password_or_app_password
RECEIVER_EMAIL=destination_email@example.com
ICAL_URL=https://your-calendar-feed-url.ics
# Optional: override the syllabi path
# SYLLABUS_DIR=/home/pi/weekly-briefer/syllabi-
Put your syllabus PDFs into
syllabi/. Use sensible names likeCS101_Section_01_Intro_to_CS.pdf, because those names will appear in the email. -
And then run it
python3 index.pyYou want this every Sunday, so Monday’s work doesn’t ambush you. Use cron:
- Open the crontab editor:
crontab -e
- Add this line to run every Sunday at 18:00 (6 PM). Adjust paths and time as needed:
0 18 * * 0 cd /home/pi/whatsinthesyllabusbro && /usr/bin/python3 index.py >> /home/pi/whatsinthesyllabusbro/weekly.log 2>&1
If you prefer Sunday midnight:
0 0 * * 0 cd /home/pi/whatsinthesyllabusbro && /usr/bin/python3 index.py >> /home/pi/whatsinthesyllabusbro/weekly.log 2>&1
So we use Gemini 2.5 Flash here, and because we're running it once a week, we should be well within the free tier limits. Just make sure to monitor your usage on Google AI Studio to avoid any surprises.
This project is licensed by the one assignment I almost missed, leading me to make this. If it caused you to finish an assignment early, consider that a rare miracle and treat yourself to something nice (not a new side project). And the MIT license.
Thank you GPT-5 for inserting empty lines in my code, and Gemini 3 Pro (Preview) for telling me 2.5 Flash does not exist.
