
Build a real world email reminder app in Python with a desktop graphical user interface, cloud integration, scheduling, and smtp email sending, using csv files and an api.
Discover how the real world Python series guides you through building a real-world app from a working version to optimized, refactored code and deployment.
Builds the first working version of the email reminder app using a CSV file for reminders. Parses the CSV, checks dates at 8 a.m., sends emails, and removes sent reminders.
Set up your environment and follow along by typing code manually using any IDE. Create an empty project, Main.py, and install python-dotenv to begin coding.
Begin with a top-to-bottom approach: collect reminders in a CSV, load them as a list of dictionaries in Python, and prepare to send email reminders when dates match today.
Iterate over the reminders list to send emails, building an email message with subject, from, to, and body using the email message class and smtp lib, then verify by printing.
Learn how to set up app passwords for Gmail and Outlook to securely send reminder emails with Python, including creating a dot env file and retrieving credentials via os.getenv.
Send multiple reminder emails by looping over messages with the smtp library, using app passwords and env storage for Gmail or Outlook, enabling starttls and sending messages.
Iterate through reminders.csv inside the loop, use an if condition on today's date to send only matching reminders. Convert date objects to strings for comparison and email the matches.
Overwrite the reminders csv with a new file excluding today's reminders, using csv dict writer in write mode, so the program runs each morning to send emails.
Learn code optimization, refactoring for maintainability, and deploying the email reminder app to a server, preparing for future features like repeated reminders.
Discover practical optimization for an email reminder app by removing unnecessary code, avoiding repeated datetime.now calls, and moving login and date calculations outside loops while preserving behavior.
Refactor the real world Python email reminder app by wrapping loading credentials, loading reminders, and login into dedicated functions to improve readability, maintainability, and future feature expansion.
Deploy the app by running it automatically in the cloud with pythonanywhere, uploading main.py and reminders.csv, and scheduling daily tasks at a set time.
Add repeated reminders to our app by extending a basic version to monthly and weekly email reminders in a real world development workflow using Python.
Learn to capture user input from a csv by adding a repeat_interval column and parsing it to schedule daily, weekly, monthly, yearly, or one-time reminders, and calculate the next date.
Learn how to compute the next reminder date in a Python email reminder app using dateutil's relative delta to handle monthly intervals, beyond basic timedelta limitations.
Refactor the email reminder app to support repeat reminders by adding a calculate_next_date function and updating the CSV with a repeat interval to compute future dates.
Implement the next date calculation with relative delta to add months, weeks, or days to a reminder date parsed from a string, then update the CSV.
Optimize and refactor Python code by replacing if blocks with elif, ordering conditions by most frequent cases like monthly reminders, and improving readability.
Build a desktop GUI to create reminders with a date picker, default email, description, and repeat interval; adding a reminder updates the server CSV on Pythonanywhere with a popup confirmation.
Explore current and new architecture of the Real World Python Series email reminder app, linking a local gui to PythonAnywhere via an API to update reminders and trigger daily emails.
Build the main graphical user interface window for the email reminder app using a Qt-based Python library, creating a QWidget subclass, initializing the app, and setting the window title.
Add a vertical box layout with a date time edit (calendar pop up), an email input, a multi-line reminder text, and a repeat interval field, plus spacers for responsive sizing.
Add two horizontally arranged GUI buttons—add reminder and close—and wire them into the vertical interface, preparing to submit data to a CSV on the server.
Connect the graphical user interface to PythonAnywhere via an API to store reminders in the reminders.csv file when you press the add reminder button.
download the flask underscore App.py, update the csv path, and upload the api to python anywhere, so the web app can receive post requests for reminders.
Post a test request to a PythonAnywhere API using the requests library, sending a JSON payload to populate a csv with date_time, email, message, and repeat_interval.
Wire the add reminder button to a submit method, gather date, time, email, and reminder text, and send via HTTP to the API for CSV-based reminders on Pythonanywhere.
Add a functional close button, clear the reminder input and repeat fields after a 200 success response, and show a success information pop-up confirming the reminder was added.
Learn to convert a Python GUI reminder app into a cross‑platform executable for Windows, Mac, and Linux using pyinstaller, and locate the dist file.
Learn Python by Building a Real App — From Start to Finish
If you’ve learned Python basics but still don’t know how to build a real app — this course is for you.
In this project-based course, you’ll build a complete desktop application that sends email reminders — with a user interface, real logic, and cloud automation. No more tutorials that only teach isolated code snippets. You’ll learn how everything fits together to make a real, working program.
What You’ll Build
You’ll create a fully functional Email Reminder App that:
Lets users schedule reminders through a desktop GUI (built with PyQt)
Sends emails using real email credentials via SMTP
Saves data to a CSV file for persistent storage
Runs automatically every day from the cloud (PythonAnywhere)
Supports repeat reminders like “every 2 weeks” or “every 3 months”
By the end, you’ll have a tool that’s actually useful — and you’ll know how to build one yourself.
What You’ll Learn
How to think through, design, and build an app from scratch
How to use PyQt6 to build clean, interactive desktop interfaces
How to work with CSV files, dates, and scheduling logic
How to send emails in Python using smtplib and EmailMessage
How to deploy and run Python scripts daily in the cloud
How to send data from a desktop GUI to a server
This course is not just about writing code — it’s about becoming someone who can build programs that work.
Who This Course Is For
You know the basics of Python (variables, functions, loops), but you struggle to turn that into a complete program
You’ve tried learning Python but still feel lost when starting a project
You want to finally finish something — and feel like a real developer
You don’t need to be advanced. You just need to be ready to build.
What Students Say About My Courses
“Ardit has a gift for breaking down complex concepts into simple steps.”
“This is the first time I actually understood how to build an app with Python.”
“Finally — a course that bridges the gap between theory and real-world Python.”
By the end of this course, you’ll not only have a working app — you’ll have the confidence and skills to build many more.
Let’s build something real.