Written by: Lee Wei Xuan
Table Of Content
- Introduction
- The First Hurdle – Scraping the Data
- The Breakthrough – Backtracking & Genetic Algorithm
- The Final Push – From Local to Global Optimization
- Expanding SassyNic – OTP Automation & Sustainability
- What’s Next for SassyNic?
Introduction
When I first joined Multimedia University Malaysia (MMU) back in the October/November 2023 term, I had no idea that timetable planning would be one of my biggest nightmares.
Imagine this: you spend hours manually noting down different class time slots, cross-checking them to avoid clashes, and finally settling on a perfect schedule—only for the system to tell you, “Oops! This class is full.”
At that moment, I thought, “Damn, do I really have to start over?”
That’s when the idea hit me: “Why not automate this process?” Sounds simple, right? Yeah… I was completely wrong.
The First Hurdle – Scraping the Data
My first challenge? Web scraping. I had zero experience. Luckily, I met Aiden Chan from Hackerspace MMU, who had already worked on his Schedulr project (check it out if you haven’t). Thanks to him, I skipped months of trial and error and went straight into scraping CLiC’s timetable data.
Problem solved? Nope. Iframes within iframes, wrapped in another iframe. If you’ve ever tried scraping a website structured like a Russian nesting doll, you’ll know my pain.

Then, just as I finally cracked the scraping process…
BOOM. CLiC rolled out a brand-new interface overnight.

I thought I was doomed, but surprisingly, the update worked in my favor! The new design got rid of most iframes, reducing my scraping steps from 10+ down to just 3 or 4.
The Breakthrough – Backtracking & Genetic Algorithm
With the timetable data in hand, the real challenge began: how do I let students generate and customize their own timetables?
The breakthrough happened during a Discrete Structures lecture when my professor was explaining proper subsets. It was one of those “YES, I CAN HEAR THE MUSIC” moments (Oppenheimer-style, but no, I didn’t actually say that out loud lolllll, that would be so cringe).
That night, I did a deep dive into Backtracking algorithms—the key to generating all possible valid timetable combinations. After days of research, trial, and error, I finally got it working!
But then came the next challenge: optimizing the results.
The filters were working, but they were too rigid. If a student applied too many constraints, some potentially good timetables wouldn’t even show up.
That’s when Mr. Willie Poh, the advisor for IT Society MMU & Hackerspace MMU, suggested implementing soft constraints—allowing users to adjust weight and bias instead of just applying hard filters.
This took me a while to figure out… and once again, my Discrete Structures professor saved me. One day after class, I showed her my progress along with my thought process, and she casually dropped:
“This is basically an NP problem. Try Genetic Algorithm.”
That single sentence completely changed the project.
The Final Push – From Local to Global Optimization
Over the next 1-2 months, I dived deep into Genetic Algorithms.
I realized I already had the pathfinding mechanism, but what I needed was a way to rank timetables based on student preferences. That’s where the Fitness Function came in—it allowed me to assign a score to each timetable, making soft constraints possible instead of just filtering out results.
However, one final problem remained:
No matter how much I tweaked the fitness function, it always ended up with local optima instead of global optima. In simple terms, my algorithm worked only for my timetable, but it wasn’t universal enough for others to work as expected.
I went back to Prof. Linda Chua, who had been guiding me through the project. She looked at my setup and said:
“You’re solving an NP problem—global optimization is nearly impossible. Normalize all the weights, and you’ll get close enough.”
She was right.
After one final all-nighter, I finally completed the project. It took me only 5-6 months (hah… ha… ha…). And with that, SassyNic was born.
Expanding SassyNic – OTP Automation & Sustainability
After the timetable tool, I wanted to automate MMU’s OTP verification (because who enjoys switching tabs just to copy a 6-digit code?).
In another 1-2 months, I integrated an Auto OTP Extractor into SassyNic. The Hackerspace Discord was hyped that night.
Then came a suggestion from Mr. Willie Poh:
“Why not make the OTP extractor a separate extension?”
At first, I thought, “Too much work lah, lazy to rewrite a new extension from scratch.” But after learning about sustainable development from him, I realized it made sense:
• Students need the timetable tool.
• Students, lecturers, and staff need the OTP extractor.
Maintaining one extension for both would’ve been a nightmare, so SassyNic was split into two:


SassyNic – Universal – OTP automation for all MMU users.
Both projects are open-source! If you’re interested in how it works, check out the GitHub Wiki for setup guides, implementation details, and dev contributions.
🔗 GitHub Wiki: SassyNic Documentation
📌 Project Roadmap: SassyNic Roadmap & Development
What’s Next for SassyNic?
You probably think this is where SassyNic’s story ends…
HAH. SHAME ON YOU! (jk, don’t take it personally 😆)
A BIG update is in the works, so stay tuned! If you’re working on a project of your own, don’t give up—you might be closer to success than you think.
You can connect with me via:
📩 Email: 1231202248@student.mmu.edu.my
🔗 LinkedIn: Lee Wei Xuan
💬 Discord: FramedStone#3291
Big thanks to Prof. Linda Chua & Mr. Willie Poh for their guidance—without them, SassyNic might never have come alive.
Leave a comment