Inspiration
Career advice is everywhere, but most of it is generic. Two people can want the same job while starting from completely different places, yet they are often given the same roadmap, course list, or YouTube playlist.
The idea for SkillState came from a simple question: what if a career roadmap actually knew you?
Instead of asking only “What career do you want?”, SkillState considers what you are studying, what skills you claim, what you can actually prove, how much time you have, and how your goals change over time. We wanted career planning to behave more like navigation software: understand the starting point, know the destination, and continuously reroute as new information appears.
What it does
SkillState is an adaptive career-navigation agent that works backward from a destination and continuously finds the shortest credible path from where a learner is today.
A learner can choose an exact career such as AI Engineer, or remain open to exploring multiple directions.
SkillState then:
- builds the capability graph required for the destination
- compares it with the learner's current skills and evidence
- classifies capabilities as Verified, Developing, Needs Proof, Gap, or Unverified
- creates an adaptive journey across learning, proof, projects, experience, and professional signal
- fits the plan around the learner's available weekly time
- generates targeted assessments when a claimed skill needs verification
- turns assessment results into evidence
- updates capability state and automatically replans when new evidence appears
- recommends resources based on identified gaps rather than recommending courses first
- preserves transferable evidence when a learner changes career direction
- supports What-If career exploration without forcing the learner to restart
- generates grounded progress reports showing what has been acquired, what still needs proof, remaining gaps, and next steps
The core loop is:
Destination → Expected capabilities → Evidence → Gaps → Plan → Learner action → New evidence → Re-evaluate → Replan
How we built it
SkillState is built with Next.js 15, TypeScript, Tailwind CSS, Zustand, Zod, Supabase, OpenAI, and Cloudflare Workers.
We deliberately separated AI reasoning from deterministic state changes.
The AI can propose a destination graph, evaluate evidence, generate verification tasks, explain resources, or suggest a plan. But its output is validated through structured schemas before the domain layer is allowed to update learner state.
The architecture includes:
- a Destination Compiler for turning careers into structured capability graphs
- an Evidence Analyzer
- a Verification Planner and Evaluator
- a Gap Analyzer
- an adaptive Journey Planner / Replanner
- a Resource Matcher
- a grounded Progress Reporter
- natural-language Ask SkillState support
We also built a shared knowledge layer containing 54 careers, 125 canonical capabilities, 97 curated resources, 153 aliases, and 324 precomputed career transitions.
Known careers are resolved locally without an AI call. New careers can be generated, validated, reconciled with the canonical capability ontology, cached centrally, and reused by future learners.
Supabase provides authentication and durable learner persistence, while Zustand keeps the active session fast. The production app is deployed at:
https://sidbuilds.com/skillstate
Challenges we ran into
The hardest problem was not generating roadmaps. It was keeping the entire system consistent as the learner changes.
One major challenge was capability reconciliation. AI might generate something like programming-for-language-data, while our resource library understands programming-python. Without reconciliation, the roadmap could look correct while resources remained empty. We built a conservative canonical mapping layer so equivalent concepts can reuse existing knowledge without incorrectly merging genuinely different skills.
Another challenge was making evidence meaningful. A learner completing one tiny Python task should not automatically become “Verified” in all of Python Programming. We therefore treat assessments as evidence that can strengthen a capability incrementally.
Persistence also introduced several difficult edge cases: hydration races during onboarding, preserving state across refreshes, preventing one account's local state from appearing for another user, and making assessment results survive navigation.
Career switching created another interesting problem. Changing from AI Engineer to Software Engineer should preserve relevant evidence and recalculate the future path rather than restarting the learner.
Finally, we had to balance AI flexibility with reliability, latency, and cost. That led us to cache generated careers and discovered resources so future users can reuse validated knowledge instead of repeating the same generation work.
Accomplishments that we're proud of
We are especially proud that SkillState became a working deployed product rather than a static hackathon demo.
Some milestones we reached:
- production deployment with Supabase authentication and persistent learner state
- adaptive planning based on actual evidence
- career switching with transferable evidence preservation
- generated-career caching for reuse across users
- canonical capability reconciliation between generated careers and existing resources
- targeted assessments that change learner state and trigger replanning
- grounded progress reporting instead of invented readiness scores
- support for both exact career goals and learners who are still exploring
- shared knowledge across technical and non-technical careers
- responsive production UI and mobile support
- 122 automated tests passing, along with TypeScript, lint, Next.js production build, and Cloudflare build checks
One of our favorite moments during testing was submitting a Python solution that satisfied part of the task but missed part of the rubric. SkillState did not simply return pass/fail. It recorded the response as evidence, moved the capability from Unverified to Developing, identified what was still missing, and inserted targeted repair work into the learner's plan.
That is the behavior we wanted from an agent: observe, update state, and change what happens next.
What we learned
The biggest lesson was that generating a roadmap is the easy part.
The harder and more valuable problem is maintaining a trustworthy model of the learner over time.
We learned that an agentic education or career system needs persistent state, evidence, verification, structured reasoning, and deterministic safeguards. Without those, an LLM can produce impressive recommendations but has no reliable understanding of whether the learner has actually progressed.
We also learned that AI should not control every part of the system. Some decisions are better handled deterministically, while AI is most useful for interpreting messy inputs, generating structured proposals, explaining reasoning, and handling novel careers.
Most importantly, we learned that progress should be based on evidence rather than arbitrary percentages.
What's next for Skill State
The next step is turning SkillState from a strong adaptive career-planning engine into an even more complete long-term career companion.
We want to:
- further simplify the UI so the product feels like a guided journey rather than a dashboard
- expand the shared career and capability knowledge graph
- improve verification with richer project, portfolio, GitHub, certificate, and work evidence
- connect real opportunities such as internships, hackathons, projects, and research roles to learner gaps
- improve resource discovery and automatically maintain the resource library
- make career switching and What-If exploration even richer
- introduce stronger progress history and evidence timelines
- integrate SkillState into our existing student platform so learners can optionally use real academic activity as evidence
- continue reducing repeated AI calls by turning validated generated knowledge into reusable shared infrastructure
The long-term vision is simple:
SkillState should not just tell people what to learn. It should understand where they actually are, where they want to go, and continuously help them move along the shortest credible path between the two.
Built With
- agentic-ai
- ai-agents
- cloudflare-workers
- next.js
- node.js
- openai-api
- openai-responses-api
- opennext
- playwright
- postgresql
- react
- react-hook-form
- supabase
- supabase-auth
- tailwind-css
- typescript
- vitest
- zod
- zustand
Log in or sign up for Devpost to join the conversation.