DEV Community

Cover image for ๐Ÿš€ I Built SkillDebt.ai to Understand My Own Skill Gaps
Pravesh Sudha
Pravesh Sudha Subscriber

Posted on • Edited on

๐Ÿš€ I Built SkillDebt.ai to Understand My Own Skill Gaps

A hands-on look at skill decay, generative UI, and turning career anxiety into actionable insights

๐ŸŒŸ Introduction

Hola amigos ๐Ÿ‘‹

Welcome to the world of AI and DevOps.

In this blog, I want to share my experience building SkillDebt.ai as part of the UI Strikes Back Challenge, hosted by the WEMakeDevs community in collaboration with Tambo AI.

The idea behind SkillDebt.ai is simple:

as developers, we often talk about technical debt in our code โ€” but we rarely think about the technical debt in our careers.

SkillDebt.ai takes your resume or tech stack, analyzes it using Tambo AI and Gemini, and turns that data into beautiful, interactive visual insights about your skills. Instead of long paragraphs or generic advice, you get a clear picture of where you stand in your field.

Beyond skill visualization, it also highlights:

  • Skill decay โ€” tools and technologies you havenโ€™t touched in a while

  • Risk audits โ€” warning signs when core skills are becoming outdated

  • Upgrade suggestions โ€” practical recommendations on what skills to add next to boost your career growth

This project isnโ€™t just about AI or UI โ€” itโ€™s about giving developers clarity, direction, and a better way to plan their learning journey.


๐ŸŒŸ Practical Demo

Letโ€™s see SkillDebt.ai in action.

Thereโ€™s no heavy setup or complex prerequisites. All you need is your resume in PDF format.

Head over to the live demo here:

๐Ÿ‘‰ https://my-repo-8k7lhiaxb-pravesh-sudhas-projects.vercel.app/

๐—ง๐—ต๐—ฒ ๐—ฃ๐—ฟ๐—ผ๐—ท๐—ฒ๐—ฐ๐˜ ๐—ต๐—ฎ๐˜€ ๐—ฏ๐—ฒ๐—ฒ๐—ป ๐˜๐—ฎ๐—ธ๐—ฒ๐—ป ๐—ฑ๐—ผ๐˜„๐—ป ๐—ฏ๐˜† ๐Ÿฎ๐Ÿฑ ๐—™๐—ฒ๐—ฏ ๐Ÿฎ๐Ÿฌ๐Ÿฎ๐Ÿฒ, ๐˜†๐—ผ๐˜‚ ๐—ฐ๐—ฎ๐—ป ๐—ณ๐—ผ๐—น๐—น๐—ผ๐˜„ ๐˜๐—ต๐—ฒ ๐—š๐—ถ๐˜๐—›๐˜‚๐—ฏ ๐—š๐˜‚๐—ถ๐—ฑ๐—ฒ ๐˜๐—ผ ๐—ถ๐—น๐—น๐˜‚๐˜€๐˜๐—ฟ๐—ฎ๐˜๐—ฒ ๐—ถ๐—ป ๐˜†๐—ผ๐˜‚๐—ฟ ๐—ผ๐˜„๐—ป ๐—น๐—ผ๐—ฐ๐—ฎ๐—น ๐˜€๐˜†๐˜€๐˜๐—ฒ๐—บ

Once youโ€™re on the site, click on โ€œUpload Resumeโ€, select your PDF, and hit Analyze. Thatโ€™s it.

From there, SkillDebt.ai walks you through a complete breakdown of your profile:

First, youโ€™ll see a visual skill analysis chart that gives a quick overview of your strengths and gaps across different areas in your field.

Next comes the Skill Decay graph, which highlights technologies you havenโ€™t actively used in a while and flags them based on risk. This part is especially useful because it surfaces skills you might be unknowingly neglecting.

After that, the Risk Audit section kicks in. It acts like a warning system, pointing out areas in your resume that could become problematic if left unaddressed.

Finally, you get career-focused upgrade suggestions โ€” specific skills you should consider adding or improving to stay relevant and boost long-term growth.

If youโ€™re curious about how everything works under the hood, the complete source code is open-source and available here:

๐Ÿš€ SkillDebt.ai (UI Strikes Back)

Analyze your technical skill debt, visualize decay, and find your optimal upgrade path. Built for developers who want to stay ahead of the curve.

Repo


โœจ Features

  • ๐Ÿ“Š Skill Visualization: Map out your current technical stack and see the balance across different domains.
  • ๐Ÿ“‰ Decay Timeline: Understand how your skills might be losing relevance over time and plan ahead.
  • โš ๏ธ Risk Audit: Identify critical gaps or "debt" in your career path based on industry trends.
  • ๐Ÿš€ Upgrade Path: Get personalized, high-impact suggestions for your next skill upgrade.
  • ๐Ÿ“‚ Resume Parsing: Upload your resume (PDF/Text) to start the analysis instantly.
  • ๐Ÿค– Generative UI: Experience a dynamic AI-driven interface powered by the Tambo SDK.

๐Ÿ› ๏ธ Tech Stack


๐ŸŒŸ How I Built It

Going into the hackathon, I had one clear goal:

I didnโ€™t want to build something flashy but forgettable. I wanted to build something novel and actually useful.

The AI agent space is already crowded. Everywhere you look, thereโ€™s another code debugger, another productivity hack, another โ€œAI assistantโ€ doing roughly the same thing. At the same time, with the rapid rise of AI โ€” especially tools like Claude Code and autonomous agents โ€” AI engineering has gone through the roof.

