Skip to content
This repository was archived by the owner on Jul 21, 2026. It is now read-only.

Development Journey

Mathias Hansen edited this page Oct 5, 2025 · 6 revisions

Development Journey 🛠️

A behind-the-scenes look at how AkademiTrack came to life, written by the developers themselves.

🎯 Project Origins

The Problem

Our school, Akademiet, had a recurring issue: students were constantly forgetting to register their study time on iSkole.net. This had to be done manually every day - sometimes up to 4 times a day, sometimes less. When students forgot, they had to inform their teachers who would then manually fix it. This created unnecessary extra work for teachers who already had enough on their plates.

Initial Concept

Me (Mathias) and Andreas stepped in to solve this problem. We decided to create AkademiTrack - an app that automatically registers study time just like a normal person would. The goal was simple: eliminate the manual work and free up both students and teachers from this tedious administrative task.


🚀 Development Timeline

Phase 1: Planning & Research

Timeline: Started around August 18

Our research phase focused on understanding how iSkole.net worked under the hood. We spent time analyzing how the website reacted to different HTTPS requests and mapping out the entire authentication and registration flow.

Key Decisions:

  • First attempt: Python - seemed like a good choice initially
  • Second attempt: Swift - we thought it would be perfect for Mac since we needed to package it as a .app file, but it wasn't ideal and it cost money
  • Final decision: C# with Avalonia - our favorite language! This packaged perfectly for all operating systems

The Reality: It took us a long time to develop the app simply because we had to switch languages 2 TIMES and delete the old apps each time. Starting over was frustrating but necessary.

Phase 2: Core Development

Timeline: [Continuing through development]

During development, we faced really tough challenges with both design and backend implementation. But in the end, we managed to create a really good design and user experience that we're proud of.

Phase 3: Testing & Refinement

Timeline: [Testing phase]

Our buddy Mustafa was our main tester, and he was excellent at it. He gave us valuable feedback on what needed to be changed and added, pushing us further toward releasing it to our school.

Big thanks to Mustafa for helping us test! 🙏


💡 Technical Deep Dives

System Flow Overview

Below is the complete flow of how AkademiTracks bot operates from start to finish: mermaid-diagram-2025-10-05-151927

Link to the flowchart "Mermaid"

Authentication System

Our authentication system works by encrypting your passwords and Feide username using hashing, then saving them securely on your computer.

When the start button is activated, the system goes through multiple if statements to determine the authentication path. Here's how it works:

Flow:

  1. Load saved credentials from encrypted storage
  2. Check if cookies exist from previous sessions
  3. If cookies exist, validate them via API call
  4. If cookies are valid and parameters are complete, proceed to fetch schedule
  5. If not, open browser for authentication
  6. If saved credentials exist, attempt headless auto-login via Feide
  7. If auto-login fails or no credentials exist, show visible manual login
  8. Extract and save cookies + parameters
  9. Proceed to schedule fetching

What we learned:

  • Encryption and secure storage is crucial for user trust
  • Balancing automation with security requires careful design
  • Headless browser automation can be tricky but is worth the effort

Schedule Management & Conflict Detection

AkademiTrack fetches your full day schedule with a single API call, then intelligently processes it:

Process:

  1. Find all STU sessions scheduled for today
  2. Check each STU session for conflicts with other classes
  3. For sessions with time overlaps, exclude them from the valid list
  4. Only monitor and register for STU sessions without conflicts

This conflict detection prevents the app from registering you when you're supposed to be in another class.

Notification System

The notification system was one of the really hard problems we faced, especially on Mac. Normally, Mac notifications work through the OS itself, and we would have had to pay Apple for that capability.

Our Solution: We built our own custom notification system. It was really hard to implement, but it works well and keeps the app free for everyone.

Features:

  • Queue-based system with priorities
  • Admin notifications checked via Supabase every 30 seconds
  • Registration success/failure notifications
  • Network error handling (e.g., "Need School WiFi")

Monitoring Loop

The monitoring system runs on a 30-second cycle:

For each valid STU session:

  1. Check if already registered
  2. If not, check registration window status
  3. Window status possibilities:
    • Not Yet Open - Log waiting status
    • Closed - Log that window closed
    • Open - Attempt registration!
  4. Send POST request when window opens
  5. Handle response (success, network error, other error)
  6. Log successful registrations to Supabase
  7. Continue until all sessions are complete

