The Thesis Project
RataTutor started as our university thesis project: build an AI-powered study assistant that transforms student notes into personalized learning materials.
Simple concept. Complex execution.
Leading a 5-Person Team
This was my first time leading a development team, and it taught me that code is the easy part.
Challenges:
- Coordinating frontend/backend development across 5 people
- Establishing coding standards everyone agrees on
- Managing merge conflicts and code reviews
- Keeping everyone motivated through late nights
What Worked:
- Clear responsibilities: Each person owned a feature end-to-end
- Daily standups: 15-minute sync every morning (no exceptions)
- Code reviews: No PR merged without approval from another team member
- Documentation: Write it as you code, not after
The AI Context Problem
The most interesting technical challenge wasn't the AI integration - it was managing conversation context.
The Problem:
LLMs have token limits. As conversations grow, you hit the limit and the AI "forgets" early context. But you can't just truncate old messages because then the AI loses topic continuity.
Our Solution: Hybrid Context Management
- Rolling summaries: Compress old messages into summaries
- Recent messages: Keep last N messages in full
- Smart truncation: Remove middle messages first, preserve start and end
This maintains continuity while respecting token limits. Turns out context limits matter just like they do for humans cramming at 2 AM.
Document Processing
Supporting PDF, DOCX, TXT, and PPTX required different parsing libraries with different quirks:
- PyPDF2: Great for text PDFs, struggles with scanned documents
- python-docx: Perfect for .docx, but .doc files need conversion
- python-pptx: Extracts text from slides, loses formatting
- Plain text: Easiest to handle, surprisingly uncommon
We added validation: check file size, verify format, scan for malicious content before processing.
The 30+ API Endpoints
Django REST Framework made building the API straightforward, but designing the endpoints took thought:
Authentication:
/api/auth/register- User registration/api/auth/login- JWT token generation/api/auth/refresh- Token refresh
Documents:
/api/documents/upload- File upload with progress/api/documents/list- User's documents/api/documents/{id}/process- Trigger AI processing
AI Features:
/api/flashcards/generate- Create Q&A pairs/api/quizzes/generate- Generate quizzes/api/summaries/create- Summarize documents/api/chat/message- Conversation interface
And 20+ more for managing user preferences, tracking progress, analytics, etc.
Deployment Reality
Docker made local development consistent across 5 machines, but production deployment on Render's free tier taught me resource constraints:
- Limited RAM: Careful about concurrent file processing
- Cold starts: First request after inactivity takes time
- Rate limiting: OpenRouter API has limits, need caching
We implemented:
- Request queuing: Process files sequentially to avoid memory spikes
- Response caching: Common summaries/flashcards cached
- Graceful degradation: Show cached content when AI is unavailable
What I Learned
Technical:
- AI integration is 30% API calls, 70% handling context, rate limits, and UX
- Django REST Framework is powerful for rapid API development
- Docker saves countless hours of "works on my machine" debugging
Leadership:
- Clear communication prevents more bugs than code reviews catch
- Documentation is a force multiplier for teams
- Sometimes the best code review is "have you tested this?"
Product:
- Users don't care about your clever context management - they just want summaries that work
- Error messages matter - "AI failed" is useless, "Uploaded file is too large (max 10MB)" helps
The Result
RataTutor went from thesis concept to deployed application in one semester. The platform is live at ratatutor.onrender.com.
More importantly, I learned that building software with a team is fundamentally different from solo development. Code standards, communication, and clear ownership become essential.
Try it out and let me know what you think!