ITfiers Logo
MyAssignmate

MyAssignmate — AI-Powered Academic Organization Platform

Built MyAssignmate end-to-end: a student academic-organization platform where an AI pipeline reads an uploaded syllabus — PDF, Word, or even a photographed page — and returns a fully structured, week-by-week assignment schedule, layered with a student social feed and Stripe-powered subscription billing.

IndustryEdTech
Year2024-2025

3

Services Deployed

Next.js frontend, Directus backend, and a dedicated Google Apps Script AI/OCR service

GPT-4o

AI Extraction Model

Structured Outputs (json_schema, strict mode) extract course and week-by-week assignment data from OCR'd syllabi

PDF, Word, Scans

Document Formats Supported

OCR via the Google Drive API handles born-digital documents and photographed/scanned pages alike

6 Hours

Result Caching

Parsed syllabus results are cached per-document so re-verifying an upload doesn't re-bill OpenAI

The Challenge

Students juggle multiple courses each term, with assignment due dates scattered across PDFs, LMS portals, and email, and no unified calendar populated without manual data entry. Existing course-tracking tools were largely to-do apps requiring every assignment to be typed in by hand. MyAssignmate needed to remove that friction at the source — turning a raw, often messily formatted syllabus document into an accurate, structured schedule — while also giving educational institutes and organizations a way to manage member users, and giving the business a sustainable, usage-gated subscription model to operate on.

Our Solution

We built MyAssignmate as three independently deployed services: a Next.js frontend, a Directus-based backend (PostgreSQL + Redis, extended with custom endpoints and hooks), and a dedicated Google Apps Script AI service that OCRs uploaded syllabi via the Drive API and extracts a structured course and assignment schedule using GPT-4o with OpenAI's Structured Outputs. Extracted data lands as an unverified course record that a student confirms before it goes live — a human-in-the-loop safeguard around the AI output — then appears in a FullCalendar-based calendar view and an ApexCharts dashboard. On top of that academic core, we layered a full social feed (posts, comments, reactions, reposts, follows, institute pages, notifications) built with a fan-out-on-write architecture, and a tiered Stripe subscription system with trials, usage-based upload limits, and two-way webhook sync between Stripe and Directus.

How We Built It

A detailed look at each layer of the automated pipeline architecture.

1

AI-Powered Syllabus Intake

The product's headline feature: a student uploads a syllabus in almost any common format — PDF, Word document, or a photo of a printed page. The Google Apps Script service OCRs the document via the Drive API's document-conversion service, then sends the extracted text to OpenAI's gpt-4o-2024-08-06 with a strict, schema-constrained prompt instructing it to extract course name, term/semester and year, start/end dates, institute name, instructor contact details, required texts, and a full week-by-week assignment schedule — inferring missing fields from context where the source document is incomplete or inconsistently formatted. Parsing failures return a friendly, actionable error to the user while alerting the team by email with full error detail, turning AI failures into a monitored, recoverable event rather than a silent black box.

2

Structured Outputs, Not Free-Form Prompting

Rather than asking GPT-4o for prose or loosely specified JSON and validating the response afterward, the extraction pipeline uses OpenAI's Structured Outputs (json_schema response format, strict mode) with a JSON Schema matching the exact shape the Directus courses and assignments_schedule collections expect. This pushes schema conformance into the model call itself, eliminating an entire class of downstream 'the AI's JSON didn't match our shape' bugs by construction. Every OpenAI call also computes and logs its actual dollar cost from the API's token usage — deliberate LLM cost-awareness appropriate for a product where document uploads are the metered, billed resource.

3

Human-in-the-Loop Verification

AI output is never written directly as active data. An uploaded course lands in Directus as an unverified record that a student (or organization admin) must confirm before its assignments appear as active — treating the LLM as a fast, high-quality first-draft generator rather than an unsupervised source of truth for something as consequential as a student's due dates. This verify-before-active workflow is the deliberate safety net around the entire AI pipeline.

4

Calendar Cockpit and Progress Dashboard

Once verified, assignments populate a FullCalendar-based calendar view (the 'cockpit') supporting click-to-create tasks, alongside a dashboard with computed completion-over-time and weekly-progress metrics rendered with ApexCharts. Marking an assignment complete triggers a confetti celebration micro-interaction — a small but deliberate piece of positive reinforcement in an otherwise utilitarian workflow.

5

Institutes and Organization Management

Institutes (schools and universities) are a first-class, pre-populated entity students can search, select, and follow, sourced from a federal-style education dataset. Organizations are a distinct administrative concept layered on top: an organization-admin role can view all courses across the org, manage organization branding, and invite/assign member users by email through a transactional flow — giving educational organizations oversight without conflating them with the institute directory.

6

A Social Feed Built for Academic Engagement

Layered on the academic core is a lightweight social network: posts with rich text and @-mentions, nested comment threads, reactions, reposts, follows for both users and institutes, tagging, notifications, dark mode, and search. Feed reads are optimized with a fan-out-on-write architecture — when a post is created, a Directus hook writes a feed row for the author and every follower at creation time, trading extra write work for fast, pre-computed feed reads as the follower graph grows.

7

Tiered Subscription Billing with Stripe

Monetization runs on a freemium model: tiered plans with monthly document-upload limits and social-feature gating, a single-use free trial with admin-configurable duration, Stripe Checkout for new subscriptions, and the Stripe Billing Portal for self-serve plan changes and cancellation. Stripe webhooks keep Directus's customer and plan records in sync, so the rest of the app enforces entitlements by querying Directus directly rather than calling Stripe on every request — keeping authorization checks fast and decoupled from Stripe's API availability.

8

Three-Service Architecture, Independently Deployed

The system runs as three independently deployed services rather than a conventional two-tier app: a Next.js frontend (Server Actions as its API layer, NextAuth.js for session management with automatic token refresh), a Directus backend (PostgreSQL + Redis, extended with custom REST endpoints and event-driven hooks for Stripe webhooks, notification fan-out, and usage tracking), and the Google Apps Script AI service that owns the entire upload-to-structured-schedule flow independently of both Fly.io-hosted apps. AWS infrastructure (S3 with a CDK-provisioned, IAM-scoped bucket policy) is available as a complementary file store alongside Directus's own file storage.

Technology Stack

The tools and technologies powering this solution

Next.js 14React 18TypeScriptDirectusPostgreSQLRedisNextAuth.jsOpenAI GPT-4oGoogle Apps ScriptGoogle Drive API (OCR)StripeFullCalendarApexChartsTailwind CSSAWS CDKAWS S3Fly.ioDockerGitHub Actions