Inspiration
University schedules rarely stay fixed. Assessments move, new lectures are released, availability changes, and students gradually master different topics. Traditional planners can store a schedule, but students still have to manually work out how every change affects the rest of their week.
I built StudyPilot to explore a more agentic approach: an AI semester companion that can understand what changed, update the student's academic state, and adapt the study plan automatically.
What it does
StudyPilot maintains a persistent picture of a student's semester, including upcoming assessments, weekly availability, temporary schedule changes, course topics, mastery progress, and the current study plan.
Students can describe changes naturally, such as an assessment being moved, becoming unavailable on a certain day, or mastering a topic. StudyPilot interprets these changes, updates the relevant information, and generates a new constraint-aware weekly study plan.
Rather than acting as a static chatbot or to-do list, StudyPilot follows an agentic cycle of observing changes, reasoning about their impact, taking actions through tools, persisting the updated state, and replanning.
How I built it
StudyPilot is built in Python with a Streamlit interface and is deployed on Google Cloud Run.
Google ADK provides the agent orchestration and tool-calling layer. Gemini on Vertex AI handles natural-language understanding and planning. The agent can call dedicated tools to read and update student information such as assessments, availability, lecture mastery and study plans.
Google Cloud Firestore acts as the persistent source of truth, allowing StudyPilot to reason from the student's latest state instead of starting from scratch with every interaction.
The resulting workflow is:
Student update → Google ADK agent → Gemini reasoning → tool actions → Firestore state update → adaptive weekly plan → updated StudyPilot interface.
Challenges I ran into
One major challenge was ensuring that AI-generated plans respected hard scheduling constraints. For example, StudyPilot must never schedule study sessions during periods marked as busy or on designated rest days.
Another challenge was handling incomplete information safely. If an assessment date is known but its exact time is not provided, StudyPilot should not invent a time. I refined the agent behaviour and structured schedule representation to preserve these constraints while still producing a useful plan.
Integrating persistent Firestore state, agent tool calls, structured schedules and the Streamlit interface into one reliable workflow was also an important engineering challenge.
Accomplishments that I'm proud of
I am particularly proud that StudyPilot goes beyond generating planning advice. A single natural-language update can trigger multiple actions, modify persistent state and reconstruct the student's weekly plan around the new situation.
The application is also containerised, publicly deployed on Google Cloud Run, backed by Firestore, and built around Google ADK and Gemini on Vertex AI.
What I learned
Building StudyPilot taught me that an effective AI agent needs more than a strong language model. Reliable agentic applications also require well-defined tools, persistent state, explicit constraints and a clear separation between reasoning and application data.
I also gained practical experience building and deploying an end-to-end agentic application using Google's AI and Cloud ecosystem.
What's next for StudyPilot
Future versions could integrate directly with university learning-management systems and calendars, support notifications when plans need to change, track study outcomes over time, and use those outcomes to further personalise future planning.
Built With
- cloud-run
- docker
- firestore
- gemini
- google-adk
- google-cloud
- python
- streamlit
- vertex-ai

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