[{"data":1,"prerenderedAt":524},["ShallowReactive",2],{"\u002Fprojects\u002Fgridfinity-studio":3,"github-\u002Fprojects\u002Fgridfinity-studio":114,"skills":121},{"id":4,"title":5,"body":6,"description":84,"extension":85,"featured":86,"image":87,"languages":88,"links":95,"meta":96,"navigation":86,"path":97,"repo":98,"seo":99,"skills":102,"stem":112,"__hash__":113},"projects\u002Fprojects\u002Fgridfinity-studio.md","Gridfinity Studio",{"type":7,"value":8,"toc":76},"minimark",[9,13,29,34,37,40,44,47,63,66,70,73],[10,11,12],"p",{},"Gridfinity ist ein offener Standard für modulare 3D-gedruckte Aufbewahrung: Baseplates im 42-mm-Raster, darauf stapelbare Bins. Das Tooling dafür ist allerdings über vier verschiedene Single-Purpose-Web-Tools verstreut – eins generiert hübsche Bins, eins plant Schubladen-Layouts, eins traced Werkzeuge aus Fotos. Keins kann den ganzen Workflow.",[10,14,15,16,20,21,24,25,28],{},"Gridfinity Studio ist mein Versuch, das zu ändern: eine Desktop-App im Stil einer FreeCAD-Werkbank, die alle drei Säulen vereint – ",[17,18,19],"strong",{},"Plan"," (eine echte Schublade millimetergenau auslegen), ",[17,22,23],{},"Generate"," (parametrische Bins und Baseplates mit Live-3D-Vorschau) und ",[17,26,27],{},"Tools"," (ein reales Werkzeug vom Foto in einen passgenauen Einsatz verwandeln). Alles läuft lokal und offline, ohne Server.",[30,31,33],"h3",{"id":32},"eine-eigene-geometrie-engine","Eine eigene Geometrie-Engine",[10,35,36],{},"Das Herzstück ist eine selbst gebaute Sweep-Geometrie: Die CSG-Bibliothek manifold-3d kennt keine Sweep-Operation, also baue ich die Gridfinity-Fuß- und Lippen-Profile als indizierte Triangle-Meshes von Hand – ein geschlossenes 2D-Profil, das entlang eines abgerundeten Rechtecks extrudiert und an den Ecken revolved wird. Die Booleans laufen als WASM in einem Web Worker, damit die Parameter-Slider flüssig bleiben.",[10,38,39],{},"Exportiert wird über handgeschriebene Writer: binäres STL, 3MF als ZIP+XML mit eingebetteten Parametern (sodass sich Dateien wieder importieren und weiterbearbeiten lassen) – und für Schaumstoff-Shadowboards millimetergenaues SVG und DXF für Laser und CNC.",[30,41,43],{"id":42},"werkzeuge-tracen-mit-und-ohne-ki","Werkzeuge tracen – mit und ohne KI",[10,45,46],{},"Für die Tools-Säule liegen zwei Tracer nebeneinander:",[48,49,50,57],"ul",{},[51,52,53,56],"li",{},[17,54,55],{},"MobileSAM lokal"," – Segmentierung per onnxruntime-web, komplett offline; der schwere Encoder läuft einmal pro Foto, der Prompt-Decoder in ~100 ms pro Klick.",[51,58,59,62],{},[17,60,61],{},"Klassische CV-Pipeline ohne Dependencies"," – Graustufen → Otsu-Threshold → Marching Squares → Douglas-Peucker → Chaikin-Smoothing. Die Skalierung kommt von vier per Hand markierten Ecken eines Blatts Papier unter dem Werkzeug: Eine Homographie rechnet Bild-Pixel in echte Millimeter um.",[10,64,65],{},"Getracte Umrisse lassen sich anschließend wie in Figma mit Bezier-Pfadwerkzeugen nachbearbeiten.",[30,67,69],{"id":68},"verlässlich-durch-invarianten-tests","Verlässlich durch Invarianten-Tests",[10,71,72],{},"Damit die generierten Meshes wirklich druckbar sind, sichern 79 Vitest-Cases Geometrie-Invarianten ab – wasserdicht, korrektes Genus, plausibles Volumen – validiert gegen die OpenSCAD-Referenzimplementierung.",[10,74,75],{},"Gridfinity Studio ist ein aktives Herzensprojekt – und meine Schubladen werden langsam wirklich ordentlich.",{"title":77,"searchDepth":78,"depth":78,"links":79},"",2,[80,82,83],{"id":32,"depth":81,"text":33},3,{"id":42,"depth":81,"text":43},{"id":68,"depth":81,"text":69},"Gridfinity Studio ist eine Desktop-App, die Planen, Generieren und Foto-Tracing für das Gridfinity-3D-Druck-System in einer Werkbank vereint.","md",true,"\u002Fimages\u002Fprojects\u002Fcards\u002Fgridfinity-studio.png",[89,92],{"language":90,"percentage":91},"TypeScript",65,{"language":93,"percentage":94},"Vue",35,[],{},"\u002Fprojects\u002Fgridfinity-studio","Niki2k1\u002Fgridfinity-studio",{"title":100,"description":101},"Gridfinity Studio – Werkbank für das Gridfinity-System","Gridfinity Studio ist eine Electron-Desktop-App für das Gridfinity-3D-Druck-System – Schubladen planen, parametrische Bins mit Live-3D-Vorschau generieren und Werkzeuge per Foto tracen, komplett offline mit eigener CSG-Geometrie-Engine.",[103,104,105,106,107,108,109,110,111],"electron","nuxt","vue","typescript","nuxt-ui","pinia","tailwind","vite","vitest","projects\u002Fgridfinity-studio","55VNX3zsqX_aQUZQzwsxzarT38p9qJXONsSIY_5oNu8",{"stars":115,"forks":115,"createdAt":116,"pushedAt":117,"commitCount":118,"activity":119},0,"2026-07-20T08:56:28Z","2026-07-20T08:56:32Z",29,[115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,120,115,115],28,[122,134,145,154,163,172,183,192,201,209,217,225,234,242,251,259,268,276,285,295,303,311,319,327,335,343,350,357,366,374,382,390,398,406,414,422,430,438,446,454,462,469,477,485,492,500,508,516],{"id":123,"category":124,"extension":125,"icon":126,"level":127,"meta":128,"name":129,"stem":130,"url":131,"year":132,"__hash__":133},"skills\u002Fskills\u002Fai-sdk.yml","Backend","yml","i-logos-vercel-icon","Familiar",{},"AI SDK","skills\u002Fai-sdk","https:\u002F\u002Fai-sdk.dev","2026","wrZ81rlAkAtAOUgPZ3O7XKZVo_ZA40usaRMX1x2QIqI",{"id":135,"category":136,"extension":125,"icon":137,"level":138,"meta":139,"name":140,"stem":141,"url":142,"year":143,"__hash__":144},"skills\u002Fskills\u002Fazure.yml","DevOps","i-logos-microsoft-azure","Proficient",{},"Azure","skills\u002Fazure","https:\u002F\u002Fazure.microsoft.com","2021","uhi9OV2kz1bgheQ-n9srKx0HSUYlYI7MuyjObYDUgrQ",{"id":146,"category":124,"extension":125,"icon":147,"level":138,"meta":148,"name":149,"stem":150,"url":151,"year":152,"__hash__":153},"skills\u002Fskills\u002Fbun.yml","i-logos-bun",{},"Bun","skills\u002Fbun","https:\u002F\u002Fbun.sh","2024","bkieq8AIp5NIJh3xetY96f7WfuFNjAMI7oevfWb1W-0",{"id":155,"category":156,"extension":125,"icon":157,"level":127,"meta":158,"name":159,"stem":160,"url":161,"year":132,"__hash__":162},"skills\u002Fskills\u002Fclaude-code.yml","Tooling","i-logos-claude-icon",{},"Claude Code","skills\u002Fclaude-code","https:\u002F\u002Fclaude.com\u002Fclaude-code","nq8UwiCtks6-HbLWOie3mLLRI_0FcRckcL4OK0btTzI",{"id":164,"category":136,"extension":125,"icon":165,"level":138,"meta":166,"name":167,"stem":168,"url":169,"year":170,"__hash__":171},"skills\u002Fskills\u002Fcoolify.yml","i-simple-icons-coolify",{},"Coolify","skills\u002Fcoolify","https:\u002F\u002Fcoolify.io","2023","uh7httXSb9SS1ggRLMKgfmPi2mgMtqNgSGUnSDHeAXk",{"id":173,"category":174,"extension":125,"icon":175,"level":176,"meta":177,"name":178,"stem":179,"url":180,"year":181,"__hash__":182},"skills\u002Fskills\u002Fcss.yml","Frontend","i-logos-css-3","Core",{},"CSS","skills\u002Fcss","https:\u002F\u002Fdeveloper.mozilla.org\u002Fdocs\u002FWeb\u002FCSS","2013","GLbnVt9JlmOE-RyFF0Pmh8QKVBKq-Qj-uXhgVZkMxBs",{"id":184,"category":124,"extension":125,"icon":185,"level":127,"meta":186,"name":187,"stem":188,"url":189,"year":190,"__hash__":191},"skills\u002Fskills\u002Fdeno.yml","i-logos-deno",{},"Deno","skills\u002Fdeno","https:\u002F\u002Fdeno.com","2022","8A31HmVc4GmvzZgLwJKLp_Km8w1T5q_vG3TVVtDOHnQ",{"id":193,"category":136,"extension":125,"icon":194,"level":176,"meta":195,"name":196,"stem":197,"url":198,"year":199,"__hash__":200},"skills\u002Fskills\u002Fdocker.yml","i-logos-docker-icon",{},"Docker","skills\u002Fdocker","https:\u002F\u002Fwww.docker.com","2018","uyfqCF9l6H7XsIozx1X-BUtL2KULygtDHq2cOZARNZ0",{"id":202,"category":124,"extension":125,"icon":203,"level":138,"meta":204,"name":205,"stem":206,"url":207,"year":170,"__hash__":208},"skills\u002Fskills\u002Fdrizzle-orm.yml","\u002Fimages\u002Fskills\u002Fdrizzle.png",{},"Drizzle ORM","skills\u002Fdrizzle-orm","https:\u002F\u002Form.drizzle.team","zWErcCRBV0E4HJ5FqPZd5-J3wK3j9Yw25nOgK2Qy5hw",{"id":210,"category":156,"extension":125,"icon":211,"level":127,"meta":212,"name":213,"stem":214,"url":215,"year":132,"__hash__":216},"skills\u002Fskills\u002Felectron.yml","i-logos-electron",{},"Electron","skills\u002Felectron","https:\u002F\u002Fwww.electronjs.org","fraXMojywwTj5bFfI5bkZhPnQV48uvu0gcmqTT5a4_U",{"id":218,"category":124,"extension":125,"icon":219,"level":138,"meta":220,"name":221,"stem":222,"url":223,"year":199,"__hash__":224},"skills\u002Fskills\u002Fexpress.yml","i-simple-icons-express",{},"Express","skills\u002Fexpress","https:\u002F\u002Fexpressjs.com","HDN_-ZUR4vI-cmgZ4yy84nm94T5rgkV3mr3PQjeBwe4",{"id":226,"category":156,"extension":125,"icon":227,"level":127,"meta":228,"name":229,"stem":230,"url":231,"year":232,"__hash__":233},"skills\u002Fskills\u002Fffmpeg.yml","i-logos-ffmpeg-icon",{},"ffmpeg","skills\u002Fffmpeg","https:\u002F\u002Fffmpeg.org","2020","ApV9_VXvOROhOvHzPYhx23qctHIqsAdUiIIvG6U8HeE",{"id":235,"category":156,"extension":125,"icon":236,"level":138,"meta":237,"name":238,"stem":239,"url":240,"year":143,"__hash__":241},"skills\u002Fskills\u002Ffigma.yml","i-logos-figma",{},"Figma","skills\u002Ffigma","https:\u002F\u002Fwww.figma.com","7YpzoWeTiTmAMs8PL1jIfpLLzHc028OaNC-k2XmWF7c",{"id":243,"category":244,"extension":125,"icon":245,"level":138,"meta":246,"name":247,"stem":248,"url":249,"year":232,"__hash__":250},"skills\u002Fskills\u002Ffirebase.yml","Data","i-logos-firebase",{},"Firebase","skills\u002Ffirebase","https:\u002F\u002Ffirebase.google.com","2BZXkjqAiQI7NcBh95AwkW55Kg9OYJcTd4g7BZlVyH8",{"id":252,"category":124,"extension":125,"icon":253,"level":176,"meta":254,"name":255,"stem":256,"url":257,"year":170,"__hash__":258},"skills\u002Fskills\u002Fgo.yml","i-logos-go",{},"Go","skills\u002Fgo","https:\u002F\u002Fgo.dev","jfqLu9ALZexHbFIxbNX4hXCa9YWsGQ_J879h7nG3Mwg",{"id":260,"category":136,"extension":125,"icon":261,"level":138,"meta":262,"name":263,"stem":264,"url":265,"year":266,"__hash__":267},"skills\u002Fskills\u002Fgrafana.yml","i-logos-grafana",{},"Grafana","skills\u002Fgrafana","https:\u002F\u002Fgrafana.com","2019","bAJDLy0__P9oiyY9zBlhcQLKAc6ijpLfODLoQFmcXRk",{"id":269,"category":174,"extension":125,"icon":270,"level":176,"meta":271,"name":272,"stem":273,"url":274,"year":181,"__hash__":275},"skills\u002Fskills\u002Fhtml.yml","i-logos-html-5",{},"HTML","skills\u002Fhtml","https:\u002F\u002Fdeveloper.mozilla.org\u002Fdocs\u002FWeb\u002FHTML","uKm-23PNdCtyRNJPSwsp0T81LlpZYyDem_nanppkV40",{"id":277,"category":174,"extension":125,"icon":278,"level":176,"meta":279,"name":280,"stem":281,"url":282,"year":283,"__hash__":284},"skills\u002Fskills\u002Fjavascript.yml","i-logos-javascript",{},"JavaScript","skills\u002Fjavascript","https:\u002F\u002Fdeveloper.mozilla.org\u002Fdocs\u002FWeb\u002FJavaScript","2017","IAVd2T2nFt-Keg7ky5OkJQv0XHXgH5Q6azMVo_EwOZc",{"id":286,"category":287,"extension":125,"icon":288,"level":127,"meta":289,"name":290,"stem":291,"url":292,"year":293,"__hash__":294},"skills\u002Fskills\u002Fk6.yml","Testing","i-simple-icons-k6",{},"k6","skills\u002Fk6","https:\u002F\u002Fk6.io","2025","9LQe3jOXpzWYeu4o8j4frNKF_kRfmU34bztg9h0iybs",{"id":296,"category":136,"extension":125,"icon":297,"level":138,"meta":298,"name":299,"stem":300,"url":301,"year":143,"__hash__":302},"skills\u002Fskills\u002Fkubernetes.yml","i-logos-kubernetes",{},"Kubernetes","skills\u002Fkubernetes","https:\u002F\u002Fkubernetes.io","QZKWLGxmYYLjqMaWXYElwW6LzZIhRiWviV7EqzTuf20",{"id":304,"category":136,"extension":125,"icon":305,"level":127,"meta":306,"name":307,"stem":308,"url":309,"year":293,"__hash__":310},"skills\u002Fskills\u002Floki.yml","\u002Fimages\u002Fskills\u002Floki.png",{},"Loki","skills\u002Floki","https:\u002F\u002Fgrafana.com\u002Foss\u002Floki","6XbX8pKz3kJ-UNj2sa0D5jiJpCuOjHZPHW6K0p9yc5c",{"id":312,"category":244,"extension":125,"icon":313,"level":138,"meta":314,"name":315,"stem":316,"url":317,"year":232,"__hash__":318},"skills\u002Fskills\u002Fmongodb.yml","i-logos-mongodb-icon",{},"MongoDB","skills\u002Fmongodb","https:\u002F\u002Fwww.mongodb.com","vAymZsawe3eHWefRddwCPUkOz4ENH0f27f3c7qoPaiU",{"id":320,"category":124,"extension":125,"icon":321,"level":138,"meta":322,"name":323,"stem":324,"url":325,"year":143,"__hash__":326},"skills\u002Fskills\u002Fnest.yml","i-logos-nestjs",{},"Nest","skills\u002Fnest","https:\u002F\u002Fnestjs.com","_k_OLI2yWacjZ6bnL_2SY5foR4PTtG05W754HMLaw84",{"id":328,"category":124,"extension":125,"icon":329,"level":176,"meta":330,"name":331,"stem":332,"url":333,"year":199,"__hash__":334},"skills\u002Fskills\u002Fnode-js.yml","i-logos-nodejs-icon",{},"Node.js","skills\u002Fnode-js","https:\u002F\u002Fnodejs.org","EDZpDGWxfyGs0KkLE0Lb99w_kAQ3M6Q7drthHbUYEY0",{"id":336,"category":174,"extension":125,"icon":337,"level":176,"meta":338,"name":339,"stem":340,"url":341,"year":190,"__hash__":342},"skills\u002Fskills\u002Fnuxt.yml","i-logos-nuxt-icon",{},"Nuxt","skills\u002Fnuxt","https:\u002F\u002Fnuxt.com","kH1NvQG2PGmpWgMoKRLQGjTCwFTGQmiXgMDGdRNAcOI",{"id":344,"category":174,"extension":125,"icon":337,"level":138,"meta":345,"name":346,"stem":347,"url":348,"year":152,"__hash__":349},"skills\u002Fskills\u002Fnuxt-content.yml",{},"Nuxt Content","skills\u002Fnuxt-content","https:\u002F\u002Fcontent.nuxt.com","RgsSePMO7r_6Hu61Hnfy5f4ll2ofq37vk0rJxmPjfg0",{"id":351,"category":174,"extension":125,"icon":337,"level":138,"meta":352,"name":353,"stem":354,"url":355,"year":152,"__hash__":356},"skills\u002Fskills\u002Fnuxt-ui.yml",{},"Nuxt UI","skills\u002Fnuxt-ui","https:\u002F\u002Fui.nuxt.com","e8h3Pmq1FaZ6dXccd_HW3_NTbNofuk5zfmn7_FmlBnU",{"id":358,"category":124,"extension":125,"icon":359,"level":127,"meta":360,"name":361,"stem":362,"url":363,"year":364,"__hash__":365},"skills\u002Fskills\u002Fphp.yml","i-logos-php",{},"PHP","skills\u002Fphp","https:\u002F\u002Fwww.php.net","2016","s1Q64crnDcVTJ7GDn-w43Gl5HMI8gYVM7AOWotWdEWc",{"id":367,"category":174,"extension":125,"icon":368,"level":138,"meta":369,"name":370,"stem":371,"url":372,"year":190,"__hash__":373},"skills\u002Fskills\u002Fpinia.yml","i-logos-pinia",{},"Pinia","skills\u002Fpinia","https:\u002F\u002Fpinia.vuejs.org","otf3EcrCxdIwH7CiBpeIxBI-K0pma63F5TzHHSN51IA",{"id":375,"category":287,"extension":125,"icon":376,"level":138,"meta":377,"name":378,"stem":379,"url":380,"year":152,"__hash__":381},"skills\u002Fskills\u002Fplaywright.yml","i-logos-playwright",{},"Playwright","skills\u002Fplaywright","https:\u002F\u002Fplaywright.dev","U-Tn8P9DTjsve7P0YEyG-yEgkuI9kLgoY3KIcnUZ8Qw",{"id":383,"category":244,"extension":125,"icon":384,"level":176,"meta":385,"name":386,"stem":387,"url":388,"year":152,"__hash__":389},"skills\u002Fskills\u002Fpostgres.yml","i-logos-postgresql",{},"Postgres","skills\u002Fpostgres","https:\u002F\u002Fwww.postgresql.org","SkbJBjm46QnLyVmsyIEO7LGDxT46TkJ5yLBcO-KOl3A",{"id":391,"category":124,"extension":125,"icon":392,"level":138,"meta":393,"name":394,"stem":395,"url":396,"year":170,"__hash__":397},"skills\u002Fskills\u002Fprisma.yml","i-logos-prisma",{},"Prisma","skills\u002Fprisma","https:\u002F\u002Fwww.prisma.io","q8u6bLwKxVNFZN18eMkhkkQW9KO1tzZzNCryalAhOQU",{"id":399,"category":136,"extension":125,"icon":400,"level":127,"meta":401,"name":402,"stem":403,"url":404,"year":293,"__hash__":405},"skills\u002Fskills\u002Fprometheus.yml","i-logos-prometheus",{},"Prometheus","skills\u002Fprometheus","https:\u002F\u002Fprometheus.io","wFPFPMT9NMAGyNakkGxpy1sdEZkiIYGD14Z-a9iSh7Y",{"id":407,"category":124,"extension":125,"icon":408,"level":127,"meta":409,"name":410,"stem":411,"url":412,"year":152,"__hash__":413},"skills\u002Fskills\u002Fpruvious.yml","\u002Fimages\u002Fskills\u002Fpruvious.svg",{},"Pruvious","skills\u002Fpruvious","https:\u002F\u002Fpruvious.com","OPpO35l5b9442tiQxW7FFq8LEVi8h2xGuNHgriT2UXM",{"id":415,"category":174,"extension":125,"icon":416,"level":138,"meta":417,"name":418,"stem":419,"url":420,"year":199,"__hash__":421},"skills\u002Fskills\u002Freact.yml","i-logos-react",{},"React","skills\u002Freact","https:\u002F\u002Freact.dev","0GbioLLfFPZRDh0rOzkolvqdcZFEEMKUh0_3lzOVaL4",{"id":423,"category":244,"extension":125,"icon":424,"level":138,"meta":425,"name":426,"stem":427,"url":428,"year":152,"__hash__":429},"skills\u002Fskills\u002Fsqlite.yml","i-logos-sqlite",{},"SQLite","skills\u002Fsqlite","https:\u002F\u002Fwww.sqlite.org","gHx-0xMVX6TE88ObCbbLoWfkLG1t3B_z6zSzT8m__fI",{"id":431,"category":124,"extension":125,"icon":432,"level":138,"meta":433,"name":434,"stem":435,"url":436,"year":170,"__hash__":437},"skills\u002Fskills\u002Fstripe.yml","i-logos-stripe",{},"Stripe","skills\u002Fstripe","https:\u002F\u002Fstripe.com","UGj0EO6yOfztwtcQ_wMiqUU1UYgTLbB5jxl9e-asFpA",{"id":439,"category":174,"extension":125,"icon":440,"level":176,"meta":441,"name":442,"stem":443,"url":444,"year":170,"__hash__":445},"skills\u002Fskills\u002Ftailwind.yml","i-logos-tailwindcss-icon",{},"Tailwind","skills\u002Ftailwind","https:\u002F\u002Ftailwindcss.com","VkKWaTtKA70dUgAsMIDKN8N94TH1MsU8-b1kPUx-Wq8",{"id":447,"category":174,"extension":125,"icon":448,"level":127,"meta":449,"name":450,"stem":451,"url":452,"year":293,"__hash__":453},"skills\u002Fskills\u002Ftiptap.yml","i-custom-tiptap",{},"Tiptap","skills\u002Ftiptap","https:\u002F\u002Ftiptap.dev","gBw3cx61wA-4kZNeChkBoB38Z2aS7Y5P7_ufagI8BSU",{"id":455,"category":136,"extension":125,"icon":456,"level":127,"meta":457,"name":458,"stem":459,"url":460,"year":170,"__hash__":461},"skills\u002Fskills\u002Ftraefik.yml","i-simple-icons-traefikproxy",{},"Traefik","skills\u002Ftraefik","https:\u002F\u002Ftraefik.io","o-rECQEfSq4kbulKrfx14EeER1PTEYFavnEQHhAuaBw",{"id":463,"category":174,"extension":125,"icon":464,"level":176,"meta":465,"name":90,"stem":466,"url":467,"year":266,"__hash__":468},"skills\u002Fskills\u002Ftypescript.yml","i-logos-typescript-icon",{},"skills\u002Ftypescript","https:\u002F\u002Fwww.typescriptlang.org","C6S0SKAC_EKz2ITnMm4hCCUKG2P5KsOfbGXqMzFI-EY",{"id":470,"category":156,"extension":125,"icon":471,"level":138,"meta":472,"name":473,"stem":474,"url":475,"year":190,"__hash__":476},"skills\u002Fskills\u002Fvite.yml","i-logos-vitejs",{},"Vite","skills\u002Fvite","https:\u002F\u002Fvite.dev","TpxW7LK8p6-A-XypTE_uBmHo2vAWbB_1Zy8pSt8Ih8A",{"id":478,"category":287,"extension":125,"icon":479,"level":138,"meta":480,"name":481,"stem":482,"url":483,"year":170,"__hash__":484},"skills\u002Fskills\u002Fvitest.yml","i-logos-vitest",{},"Vitest","skills\u002Fvitest","https:\u002F\u002Fvitest.dev","IS5nla0e3iC4ACuhoQjqBEdsXwdYY2WRZ118YrtMNHg",{"id":486,"category":174,"extension":125,"icon":487,"level":176,"meta":488,"name":93,"stem":489,"url":490,"year":266,"__hash__":491},"skills\u002Fskills\u002Fvue.yml","i-logos-vue",{},"skills\u002Fvue","https:\u002F\u002Fvuejs.org","F0ztv5f98yIVCbyfDGbwlJ22KROp3yL3Izjp0VBWlAU",{"id":493,"category":174,"extension":125,"icon":494,"level":127,"meta":495,"name":496,"stem":497,"url":498,"year":143,"__hash__":499},"skills\u002Fskills\u002Fvuetify.yml","i-logos-vuetifyjs",{},"Vuetify","skills\u002Fvuetify","https:\u002F\u002Fvuetifyjs.com","g2xXVDYSXlGLfnyLDkx3zPBVc3BCYEiGx5Ilh5-pTT4",{"id":501,"category":174,"extension":125,"icon":502,"level":138,"meta":503,"name":504,"stem":505,"url":506,"year":170,"__hash__":507},"skills\u002Fskills\u002Fvueuse.yml","i-logos-vueuse",{},"VueUse","skills\u002Fvueuse","https:\u002F\u002Fvueuse.org","-6U_Vo_7APwR3Oo6rLI2mWO_Emse0aAoL1vL4noxZEk",{"id":509,"category":156,"extension":125,"icon":510,"level":138,"meta":511,"name":512,"stem":513,"url":514,"year":170,"__hash__":515},"skills\u002Fskills\u002Fwhisper.yml","i-simple-icons-openai",{},"Whisper","skills\u002Fwhisper","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fwhisper","KtdfiQb3uVjd4DFgV3SN8y6xCAu-eP81lC8nH3NM0S8",{"id":517,"category":124,"extension":125,"icon":518,"level":138,"meta":519,"name":520,"stem":521,"url":522,"year":170,"__hash__":523},"skills\u002Fskills\u002Fzod.yml","i-logos-zod",{},"Zod","skills\u002Fzod","https:\u002F\u002Fzod.dev","DLk6ZAEEgRjsJqbGw9uXcZmhZaVQZj7gSbhWpolBDNk",1784578077643]