Skip to content

You07abd/studentify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Studentify - AI Study Planner

An AI-powered academic assistant that reads Canvas data, syllabus content, and student schedules to create personalized daily study plans. Every morning, it sends students a clear study plan through Telegram, and during breaks between classes, it recommends the best lesson to review and gives a short quiz.

Problem Statement

Students have:

  • Deadlines scattered across Canvas
  • Syllabus info hidden in PDFs
  • Small breaks between classes that get wasted
  • No clear idea what to study first
  • No personalized daily plan

Studentify solves this by automatically creating smart study recommendations based on:

  • Canvas deadlines & grades
  • Syllabus exam/quiz dates
  • Class schedule breaks
  • Weak subject detection
  • Time-of-day availability

Quick Start

Prerequisites

  • Python 3.9+
  • Node.js 16+
  • Canvas API token (from your school)
  • Telegram Bot token
  • Supabase account (free tier works)

Clone & Setup

git clone <your-repo>
cd studentify
cp .env.example .env
# Fill in your credentials in .env

Run All Services

# Terminal 1: Backend
cd backend
pip install -r requirements.txt
python main.py

# Terminal 2: Frontend (in new terminal)
cd frontend
npm install
npm start

# Terminal 3: Bot (in new terminal)
cd bot
python telegram_bot.py

Backend runs on http://localhost:8000
Frontend runs on http://localhost:3000


Project Structure

studentify/
├── backend/
│   ├── main.py                 # FastAPI entry point
│   ├── canvas_integration.py   # Canvas API wrapper
│   ├── database.py             # Supabase client
│   ├── routes.py               # API router composition
│   ├── api_routes/             # Split endpoint modules by domain
│   ├── models.py               # Pydantic schemas
│   ├── syllabus_parser.py      # Syllabus PDF extraction + events
│   ├── priority_engine.py      # Priority scoring + daily plan builder
│   ├── break_detector.py       # Schedule gap detection
│   ├── time_fitter.py          # Fits study items into break lengths
│   ├── quiz_generator.py       # Quiz creation logic
│   ├── utils.py                # Priority scoring + helpers
│   ├── requirements.txt
│   └── .env (ignored)
│
├── frontend/
│   ├── src/
│   │   ├── pages/
│   │   │   ├── Landing.tsx
│   │   │   ├── Onboarding.tsx
│   │   │   ├── onboarding/     # Split onboarding step components
│   │   │   └── Dashboard.tsx
│   │   ├── components/
│   │   ├── App.tsx
│   │   └── index.css
│   ├── package.json
│   └── tailwind.config.js
│
├── bot/
│   ├── telegram_bot.py         # Bot commands
│   ├── message_formatter.py    # Message templates
│   ├── requirements.txt
│   └── .env (ignored)
│
├── .env.example                # Copy to .env
├── .gitignore
└── README.md (this file)

Environment Variables

Copy .env.example to .env and fill in:

# Canvas
CANVAS_API_KEY=your_canvas_token_here
CANVAS_API_URL=https://your-school.instructure.com

# Supabase
SUPABASE_URL=https://xxxxx.supabase.co
SUPABASE_KEY=your_anon_key_here

# Telegram
TELEGRAM_BOT_TOKEN=123456:ABCdef-1234567890abcdefgh

# OpenAI (for quiz generation)
OPENAI_API_KEY=sk-...

# Frontend
REACT_APP_API_URL=http://localhost:8000

Database Schema (Supabase)

users

id, name, email, canvas_token, telegram_chat_id, created_at

courses

id, user_id, canvas_course_id, course_name, created_at

assignments

id, user_id, course_id, title, due_date, type, points, status, created_at

syllabus_events

id, user_id, course_id, title, event_type (exam/quiz/deadline), event_date, topic, created_at

schedules

id, user_id, day_of_week, start_time, end_time, class_name, created_at

study_recommendations

id, user_id, date, topic, reason, time_block, created_at

API Endpoints

Method Endpoint Purpose
POST /connect/canvas Validate & store Canvas token
GET /courses Get user's courses
GET /today-plan Get today's study plan
GET /break-recommendation Get next break suggestion
POST /upload/syllabus Upload & parse syllabus PDF
POST /schedule Save class schedule
POST /telegram/send-morning-plan Trigger morning message

Telegram Bot Commands

Command Purpose
/start Welcome & onboarding link
/today Show today's plan
/nextquiz When's the next quiz?
/weakest What are my weak areas?
/quizme Get a quick quiz

Example Output

Morning Message

Good morning! Here's your plan for today:

• 10:30–11:00 AM: Review STAT 200 hypothesis testing
• 1:20–1:35 PM: Quick CMPSC 131 practice
• 3:15–3:35 PM: Review Cyber notes for upcoming quiz
• 8:00–8:30 PM: Finish reading for AI-100

Top priority today: STAT 200 midterm is in 2 days.

Break Message

You have 25 minutes before your next class.
Best lesson to review: Hypothesis testing p-values
Reason: Upcoming exam in 2 days + low recent quiz score

Quick Quiz
1. What does a small p-value suggest?
   A) strong evidence against null
   B) null is proven true
   C) sample size is small

Reply with A, B, or C.

Tech Stack

Layer Tech Why
Backend FastAPI Fast, modern, great for AI apps
Database Supabase + Postgres Real-time, free tier
Frontend React + Tailwind Clean, fast, responsive
Bot python-telegram-bot Easy to use
PDF Parsing PyPDF2 Simple, reliable
AI OpenAI API Quiz generation, summarization
Canvas canvasapi Official wrapper

Risks & Backups

Risk Backup
Canvas API issues Use mocked Canvas JSON data
Syllabus parsing messy Support structured text input
Telegram timing hard Manual trigger buttons
Weak-subject detection complex Grade-by-course fallback

See Also

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors