Inspiration
When I prepare for exams or projects, I often collect resources from everywhere. Each one has a different format, a different way of explaining, and a different level of detail. After a while, it becomes less about learning and more about managing information.
I wanted a tool that helped me focus on understanding, not on searching or copying content across apps. That idea became Lumos.
What it does
Lumos begins with a study session. You can add all the learning material you have — PDFs, your own written text, audio notes, or even a YouTube link — in any order and in any amount. Lumos then extracts the text from everything you uploaded and builds a vector index on top of it. This allows you to work with your content in four useful ways:
- Chat with your material – Ask questions and receive clear, combined answers based on all your sources, not just one.
- Generate notes – Create neatly formatted notes that bring all the key ideas together in one place.
- View a mindmap – See a visual map of the concepts, so you can understand how everything connects.
- Take a quiz – Try a customizable quiz built from your content. At the end, you also get a summary of your accuracy, your strong areas, and the topics you may want to review again.
Lumos turns scattered study resources into a single, organized learning space, so you can focus on understanding instead of searching.
How I built it
The backend takes each uploaded resource and extracts useful text from it. Then it builds a vector index, which allows Lumos to search through all the material and answer questions based on everything I uploaded. From the same content, Lumos can also generate:
- Notes in Markdown
- Mindmaps from structured concepts
- Quizzes with scoring, feedback, and topic-level insights
The core flow of the system is:
- Start a study session
- Upload material (PDF, YouTube link, audio, or text)
- Build the vector index
- Ask questions, or generate notes, mindmaps, or quizzes
Backend
I built the backend using FastAPI because it keeps the API clean, fast, and easy to extend. I deployed it on Render, packaged with Docker to ensure a consistent environment and smooth deployment.
Frontend
For the frontend, I used Next.js, a React framework that gives structure to the application and supports a fast developer experience. The interface uses:
- ShadCN UI for accessible, pre-built, and easily customizable UI components
- Tailwind CSS for styling, using a utility-first approach and a custom color theme configured in
src/app/globals.css - TypeScript for type-safe and maintainable code across the project
I designed the UI in Firebase Studio, which made it easier to iterate on the layout and connect it with the backend. Once the interface was ready, I integrated it with the FastAPI endpoints so that each user action in the app triggers the correct backend process.
Challenges I ran into
This project pushed me into areas I had never worked with before. One of the first challenges was making sure that each study session stayed separate, so text from different users or different uploads never mixed. I also had to ensure that the text extraction worked reliably across formats and that the vector index built correctly and quickly, even when several files were uploaded.
Another challenge came up during deployment. When I moved the FastAPI backend to the cloud, I learned that YouTube does not allow transcriptions from cloud-based platforms in the way I needed. Because of that, the YouTube upload feature currently works only when the backend runs on a local machine. It’s something I want to refine in the future.
And of course, all of this happened in a 48-hour hackathon. The time limit was intense, but also exciting. I enjoyed every part of building Lumos, even the confusing moments. It taught me a lot, and I would do it again.
Accomplishments that I am proud of
The accomplishment I am most proud of is building a fully functional prototype in 48 hours — starting from a blank page and ending with a deployed, usable product. I designed the idea, built the backend, created the UI, integrated everything, and made it available online in one continuous flow. Seeing an actual deployed link at the end of the hackathon felt unreal in the best way.
I also had to solve problems I had never faced before. The mindmap rendering took a lot of work to get right, and I used Docker for the first time in my life. Learning it under time pressure and getting it working with deployment was a milestone for me. It reminded me that I can learn fast when I need to, and that I can trust myself to figure things out.
Building Lumos in such a short time is something I’m genuinely proud of. It showed me what I can do when I commit to an idea and stay with it, even when things break or behave in strange ways.
What I learned
I learned how important it is to bring different types of study material into one organized space. On the technical side, I gained hands-on experience with FastAPI, Next.js, ShadCN UI, Tailwind CSS, Docker, and deploying on Render. I learned how to manage separate user sessions, extract text from multiple formats, and build a vector index that powers RAG search, notes, quizzes, and mindmaps.
More than anything, I learned that I can move from idea to a working product faster than I thought, and that debugging and problem-solving are a natural part of creating something new.
What's next for Lumos
There is still a lot I want to explore. The first goal is to enable YouTube transcription on the deployed version so students can rely on it anywhere, not just locally. I also want to add OCR for images, so handwritten notes, slides, and screenshots can become part of the study material.
Another idea I’m excited about is a peer-supported quiz mode with leaderboards. Students could practice together, compare progress, and learn from each other in a healthier, collaborative way.
Lumos started as a tool for organizing learning, and I hope to keep improving it so it can support more students in more meaningful ways.
Built With
- chromadb
- fastapi
- next.js
- python
- render
- tailwind


Log in or sign up for Devpost to join the conversation.