Inspiration
Jobs, internships, scholarships, grants, funding and competitions are hidden in buildings and cities that doesn't know those in need. They are scattered across dozens of websites, social pages, and university portals. Finding that an opportunity exists is only the first hurdle, people then have to figure out whether they actually qualify, why they'd be a good fit, and how to prepare a strong, tailored application. For students without access to career centers or paid consultants, that fragmented process costs hours and causes real opportunities to be missed entirely. We built CityOS to close that gap: not just a search tool, but a system that takes someone from "what's out there?" to "here's my finished application."
What it does
CityOS is an AI-powered opportunity intelligence platform. A user describes their background, skills, and goals once; from there, an AI agent uses the user's location to search for all nearby opportunities around them using semantic (meaning-based) matching, ranks the results, and explains why each one fits. The user can then generate a step-by-step roadmap for a specific opportunity, auto-generate a tailored CV and cover letter for it, and keep talking to an AI career coach across a multi-turn chat to refine their approach. Users can also choose to prioritize opportunities based on their location and different preferences, so results aren't just relevant by skillset but geographically realistic too.
How we built it
- Frontend: Nuxt.js / Vue.js, Tailwind CSS, Supabase Authentication
- Backend: Python, FastAPI, REST APIs
- Database & retrieval: PostgreSQL via Supabase, with
pgvectorfor semantic vector search - AI: Groq API for low-latency LLM inference, with an agentic tool-calling pattern the model is given a
search_opportunitiestool and decides its own query, rather than following a single static prompt. Real pgvector search results come back as an actual tool result, which the model then reasons over to produce ranked, explained matches. - Document generation: prompt-engineered CV and cover-letter generation, tailored per opportunity rather than templated
Challenges we ran into
Designing an AI experience that feels conversational while staying accurate was the core challenge, natural language is ambiguous, and turning something like "find AI internships near me" into a precise, well-scoped search required real iteration on both the prompt and the tool design. Keeping a multi-turn career chat coherent and fast as history grows, without either losing context or resending a growing wall of text on every request, pushed us to think seriously about context management, not just prompt-writing. We also had to balance AI flexibility against predictability, a system that relies entirely on the model can be inconsistent, so CityOS combines structured application logic (real database queries, real filters) with AI reasoning on top, rather than leaving everything to the model.
What we learned
Building CityOS reinforced that an AI product is about far more than connecting a UI to an LLM, the harder work is designing the system around the AI so it produces genuinely useful outcomes. We gained hands-on experience with agentic tool-calling, semantic search with vector embeddings, multi-turn conversational memory, and engineering AI-generated documents that adapt to context instead of reading like templates. Most importantly, we learned that AI should reduce a user's cognitive load, not add to it, someone should be able to describe what they want in plain language and get something immediately usable back, without needing to understand how the system works underneath.
What's next for CityOS
- Automated opportunity ingestion from more sources, so the knowledge base grows on its own
- Deadline and application tracking, so users don't just find opportunities but stay on top of them
- Application readiness feedback and interview preparation
- Broader location intelligence beyond country-level filtering
- Multilingual support to reach more students globally
Built With
- agentic-ai
- ai
- career
- education
- fastapi
- groq
- html5
- javascript
- jwt
- llm
- machine-learning
- nuxtjs
- pgvector
- postgresql
- python
- rest-api
- saas
- semantic-search
- socialgood
- supabase
- tailwindcss
- typescript
- vector-search
- vuejs
Log in or sign up for Devpost to join the conversation.