StudyWise AI: Transforming Study Notes into Interactive Learning

Inspiration

As a student in Nigeria, I've lived through the intense pressure of preparing for high-stakes exams like WAEC and JAMB, as well as my current university studies. The traditional study method was always the same: bury yourself in dense textbooks and lecture notes, jotting down highlights and re-reading for hours, hoping the information would stick. It was an inefficient, and often frustrating process.

I was inspired by a simple but powerful question: "What if our study notes could be your teacher?" What if, instead of just reading them, we could have an intelligent conversation with them? This frustration, combined with my dislike of inefficient tasks, led to the vision for "StudyWise AI" a tool that transforms the inefficient act of cramming into an active and engaging learning experience by turning any study material into a personalized practice test.

What it does

StudyWise AI is an intelligent study companion that functions as a personal learning tutor. At its core, it does one thing exceptionally well: it turns any document you provide into a high-quality, interactive practice test. Yes, any document.

The user journey is incredibly simple:

Upload Anything: Users can upload their notes in various formats, including PDF, DOCX, Markdown, or TXT (these are the only ones it supports at the moment), parsing them into pure notes.

AI Generates Your Test: The system I built analyzes the document's content and context. The user can either customize their test by choosing the difficulty, number of questions, and types (Multiple Choice, True/False, Short Answer, etc.) or choose a default preset of questions I made.

Take, Learn & Master: The user engages with a clean, interactive test interface. After the test, they receive a detailed performance analysis with AI-powered insights and, most importantly, every single answer is linked directly back to the source text in their original document for verification and focused revision.

How I built it

StudyWise AI is a full-stack application built with modern web technologies available, it is scalable, and has an AI-first architecture.

Frontend: The user interface is a snappy Single Page Application (SPA) built with React 18 and TypeScript. I used Vite for a lightning-fast development experience and an optimized build process. The UI components are from shadcn/ui, styled with Tailwind CSS for a consistent and responsive design. State management is handled by Zustand, which keeps the UI fast and allows for seamless features like resuming a test in progress (unfortunately this feature is not available yet), deployed on Netlify for fast response and ease of use.

Backend & Database: The backend is a robust API built with Node.js, Express.js, and TypeScript. For my database, authentication, and security, I chose Supabase, which provides a powerful PostgreSQL database with enterprise-grade auth and Row-Level Security. I used Drizzle ORM for type-safe database queries. The entire backend is designed to be deployed as a service on Render, ensuring scalability from the get-go.

The AI Core: This is the heart of the application. Instead of relying on a single AI provider, I built a resilient multi-provider AI engine. It started with just Google Gemini, but I kept hitting the limits, then an idea came to me: what if I can use multiple models and intelligently route requests to other models like OpenAI's GPT-4o and Claude 3 Haiku? This system includes automatic failover, so if one provider is down, the app continues to function seamlessly. The generation process I implemented is a two-step "Generate & Verify" system to combat AI hallucinations and ensure the highest quality questions.

Challenges I ran into

Building an AI-native application from the ground up came with its own unique set of challenges:

AI Reliability and "Hallucinations": Early on, I noticed that AI models could sometimes generate incorrect or ambiguous questions. My solution was to build the "Trust System." I engineered the AI prompts to force the model to cite the exact source sentence for every answer. Then, I implemented a second, lightweight AI call to generate insights on every test result. This function, combined with the source-linking feature (which is also not complete at the moment), became a cornerstone of the app's reliability.

Handling Complex Documents: Parsing text from PDFs and DOCX files is notoriously difficult. Simple text extraction often breaks layouts, loses context from tables, and mangles content. I had to create a complex document processing pipeline using a combination of libraries like PDF.js and Mammoth.js, and write custom logic to clean and structure the text before sending it to the AI. Despite that, only PDF is working I had to put off the DOCX for later.

User Experience vs. AI Speed: AI generation isn't instant. Leaving a user staring at a simple spinner for 30 seconds is a poor experience. So I re-architected the test generation flow to be asynchronous. When a user submits their notes, the heavy lifting is sent to a background job. The UI immediately becomes responsive, showing our engaging "AI at work" loading state animation, and notifies the user when their test is ready.

Accomplishments that I am proud of

The Multi-Provider AI Engine: Building a resilient system that can intelligently switch between different AI models to ensure 99.9% uptime is a huge technical achievement. It makes the app far more reliable than most AI-powered tools.

The "Source of Truth" Validation: The feature that links every single answer back to the user's original notes is something I will be incredibly proud of once I perfect it. It builds immense trust and turns the app from a simple quiz tool into a genuine revision and verification platform.

A Truly Seamless User Experience: From the drag-and-drop file upload to the ability to jump to other questions has been a success thanks to state management with Zustand. I focused on the small details that make the app a delight to use.

What I learned

