The problem
Your deadlines live in six places at once. One is in an email you starred in March. One is a browser tab you have been afraid to close. One is a screenshot. One is a WhatsApp message from a friend who is also applying. One is on a Post-it. One is only in your head.
None of these places talk to each other. None of them will warn you. And a scholarship deadline is not like a homework deadline — you don't lose marks, you lose a year.
Put every deadline in one file. Then make the machine that is already in your pocket, buzzing at you all day, do the remembering.
What your program does
- You put every scholarship and its deadline in one file — a row each: name, country, deadline.
- Your program reads the file and works out how many days remain for each one, by subtracting today's date from the deadline.
- It writes a calendar file — one event per deadline, each with a reminder set a few days before.
- You import that file into Google Calendar, once. Your deadlines are now on your phone.
Step 2 is a thing you have already done. Subtract two dates and you don't get a number, you get a gap — and you ask the gap for its .days.
What you'll be holding at the end
A calendar file. You open Google Calendar, import it, and your real scholarship deadlines appear in your real calendar, on your real phone, with reminders that will go off whether or not you remember to check.
That is the moment this project earns its keep. Not when the code runs — when your phone buzzes about something that actually matters.
What you'll have to find out
These are the questions you take to the docs, to an AI, or to me. Nobody has taught you the answers.
- What file format do calendars use? Google Calendar, Apple Calendar and Outlook all agree on one. Find out what it's called.
- How do you write one of those files from Python? There is a library for it. There is always a library for it.
- How do you attach a reminder to an event, so it warns you a week before rather than on the morning of?
- If you want the stretch: how do you turn a list of deadlines into a chart of your year?
Remember the recipe: say the problem in plain words, find the box, install it, find the smallest example that works, run it, check it, then use it in your own function.
One useful thing to know before you start: a calendar file is, underneath, just a text file with a very particular shape. If the library fights you, you can write one by hand with open() and f-strings. That is a legitimate way to finish this project.
Requirements
To pass, your project must:
- Read your deadlines from a file, not a list typed into the middle of your program. Someone should be able to add a scholarship without touching your code.
- Work out the days remaining for each one, from today's real date. Not a number you typed in.
- Use at least one function you wrote, with parameters and a return value.
days_left(deadline)is the obvious one. - Produce a calendar file with one event per deadline.
- Come with a README that says what it does, how to run it, one thing it can't do, and one thing you would add next.
- Be something you can explain out loud, line by line. If a line is in your program and you cannot say what it does, either find out or take it out.
Done, and going further
Done is a calendar file with one event in it, that imports into Google Calendar without complaining. That is a pass, and it is a real achievement — you found a file format and a library nobody taught you and made them work.
Going further, if you have the appetite:
- Every deadline, with a reminder on each.
- Skip the ones that have already passed, instead of putting them in your calendar in the past.
- Sort them, and print the three most urgent when the program runs.
- A chart of the year, with the urgent ones in a different colour.
- Print a plain warning for anything under fourteen days: Fulbright closes in 9 days.
Where people get stuck
Dates that are really text. "2026-11-01" looks like a date to you and is a string to Python. Strings do not subtract. You have to turn the text into a real date first, and the moment you do, everything else gets easy.
Comparing dates as text. If you sort "09/03/2026" and "12/01/2026" as strings, Python compares them character by character and cheerfully gives you the wrong order. It will not raise an error. It will just be wrong — which is the whole reason we check our answers against a small case we can work out by hand.
A deadline with no date. One row in your file will have an empty deadline, or the word "rolling". Decide what your program does about it before it decides for you.
Your calendar file imports, but the events are on the wrong day. Time zones. Check one event by hand against the file before you import forty.