Project Info
Inspiration
We noticed that very few classmates were rewatching lecture recordings, even when they struggled with the material. The barrier wasn't a lack of motivation—it was time. Sitting through hours of lecture footage to review key concepts felt overwhelming. We asked ourselves: what if we could transform dense lecture transcripts into engaging, digestible study videos that students would actually want to watch? That's how Studium was born.
What it does
Studium converts lecture transcript PDFs into personalized study videos and emails them directly to students. Users simply upload their lecture transcript PDF and enter their email address through our web interface. Within minutes, they receive a custom-generated video that explains the material in a clear, concise way—turning hours of lecture content into focused study resources.
How we built it
We built Studium with a full-stack approach that seamlessly connects multiple technologies: Frontend: Framer for a modern, intuitive UI where users upload transcripts and enter their email Backend: Flask API to handle file uploads, validate data, and communicate with our workflow engine Workflow Automation: n8n to orchestrate the entire pipeline—from receiving the PDF to coordinating AI services AI Processing: OpenAI to analyze transcripts and generate engaging video scripts Video Generation: OpenNote API to transform scripts into professional study videos Delivery: Automated email system to send completed videos directly to students
Challenges we ran into
Our biggest challenge was fully automating the AI pipeline with n8n. As first-time users of the platform, we had to learn how to properly configure webhooks, manage data flow between different APIs, and handle error cases—all while racing against the hackathon clock. Debugging the communication between Flask, n8n, OpenAI, and OpenNote required patience and creative problem-solving, but we eventually got all the pieces working together seamlessly.
Accomplishments we're proud of
We're incredibly proud of building a complete, functional AI pipeline from scratch in just one weekend. Watching a PDF transcript transform into an actual study video—automatically—felt like magic. We successfully integrated four different technologies (Framer, Flask, n8n, and multiple AI APIs) into a cohesive product that solves a real problem students face every day.
What we learned
This project taught us invaluable lessons about building AI-powered applications and connecting disparate systems. We learned how to design and implement complex workflows with n8n, how to properly structure API communications between services, and how to think about user experience when dealing with asynchronous processes. Most importantly, we learned that ambitious ideas are achievable when you break them down into manageable components and tackle them systematically.
What's next
Our vision is to integrate Studium directly into the Yuja platform (our university's lecture recording system). This would allow students to generate study materials with a single click—right from the lecture page they're already viewing. We also plan to add features like customizable video length, topic-specific focus areas, and support for multiple study formats (flashcards, quiz questions, summary notes) to give students even more ways to learn effectively.
Studium 📚
Transform lecture transcripts into engaging study videos, delivered straight to your inbox.
🎯 Inspiration
We noticed that very few classmates were rewatching lecture recordings, even when they struggled with the material. The barrier wasn't a lack of motivation—it was time. Sitting through hours of lecture footage to review key concepts felt overwhelming. We created Studium to transform dense lecture transcripts into engaging, digestible study videos that students would actually want to watch.
✨ What it does
Studium converts lecture transcript PDFs into personalized study videos and emails them directly to students. Users simply:
- Upload their lecture transcript PDF
- Enter their email address
- Receive a custom-generated study video within minutes
The AI analyzes the transcript, generates an engaging script, creates a video explanation, and delivers it via email—turning hours of lecture content into focused study resources.
🏗️ Architecture
Frontend (Framer) → Flask API → n8n Workflow → OpenAI → OpenNote API → Email
Tech Stack
- Frontend: Framer (React-based UI)
- Backend: Flask (Python)
- Workflow: n8n (automation platform)
- AI Processing: OpenAI API (script generation)
- Video Generation: OpenNote API
- Deployment: ngrok (development), ready for production deployment
🚀 Getting Started
Prerequisites
- Python 3.8+
- ngrok (for local development)
- n8n account
- OpenAI API key
- OpenNote API key
Installation
- Clone the repository
git clone https://github.com/NickB-30/CruzHacks2026.git
cd CruzHacks2026
- Install Python dependencies
pip install -r requirements.txt
- Set up environment variables
export N8N_TRANSCRIPT_WEBHOOK="your-n8n-webhook-url"
export TEST_MODE="false" # Set to "true" for testing without n8n
- Run the Flask backend
python app.py
- Expose Flask with ngrok (in a new terminal)
ngrok http 5000
- Update Framer frontend
- Copy the ngrok URL
- Update the fetch URL in your Framer component to use the ngrok URL
n8n Workflow Setup
- Create a new workflow in n8n
- Add a Webhook node (POST method)
- Configure the following nodes:
- PDF text extraction
- OpenAI node (script generation)
- OpenNote API call (video generation)
- Email node (delivery)
- Activate the workflow
- Copy the production webhook URL to your Flask environment variables
📁 Project Structure
CruzHacks2026/
├── app.py # Flask backend API
├── requirements.txt # Python dependencies
├── uploads/ # Temporary storage for uploaded PDFs
├── README.md # This file
└── framer/ # Framer frontend code (separate)
🔑 API Endpoints
POST /upload/transcript
Upload a transcript PDF and trigger video generation.
Request:
file: PDF file (multipart/form-data)email: User's email address (string)
Response:
{
"message": "Transcript processed successfully",
"filename": "lecture.pdf",
"status": "success",
"n8n_response": "..."
}
GET /health
Health check endpoint.
Response:
{
"status": "healthy"
}
🛠️ Configuration
Environment Variables
N8N_TRANSCRIPT_WEBHOOK: Your n8n webhook URLTEST_MODE: Set to"true"to skip n8n and test file uploads only
File Constraints
- Allowed formats: PDF only
- Max file size: 50MB
- Email validation: Standard email format required
🧪 Testing
Test Mode
Enable test mode to verify file uploads without calling n8n:
export TEST_MODE="true"
python app.py
Manual API Testing
curl -X POST -F "file=@transcript.pdf" -F "email=test@example.com" http://localhost:5000/upload/transcript
🎨 Frontend
The frontend is built with Framer and features:
- Modern, gradient-based UI
- Drag-and-drop file upload
- Real-time status updates
- Responsive design
- Email validation
🚧 Challenges
Our biggest challenge was fully automating the AI pipeline with n8n. As first-time users, we had to learn webhook configuration, data flow management, and error handling—all within the hackathon timeframe. Successfully connecting Flask, n8n, OpenAI, and OpenNote APIs required creative problem-solving and persistent debugging.
🏆 Accomplishments
- Built a complete AI pipeline from scratch in one weekend
- Successfully integrated 4+ different technologies into a cohesive product
- Created an elegant, user-friendly interface
- Solved a real problem that students face daily
📚 What We Learned
- Designing and implementing complex workflows with n8n
- Structuring API communications between multiple services
- Handling asynchronous processes in user-facing applications
- The importance of breaking ambitious ideas into manageable components
🔮 What's Next
- Yuja Integration: One-click study videos directly from lecture pages
- Multiple Formats: Add flashcards, quizzes, and summary notes
- Customization: Allow users to choose video length and focus topics
- Scale: Expand to universities nationwide
- Enhanced AI: Improve script quality and add citations/sources
👥 Team
Built with ❤️ at CruzHacks 2026
📄 License
This project was created for CruzHacks 2026.
🙏 Acknowledgments
- CruzHacks 2026 organizers
- OpenAI for providing powerful language models
- OpenNote for video generation capabilities
- n8n community for workflow automation tools
Note: This is a hackathon prototype. API keys and production credentials should be properly secured before deployment.
Analysis
View
Metric
- 7
- 4
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- FlaskIn code
- PythonIn code
- TypeScriptIn code
3 of 3 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
50 KB
Source files
6
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
NicolasBeringer/CruzHacks2026
9 files · 172 KB · @ 619cc26
Structure
Interface
4 files · 44%Screens, components and styles rendered to the user.
Application logic
1 file · 11%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript80%
- Markdown12%
- Python8%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
requirements.txt
pypi · 4- flask
- flask-cors
- requests
- werkzeug
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.