Back to journal
fastapi nextjs studyforgeai-assisted-developmentbuilding-in-public

StudyForge AI: assignments, AI summaries, and what comes next

A progress update on StudyForge AI. The assignments section is in, study materials can now be summarised by AI, and flashcards are next.

5 min read

A few weeks ago I wrote about starting StudyForge AI, the study platform I've been building as an "academic operating system" for students. That post covered the spine: authentication, the database, deployment, and a working Courses section.

This is the next update. Two features have shipped since then, a third is in progress, and the hosting had an interesting morning. Here's where things stand.

Assignments

The assignments section is live. A student can add an assignment with a due date, a priority, and a status, and link it to one of their existing courses.

There's nothing clever about this feature, and that's the point. It's straightforward CRUD: a form, a table, the usual create, read, update, delete operations against PostgreSQL. The one relationship that matters is the link to a course, so an assignment always belongs somewhere rather than floating loose.

I'm mentioning it precisely because it's unremarkable. A lot of a real product is unremarkable. The assignments section isn't going to feature in anyone's demo video, but a study tool that can't track assignments isn't a study tool. You build the boring parts because the interesting parts have nothing to stand on otherwise.

Study materials and AI summaries

This is the feature I was most curious to build. A student can upload study notes as a PDF, and StudyForge will summarise them.

The summarisation runs through OpenAI's API. I went with gpt-5-mini rather than a larger model. For summarising study notes, the mini model is more than capable, and it keeps the cost per summary low enough that the feature doesn't become a liability if a lot of people use it. A side project that quietly runs up an API bill is a side project that gets switched off.

Two honest notes about how it currently works.

First, it's PDF only at the moment. PDF is the format students actually have their notes in, so it was the right place to start, but PDF text extraction is its own small adventure. A clean digital PDF extracts nicely. A scanned one, or one with an awkward multi-column layout, is a different story. For now the feature assumes reasonably clean PDFs, and broadening that is on the list.

Second, the summarisation is synchronous. The student uploads the PDF, waits, and the summary appears. For a few pages of notes that's fine. For a long document it means staring at a loading state while OpenAI works through it, which starts to feel broken even when it isn't.

I already know where this goes, because I've been here before on a different project. The fix is to move the work into a background job: the upload returns immediately, the summary gets generated out of band, and the student gets the result when it's ready. That's the right pattern and it's on the roadmap. Synchronous was the right first version, because it let me get the feature working end-to-end before adding the moving parts of a job queue.

Prompt engineering took a few rounds

The part I underestimated was the prompt. Getting a model to produce a summary is trivial. Getting it to produce a summary that's actually useful for studying took iteration.

Early versions gave me summaries that were technically accurate and practically useless: too long, too close to just rephrasing the original, or stripping out exactly the detail a student would need at exam time. Tuning the instructions, being specific about structure and length, and being clear about what a study summary should keep versus discard, made the difference. The model was never the limitation. The prompt was.

A note on hosting

StudyForge's FastAPI backend runs on Fly.io, and Fly.io had a rough morning on 20 May 2026. One of their upstream network providers hit high packet loss and latency, and machines in the Singapore region were briefly unreachable before it was resolved.

It was a short incident and it sorted itself out, but it's a useful reminder when you're building on managed infrastructure: your uptime includes your provider's uptime, and their uptime includes their providers' uptime. You don't control the whole chain. The realistic response isn't to panic about it, it's to design for it: sensible retries, graceful failure states, and not assuming every request to an external service will succeed.

What's next: flashcards

The feature I'm building now is flashcards, and the plan is for them to be AI generated.

The idea is that the flashcards grow out of the study material a student has already uploaded. Rather than asking someone to sit and write cards by hand, StudyForge will generate a set from their notes, and they can review and refine from there. It connects the two halves of the platform: the material they put in becomes the revision tool they get back.

That's the next post, once it's actually working. The interesting questions there are about quality, not plumbing: a flashcard that tests recall well is a genuinely different thing from a sentence lifted out of a summary, and getting the model to produce the former rather than the latter is going to be its own round of the prompt work I just described.

Where StudyForge stands

The platform now has authentication, courses, assignments, and AI summarisation of uploaded PDFs, all running end-to-end on the live deployment. Flashcards are in progress. After that comes study planning and the work of turning a set of working features into something that feels like one coherent tool.

It's live at studyforge-ai-black.vercel.app if you want to sign up and have a look. It's a work in progress and it looks like one in places, but the core loop works: add your courses, track your assignments, upload your notes, get them summarised.

More when flashcards land.

Keep reading