🐛 Bug Hunting Journey

There were SO many bugs. Saying "Bug #1" and "Bug #2" would be wrong - we had countless downfalls where we just needed to delete what we tried, take a step back, and build it up again in smaller steps.

Our Approach:

  • Break problems into smaller pieces
  • Test incrementally
  • Don't be afraid to start over when something isn't working
  • Take breaks when stuck

📚 What We Learned

Technical Skills

  • Database management - Working with Supabase taught us a lot about real-time data
  • Cross-platform development - Building for Windows, macOS, and Linux simultaneously
  • Auto-updater implementation - Using Velopack to push updates to users
  • Security practices - Encrypting credentials and securing user data
  • Mac app development - Learning the intricacies of building for macOS
  • API integration - Working with iSkole.net's API

Project Management

  • Planning matters - But not everything comes as planned
  • Think like the user - Always consider the user experience
  • Discussion is key - Look at ideas and discuss them thoroughly
  • Iterate and improve - Take feedback seriously (thanks Mustafa!)

Personal Growth

We learned to:

  • Handle setbacks (like switching languages twice!)
  • Work through difficult problems methodically
  • Balance ambition with practical constraints
  • Appreciate good planning AND good flexibility

🎓 Advice for Future Developers

Reality Check

Not everything comes as planned. Sometimes you just need to:

  • Take a break
  • Step back from the problem
  • Discuss the issues you're facing
  • Try slowly making something work rather than rushing

Don't expect perfection on the first try. We switched languages twice, rebuilt the app multiple times, and that's okay. It's part of the process.

Tools We Recommend

1. Velopack 🚀 A great tool for packaging and making an updater for your app so you can push new updates to your users seamlessly.

2. Avalonia 💎 Just great to code with for all operating systems. Cross-platform UI that actually works well everywhere.


🔮 Future Vision

Features We're Working On

Leaderboard System 🏆 We're looking at implementing a competitive leaderboard where users can compete for:

  • Most study time in their class
  • Most study time in their school
  • Competition between friends

This will boost people to study more and add a gamification element that makes studying more engaging.

Long-term Goals

Better School Partnership 🤝 We want to work together with Akademiet to ensure the best experience for students. Direct collaboration with the school administration would help us:

  • Ensure compliance with school policies
  • Get feedback directly from teachers
  • Make improvements that benefit everyone

Community Involvement

We don't expect the community to help with our app, but we are open for you to help us!

Please fork our app and help us make it better. Contributions are welcome - whether it's bug fixes, feature additions, or documentation improvements.


📝 Developer Notes & Anecdotes

We Never Gave Up

Despite switching languages twice, countless bugs, and many late nights - we pushed through and completed the project. Persistence pays off.

Late Night Coding Sessions

The Double-Build Incident 😅

It was late at night, and we were both tired. I (Mathias) was building the app to publish the first version for Mac. I forgot to pull the new code Andreas had made, so I deleted what I'd built and said "I forgot to pull."

Then my tired ass forgot that I'd just said I needed to pull... so I built the old app AGAIN!

This was funny because I had already built the app for Mac at least 15 times that day. By the end, I was a little tired, to say the least.


🙏 Acknowledgments

People Who Helped

  • Mustafa - Our incredible beta tester who gave us valuable feedback and helped us improve the app significantly. Thank you!

Fuel That Powered Development

  • Coca-Cola - Too much to count. We drank A LOT of Coke through this journey. Thank you to all the Coca-Cola drinks we consumed! 🥤

📊 Project Statistics

  • Lines of Code: [Check and add this number]
  • Development Time: A little over 1 month
  • Coca-Cola Consumed: ∞ (Too much to count)
  • Commits: 180
  • Issues Resolved: 10 known, but probably around 120 total
  • Sleepless Nights: 100,000,000 😴
  • Language Switches: 2 (Python → Swift → C#)

🎬 Final Thoughts

Our final thoughts: We love cola.

But seriously, AkademiTrack represents our commitment to solving real problems for students at Akademiet. We're proud of what we've built, and we're excited to see it help students and teachers alike.


Mathias & Andreas

Last updated: [10/5/2025]

Clone this wiki locally