Inspiration Every developer I know has the same problem — six tabs open just to check their own progress. GitHub for commits, LeetCode for streaks, Codeforces for rating, Gmail buried under noise, calendar never updated. There's no single place that shows the full picture, and nobody telling you what actually matters today. I wanted to build the coach I never had — one that already knows your data before you even ask.
What it does DevMirror is a unified developer productivity dashboard powered by a multi-step Gemini 3 agent. It connects GitHub, GitLab, LeetCode, Codeforces, Gmail, Google Calendar, and YouTube into one place. The AI coach fetches your live data across all platforms before every answer — ask it what to focus on today, it reasons across your actual activity and tells you. Tell it to plan your week, it creates Google Calendar events automatically. Gmail is filtered to surface only internships, hackathons, and scholarships. YouTube watch history is broken into learning vs. entertainment. Everything you need to grow as a developer, in one dashboard.
How we built it The backend is a FastAPI server deployed on Railway, with a multi-step agentic loop (agent_tools.py) that drives the AI Coach. Rather than a single prompt, the agent runs up to 6 turns — Gemini decides which tools to call (GitHub, GitLab, LeetCode, Codeforces, Gmail, Calendar), fetches live data per tool, feeds results back, and iterates until it has enough context to answer. Gemini 2.5 Flash is called via direct REST API to avoid any SDK-level key caching issues. User profiles and Fernet-encrypted OAuth tokens are stored in MongoDB Atlas. The frontend is React + TypeScript + Tailwind, deployed on Vercel, with Google OAuth2 handling login and all Google API scopes in a single flow.
Challenges we ran into The biggest challenge was the multi-step agent reliability. Gemini would occasionally hallucinate tool call arguments or loop indefinitely, so we had to add strict turn limits, argument validation, and graceful fallbacks at every step. Getting Google OAuth to grant Gmail, Calendar, and YouTube scopes simultaneously — while keeping tokens encrypted at rest and refreshing them silently — was significantly more complex than expected. Gemini API keys getting flagged as leaked by Google's automated scanners mid-development cost us real debugging time. CORS between Railway and Vercel had subtle issues with credentials that took several iterations to resolve cleanly.
Accomplishments that we're proud of The calendar scheduling from chat is the feature we're most proud of — you type "plan my DSA prep for this week" and actual Google Calendar events appear in your calendar within seconds. The Gemini agent genuinely reasons across platforms: it will notice your LeetCode streak dropped, cross-reference that your GitHub commits were high that week, and give you a nuanced nudge rather than a generic tip. We're also proud of the security model — every OAuth token is Fernet-encrypted before hitting MongoDB, decrypted only in-memory at call time, with full multi-tenant isolation.
What we learned Building a real multi-step agent is fundamentally different from prompt engineering. You have to think about tool contract design, partial failure handling, context window management across turns, and what happens when the model calls a tool with unexpected arguments. We also learned that direct REST API calls to Gemini are more reliable in production than SDK wrappers for our use case — the SDK had caching behaviour that caused stale key errors. MongoDB Atlas proved a much better fit than SQLite for multi-tenant encrypted token storage at scale.
What's next for DevMirror Mobile-responsive layout so it works on any device. A public shareable profile link so developers can showcase their activity. A weekly email digest generated by Gemini. An institution dashboard for colleges and bootcamps to track cohort progress. GitHub Actions and CI pipeline stats pulled into the dashboard. And Codeforces contest scheduling — the agent books upcoming contests into your calendar automatically.
Built With
- codeforces
- fastapi
- fernet-encryption
- gemini-2.5-flash
- github-rest-api
- gitlab-rest-api
- gmail-api
- google-calendar-api
- google-oauth2
- leetcode-graphql-api
- mongodb-atlas
- python-3.11
- railway
- react-18
- tailwind-css
- typescript
- vercel
- vite
- youtube-data-api-v3
Log in or sign up for Devpost to join the conversation.