First Serious Project

INSAT Student App, My First Real Project

INSAT Student App, My First Real Project
Role
Solo Developer, Everything
Timeline
2024 – April 2025
Duration
Personal project (months)
Team
Solo

Overview

This is the project that taught me how software actually works. Before the hackathons and the AI agents, there was the INSAT Student App: a desktop app I built from scratch for first- and second-year students, picking up API design, databases, and UI programming as I went. It tracks grades, simulates orientation choices, and writes AI reports, all backed by a serverless API.

The problem

INSAT students, especially in the MPI track, have no real way to track their grades, see where they rank in their section, or work out how future exam scores would change which engineering track they can get into. It all lives on paper and in scattered spreadsheets.

What I built

  1. 01

    A real grade tracker

    The app shows every subject's scores and your rank in the section, with spider, line, and bar charts that put you next to past years' averages.

  2. 02

    Orientation, simulated

    Enter hypothetical exam grades and it recalculates your average live, showing which tracks you'd qualify for, using the real orientation formulas.

  3. 03

    AI reports for each student

    An admin tool runs a local language model to write each student a personal report on their strengths, weaknesses, and best-fit track, then publishes it to the app.

  4. 04

    One backend does it all

    A single Cloudflare Worker handles the full login flow, grades and subjects, complaints, email notifications, profile photos, and report storage, against a serverless database.

  5. 05

    Built for real use

    Three languages, light and dark themes, adjustable font size, and an offline mode that quietly drops online features when there's no connection.

Architecture

01 · Client02 · Gateway03 · DataStudent AppPyQt5Admin AppLlama 3.1 8B, localCloudflare Worker50+ routes · bcryptjsNeon PostgresCloudinarymedia

A PyQt desktop app calls a single Cloudflare Worker that owns every route and all the data in a serverless Postgres, with photos on Cloudinary. A separate admin app runs a local language model to generate the student reports and pushes them to the same API.

Tech stack

PyQt5 + PyQtChart (5947 lines)

Desktop GUI, custom NeedleGauge, CircularProgress, BarChart, ToggleSwitch widgets, spider/line/bar charts, fade animations, 3 languages (EN/FR/AR)

Cloudflare Worker (2258 lines)

50+ handler functions, auth, CRUD, reclamations, notifications, uploads, ads, AI reports, single-file JavaScript, esbuild bundled

Neon Serverless Postgres

Full relational schema: users, students, grades, matières, reclamations, notifications, AI reports, ad clicks

Llama 3.1 8B (Admin AI)

Local LLM inference via llama-cpp-python, generates personalized orientation reports for each MPI student

Cloudinary

Profile picture hosting and log file storage, uploaded via Worker proxy

INSAT Orientation Engine

Real formulas for GL/RT/IIA/IMI eligibility with 2022/2023 historical averages for comparison

Results

5,947 Lines (Frontend)

PyQt5 desktop app with 145 methods, grades, simulation, charts, AI reports, 3 languages

2,258 Lines (Backend)

Single Cloudflare Worker with 50+ handlers, auth, CRUD, notifications, uploads

4 Orientation Paths

GL, RT, IIA, IMI simulation with historical 2022/2023 averages

AI Orientation Reports

Llama 3.1 8B generated personalized reports per student

3 Languages

Full English, French, and Arabic translation support

What I took away

  1. 01

    This project taught me more about software engineering than any course ever could. Before this, I didn't understand why you separate frontend from backend, why APIs exist, or why databases need schemas. Building everything from scratch, auth flows, API design, database modeling, GUI state management, gave me the mental model I now use for every project.

  2. 02

    The biggest lesson was about architecture mistakes. I put too much business logic in the frontend (grade calculations, ranking, simulation), and by the time I realized it should be on the backend, it was too deeply embedded to refactor easily. That mistake taught me the importance of thinking about where logic belongs before writing a single line of code.

  3. 03

    Writing a 2258-line Cloudflare Worker as a single file was not ideal, but it worked, and the process of organically growing an API from 5 endpoints to 50+ is how I learned to think about API design, auth middleware, and route organization. Every project since has started with proper structure because of what I learned here.

  4. 04

    Building a real product for real users (INSAT students) is fundamentally different from building exercises. When your friends are the users, bugs are embarrassing and features matter. That pressure is what pushed me to add features like email verification, password reset with cooldowns, offline mode, and multi-language support.

View the source