Hi everyone 👋,
I’m Fatoki Temitayo Olaitan, a Backend Developer intern at Programmify (PIP4), and I’m excited to share one of my most transformative experiences so far in tech — building the backend of ExamSense during Zenith 3 of the PIP4 internship.
🎯 What Is ExamSense?
ExamSense is an AI-driven CBT and learning platform designed for WAEC and JAMB candidates.
But we wanted to go beyond mock tests.
Our goal was to empower students beyond the test — helping them understand their performance, learn smarter, and track progress across different subjects and topics.
Here’s how it works:
Students take a mock CBT test on the platform.
After submission, the system analyzes their performance topic by topic.
It highlights strengths and weaknesses and provides personalized study recommendations — linking them to videos, notes, and resources that can help them improve.
Over time, it builds a custom study plan tailored to each learner’s needs.
This wasn’t just a testing tool — it became a smart study companion.
🧩 My Role: Building the Backend
This was my first time working with Supabase, and honestly, it was both challenging and exciting.
As the backend developer on our three-person team — with Samuel Iniolouwa Komolafe and Ogunsowobo Abimbola — my main task was to design and implement the backend logic that powers ExamSense.
Here’s how I approached it:
- 🏗️ Setting Up the Supabase Backend
I started by setting up our Supabase project — it’s an open-source alternative to Firebase that provides a PostgreSQL database, authentication, and RESTful APIs out of the box.
Using the Supabase dashboard, I:
Created the ExamSense database schema, including tables for:
users (student information)
subjects and topics
questions and options
results and topic_analysis
Here’s a small part of our schema setup:
-- Enable UUIDs for unique IDs
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- Users table
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
full_name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
password TEXT NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
-- Questions table
CREATE TABLE questions (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
subject TEXT NOT NULL,
topic TEXT NOT NULL,
question_text TEXT NOT NULL,
option_a TEXT,
option_b TEXT,
option_c TEXT,
option_d TEXT,
correct_answer TEXT,
created_at TIMESTAMP DEFAULT NOW()
);
This formed the foundation of the entire platform.
- ⚙️ Automating Question Uploads
We had over 50 CBT questions to input, and I quickly realized manually inserting them would be a nightmare 😅.
So, I started exploring ways to automate the process.
I learned that Supabase’s API endpoints and PostgreSQL functions could help us upload data dynamically from a CSV or JSON file.
That was my first real-world experience connecting structured data to a live backend, and it taught me how to think about data pipelines in backend development.
- 🔍 Implementing the Scoring and Analysis Logic
The most interesting part was building the core logic that analyzed test results.
When a student finishes a CBT test:
Their answers are submitted to the backend.
The system compares them with the correct answers.
Scores are grouped by topic, showing how well they performed in each.
The system then provides resource suggestions — such as related videos or topics to review.
This logic was implemented using PostgreSQL functions and Supabase RPC endpoints, ensuring smooth, fast analysis.
It was my first time seeing how backend logic directly influences the user’s learning experience — that connection really deepened my appreciation for what backend development can do.
🧠 What I Learned
Working on ExamSense taught me so much — both technically and personally.
🔧 Technical Lessons
How to design relational database schemas for real-world projects.
Using Supabase as a full backend service — including authentication, storage, and APIs.
Handling data relationships (one-to-many between subjects → topics → questions → answers).
Writing efficient SQL queries for result analysis.
Testing and debugging live backend operations.
💡 Personal Growth
I learned that teamwork is everything. Working with Samuel and Abimbola showed me how collaboration fuels creativity.
I became more confident using tools I had never tried before — stepping outside my comfort zone.
Most importantly, I discovered that backend isn’t just code — it’s about building systems that make life easier for people.
🙌 Teamwork and Gratitude
A big shoutout to my amazing teammates:
Samuel Iniolouwa Komolafe and Ogunsowobo Abimbola — your creativity, ideas, and technical strength made this project what it is.
Thanks also to the Programmify team for creating a space that challenges us to grow and build real products, not just practice exercises.
🌱 Final Thoughts
Building ExamSense was more than a project — it was a learning journey that strengthened my backend skills, deepened my understanding of data systems, and reminded me why I love tech:
to create solutions that impact lives.
This is just the beginning.
I’m excited to keep learning, improving, and contributing to more meaningful projects that merge education and technology.
If you’re passionate about EdTech, backend systems, or data-driven learning, I’d love to connect and share ideas.
Top comments (0)