From f2dddb6b054adf1613414a7320595029764ae4f9 Mon Sep 17 00:00:00 2001 From: Daniel Henrique Date: Tue, 14 Jul 2026 09:36:36 -0300 Subject: [PATCH 1/2] feat: add an AI/LLM tools category to the skills widget Adds a new "AI" section (like Languages/Frameworks/Libraries/Tools/ Software) so people can showcase which AI tools and models they work with: Anthropic, Claude, Google Gemini, GitHub Copilot, Perplexity, Mistral AI, Meta AI, Hugging Face, LangChain, Ollama, Cursor, DeepSeek, Replicate. Wired through as a new opt-in &ai= query param on /api/skills, mirroring the existing category params exactly (same height/layout math, same findData lookup chain, same route signature pattern) so it's fully backward compatible. Icons sourced from simple-icons (CC0), extracted programmatically from the fetched SVGs and diffed byte-for-byte against the source files to guarantee accuracy. OpenAI/ChatGPT are intentionally excluded: their icon was removed from simple-icons upstream at OpenAI's request over trademark concerns, same reasoning as the Adobe icons skipped earlier. --- README.md | 14 ++- api/routes/skills-route.ts | 11 +- public/api/routes/skills-route.js | 11 +- public/api/routes/skills-route.js.map | 2 +- public/src/data/ai.js | 162 ++++++++++++++++++++++++++ public/src/data/ai.js.map | 1 + public/src/widgets/skills.js | 45 ++++--- public/src/widgets/skills.js.map | 2 +- src/data/ai.ts | 162 ++++++++++++++++++++++++++ src/widgets/skills.ts | 49 +++++--- 10 files changed, 419 insertions(+), 40 deletions(-) create mode 100644 public/src/data/ai.js create mode 100644 public/src/data/ai.js.map create mode 100644 src/data/ai.ts diff --git a/README.md b/README.md index 26604ae..f84948e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ### Skills -A clear way to give an overview of programming languages, tools, and software that you're familiar with. +A clear way to give an overview of programming languages, tools, software, and AI/LLM tools that you're familiar with. #### Languages @@ -63,6 +63,18 @@ Default | &includeNames=true [![GitHub WidgetBox](https://github-widgetbox.vercel.app/api/skills?software=linux,windows,vscode)](https://github.com/Jurredr/github-widgetbox) ``` +#### AI + +Default | &includeNames=true +:-------------------------:|:-------------------------: +[![GitHub WidgetBox](https://github-widgetbox.vercel.app/api/skills?ai=anthropic,claude,googlegemini,githubcopilot,perplexity)](https://github.com/Jurredr/github-widgetbox) | [![GitHub WidgetBox](https://github-widgetbox.vercel.app/api/skills?ai=anthropic,claude,googlegemini,githubcopilot,perplexity&includeNames=true)](https://github.com/Jurredr/github-widgetbox) + +```md +[![GitHub WidgetBox](https://github-widgetbox.vercel.app/api/skills?ai=anthropic,claude,googlegemini,githubcopilot,perplexity)](https://github.com/Jurredr/github-widgetbox) +``` + +Full list: `anthropic`, `claude`, `googlegemini`, `githubcopilot`, `perplexity`, `mistralai`, `metaai`, `huggingface`, `langchain`, `ollama`, `cursor`, `deepseek`, `replicate`. +

