[{"data":1,"prerenderedAt":520},["ShallowReactive",2],{"\u002Fprojects\u002Flichtbild":3,"github-\u002Fprojects\u002Flichtbild":112,"skills":117},{"id":4,"title":5,"body":6,"description":81,"extension":82,"featured":83,"image":84,"languages":85,"links":92,"meta":93,"navigation":94,"path":95,"repo":96,"seo":97,"skills":100,"stem":110,"__hash__":111},"projects\u002Fprojects\u002Flichtbild.md","lichtbild",{"type":7,"value":8,"toc":74},"minimark",[9,13,16,21,29,32,36,71],[10,11,12],"p",{},"Nach jedem Shooting stellt sich die gleiche Frage: Wie kommen die Fotos zu den Leuten? WhatsApp zerstampft die Qualität, Cloud-Alben brauchen Accounts und die Originale liegen am Ende bei irgendeinem Drittanbieter.",[10,14,15],{},"lichtbild ist meine eigene Lösung: eine selbst-gehostete Foto-Sharing-App für den Freundeskreis. Ich lege pro Shooting ein Projekt an, lade die Fotos hoch und verschicke einfach einen Link – optional mit PIN. Wer den Link hat, braucht keinen Account: Gäste bekommen eine anonyme Device-ID und können direkt reagieren, herunterladen und speichern.",[17,18,20],"h3",{"id":19},"save-to-photos-wie-es-sein-soll","Save to Photos, wie es sein soll",[10,22,23,24,28],{},"Das wichtigste Feature ist auf iOS zu Hause: Ausgewählte Fotos landen über das native Share Sheet direkt in der Foto-Mediathek. Damit Safari dabei mitspielt, werden die Fotos in 12er-Batches vorgeladen, sodass ",[25,26,27],"code",{},"navigator.share()"," synchron innerhalb der Tap-Geste feuern kann – sonst lässt Safari das Share Sheet einfach fallen.",[10,30,31],{},"Dazu kommen Quick-Exports für Socials: Ein Tap erzeugt einen 1:1-Post- oder 9:16-Story-Crop und teilt ihn direkt.",[17,33,35],{"id":34},"die-details","Die Details",[37,38,39,47,53,59,65],"ul",{},[40,41,42,46],"li",{},[43,44,45],"strong",{},"Reactions wie in WhatsApp"," – ein Emoji pro Gerät und Foto, ein neues ersetzt das alte.",[40,48,49,52],{},[43,50,51],{},"Originale auf der eigenen Nextcloud"," – ein eigener Storage-Provider auf Basis meines nuxt-filer-Moduls legt die Original-Dateien per WebDAV auf meiner Nextcloud ab, während Metadaten in Postgres leben.",[40,54,55,58],{},[43,56,57],{},"Ingest-Pipeline"," – beim Upload werden EXIF-Daten (Kamera, Objektiv, Belichtung) extrahiert und Blurhash-Platzhalter berechnet, damit Grid und Lightbox ohne Layout-Sprünge laden.",[40,60,61,64],{},[43,62,63],{},"ZIP-Downloads im Browser"," – Mehrfach-Downloads werden clientseitig gestreamt gezippt, mit Auswahl zwischen Web-, High- und Original-Auflösung.",[40,66,67,70],{},[43,68,69],{},"Mobile-Web-Polish"," – Pull-to-Refresh, Safe-Area-Handling und Session-Cookies, die iOS Safari auch nach Wochen nicht verliert.",[10,72,73],{},"Als Nächstes steht die Gesichtserkennung an: Das Schema für Personen und Face-Embeddings (pgvector) ist schon angelegt, damit sich Galerien bald nach Personen filtern lassen.",{"title":75,"searchDepth":76,"depth":76,"links":77},"",2,[78,80],{"id":19,"depth":79,"text":20},3,{"id":34,"depth":79,"text":35},"lichtbild ist eine selbst-gehostete Foto-Sharing-App, mit der ich Shootings mit Freunden teile – ohne Account, dafür mit Save-to-Photos und Reactions.","md",false,"\u002Fimages\u002Fprojects\u002Fcards\u002Flichtbild.png",[86,89],{"language":87,"percentage":88},"Nuxt",55,{"language":90,"percentage":91},"TypeScript",45,[],{},true,"\u002Fprojects\u002Flichtbild","Niki2k1\u002Flichtbild",{"title":98,"description":99},"lichtbild – Self-hosted Foto-Sharing","lichtbild ist eine selbst-gehostete Foto-Sharing-App für Shootings mit Freunden – PIN-geschützte Galerien ohne Account, Save-to-Photos über das iOS Share Sheet, Emoji-Reactions und Originale auf der eigenen Nextcloud.",[101,102,103,104,105,106,107,108,109],"nuxt","vue","typescript","nuxt-ui","tailwind","postgres","drizzle-orm","docker","vitest","projects\u002Flichtbild","3U9qZ6qhnS2zZGDixcbQ_7v1F3evrplSX_-5kb64F1Y",{"stars":113,"forks":113,"createdAt":114,"pushedAt":115,"commitCount":91,"activity":116},0,"2026-07-20T06:05:24Z","2026-07-20T17:48:08Z",[113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113],[118,130,141,150,159,168,179,188,197,205,213,221,230,238,247,255,264,272,281,291,299,307,315,323,331,338,345,352,361,369,377,385,393,401,409,417,425,433,441,449,457,464,472,480,488,496,504,512],{"id":119,"category":120,"extension":121,"icon":122,"level":123,"meta":124,"name":125,"stem":126,"url":127,"year":128,"__hash__":129},"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":131,"category":132,"extension":121,"icon":133,"level":134,"meta":135,"name":136,"stem":137,"url":138,"year":139,"__hash__":140},"skills\u002Fskills\u002Fazure.yml","DevOps","i-logos-microsoft-azure","Proficient",{},"Azure","skills\u002Fazure","https:\u002F\u002Fazure.microsoft.com","2021","uhi9OV2kz1bgheQ-n9srKx0HSUYlYI7MuyjObYDUgrQ",{"id":142,"category":120,"extension":121,"icon":143,"level":134,"meta":144,"name":145,"stem":146,"url":147,"year":148,"__hash__":149},"skills\u002Fskills\u002Fbun.yml","i-logos-bun",{},"Bun","skills\u002Fbun","https:\u002F\u002Fbun.sh","2024","bkieq8AIp5NIJh3xetY96f7WfuFNjAMI7oevfWb1W-0",{"id":151,"category":152,"extension":121,"icon":153,"level":123,"meta":154,"name":155,"stem":156,"url":157,"year":128,"__hash__":158},"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":160,"category":132,"extension":121,"icon":161,"level":134,"meta":162,"name":163,"stem":164,"url":165,"year":166,"__hash__":167},"skills\u002Fskills\u002Fcoolify.yml","i-simple-icons-coolify",{},"Coolify","skills\u002Fcoolify","https:\u002F\u002Fcoolify.io","2023","uh7httXSb9SS1ggRLMKgfmPi2mgMtqNgSGUnSDHeAXk",{"id":169,"category":170,"extension":121,"icon":171,"level":172,"meta":173,"name":174,"stem":175,"url":176,"year":177,"__hash__":178},"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":180,"category":120,"extension":121,"icon":181,"level":123,"meta":182,"name":183,"stem":184,"url":185,"year":186,"__hash__":187},"skills\u002Fskills\u002Fdeno.yml","i-logos-deno",{},"Deno","skills\u002Fdeno","https:\u002F\u002Fdeno.com","2022","8A31HmVc4GmvzZgLwJKLp_Km8w1T5q_vG3TVVtDOHnQ",{"id":189,"category":132,"extension":121,"icon":190,"level":172,"meta":191,"name":192,"stem":193,"url":194,"year":195,"__hash__":196},"skills\u002Fskills\u002Fdocker.yml","i-logos-docker-icon",{},"Docker","skills\u002Fdocker","https:\u002F\u002Fwww.docker.com","2018","uyfqCF9l6H7XsIozx1X-BUtL2KULygtDHq2cOZARNZ0",{"id":198,"category":120,"extension":121,"icon":199,"level":134,"meta":200,"name":201,"stem":202,"url":203,"year":166,"__hash__":204},"skills\u002Fskills\u002Fdrizzle-orm.yml","\u002Fimages\u002Fskills\u002Fdrizzle.png",{},"Drizzle ORM","skills\u002Fdrizzle-orm","https:\u002F\u002Form.drizzle.team","zWErcCRBV0E4HJ5FqPZd5-J3wK3j9Yw25nOgK2Qy5hw",{"id":206,"category":152,"extension":121,"icon":207,"level":123,"meta":208,"name":209,"stem":210,"url":211,"year":128,"__hash__":212},"skills\u002Fskills\u002Felectron.yml","i-logos-electron",{},"Electron","skills\u002Felectron","https:\u002F\u002Fwww.electronjs.org","fraXMojywwTj5bFfI5bkZhPnQV48uvu0gcmqTT5a4_U",{"id":214,"category":120,"extension":121,"icon":215,"level":134,"meta":216,"name":217,"stem":218,"url":219,"year":195,"__hash__":220},"skills\u002Fskills\u002Fexpress.yml","i-simple-icons-express",{},"Express","skills\u002Fexpress","https:\u002F\u002Fexpressjs.com","HDN_-ZUR4vI-cmgZ4yy84nm94T5rgkV3mr3PQjeBwe4",{"id":222,"category":152,"extension":121,"icon":223,"level":123,"meta":224,"name":225,"stem":226,"url":227,"year":228,"__hash__":229},"skills\u002Fskills\u002Fffmpeg.yml","i-logos-ffmpeg-icon",{},"ffmpeg","skills\u002Fffmpeg","https:\u002F\u002Fffmpeg.org","2020","ApV9_VXvOROhOvHzPYhx23qctHIqsAdUiIIvG6U8HeE",{"id":231,"category":152,"extension":121,"icon":232,"level":134,"meta":233,"name":234,"stem":235,"url":236,"year":139,"__hash__":237},"skills\u002Fskills\u002Ffigma.yml","i-logos-figma",{},"Figma","skills\u002Ffigma","https:\u002F\u002Fwww.figma.com","7YpzoWeTiTmAMs8PL1jIfpLLzHc028OaNC-k2XmWF7c",{"id":239,"category":240,"extension":121,"icon":241,"level":134,"meta":242,"name":243,"stem":244,"url":245,"year":228,"__hash__":246},"skills\u002Fskills\u002Ffirebase.yml","Data","i-logos-firebase",{},"Firebase","skills\u002Ffirebase","https:\u002F\u002Ffirebase.google.com","2BZXkjqAiQI7NcBh95AwkW55Kg9OYJcTd4g7BZlVyH8",{"id":248,"category":120,"extension":121,"icon":249,"level":172,"meta":250,"name":251,"stem":252,"url":253,"year":166,"__hash__":254},"skills\u002Fskills\u002Fgo.yml","i-logos-go",{},"Go","skills\u002Fgo","https:\u002F\u002Fgo.dev","jfqLu9ALZexHbFIxbNX4hXCa9YWsGQ_J879h7nG3Mwg",{"id":256,"category":132,"extension":121,"icon":257,"level":134,"meta":258,"name":259,"stem":260,"url":261,"year":262,"__hash__":263},"skills\u002Fskills\u002Fgrafana.yml","i-logos-grafana",{},"Grafana","skills\u002Fgrafana","https:\u002F\u002Fgrafana.com","2019","bAJDLy0__P9oiyY9zBlhcQLKAc6ijpLfODLoQFmcXRk",{"id":265,"category":170,"extension":121,"icon":266,"level":172,"meta":267,"name":268,"stem":269,"url":270,"year":177,"__hash__":271},"skills\u002Fskills\u002Fhtml.yml","i-logos-html-5",{},"HTML","skills\u002Fhtml","https:\u002F\u002Fdeveloper.mozilla.org\u002Fdocs\u002FWeb\u002FHTML","uKm-23PNdCtyRNJPSwsp0T81LlpZYyDem_nanppkV40",{"id":273,"category":170,"extension":121,"icon":274,"level":172,"meta":275,"name":276,"stem":277,"url":278,"year":279,"__hash__":280},"skills\u002Fskills\u002Fjavascript.yml","i-logos-javascript",{},"JavaScript","skills\u002Fjavascript","https:\u002F\u002Fdeveloper.mozilla.org\u002Fdocs\u002FWeb\u002FJavaScript","2017","IAVd2T2nFt-Keg7ky5OkJQv0XHXgH5Q6azMVo_EwOZc",{"id":282,"category":283,"extension":121,"icon":284,"level":123,"meta":285,"name":286,"stem":287,"url":288,"year":289,"__hash__":290},"skills\u002Fskills\u002Fk6.yml","Testing","i-simple-icons-k6",{},"k6","skills\u002Fk6","https:\u002F\u002Fk6.io","2025","9LQe3jOXpzWYeu4o8j4frNKF_kRfmU34bztg9h0iybs",{"id":292,"category":132,"extension":121,"icon":293,"level":134,"meta":294,"name":295,"stem":296,"url":297,"year":139,"__hash__":298},"skills\u002Fskills\u002Fkubernetes.yml","i-logos-kubernetes",{},"Kubernetes","skills\u002Fkubernetes","https:\u002F\u002Fkubernetes.io","QZKWLGxmYYLjqMaWXYElwW6LzZIhRiWviV7EqzTuf20",{"id":300,"category":132,"extension":121,"icon":301,"level":123,"meta":302,"name":303,"stem":304,"url":305,"year":289,"__hash__":306},"skills\u002Fskills\u002Floki.yml","\u002Fimages\u002Fskills\u002Floki.png",{},"Loki","skills\u002Floki","https:\u002F\u002Fgrafana.com\u002Foss\u002Floki","6XbX8pKz3kJ-UNj2sa0D5jiJpCuOjHZPHW6K0p9yc5c",{"id":308,"category":240,"extension":121,"icon":309,"level":134,"meta":310,"name":311,"stem":312,"url":313,"year":228,"__hash__":314},"skills\u002Fskills\u002Fmongodb.yml","i-logos-mongodb-icon",{},"MongoDB","skills\u002Fmongodb","https:\u002F\u002Fwww.mongodb.com","vAymZsawe3eHWefRddwCPUkOz4ENH0f27f3c7qoPaiU",{"id":316,"category":120,"extension":121,"icon":317,"level":134,"meta":318,"name":319,"stem":320,"url":321,"year":139,"__hash__":322},"skills\u002Fskills\u002Fnest.yml","i-logos-nestjs",{},"Nest","skills\u002Fnest","https:\u002F\u002Fnestjs.com","_k_OLI2yWacjZ6bnL_2SY5foR4PTtG05W754HMLaw84",{"id":324,"category":120,"extension":121,"icon":325,"level":172,"meta":326,"name":327,"stem":328,"url":329,"year":195,"__hash__":330},"skills\u002Fskills\u002Fnode-js.yml","i-logos-nodejs-icon",{},"Node.js","skills\u002Fnode-js","https:\u002F\u002Fnodejs.org","EDZpDGWxfyGs0KkLE0Lb99w_kAQ3M6Q7drthHbUYEY0",{"id":332,"category":170,"extension":121,"icon":333,"level":172,"meta":334,"name":87,"stem":335,"url":336,"year":186,"__hash__":337},"skills\u002Fskills\u002Fnuxt.yml","i-logos-nuxt-icon",{},"skills\u002Fnuxt","https:\u002F\u002Fnuxt.com","kH1NvQG2PGmpWgMoKRLQGjTCwFTGQmiXgMDGdRNAcOI",{"id":339,"category":170,"extension":121,"icon":333,"level":134,"meta":340,"name":341,"stem":342,"url":343,"year":148,"__hash__":344},"skills\u002Fskills\u002Fnuxt-content.yml",{},"Nuxt Content","skills\u002Fnuxt-content","https:\u002F\u002Fcontent.nuxt.com","RgsSePMO7r_6Hu61Hnfy5f4ll2ofq37vk0rJxmPjfg0",{"id":346,"category":170,"extension":121,"icon":333,"level":134,"meta":347,"name":348,"stem":349,"url":350,"year":148,"__hash__":351},"skills\u002Fskills\u002Fnuxt-ui.yml",{},"Nuxt UI","skills\u002Fnuxt-ui","https:\u002F\u002Fui.nuxt.com","e8h3Pmq1FaZ6dXccd_HW3_NTbNofuk5zfmn7_FmlBnU",{"id":353,"category":120,"extension":121,"icon":354,"level":123,"meta":355,"name":356,"stem":357,"url":358,"year":359,"__hash__":360},"skills\u002Fskills\u002Fphp.yml","i-logos-php",{},"PHP","skills\u002Fphp","https:\u002F\u002Fwww.php.net","2016","s1Q64crnDcVTJ7GDn-w43Gl5HMI8gYVM7AOWotWdEWc",{"id":362,"category":170,"extension":121,"icon":363,"level":134,"meta":364,"name":365,"stem":366,"url":367,"year":186,"__hash__":368},"skills\u002Fskills\u002Fpinia.yml","i-logos-pinia",{},"Pinia","skills\u002Fpinia","https:\u002F\u002Fpinia.vuejs.org","otf3EcrCxdIwH7CiBpeIxBI-K0pma63F5TzHHSN51IA",{"id":370,"category":283,"extension":121,"icon":371,"level":134,"meta":372,"name":373,"stem":374,"url":375,"year":148,"__hash__":376},"skills\u002Fskills\u002Fplaywright.yml","i-logos-playwright",{},"Playwright","skills\u002Fplaywright","https:\u002F\u002Fplaywright.dev","U-Tn8P9DTjsve7P0YEyG-yEgkuI9kLgoY3KIcnUZ8Qw",{"id":378,"category":240,"extension":121,"icon":379,"level":172,"meta":380,"name":381,"stem":382,"url":383,"year":148,"__hash__":384},"skills\u002Fskills\u002Fpostgres.yml","i-logos-postgresql",{},"Postgres","skills\u002Fpostgres","https:\u002F\u002Fwww.postgresql.org","SkbJBjm46QnLyVmsyIEO7LGDxT46TkJ5yLBcO-KOl3A",{"id":386,"category":120,"extension":121,"icon":387,"level":134,"meta":388,"name":389,"stem":390,"url":391,"year":166,"__hash__":392},"skills\u002Fskills\u002Fprisma.yml","i-logos-prisma",{},"Prisma","skills\u002Fprisma","https:\u002F\u002Fwww.prisma.io","q8u6bLwKxVNFZN18eMkhkkQW9KO1tzZzNCryalAhOQU",{"id":394,"category":132,"extension":121,"icon":395,"level":123,"meta":396,"name":397,"stem":398,"url":399,"year":289,"__hash__":400},"skills\u002Fskills\u002Fprometheus.yml","i-logos-prometheus",{},"Prometheus","skills\u002Fprometheus","https:\u002F\u002Fprometheus.io","wFPFPMT9NMAGyNakkGxpy1sdEZkiIYGD14Z-a9iSh7Y",{"id":402,"category":120,"extension":121,"icon":403,"level":123,"meta":404,"name":405,"stem":406,"url":407,"year":148,"__hash__":408},"skills\u002Fskills\u002Fpruvious.yml","\u002Fimages\u002Fskills\u002Fpruvious.svg",{},"Pruvious","skills\u002Fpruvious","https:\u002F\u002Fpruvious.com","OPpO35l5b9442tiQxW7FFq8LEVi8h2xGuNHgriT2UXM",{"id":410,"category":170,"extension":121,"icon":411,"level":134,"meta":412,"name":413,"stem":414,"url":415,"year":195,"__hash__":416},"skills\u002Fskills\u002Freact.yml","i-logos-react",{},"React","skills\u002Freact","https:\u002F\u002Freact.dev","0GbioLLfFPZRDh0rOzkolvqdcZFEEMKUh0_3lzOVaL4",{"id":418,"category":240,"extension":121,"icon":419,"level":134,"meta":420,"name":421,"stem":422,"url":423,"year":148,"__hash__":424},"skills\u002Fskills\u002Fsqlite.yml","i-logos-sqlite",{},"SQLite","skills\u002Fsqlite","https:\u002F\u002Fwww.sqlite.org","gHx-0xMVX6TE88ObCbbLoWfkLG1t3B_z6zSzT8m__fI",{"id":426,"category":120,"extension":121,"icon":427,"level":134,"meta":428,"name":429,"stem":430,"url":431,"year":166,"__hash__":432},"skills\u002Fskills\u002Fstripe.yml","i-logos-stripe",{},"Stripe","skills\u002Fstripe","https:\u002F\u002Fstripe.com","UGj0EO6yOfztwtcQ_wMiqUU1UYgTLbB5jxl9e-asFpA",{"id":434,"category":170,"extension":121,"icon":435,"level":172,"meta":436,"name":437,"stem":438,"url":439,"year":166,"__hash__":440},"skills\u002Fskills\u002Ftailwind.yml","i-logos-tailwindcss-icon",{},"Tailwind","skills\u002Ftailwind","https:\u002F\u002Ftailwindcss.com","VkKWaTtKA70dUgAsMIDKN8N94TH1MsU8-b1kPUx-Wq8",{"id":442,"category":170,"extension":121,"icon":443,"level":123,"meta":444,"name":445,"stem":446,"url":447,"year":289,"__hash__":448},"skills\u002Fskills\u002Ftiptap.yml","i-custom-tiptap",{},"Tiptap","skills\u002Ftiptap","https:\u002F\u002Ftiptap.dev","gBw3cx61wA-4kZNeChkBoB38Z2aS7Y5P7_ufagI8BSU",{"id":450,"category":132,"extension":121,"icon":451,"level":123,"meta":452,"name":453,"stem":454,"url":455,"year":166,"__hash__":456},"skills\u002Fskills\u002Ftraefik.yml","i-simple-icons-traefikproxy",{},"Traefik","skills\u002Ftraefik","https:\u002F\u002Ftraefik.io","o-rECQEfSq4kbulKrfx14EeER1PTEYFavnEQHhAuaBw",{"id":458,"category":170,"extension":121,"icon":459,"level":172,"meta":460,"name":90,"stem":461,"url":462,"year":262,"__hash__":463},"skills\u002Fskills\u002Ftypescript.yml","i-logos-typescript-icon",{},"skills\u002Ftypescript","https:\u002F\u002Fwww.typescriptlang.org","C6S0SKAC_EKz2ITnMm4hCCUKG2P5KsOfbGXqMzFI-EY",{"id":465,"category":152,"extension":121,"icon":466,"level":134,"meta":467,"name":468,"stem":469,"url":470,"year":186,"__hash__":471},"skills\u002Fskills\u002Fvite.yml","i-logos-vitejs",{},"Vite","skills\u002Fvite","https:\u002F\u002Fvite.dev","TpxW7LK8p6-A-XypTE_uBmHo2vAWbB_1Zy8pSt8Ih8A",{"id":473,"category":283,"extension":121,"icon":474,"level":134,"meta":475,"name":476,"stem":477,"url":478,"year":166,"__hash__":479},"skills\u002Fskills\u002Fvitest.yml","i-logos-vitest",{},"Vitest","skills\u002Fvitest","https:\u002F\u002Fvitest.dev","IS5nla0e3iC4ACuhoQjqBEdsXwdYY2WRZ118YrtMNHg",{"id":481,"category":170,"extension":121,"icon":482,"level":172,"meta":483,"name":484,"stem":485,"url":486,"year":262,"__hash__":487},"skills\u002Fskills\u002Fvue.yml","i-logos-vue",{},"Vue","skills\u002Fvue","https:\u002F\u002Fvuejs.org","F0ztv5f98yIVCbyfDGbwlJ22KROp3yL3Izjp0VBWlAU",{"id":489,"category":170,"extension":121,"icon":490,"level":123,"meta":491,"name":492,"stem":493,"url":494,"year":139,"__hash__":495},"skills\u002Fskills\u002Fvuetify.yml","i-logos-vuetifyjs",{},"Vuetify","skills\u002Fvuetify","https:\u002F\u002Fvuetifyjs.com","g2xXVDYSXlGLfnyLDkx3zPBVc3BCYEiGx5Ilh5-pTT4",{"id":497,"category":170,"extension":121,"icon":498,"level":134,"meta":499,"name":500,"stem":501,"url":502,"year":166,"__hash__":503},"skills\u002Fskills\u002Fvueuse.yml","i-logos-vueuse",{},"VueUse","skills\u002Fvueuse","https:\u002F\u002Fvueuse.org","-6U_Vo_7APwR3Oo6rLI2mWO_Emse0aAoL1vL4noxZEk",{"id":505,"category":152,"extension":121,"icon":506,"level":134,"meta":507,"name":508,"stem":509,"url":510,"year":166,"__hash__":511},"skills\u002Fskills\u002Fwhisper.yml","i-simple-icons-openai",{},"Whisper","skills\u002Fwhisper","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fwhisper","KtdfiQb3uVjd4DFgV3SN8y6xCAu-eP81lC8nH3NM0S8",{"id":513,"category":120,"extension":121,"icon":514,"level":134,"meta":515,"name":516,"stem":517,"url":518,"year":166,"__hash__":519},"skills\u002Fskills\u002Fzod.yml","i-logos-zod",{},"Zod","skills\u002Fzod","https:\u002F\u002Fzod.dev","DLk6ZAEEgRjsJqbGw9uXcZmhZaVQZj7gSbhWpolBDNk",1784578080523]