Inspiration
I'm a biotech researcher. I've spent a lot of time staring at a blank page, a pile of papers I don't know how to prioritise, and a vague sense that I should know what to do next but somehow I don't.
Research is genuinely hard to navigate. Not because the science is hard (it is), but because nobody teaches you the process. When do you stop reading and start building? How do you know when your understanding of a topic is deep enough? Who do you ask when you're stuck at 11pm?
Most students hit the same wall. They have a real idea, something worth pursuing, and no structured path forward. They either get lost in papers, or they skip the foundations entirely and build on shaky ground.
I wanted to build the mentor I wished I had: one that knows your specific project, tracks where you are, gives you one concrete next step at a time, and checks in on your progress honestly.
That's Theioptera. And the guide's name is Lio.
What It Does
Theioptera is an AI-powered research guide that walks students and early researchers through a structured journey — from "I have an idea" to "I know what I'm doing and why."
When you start a project, Lio:
- Orients you — asks grounding questions, builds your research path, estimates how long your orientation phase should take based on your topic's complexity
- Curates materials — surfaces real papers, tools, and case studies matched to your question
- Gives you specific next steps — not "read more" but "read the abstract of X paper to understand Y concept", with a direct link
- Builds a personalised roadmap — milestones, week-by-week breakdown, watch-outs
- Evaluates your progress — honest check-ins with structured feedback, not just praise
- Tracks your tasks — Lio adds tasks after conversations; you can add your own
The whole experience is built around a simple idea: research has phases, and knowing which phase you're in changes everything about what you should be doing.
How I Built It
Frontend: React + Vite, deployed on Vercel. CSS custom properties for theming throughout — no hardcoded colours anywhere, so the dark mode actually works.
Backend: FastAPI (Python) on Vercel, with MongoDB + Motor for async data access.
AI: Anthropic's Claude for all Lio interactions — chat, evaluation, roadmap generation, next-step suggestions, and project timeline estimation. OpenAI Whisper for voice input. Google OAuth for authentication.
Key architectural decisions:
- SSE streaming for Lio's chat responses so the answer feels live, not batched
- Atomic MongoDB counters for rate limiting — prevents race conditions where two concurrent requests could both slip past a per-user daily budget cap
- LLM responses are cached in the project document and only regenerated after new conversations, so the app isn't burning API budget on every page load
- All 10 paid endpoints share a single global daily budget enforcer — closing the bypass where unprotected endpoints could be hammered to circumvent limits
Challenges
Making Lio feel like a guide, not a chatbot. Generic AI assistants give generic answers. Getting Lio to stay grounded in your specific project — your topic, your materials, your phase — required careful prompt design and threading context through every interaction.
The rate limit race condition. My original implementation checked the counter, then
incremented it in two separate steps. Under concurrent requests, both checks could pass before
either increment ran. Fixed with an atomic find_one_and_update with $inc — one round-trip,
no window.
Streaming + evaluation in one SSE connection. When Lio finishes a milestone check-in, it
needs to fire a milestone_result event while still streaming the prose response. Getting
the event ordering right — prose tokens, then structured result, then task updates — took
significant debugging.
Knowing when the next step is stale. The personalised next step shouldn't regenerate on
every dashboard load (wasteful and slow), but it should refresh after a new conversation.
The solution: cache it on the project document with a generated_at timestamp, compare
against the last user message timestamp, and only regenerate when the conversation has moved on.
What I Learned
Building this taught me that the hardest part of an AI product isn't the AI, it's the structure around it. The phases, the check-ins, the caching, the rate limits, the UX that makes a user feel guided rather than just prompted. Lio's responses are only as good as the context and constraints you build around them.
I also learned that research tools fail students not because they lack information, but because they lack pacing. The most valuable thing Theioptera does isn't surface a paper but rather it's telling you: not yet, finish this phase first.
What's next for Theioptera
To develop and push it out further towards students who could hugely benefit from it to get into the STEM space by building their own guided project.
Built With
- claude
- css
- fastapi
- googleoauth
- javascript
- mongodb
- openai
- python
- react
- tailwind
- vercel
- vite
- whisper
Log in or sign up for Devpost to join the conversation.