### Profile diff --git a/api/routes/skills-route.ts b/api/routes/skills-route.ts index a307dcc..ae4ca8e 100644 --- a/api/routes/skills-route.ts +++ b/api/routes/skills-route.ts @@ -8,25 +8,26 @@ import { getBoolean, getTheme } from '../../src/utils' import errorWidget from '../../src/widgets/error' /** * Primary skill path. - * + * * This path is for the primary skill screen. It has the following possible queries * @param languages the list of languages to show. * @param frameworks the list of frameworks to show. * @param libraries the list of libraries to show. * @param tools the list of tools to show. * @param software the list of software to show + * @param ai the list of AI/LLM tools to show * @param includeNames the option if it has to include names. * @param theme the theme of the widget. * @param names @deprecated the full list of all skills it needs to show. deprecated from version 1.1.0 onwards. */ router.get('/', function (req: Request, res: Response) { - const { names, languages, frameworks, libraries, tools, software, includeNames, theme} = req.query + const { names, languages, frameworks, libraries, tools, software, ai, includeNames, theme} = req.query // Set the header's type to svg/xml res.setHeader('Content-Type', 'image/svg+xml') // Check if languages argument is not present - if (!languages && !frameworks && !libraries && !names && !tools && !software + if (!languages && !frameworks && !libraries && !names && !tools && !software && !ai ) { res.send( errorWidget('Skills', '-24%', 'Languages are undefined!', '-28%') @@ -35,9 +36,9 @@ router.get('/', function (req: Request, res: Response) { } if (names) { - res.send(skillsWidget(String(names), undefined, undefined, undefined, undefined, getBoolean(String(includeNames)), String(theme))) + res.send(skillsWidget(String(names), undefined, undefined, undefined, undefined, undefined, getBoolean(String(includeNames)), String(theme))) } else { - res.send(skillsWidget(String(languages), String(frameworks), String(libraries), String(tools), String(software), getBoolean(String(includeNames)), String(theme))) + res.send(skillsWidget(String(languages), String(frameworks), String(libraries), String(tools), String(software), String(ai), getBoolean(String(includeNames)), String(theme))) } // Grab the Skills widget diff --git a/public/api/routes/skills-route.js b/public/api/routes/skills-route.js index 4c1dd24..20a42e9 100644 --- a/public/api/routes/skills-route.js +++ b/public/api/routes/skills-route.js @@ -17,24 +17,25 @@ const error_1 = __importDefault(require("../../src/widgets/error")); * @param libraries the list of libraries to show. * @param tools the list of tools to show. * @param software the list of software to show + * @param ai the list of AI/LLM tools to show * @param includeNames the option if it has to include names. * @param theme the theme of the widget. * @param names @deprecated the full list of all skills it needs to show. deprecated from version 1.1.0 onwards. */ router.get('/', function (req, res) { - const { names, languages, frameworks, libraries, tools, software, includeNames, theme } = req.query; + const { names, languages, frameworks, libraries, tools, software, ai, includeNames, theme } = req.query; // Set the header's type to svg/xml res.setHeader('Content-Type', 'image/svg+xml'); // Check if languages argument is not present - if (!languages && !frameworks && !libraries && !names && !tools && !software) { - res.send(error_1.default('Skills', '-24%', 'Languages are undefined!', '-28%')); + if (!languages && !frameworks && !libraries && !names && !tools && !software && !ai) { + res.send((0, error_1.default)('Skills', '-24%', 'Languages are undefined!', '-28%')); return; } if (names) { - res.send(skills_1.default(String(names), undefined, undefined, undefined, undefined, utils_1.getBoolean(String(includeNames)), String(theme))); + res.send((0, skills_1.default)(String(names), undefined, undefined, undefined, undefined, undefined, (0, utils_1.getBoolean)(String(includeNames)), String(theme))); } else { - res.send(skills_1.default(String(languages), String(frameworks), String(libraries), String(tools), String(software), utils_1.getBoolean(String(includeNames)), String(theme))); + res.send((0, skills_1.default)(String(languages), String(frameworks), String(libraries), String(tools), String(software), String(ai), (0, utils_1.getBoolean)(String(includeNames)), String(theme))); } // Grab the Skills widget }); diff --git a/public/api/routes/skills-route.js.map b/public/api/routes/skills-route.js.map index 6868820..38fbe69 100644 --- a/public/api/routes/skills-route.js.map +++ b/public/api/routes/skills-route.js.map @@ -1 +1 @@ -{"version":3,"file":"skills-route.js","sourceRoot":"","sources":["../../../api/routes/skills-route.ts"],"names":[],"mappings":";;;;;AAEA,sDAA6B;AAC7B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAE/B,sEAAmD;AACnD,2CAAsD;AACtD,oEAAiD;AACjD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAY,EAAE,GAAa;IACjD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAC,GAAG,GAAG,CAAC,KAAK,CAAA;IAElG,mCAAmC;IACnC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;IAE9C,6CAA6C;IAC7C,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAC1E;QACE,GAAG,CAAC,IAAI,CACJ,eAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,0BAA0B,EAAE,MAAM,CAAC,CACpE,CAAA;QACD,OAAM;KACT;IAED,IAAI,KAAK,EAAE;QACP,GAAG,CAAC,IAAI,CAAC,gBAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACrI;SAAM;QACH,GAAG,CAAC,IAAI,CAAC,gBAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,kBAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACrK;IAED,yBAAyB;AAC7B,CAAC,CAAC,CAAA;AAEF,kBAAe,MAAM,CAAA"} \ No newline at end of file +{"version":3,"file":"skills-route.js","sourceRoot":"","sources":["../../../api/routes/skills-route.ts"],"names":[],"mappings":";;;;;AAEA,sDAA6B;AAC7B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAE/B,sEAAmD;AACnD,2CAAsD;AACtD,oEAAiD;AACjD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAY,EAAE,GAAa;IACjD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAC,GAAG,GAAG,CAAC,KAAK,CAAA;IAEtG,mCAAmC;IACnC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;IAE9C,6CAA6C;IAC7C,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,EACjF;QACE,GAAG,CAAC,IAAI,CACJ,IAAA,eAAW,EAAC,QAAQ,EAAE,MAAM,EAAE,0BAA0B,EAAE,MAAM,CAAC,CACpE,CAAA;QACD,OAAM;KACT;IAED,IAAI,KAAK,EAAE;QACP,GAAG,CAAC,IAAI,CAAC,IAAA,gBAAY,EAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAA,kBAAU,EAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KAChJ;SAAM;QACH,GAAG,CAAC,IAAI,CAAC,IAAA,gBAAY,EAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAA,kBAAU,EAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACjL;IAED,yBAAyB;AAC7B,CAAC,CAAC,CAAA;AAEF,kBAAe,MAAM,CAAA"} \ No newline at end of file diff --git a/public/src/data/ai.js b/public/src/data/ai.js new file mode 100644 index 0000000..266bb39 --- /dev/null +++ b/public/src/data/ai.js @@ -0,0 +1,162 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ai = [ + { + name: ['Anthropic'], + colorFrom: '#B3B3B3', + colorTo: '#191919', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['Claude'], + colorFrom: '#F2D2C2', + colorTo: '#D97757', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['GoogleGemini', 'Gemini'], + colorFrom: '#DBD1EC', + colorTo: '#8E75B2', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['GitHubCopilot', 'Copilot'], + colorFrom: '#B3B3B3', + colorTo: '#000000', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['Perplexity'], + colorFrom: '#B3E9F2', + colorTo: '#1FB8CD', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['MistralAI', 'Mistral'], + colorFrom: '#FDC79E', + colorTo: '#FA520F', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['MetaAI'], + colorFrom: '#D3C4FA', + colorTo: '#9844FF', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['HuggingFace'], + colorFrom: '#FFEFB0', + colorTo: '#FFD21E', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['LangChain'], + colorFrom: '#E0F0FF', + colorTo: '#7FC8FF', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['Ollama'], + colorFrom: '#B3B3B3', + colorTo: '#000000', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['Cursor'], + colorFrom: '#B3B3B3', + colorTo: '#000000', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['DeepSeek'], + colorFrom: '#C4D2FF', + colorTo: '#5786FE', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['Replicate'], + colorFrom: '#B3B3B3', + colorTo: '#000000', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, +]; +exports.default = ai; +//# sourceMappingURL=ai.js.map \ No newline at end of file diff --git a/public/src/data/ai.js.map b/public/src/data/ai.js.map new file mode 100644 index 0000000..d6d9cb5 --- /dev/null +++ b/public/src/data/ai.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../src/data/ai.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/src/widgets/skills.js b/public/src/widgets/skills.js index 742d01e..019b57e 100644 --- a/public/src/widgets/skills.js +++ b/public/src/widgets/skills.js @@ -11,23 +11,25 @@ const frameworks_1 = __importDefault(require("../data/frameworks")); const libraries_1 = __importDefault(require("../data/libraries")); const tools_1 = __importDefault(require("../data/tools")); const software_ides_1 = __importDefault(require("../data/software-ides")); +const ai_1 = __importDefault(require("../data/ai")); const themes_1 = __importDefault(require("../data/themes")); /** * Builds the skill widget page * * This method builds a SVG file that contains all the languages, frameworks, - * libraries, tools and other software that can be found in the data folder and - * are passed by the calling method. + * libraries, tools, software and AI/LLM tools that can be found in the data + * folder and are passed by the calling method. * * @param languagesString The string with all the languages * @param frameworksString The string with all the frameworks * @param librariesString The string with all the libraries * @param toolsString The string with all the tools * @param softwareString The string with all the software + * @param aiString The string with all the AI/LLM tools * @param includeNames The boolean that determines whether or not to include names * @returns The SVG with all the skills that were passed. */ -function skillsWidget(languagesString, frameworksString, librariesString, toolsString, softwareString, includeNames, themeString) { +function skillsWidget(languagesString, frameworksString, librariesString, toolsString, softwareString, aiString, includeNames, themeString) { const BASE_HEIGHT = 125; const BASE_WIDTH = 812; const FIRST_ROW = 90; @@ -48,19 +50,23 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS if (!softwareString) { softwareString = 'undefined'; } + if (!aiString) { + aiString = 'undefined'; + } // Set the theme - let theme = utils_1.getTheme(themes_1.default, 'default'); + let theme = (0, utils_1.getTheme)(themes_1.default, 'default'); if (themeString) { - theme = utils_1.getTheme(themes_1.default, themeString); + theme = (0, utils_1.getTheme)(themes_1.default, themeString); } if (!theme) { - theme = utils_1.getTheme(themes_1.default, 'default'); + theme = (0, utils_1.getTheme)(themes_1.default, 'default'); } const languageList = languagesString.split(','); const frameworkList = frameworksString.split(','); const libraryList = librariesString.split(','); const toolsList = toolsString.split(','); const softwareList = softwareString.split(','); + const aiList = aiString.split(','); const rowHeightLanguages = Math.round((languageList.length - 0.1) / 7) > 1 ? Math.round((languageList.length - 0.1) / 7) : 1; const languagesTitleHeight = FIRST_ROW; const rowHeightFrameworks = Math.round((frameworkList.length - 0.1) / 7) > 1 ? Math.round((frameworkList.length - 0.1) / 7) : 1; @@ -83,6 +89,11 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) * PAD) + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) * ROW) + (includeNames && (toolsList.length > 1 || toolsList[0] !== 'undefined') ? (rowHeightSoftware) * 25 : 0); + const rowHeightAI = Math.round((aiList.length - 0.1) / 7) > 1 ? Math.round((aiList.length - 0.1) / 7) : 1; + const aiTitleHeight = softwareTitleHeight + + ((softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0) * PAD) + + ((softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0) * ROW) + + (includeNames && (softwareList.length > 1 || softwareList[0] !== 'undefined') ? (rowHeightAI) * 25 : 0); // Set the size of the main SVG container const width = BASE_WIDTH; const height = BASE_HEIGHT + @@ -90,15 +101,17 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? rowHeightFrameworks : 0) + (libraryList.length > 1 || libraryList[0] !== 'undefined' ? rowHeightLibraries : 0) + (toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) + - (softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0))) + (softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0) + + (aiList.length > 1 || aiList[0] !== 'undefined' ? rowHeightAI : 0))) + (PAD * (1 + (languageList.length > 1 || languageList[0] !== 'undefined' ? 1 : 0) + (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? 1 : 0) + (libraryList.length > 1 || libraryList[0] !== 'undefined' ? 1 : 0) + (toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) + - (softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0))) + (softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0) + + (aiList.length > 1 || aiList[0] !== 'undefined' ? 1 : 0))) // Add space for the names if true. - + (includeNames ? (Math.round(((languageList.length + libraryList.length + frameworkList.length + toolsList.length + softwareList.length) - 0.1) / 7) + 1) * 25 : 0); + + (includeNames ? (Math.round(((languageList.length + libraryList.length + frameworkList.length + toolsList.length + softwareList.length + aiList.length) - 0.1) / 7) + 1) * 25 : 0); /** * Builds the gradient boxes and sets the names. * @param listToBuild The list of items to build the boxes with @@ -110,7 +123,7 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS for (let i = 0; i < listToBuild.length; i++) { // Check the data and add the first result that isn't defined. // It checks the languages first, then the frameworks, and then the libraries. - let foundData = utils_1.findData(languages_1.default, listToBuild[i]) || utils_1.findData(frameworks_1.default, listToBuild[i]) || utils_1.findData(libraries_1.default, listToBuild[i]) || utils_1.findData(tools_1.default, listToBuild[i]) || utils_1.findData(software_ides_1.default, listToBuild[i]); + let foundData = (0, utils_1.findData)(languages_1.default, listToBuild[i]) || (0, utils_1.findData)(frameworks_1.default, listToBuild[i]) || (0, utils_1.findData)(libraries_1.default, listToBuild[i]) || (0, utils_1.findData)(tools_1.default, listToBuild[i]) || (0, utils_1.findData)(software_ides_1.default, listToBuild[i]) || (0, utils_1.findData)(ai_1.default, listToBuild[i]); if (foundData === undefined) { foundData = { name: [''], @@ -125,7 +138,7 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS const row = Math.floor(i / 7); const transX = 102 * (i - row * 7); const transY = ROW * row + (includeNames && row > 0 ? 25 * row : 0); - boxes += gradient_box_1.default( + boxes += (0, gradient_box_1.default)( // Combine the index and the type number. (i * Math.pow(10, Math.floor(Math.log10(type)) + 1) + type), foundData.colorFrom, foundData.colorTo, transX, transY); boxes += @@ -149,7 +162,7 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS return ` - ${card_1.default(width, height, theme.background)} + ${(0, card_1.default)(width, height, theme.background)} Skills @@ -169,6 +182,9 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS Software + + AI + ${getBoxes(languageList, 1)} @@ -185,7 +201,10 @@ function skillsWidget(languagesString, frameworksString, librariesString, toolsS ${getBoxes(softwareList, 5)} - + + ${getBoxes(aiList, 6)} + + `; } diff --git a/public/src/widgets/skills.js.map b/public/src/widgets/skills.js.map index d9ad547..0ca4a31 100644 --- a/public/src/widgets/skills.js.map +++ b/public/src/widgets/skills.js.map @@ -1 +1 @@ -{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/widgets/skills.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/widgets/skills.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/data/ai.ts b/src/data/ai.ts new file mode 100644 index 0000000..bc9017a --- /dev/null +++ b/src/data/ai.ts @@ -0,0 +1,162 @@ +import { IconData } from '../interfaces/IconData' + +const ai: IconData[] = [ + { + name: ['Anthropic'], + colorFrom: '#B3B3B3', + colorTo: '#191919', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['Claude'], + colorFrom: '#F2D2C2', + colorTo: '#D97757', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['GoogleGemini', 'Gemini'], + colorFrom: '#DBD1EC', + colorTo: '#8E75B2', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['GitHubCopilot', 'Copilot'], + colorFrom: '#B3B3B3', + colorTo: '#000000', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['Perplexity'], + colorFrom: '#B3E9F2', + colorTo: '#1FB8CD', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['MistralAI', 'Mistral'], + colorFrom: '#FDC79E', + colorTo: '#FA520F', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['MetaAI'], + colorFrom: '#D3C4FA', + colorTo: '#9844FF', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['HuggingFace'], + colorFrom: '#FFEFB0', + colorTo: '#FFD21E', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['LangChain'], + colorFrom: '#E0F0FF', + colorTo: '#7FC8FF', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['Ollama'], + colorFrom: '#B3B3B3', + colorTo: '#000000', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['Cursor'], + colorFrom: '#B3B3B3', + colorTo: '#000000', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['DeepSeek'], + colorFrom: '#C4D2FF', + colorTo: '#5786FE', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, + { + name: ['Replicate'], + colorFrom: '#B3B3B3', + colorTo: '#000000', + icon: ` + + + `, + width: 36, + height: 36, + xOffset: 0, + }, +] + +export default ai diff --git a/src/widgets/skills.ts b/src/widgets/skills.ts index 2f34cf6..00846f6 100644 --- a/src/widgets/skills.ts +++ b/src/widgets/skills.ts @@ -6,20 +6,22 @@ import frameworks from '../data/frameworks' import libraries from '../data/libraries' import tools from '../data/tools' import softwareIDEs from '../data/software-ides' +import ai from '../data/ai' import { Theme } from "../interfaces/Theme"; import themes from '../data/themes' /** * Builds the skill widget page - * + * * This method builds a SVG file that contains all the languages, frameworks, - * libraries, tools and other software that can be found in the data folder and - * are passed by the calling method. - * + * libraries, tools, software and AI/LLM tools that can be found in the data + * folder and are passed by the calling method. + * * @param languagesString The string with all the languages * @param frameworksString The string with all the frameworks * @param librariesString The string with all the libraries * @param toolsString The string with all the tools * @param softwareString The string with all the software + * @param aiString The string with all the AI/LLM tools * @param includeNames The boolean that determines whether or not to include names * @returns The SVG with all the skills that were passed. */ @@ -29,6 +31,7 @@ export default function skillsWidget( librariesString?: string, toolsString?: string, softwareString?: string, + aiString?: string, includeNames?: boolean, themeString?: string @@ -55,6 +58,9 @@ export default function skillsWidget( if (!softwareString) { softwareString = 'undefined' } + if (!aiString) { + aiString = 'undefined' + } // Set the theme let theme : Theme = getTheme(themes, 'default') @@ -70,6 +76,7 @@ export default function skillsWidget( const libraryList: string[] = librariesString.split(',') const toolsList: string[] = toolsString.split(',') const softwareList: string[] = softwareString.split(',') + const aiList: string[] = aiString.split(',') const rowHeightLanguages = Math.round((languageList.length - 0.1) / 7) > 1 ? Math.round((languageList.length - 0.1) / 7) : 1 const languagesTitleHeight = FIRST_ROW @@ -94,30 +101,38 @@ export default function skillsWidget( const rowHeightSoftware = Math.round((softwareList.length - 0.1) / 7) > 1 ? Math.round((softwareList.length - 0.1) / 7) : 1 const softwareTitleHeight = toolsTitleHeight - + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) * PAD) + + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) * PAD) + ((toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) * ROW) + (includeNames && (toolsList.length > 1 || toolsList[0] !== 'undefined') ? (rowHeightSoftware) * 25 : 0) + const rowHeightAI = Math.round((aiList.length - 0.1) / 7) > 1 ? Math.round((aiList.length - 0.1) / 7) : 1 + const aiTitleHeight = softwareTitleHeight + + ((softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0) * PAD) + + ((softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0) * ROW) + + (includeNames && (softwareList.length > 1 || softwareList[0] !== 'undefined') ? (rowHeightAI) * 25 : 0) + // Set the size of the main SVG container const width = BASE_WIDTH const height = BASE_HEIGHT + (ROW * ( - (languageList.length > 1 || languageList[0] !== 'undefined' ? rowHeightLanguages : 0) + - (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? rowHeightFrameworks : 0) + + (languageList.length > 1 || languageList[0] !== 'undefined' ? rowHeightLanguages : 0) + + (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? rowHeightFrameworks : 0) + (libraryList.length > 1 || libraryList[0] !== 'undefined' ? rowHeightLibraries : 0) + (toolsList.length > 1 || toolsList[0] !== 'undefined' ? rowHeightTools : 0) + - (softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0) + (softwareList.length > 1 || softwareList[0] !== 'undefined' ? rowHeightSoftware : 0) + + (aiList.length > 1 || aiList[0] !== 'undefined' ? rowHeightAI : 0) )) + (PAD * ( 1 + - (languageList.length > 1 || languageList[0] !== 'undefined' ? 1 : 0) + - (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? 1 : 0) + + (languageList.length > 1 || languageList[0] !== 'undefined' ? 1 : 0) + + (frameworkList.length > 1 || frameworkList[0] !== 'undefined' ? 1 : 0) + (libraryList.length > 1 || libraryList[0] !== 'undefined' ? 1 : 0) + (toolsList.length > 1 || toolsList[0] !== 'undefined' ? 1 : 0) + - (softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0) + (softwareList.length > 1 || softwareList[0] !== 'undefined' ? 1 : 0) + + (aiList.length > 1 || aiList[0] !== 'undefined' ? 1 : 0) )) // Add space for the names if true. - + (includeNames ? (Math.round(((languageList.length + libraryList.length + frameworkList.length + toolsList.length+ softwareList.length) - 0.1) / 7) + 1) * 25 : 0) + + (includeNames ? (Math.round(((languageList.length + libraryList.length + frameworkList.length + toolsList.length+ softwareList.length + aiList.length) - 0.1) / 7) + 1) * 25 : 0) /** * Builds the gradient boxes and sets the names. @@ -130,7 +145,7 @@ export default function skillsWidget( for (let i = 0; i < listToBuild.length; i++) { // Check the data and add the first result that isn't defined. // It checks the languages first, then the frameworks, and then the libraries. - let foundData = findData(languageData, listToBuild[i]) || findData(frameworks, listToBuild[i]) || findData(libraries, listToBuild[i]) || findData(tools, listToBuild[i]) || findData(softwareIDEs, listToBuild[i]) + let foundData = findData(languageData, listToBuild[i]) || findData(frameworks, listToBuild[i]) || findData(libraries, listToBuild[i]) || findData(tools, listToBuild[i]) || findData(softwareIDEs, listToBuild[i]) || findData(ai, listToBuild[i]) if (foundData === undefined) { foundData = { name: [''], @@ -205,6 +220,9 @@ export default function skillsWidget( Software + + AI + ${getBoxes(languageList, 1)} @@ -221,7 +239,10 @@ export default function skillsWidget( ${getBoxes(softwareList, 5)} - + + ${getBoxes(aiList, 6)} + + ` } From bf451a760fa7f0bdaf07ba48e1292710f580f49e Mon Sep 17 00:00:00 2001 From: Daniel Henrique Date: Tue, 14 Jul 2026 09:41:03 -0300 Subject: [PATCH 2/2] fix: shorten AI skills labels to avoid overlapping the next box GoogleGemini (12 chars) and GitHubCopilot (13 chars) were wide enough at font-size 16 to overlap the neighboring box's label when includeNames=true, since box spacing is fixed at 102px. Switched their primary display name to the shorter, more natural product name (Gemini, Copilot, and Mistral for MistralAI) while keeping the longer form as a secondary alias so existing query params still resolve. --- public/src/data/ai.js | 6 +++--- public/src/data/ai.js.map | 2 +- src/data/ai.ts | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/public/src/data/ai.js b/public/src/data/ai.js index 266bb39..3c772c6 100644 --- a/public/src/data/ai.js +++ b/public/src/data/ai.js @@ -26,7 +26,7 @@ const ai = [ xOffset: 0, }, { - name: ['GoogleGemini', 'Gemini'], + name: ['Gemini', 'GoogleGemini'], colorFrom: '#DBD1EC', colorTo: '#8E75B2', icon: ` @@ -38,7 +38,7 @@ const ai = [ xOffset: 0, }, { - name: ['GitHubCopilot', 'Copilot'], + name: ['Copilot', 'GitHubCopilot'], colorFrom: '#B3B3B3', colorTo: '#000000', icon: ` @@ -62,7 +62,7 @@ const ai = [ xOffset: 0, }, { - name: ['MistralAI', 'Mistral'], + name: ['Mistral', 'MistralAI'], colorFrom: '#FDC79E', colorTo: '#FA520F', icon: ` diff --git a/public/src/data/ai.js.map b/public/src/data/ai.js.map index d6d9cb5..5b29a09 100644 --- a/public/src/data/ai.js.map +++ b/public/src/data/ai.js.map @@ -1 +1 @@ -{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../src/data/ai.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../src/data/ai.ts"],"names":[],"mappings":";;AAEA,MAAM,EAAE,GAAe;IACnB;QACI,IAAI,EAAE,CAAC,WAAW,CAAC;QACnB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC;QAChC,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;QAClC,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,YAAY,CAAC;QACpB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC;QAC9B,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,aAAa,CAAC;QACrB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,WAAW,CAAC;QACnB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,UAAU,CAAC;QAClB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;IACD;QACI,IAAI,EAAE,CAAC,WAAW,CAAC;QACnB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE;;;SAGL;QACD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC;KACb;CACJ,CAAA;AAED,kBAAe,EAAE,CAAA"} \ No newline at end of file diff --git a/src/data/ai.ts b/src/data/ai.ts index bc9017a..12aeea1 100644 --- a/src/data/ai.ts +++ b/src/data/ai.ts @@ -26,7 +26,7 @@ const ai: IconData[] = [ xOffset: 0, }, { - name: ['GoogleGemini', 'Gemini'], + name: ['Gemini', 'GoogleGemini'], colorFrom: '#DBD1EC', colorTo: '#8E75B2', icon: ` @@ -38,7 +38,7 @@ const ai: IconData[] = [ xOffset: 0, }, { - name: ['GitHubCopilot', 'Copilot'], + name: ['Copilot', 'GitHubCopilot'], colorFrom: '#B3B3B3', colorTo: '#000000', icon: ` @@ -62,7 +62,7 @@ const ai: IconData[] = [ xOffset: 0, }, { - name: ['MistralAI', 'Mistral'], + name: ['Mistral', 'MistralAI'], colorFrom: '#FDC79E', colorTo: '#FA520F', icon: `