This project has been an incredible learning journey. My biggest takeaway is that AI is a powerful tool, not a magic wand. The real work lies in building a robust, reliable, and user-friendly system around the AI. I have learned a lot about prompt engineering, data validation, asynchronous architectures, and the importance of a user-centric design philosophy. I also learned to start simple and then iterate, as the vision for the project grew from a basic thought into a full-fledged SaaS platform.

Special Thanks to Kiro.dev

I cannot complete this blog without expressing my deep appreciation for Kiro.dev and their revolutionary AI IDE. It is definitely one of the best development environments I have used so far. I used their Spec feature during my ideation phase and throughout most of my development journey. Their vibe coding interface and how it handles tasks is absolutely on point. The integration of Claude 4.0 made it even more formidable.

Kiro.dev was instrumental in helping me debug countless errors I made along the way. Without a doubt, I could not have achieved this project by myself alone. Their AI-integrated IDE is a prime example of when form meets function. The seamless way it assists with code generation, debugging, and project management transformed my entire development workflow.

I'm also incredibly grateful to their community and forums, where I found support, inspiration, and solutions whenever I hit roadblocks. The collaborative spirit there made the challenging moments of this project feel less isolating and more like a shared journey toward innovation.

What's next for StudyWise AI

I am just getting started! My vision is to make StudyWise AI the ultimate learning partner for students everywhere. My roadmap includes:

Advanced AI Insights: Moving beyond simple scores to provide deep, personalized analytics on learning patterns and recommend specific areas for improvement.

Collaborative Features: Allowing users to form study groups, share notes, and take tests together.

Native Mobile Apps: Building dedicated iOS and Android applications for an even better on-the-go experience.

LMS Integration: Creating APIs to allow schools, universities, and online course providers everywhere in the world to integrate StudyWise AI into their official learning platforms.

Built With

Share this project:

Updates

posted an update

Issue: PDF Upload and Parse Failing

Issue Summary

Affected Feature: PDF file upload and text extraction
Severity: Medium - Core AI functionality remains fully operational
Discovery Date: September 17, 2025 (2 days post-deployment)
Estimated Fix: Immediately after hackathon judging

Timeline

  • Sept 15: Initial deployment to Netlify
  • Sept 17: Issue discovered during user testing
  • Sept 18: Root cause identified and documented
  • Post-Judging: Fix implementation scheduled

What Happened

After successfully deploying StudyWise AI to production on Netlify on September 15, 2025, I discovered 2 days later that the PDF uploads were failing with a version compatibility error. The application had been working perfectly during local development and testing phases.

Technical Details

Error Message

PDF processing error: The API version "5.4.54" does not match the Worker version "3.11.174"

Root Cause

The issue stems from a version mismatch between two components of the PDF.js library:

  1. PDF.js Display Layer (Installed Package): Version 5.4.54

    • Installed via npm: "pdfjs-dist": "^5.4.54"
    • This is the main library that handles PDF parsing and rendering
  2. PDF.js Worker Script (CDN): Version 3.11.174

    • Configured to load from: https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js
    • This is the background worker that processes PDF data

Why This Happened

  • In development the app used a local worker that matched the installed library version.
  • In production the code pointed to a CDN fallback (3.11.174).
  • The library was later upgraded to 5.4.54, but that version isn't available on CDNJS (only newer builds like 5.4.149).
  • Because the CDN version didn't exist, the worker and API versions mismatched, causing the error after deployment.
  • Mistake: I didn't verify that the CDN actually provides the fallback version I was referencing.

Impact Assessment

**What Still Works:* Everything except the PDF upload functionality

**What's Affected:* PDF file uploads and text extraction

**Workaround Available:* Users can still access full functionality by:

  1. Converting PDF files to text format using external tools
  2. Copy-pasting text content directly into the application
  3. Using markdown (.md) files for formatted notes

Why Not Fixed Immediately?

This issue was discovered during the active hackathon submission period with the following constraints:

  1. Submission Integrity: Hackathon rules require no modifications to the codebase during the judging period
  2. OAuth Complexity: Creating separate deployment branches would complicate Google OAuth callback URLs configured in Supabase making it inconvenient for returning users and also my already submitted deployment.
  3. Risk Management: Making changes during judging could potentially introduce new issues to working features

Technical Solution (Post-Judging)

The fix is straightforward and will be implemented after the judging period:

Quick Fix:

// Change single line in client/src/utils/documentProcessor.ts
const RELIABLE_CDN_VERSION = '5.4.149'; // Use available CDNJS version

Long-term Solution: Implement dynamic version matching to prevent future occurrences.

Lessons Learned

  1. Verify External Dependencies: Always confirm that CDN versions referenced in code actually exist before deployment
  2. Production Environment Testing: Perform comprehensive testing of all features in the actual production environment, not just local/staging
  3. Dependency Management: Consider bundling critical dependencies locally rather than relying on external CDNs for core functionality

Log in or sign up for Devpost to join the conversation.