TutorÍA (Tutor AI)


Inspiration

Students today are overwhelmed. Between juggling multiple subjects, keeping track of deadlines, and trying to actually understand the material, the traditional study experience hasn't kept up with the pace of modern education. We've all been there: sitting in a lecture where the professor flies through slides faster than anyone can write, forcing you to choose between copying notes or actually understanding the lesson.

We were inspired by the idea that AI shouldn't just be a chatbot you talk to it should be a seamless study partner. We wanted to build a tool where a student can simply take out their phone, snap a photo of the whiteboard or a slide, put the phone down, and actually pay attention to the class. TutorÍA was born from that vision: an intelligent, mobile-first assistant that turns your own visual data and schedule into a personalized learning experience right in your pocket.


What it does

TutorÍA is a complete AI-powered study ecosystem that transforms the way students interact with their academic content. Accessible via a beautiful, highly responsive cross-platform mobile app and discoverable through a modern marketing landing page it offers:

  • Snap & Learn Experience Sit in class and take pictures of the slides. The app's computer vision automatically extracts the content, identifies the subject, and generates summaries.
  • Smart Schedule Extraction Upload a photo of your class schedule and the AI automatically identifies your subjects, days, and times to set up your entire profile.
  • Multimodal Semantic Search Every piece of content gets a vector embedding via amazon.titan-embed-image-v1. When you chat, the assistant finds the most relevant content using cosine similarity not just the most recent items.
  • AI-Assisted Flashcards & Quizzes Personalized study cards and multiple-choice questions generated directly from the photos and notes you capture, anchored to specific subjects.
  • Real-Time AI Chat A highly responsive chat assistant with persistent memory, semantic context retrieval, and contextual CTA actions (generate flashcards, start a quiz, open Pomodoro, etc.).
  • Podcast Generation Listen to a full audio podcast per subject. The script is written by NOVA and narrated in a natural Spanish neural voice via AWS Polly.
  • Grade Reports & Planning AI-generated Markdown reports with estimated final grades and improvement recommendations. The system also automatically detects deadlines and rubrics from your uploads.
  • Pomodoro Sessions A built-in study timer tied to your subjects to keep you focused.
  • Calendar Analysis Upload a calendar image and the AI extracts all your courses asynchronously, with polling support.
  • Landing Page A modern, responsive marketing site deployed to S3 + CloudFront at tutoria.now, built with Tailwind CSS.

How we built it

TutorÍA is built as a cohesive full-stack platform, combining a robust Python backend with a highly reactive Flutter mobile frontend.

The Mobile Frontend (iOS & Android)

  • Flutter & Clean Architecture Cross-platform UI built with Flutter, strictly adhering to Clean Architecture principles (separating Presentation, Domain, and Data layers) for a scalable and maintainable codebase under hackathon deadlines.
  • State Management & Routing Powered by flutter_riverpod for reactive state management and auto_route for declarative deep-linking.
  • Interactive UI lottie for smooth animations, flutter_markdown for rich text rendering, image_picker for seamless camera access, and sqflite for local caching.

The Backend & AI Core Nova Foundation Models

  • FastAPI & PostgreSQL All REST endpoints and WebSocket chat on FastAPI (Python 3.11), with SQLAlchemy and PostgreSQL (RDS) for persistent storage.
  • AWS Bedrock amazon.nova-lite-v1:0 All generative AI tasks: multimodal vision (schedule extraction, content OCR, calendar analysis), flashcard/quiz generation, grade reports, podcast scripts, and chat.
  • AWS Bedrock amazon.titan-embed-image-v1 Every uploaded content item gets a 1024-dimensional vector embedding stored in PostgreSQL. Chat queries are embedded at runtime and matched via cosine similarity for semantic retrieval.
  • AWS Polly Podcast TTS with the Lupe neural voice (es-US).
  • Asynchronous Processing Long-running AI workloads handled via FastAPI BackgroundTasks + frontend polling to keep the mobile UX snappy.
  • Auto-migration on startup ALTER TABLE contenidos ADD COLUMN IF NOT EXISTS embedding JSON runs idempotently every time the ECS task starts.

Cloud Infrastructure

  • Infrastructure as Code The entire AWS stack defined in a single main.tf using Terraform.
  • ECS Fargate Containerized deployment, zero server management.
  • RDS PostgreSQL 15 Managed database, private subnet.
  • S3 Storage for uploaded content, generated podcasts, subject images, and the static frontend.
  • CloudFront Two distributions: cdn.tutoria.now for media assets, and a separate distribution for the frontend landing page at tutoria.now.
  • ALB Load balancer with WebSocket support on HTTP/1.1.
  • ECR Docker image registry.
  • CloudWatch Centralized logging with 7-day retention.