Thatโ€™s when I paused and thought:

instead of building yet another tool to replace engineers, why not build something that helps engineers upskill and stay ahead of the curve?

That idea became SkillDebt.ai โ€” a system focused on helping developers understand where they stand today, what theyโ€™re falling behind on, and how they can adapt to this AI-driven future instead of getting left behind.

From an implementation perspective, the most challenging part for me was configuring the Tambo Generative UI components. Getting the components to behave correctly, respond to the data, and render meaningful insights wasnโ€™t straightforward at first. I ran into plenty of invalid input errors along the way.

But once I understood how the pieces fit together, things started clicking. The documentation played a huge role here โ€” it turned what initially felt overwhelming into a structured learning process. After a lot of trial and error (mostly invalid configuration for components), I finally got all four core components working together smoothly.

It wasnโ€™t easy at the start, but that struggle is exactly what made the project so rewarding.

The main heart of the Project is the tambo.config.ts file inside the src/tambo directory, it handles the prompt for the generative UI components. Have a look at it:

import { z } from 'zod';
import { SkillRadarChart } from '../components/adaptive/SkillRadarChart';
import { SkillDecayTimeline } from '../components/adaptive/SkillDecayTimeline';
import { RiskWarningCard } from '../components/adaptive/RiskWarningCard';
import { UpgradeSuggestionCard } from '../components/adaptive/UpgradeSuggestionCard';
import { ExplanationToggle } from '../components/adaptive/ExplanationToggle';

export const tamboConfig = {
    components: [
        {
            name: 'skill_radar_chart',
            description: 'Visualizes the balance between depth and breadth of skills, or compares multiple skill categories.',
            component: SkillRadarChart,
            propsSchema: z.object({
                title: z.string().describe("Title of the chart, e.g., 'Frontend Skill Balance'").default("Skill Analysis"),
                data: z.array(z.object({
                    skill: z.string().describe("Name of the skill, e.g., 'React'").default("Unknown Skill"),
                    value: z.number().min(0).max(100).describe("Skill level from 0 to 100").default(50),
                    fullMark: z.number().default(100).optional(),
                })).describe("Array of 3-6 skills to visualize.").default([]),
            }),
        },
        {
            name: 'skill_decay_timeline',
            description: 'Shows a timeline of skills and their freshness/decay status based on last usage.',
            component: SkillDecayTimeline,
            propsSchema: z.object({
                data: z.array(z.object({
                    name: z.string().describe("Name of the skill, e.g. 'jQuery'").default("Unknown Skill"),
                    lastUsed: z.string().describe("Year or timeframe like '2023', 'Current'").default("Unknown"),
                    decayLevel: z.string().describe("Decay level: 'low', 'medium', 'high', 'critical'").default("medium"),
                })).describe("List of data points regarding skill usage and decay for the timeline.").default([]),
            }),
        },
        {
            name: 'risk_warning_card',
            description: 'Displays a warning about a specific career risk or skill obsolescence.',
            component: RiskWarningCard,
            propsSchema: z.object({
                title: z.string().describe("Short warning title, e.g. 'Legacy Stack Risk'").default("Risk Warning"),
                message: z.string().describe("Detailed explanation of the risk").default("Potential risk detected."),
                riskLevel: z.string().describe("Risk level: 'moderate', 'high', 'critical'").default('moderate'),
            }),
        },
        {
            name: 'upgrade_suggestion_card',
            description: 'Suggests a specific skill upgrade or learning path with potential impact.',
            component: UpgradeSuggestionCard,
            propsSchema: z.object({
                skill: z.string().describe("The recommended skill to learn").default("New Skill"),
                recommendation: z.string().describe("Why this skill is recommended").default("Recommended for career growth."),
                impact: z.string().describe("Impact: 'career_pivot', 'salary_bump', 'stability'").default("stability"),
            }),
        },
        {
            name: 'explanation_toggle',
            description: 'Can be used to provide deeper context or reasoning for a specific insight, hidden by default behind a toggle.',
            component: ExplanationToggle,
            propsSchema: z.object({
                reasoning: z.string().describe("The detailed reasoning or explanation to be hidden.").default("No additional details provided."),
                context: z.string().describe("Optional context or source data reference.").optional(),
            }),
        },
    ],
};
Enter fullscreen mode Exit fullscreen mode

It wasnโ€™t easy at the start, but that struggle is exactly what made the project so rewarding.

After deploying the project, I posted about it on LinkedIn and dozens of Developers got their profile review using the system, and seeing real people interact with Generative UI components using Tambo made my DAY!


๐ŸŒŸ Conclusion

Building SkillDebt.ai was a genuinely fun and exciting journey. From shaping the idea, struggling through early implementation issues, to finally seeing the generative UI come together โ€” every step pushed me to think differently about how AI can be used to empower developers, not replace them.

Huge thanks to the WEMakeDevs community and Tambo AI for organizing the UI Strikes Back Challenge and creating a space that encourages experimentation, learning, and building in public. Challenges like these are what make the developer ecosystem so motivating.

If you found this project interesting or have ideas on how it can be improved, Iโ€™d love to hear from you. You can find the code on GitHub, and feel free to connect with me on my socials:

Thanks for reading โ€” and as always, keep building, keep learning, and stay curious ๐Ÿš€

Adios ๐Ÿ‘‹

Top comments (0)