I built the original ClassPilot back in June 2025, inspired by my own real-world struggles when I started college in a state university in the Philippines. Our school usually provides class schedules as system-generated PDFs or printed copies. Most students just download them, some redesign them in Canva, others save them in their gallery or even set them as their lockscreen wallpaper. It sounds weird, but that’s the reality I observed every day.
That’s where the idea of ClassPilot started. I planned it manually, scribbled on the back of a bond paper from one of my exams. It was literally scratch paper. I didn’t even believe it would reach this far. I didn’t use Figma or any design tools because, honestly, they felt restrictive to my creativity. I stuck with the old-school way.
I named it ClassPilot because the first version was vibe-coded using Copilot. I fed the AI the structure I had already designed. The core functionality was simple: remind students about their classes twice, once before the class and once during the class itself. This was meant to help students who get distracted playing games or endlessly scrolling on social media.
I designed the UI with an iOS-style approach using Flutter’s Cupertino components, inspired by modern iOS design. I implemented hardware acceleration to make the app smooth on modern phones. After that, I added event reminders for forums and school activities, which are often more frequent than actual lectures in state colleges. Then came the grade tracker, which was one of the hardest parts. At first, I used AI-generated formulas. The goal wasn’t perfect accuracy, but to give students a close estimate of their average so they could stay aware of their standing.
I added quick actions on the home screen so users wouldn’t struggle navigating through modules just to do simple tasks. I heavily optimized notifications because timing mattered. I was aware of push notification services like FCM, but I also knew that internet access in provincial areas of the Philippines is unreliable. So I implemented local notifications to ensure the core feature worked even without stable connectivity.
A month later, I added file preview features so students could upload and view PDFs directly inside the app, avoiding external apps filled with ads or subscriptions. Office documents were a challenge, since Android doesn’t support previewing formats like DOCX, PPTX, or XLS by default. I initially relied on APIs, but as a student, I couldn’t afford monthly subscriptions. So I limited previews to PDFs, even though I knew it wasn’t ideal.
Later, I implemented an AI chatbot using the Groq API. I stored conversations in Firebase and implemented memory handling similar to how GPT works. As usage grew, Firebase limits were hit quickly. I ran my backend on Render and had to rotate APIs and optimize aggressively. I spent almost a month just stabilizing this part of the system.
By version 1.0.5, I still wasn’t using Git. I relied purely on USB file transfers. Eventually, my workspace got corrupted and I lost everything. That completely killed my motivation. The app stayed on version 1.0.5 for three months. I still used it daily, and over time, hidden bugs surfaced and new ideas kept emerging. That pressure pushed me to continue.
I decided to rebuild ClassPilot as version 2 using Kotlin. I started completely empty-handed and spent weeks learning Kotlin from scratch. Around that time, iOS 26 was introduced, and I wanted to implement design elements like Liquid Glass, which Flutter couldn’t fully achieve at the time. Security also became a top priority. Even if ClassPilot was “just” a productivity app, it handled student grades and AI conversations. Privacy mattered.
ClassPilot v2 launched around October. I went back to my old-school planning method again. I successfully recreated an iOS 26–inspired bottom navigation, improved hardware acceleration, battery optimization, splash screens, fonts, and onboarding. The app now supports API level 26 up to the latest Android versions, meaning it runs smoothly on both older and modern devices.
I reworked notifications using AlarmManager, RTC_WAKEUP, and workers so reminders would trigger even in Doze mode. I replaced AI-generated grading formulas with my state university’s actual grading system, making results much closer to accurate. I also solved document conversion using LibreOffice on my server, converting files without storing them to protect user privacy.
My biggest ongoing challenge is server uptime. Free-tier servers don’t run 24/7. They sleep. I tried uptime pings, monitoring tools, and different workarounds. Providers adapt, so I keep adapting too. I’m not doing anything illegal. I’m just being strategic with limited resources.
The server is designed to run on its own as much as possible. I try to limit human interaction by automating maintenance and monitoring. I integrated alerts into Discord so I’m immediately aware of changes, failures, or system behavior. I even feed this operational data into my long-term bot, using it to learn how ClassPilot behaves over time.
There were times I almost gave up, times I lost focus, and times I wanted to move on to easier projects. But I didn’t. I stayed committed because I believe this app can help Filipino students, including myself. I wasn’t given enough resources, but I still managed to build something meaningful.
You don’t lose interest in something you truly believe in, even when it feels impossible. ClassPilot is my second app that continues to receive updates as a solo developer. I hope it doesn’t just inspire others, but reminds them that there is always a way to find solutions, even with limited resources.
Bonfire Base
Log in or sign up for Devpost to join the conversation.