Web Landing Page

  • Single-page site at tutoria.now (CloudFront → S3), built with Tailwind CSS no build step required.
  • Dark theme with purple/pink gradient, hero section, features grid, how-it-works, and CTA.
  • Deployed via deploy_frontend.sh syncs frontend/ to S3 and invalidates the CloudFront cache automatically.

Challenges we ran into

  • Complex State Orchestration Managing async states in Flutter with Riverpod required careful coordination to keep the UI reactive during background image uploads and real-time chat without blocking the main thread.
  • AI Output Formatting NOVA sometimes wraps JSON in markdown code blocks. We built a consistent cleaning pipeline (strip`json, regex extraction) across all backend AI methods.
  • Eliminating Hallucinations Early versions of the chat would invent subject content when no notes had been uploaded. We fixed this with two layers: explicit prompt instructions ("only answer based on the student's actual uploaded content") and semantic search so the model always has real context to work from.
  • Multimodal Embeddings in PostgreSQL amazon.titan-embed-image-v1 returns a 1024-float array. We store it as JSON in PostgreSQL and compute cosine similarity in Python at query time no vector extension required.
  • Subject Image Generation Without External APIs We used Pillow to generate colored PNG cards with the subject name, deterministically colored by hashing the name.
  • Polly Character Limits AWS Polly has a 3,000-character limit per synthesis request. We truncate podcast scripts gracefully while keeping them coherent.
  • WebSocket + SQLAlchemy Sessions FastAPI's Depends(get_db) doesn't work inside WebSocket handlers. We manually manage DB sessions with next(get_db()) and explicit close() calls.
  • ALB + WebSocket Ensuring the Application Load Balancer correctly proxied WebSocket upgrade requests required verifying HTTP/1.1 compatibility.

Accomplishments that we're proud of

  • A Polished, Mobile-First UX A complete, visually stunning cross-platform app with an end-to-end AI pipeline built under hackathon time constraints.
  • From Photo to Podcast Snap a photo of handwritten notes and get flashcards, a quiz, an audio podcast, and a grade report all integrated into a single mobile interface.
  • Multimodal Semantic Search Powered by amazon.titan-embed-image-v1, the chat retrieves the most relevant content by meaning, not just recency.
  • Zero Hallucination Policy The AI explicitly tells students when it doesn't have enough information instead of making things up.
  • Infrastructure as Code The entire AWS stack (backend + CDN + frontend) reproducible with a single terraform apply.
  • A Live Public Landing Page at tutoria.now a polished marketing site that showcases the product.
  • Subject images generated on-demand and cached in S3 no external image service, no cost per image after the first generation.

What we learned

  • Clean Architecture pays off early Even in a hackathon, separating layers in Flutter allowed us to mock data quickly, build the UI independently, and later swap to the real backend API without rewriting Presentation code.
  • Nova foundation models cover the full stack amazon.nova-lite-v1:0 handles text, vision, and structured JSON generation. amazon.titan-embed-image-v1 handles semantic understanding. Together they power every AI feature in the product.
  • Embeddings change the quality of AI responses Before semantic search, the chat used the most recent content regardless of relevance. After, it uses the most semantically similar ones. The difference in response quality is immediately noticeable.
  • Persistent context changes everything A stateless chat feels hollow. Once we integrated DB-backed session history into the real-time Flutter UI, the assistant felt genuinely useful and native to the user's study flow.
  • Async background tasks are the right pattern for AI workloads Long-running Bedrock calls should never block HTTP responses. BackgroundTasks + polling keeps the UX snappy.
  • Infrastructure decisions compound Choosing ECS Fargate and RDS early meant we never had to worry about scaling or server maintenance during development.

What's next for TutorÍA

  • Voice Input Let students ask questions by voice in the app, transcribed with Amazon Transcribe before being sent to the AI.
  • Spaced Repetition System Track flashcard performance and schedule reviews using an SM-2 algorithm to help students study smarter.
  • Collaborative Study Rooms Multi-user real-time sessions where students can join a room and study together with a shared AI tutor.
  • LMS Integrations Connect the app directly with Google Classroom or Canvas to automatically import assignments and deadlines.
  • Multi-language Support Extend the app's localization, Polly TTS, and NOVA prompts to support English, Portuguese, and French.

Built With

Share this project:

Updates