Convert your Enrollment Assessment Form (EAF) PDF into a Google Calendar-compatible .ics file in seconds.
EAF Schedulr is a web application that reads your De La Salle University Archers Hub EAF PDF and automatically extracts your class schedule. It generates a calendar file that you can import directly into Google Calendar, showing all your courses with their times and locations.
- π Automatic Schedule Extraction β Reads the latest Archers Hub EAF PDF format and extracts all scheduled classes, seminars, and workshops
- π
Google Calendar Import β Download a
.icsfile compatible with Google Calendar and other calendar applications - π« Location Tracking β Preserves room numbers and building locations for each class
- π Recurring Events β Classes are set up as recurring weekly events for the entire term
- π Timezone Support β All times are adjusted for Philippine Time (PHT/Asia/Manila)
- β Recollection Management β Supports LASARE (Lasallian Recollection) 1, 2, and 3 with weekday validation
- π― Smart Weekday Validation β Ensures recollection dates match the scheduled weekday
- πΎ Automatic Metadata β Extracts student ID, term, and academic year from your EAF for proper file naming
-
Clone this repository
-
Create a Python virtual environment:
python -m venv .venv
-
Activate the virtual environment:
- Windows PowerShell:
.\.venv\Scripts\Activate.ps1 - Windows CMD:
.\.venv\Scripts\activate.bat - macOS/Linux:
source .venv/bin/activate
- Windows PowerShell:
-
Install dependencies:
pip install -r requirements.txt
- Activate your virtual environment (see step 3 above)
- Start the Flask development server:
python run.py
- Open your browser and go to
http://127.0.0.1:5000
- Drop your EAF PDF into the upload box or click to select it
- The app instantly extracts your schedule and displays the filename
- Set your Term Start Date (the first day of classes)
- Set the Number of Weeks for the term (default: 14 weeks)
- If your EAF includes LASARE (Lasallian Recollection) 1, 2, or 3, select the exact date for each recollection
- Important: The recollection date must fall on the same weekday as scheduled in your EAF
- The app validates your choices and shows helpful guidance
- Click Generate Calendar to create your
.icsfile - Download the file (automatically named with your student ID, term, and academic year)
- Open Google Calendar, go to Settings β Import & Export β Import Calendar
- Upload the
.icsfile and your schedule appears in your calendar
Your calendar will include:
- All Course Sections β Every class, seminar, or workshop from your EAF
- Class Times β Exact meeting times in your local timezone
- Room/Location β Where each class meets (or "Online" if applicable)
- Course Codes & Sections β Displayed in the event title for easy identification
- Recurring Pattern β Classes repeat weekly throughout the term
- Recollections β Any Lasallian recollections appear as single all-day events on their designated dates
EAFtoGCAL_AH/
βββ app/ # Main application package
β βββ __init__.py # App factory and initialization
β βββ config.py # Configuration and constants
β βββ models.py # Data models (Event dataclass)
β βββ utils.py # Utility functions for text and time processing
β βββ routes.py # HTTP route handlers
β βββ services/
β βββ parser.py # PDF parsing and validation
β βββ calendar.py # Calendar generation and preview formatting
βββ static/
β βββ app.js # Client-side JavaScript
β βββ styles.css # Styling
βββ templates/
β βββ index.html # HTML template
βββ run.py # Application entry point
βββ README.md # This file
βββ requirements.txt # Python dependencies
The application follows a modular, layered architecture:
- Routes Layer (
routes.py) β HTTP endpoints, CSRF protection, form handling - Services Layer β Business logic separated into focused modules:
parser.pyβ PDF validation and event extractioncalendar.pyβ ICS file generation and preview data
- Utilities Layer (
utils.py) β Reusable text processing, time formatting, and iCalendar formatting - Configuration Layer (
config.py) β Constants, patterns, and settings - Models Layer (
models.py) β Data structures (Event dataclass)
This separation enables easy testing, maintenance, and future feature additions.
- Python 3.12 or higher
- Flask 3.1.1
- pypdf 6.0.0 (for PDF text extraction)
- PDF Parsing β The app uses
pypdfto extract text from your EAF - Schedule Extraction β Uses pattern matching to identify courses and their meeting times
- Timezone Handling β All times are stored in Philippine Time (UTC+8) for accuracy in Google Calendar
- ICS Generation β Creates a standards-compliant calendar file with recurring weekly events
- Metadata Extraction β Pulls your student ID, term number, and academic year from the PDF for file naming
- Generated calendar files are temporarily stored in memory during your session
- Downloads are served with proper HTTP headers for correct filename formatting
- Files are not persisted to disk β they're generated fresh each time
- Your EAF PDF is processed locally by the app
- The file is not uploaded to any external service
- Calendar files are generated in memory and are not stored permanently
- The app uses a fixed UTC+8 offset for Philippine Standard Time (PHT)
- All class times are adjusted to this timezone before export
- Google Calendar automatically adjusts display times based on your device's timezone
When your EAF includes LASARE events:
- The app identifies which day of the week each recollection is scheduled
- You must choose a date that falls on that same weekday
- The browser shows a real-time validation message if you pick the wrong day
- The server validates again before generating the calendar as a safety check
Each class includes:
- SUMMARY β The course code and section (e.g., "FINCPMA C02")
- LOCATION β The room/building number (e.g., "M317" or "Online")
This information shows in Google Calendar event details and is searchable.
Downloaded files are automatically named:
[StudentID]_T[TermNumber]_AY[AcademicYear]_Schedule.ics
Example: 12345678_T3_AY25-26_Schedule.ics
- Make sure you're uploading an actual EAF PDF with class schedule data
- The PDF should be in the latest Archers Hub format
- Check that your PDF was read correctly (the upload confirmation shows the filename)
- Verify term start date is in the past relative to May 2026 (current date)
- Try importing again β sometimes a refresh helps
- Double-check the recollection date matches the weekday shown in your EAF
- For example, if LASARE is on Tuesday, you must select a Tuesday date
- Verify your Google Calendar timezone is set to Philippine Time (Asia/Manila)
- The app exports all times in PHT; Google Calendar should respect that setting
For issues or feature requests, please check your EAF PDF format matches the latest Archers Hub version or contact your academic advisor.
We use Google Analytics to understand general site usage. Your uploaded PDF is processed in memory only and is never stored on our servers. All data extracted from the PDF is automatically deleted after processing.
If you encounter bugs, email angelo_nuque@dlsu.edu.ph or report an issue on GitHub.
GitHub: https://github.com/Stilsi-dev/EAFSchedulr/issues
This project is created for De La Salle University students to manage their academic schedules.