[{"data":1,"prerenderedAt":539},["ShallowReactive",2],{"\u002Fprojects\u002Fopenshoot":3,"github-\u002Fprojects\u002Fopenshoot":130,"skills":136},{"id":4,"title":5,"body":6,"description":101,"extension":102,"featured":103,"image":104,"languages":105,"links":112,"meta":113,"navigation":114,"path":115,"repo":116,"seo":117,"skills":120,"stem":128,"__hash__":129},"projects\u002Fprojects\u002Fopenshoot.md","OpenShoot",{"type":7,"value":8,"toc":92},"minimark",[9,13,24,29,37,41,44,48,74,78,89],[10,11,12],"p",{},"Nach jedem Shooting das gleiche Ritual: 2.000 Frames auf der SD-Karte, von denen am Ende vielleicht 50 bleiben. Genau für diesen einen Schritt – vom vollen Kartenslot zur kuratierten Auswahl – ist OpenShoot entstanden: eine local-first Culling-App für macOS, gebaut für meinen Workflow Sony A7 IV → darktable → NAS.",[10,14,15,16,20,21,23],{},"OpenShoot ist bewusst ",[17,18,19],"strong",{},"kein"," RAW-Editor und ",[17,22,19],{}," Bibliotheksverwalter. Karte rein, App startet automatisch, sichten, bewerten, fertig.",[25,26,28],"h3",{"id":27},"sofort-sichtbar","Sofort sichtbar",[10,30,31,32,36],{},"Statt RAWs zu dekodieren, zieht OpenShoot per exiftool das eingebettete JPEG aus jeder ",[33,34,35],"code",{},".ARW","-Datei und baut mit sharp Grid-Thumbnails und eine ~2560px-Loupe-Ansicht – plus ThumbHash-Platzhalter, damit keine Kachel schwarz aufblitzt. Alles landet in einem SQLite-Cache: Beim zweiten Öffnen einer Karte steht das Grid sofort.",[25,38,40],{"id":39},"bursts-und-der-schärfste-frame","Bursts und der schärfste Frame",[10,42,43],{},"Serienbilder werden über Aufnahmezeit und perzeptuellen Hash (DCT-pHash) zu Bursts gruppiert, die Schärfe per Laplacian-Varianz bewertet – und der schärfste Frame der Serie als Pick vorgeschlagen. Ganz ohne ML und ohne Cloud.",[25,45,47],{"id":46},"bewerten-wie-in-lightroom-steuern-wie-im-studio","Bewerten wie in Lightroom, steuern wie im Studio",[49,50,51,58,64],"ul",{},[52,53,54,57],"li",{},[17,55,56],{},"Unabhängige Ratings"," – Sterne, Farblabels und Pick\u002FReject-Flags funktionieren getrennt voneinander; ein Flag überschreibt nie die gerade vergebene Bewertung.",[52,59,60,63],{},[17,61,62],{},"Loupedeck+ als Controller"," – das Gerät wird als class-compliant USB-MIDI-Controller über Web MIDI gelesen, ein On-Screen-HUD bestätigt jeden Befehl.",[52,65,66,69,70,73],{},[17,67,68],{},"darktable-kompatible XMP-Sidecars"," – Ratings und Farblabels landen in ",[33,71,72],{},".xmp","-Dateien, bestehende Sidecars werden gepatcht, ohne die Develop-History anzufassen.",[25,75,77],{"id":76},"am-ende-nur-die-keeper-aufs-nas","Am Ende: nur die Keeper aufs NAS",[10,79,80,81,84,85,88],{},"Der „Done\"-Schritt hasht jeden Keeper mit SHA-256, schreibt ein Inventar nach SQLite und übergibt den eigentlichen Transfer an rsync – bewährte Technik statt selbstgebauter Sync-Logik. Sonys ",[33,82,83],{},".HIF","-Fotos (HEVC-HEIF, das sharps libheif nicht dekodieren kann) laufen dabei über das native ",[33,86,87],{},"sips"," von macOS.",[10,90,91],{},"OpenShoot ist ein Werkzeug, das ich für mich selbst gebaut habe – und seitdem ist das Sichten nach dem Shooting der schnellste Teil des Workflows.",{"title":93,"searchDepth":94,"depth":94,"links":95},"",2,[96,98,99,100],{"id":27,"depth":97,"text":28},3,{"id":39,"depth":97,"text":40},{"id":46,"depth":97,"text":47},{"id":76,"depth":97,"text":77},"OpenShoot ist eine lokale Foto-Culling-App für macOS – SD-Karte rein, Bursts sichten, bewerten und nur die Keeper aufs NAS syncen.","md",false,"\u002Fimages\u002Fprojects\u002Fcards\u002Fopenshoot.png",[106,109],{"language":107,"percentage":108},"TypeScript",60,{"language":110,"percentage":111},"Vue",40,[],{},true,"\u002Fprojects\u002Fopenshoot","Niki2k1\u002Fopenshoot",{"title":118,"description":119},"OpenShoot – Foto-Culling für macOS","OpenShoot ist eine local-first Foto-Culling-App für macOS – für den Workflow Sony A7 IV → darktable → NAS. Burst-Gruppierung mit Schärfe-Erkennung, Loupedeck+-Steuerung, darktable-kompatible XMP-Sidecars und rsync-Sync der Keeper.",[121,122,123,124,125,126,127],"electron","nuxt","vue","typescript","nuxt-ui","tailwind","sqlite","projects\u002Fopenshoot","1pwupzKQQCa3R4QBiCjnEZtaiL36oTih5EGv99e9Qi8",{"stars":131,"forks":131,"createdAt":132,"pushedAt":133,"commitCount":134,"activity":135},0,"2026-07-20T14:40:19Z","2026-07-20T19:12:34Z",6,[131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131],[137,149,160,169,178,187,198,207,216,224,232,240,249,257,266,274,283,291,300,310,318,326,334,342,350,358,365,372,381,389,397,405,413,421,429,437,445,453,461,469,477,484,492,500,507,515,523,531],{"id":138,"category":139,"extension":140,"icon":141,"level":142,"meta":143,"name":144,"stem":145,"url":146,"year":147,"__hash__":148},"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":150,"category":151,"extension":140,"icon":152,"level":153,"meta":154,"name":155,"stem":156,"url":157,"year":158,"__hash__":159},"skills\u002Fskills\u002Fazure.yml","DevOps","i-logos-microsoft-azure","Proficient",{},"Azure","skills\u002Fazure","https:\u002F\u002Fazure.microsoft.com","2021","uhi9OV2kz1bgheQ-n9srKx0HSUYlYI7MuyjObYDUgrQ",{"id":161,"category":139,"extension":140,"icon":162,"level":153,"meta":163,"name":164,"stem":165,"url":166,"year":167,"__hash__":168},"skills\u002Fskills\u002Fbun.yml","i-logos-bun",{},"Bun","skills\u002Fbun","https:\u002F\u002Fbun.sh","2024","bkieq8AIp5NIJh3xetY96f7WfuFNjAMI7oevfWb1W-0",{"id":170,"category":171,"extension":140,"icon":172,"level":142,"meta":173,"name":174,"stem":175,"url":176,"year":147,"__hash__":177},"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":179,"category":151,"extension":140,"icon":180,"level":153,"meta":181,"name":182,"stem":183,"url":184,"year":185,"__hash__":186},"skills\u002Fskills\u002Fcoolify.yml","i-simple-icons-coolify",{},"Coolify","skills\u002Fcoolify","https:\u002F\u002Fcoolify.io","2023","uh7httXSb9SS1ggRLMKgfmPi2mgMtqNgSGUnSDHeAXk",{"id":188,"category":189,"extension":140,"icon":190,"level":191,"meta":192,"name":193,"stem":194,"url":195,"year":196,"__hash__":197},"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":199,"category":139,"extension":140,"icon":200,"level":142,"meta":201,"name":202,"stem":203,"url":204,"year":205,"__hash__":206},"skills\u002Fskills\u002Fdeno.yml","i-logos-deno",{},"Deno","skills\u002Fdeno","https:\u002F\u002Fdeno.com","2022","8A31HmVc4GmvzZgLwJKLp_Km8w1T5q_vG3TVVtDOHnQ",{"id":208,"category":151,"extension":140,"icon":209,"level":191,"meta":210,"name":211,"stem":212,"url":213,"year":214,"__hash__":215},"skills\u002Fskills\u002Fdocker.yml","i-logos-docker-icon",{},"Docker","skills\u002Fdocker","https:\u002F\u002Fwww.docker.com","2018","uyfqCF9l6H7XsIozx1X-BUtL2KULygtDHq2cOZARNZ0",{"id":217,"category":139,"extension":140,"icon":218,"level":153,"meta":219,"name":220,"stem":221,"url":222,"year":185,"__hash__":223},"skills\u002Fskills\u002Fdrizzle-orm.yml","\u002Fimages\u002Fskills\u002Fdrizzle.png",{},"Drizzle ORM","skills\u002Fdrizzle-orm","https:\u002F\u002Form.drizzle.team","zWErcCRBV0E4HJ5FqPZd5-J3wK3j9Yw25nOgK2Qy5hw",{"id":225,"category":171,"extension":140,"icon":226,"level":142,"meta":227,"name":228,"stem":229,"url":230,"year":147,"__hash__":231},"skills\u002Fskills\u002Felectron.yml","i-logos-electron",{},"Electron","skills\u002Felectron","https:\u002F\u002Fwww.electronjs.org","fraXMojywwTj5bFfI5bkZhPnQV48uvu0gcmqTT5a4_U",{"id":233,"category":139,"extension":140,"icon":234,"level":153,"meta":235,"name":236,"stem":237,"url":238,"year":214,"__hash__":239},"skills\u002Fskills\u002Fexpress.yml","i-simple-icons-express",{},"Express","skills\u002Fexpress","https:\u002F\u002Fexpressjs.com","HDN_-ZUR4vI-cmgZ4yy84nm94T5rgkV3mr3PQjeBwe4",{"id":241,"category":171,"extension":140,"icon":242,"level":142,"meta":243,"name":244,"stem":245,"url":246,"year":247,"__hash__":248},"skills\u002Fskills\u002Fffmpeg.yml","i-logos-ffmpeg-icon",{},"ffmpeg","skills\u002Fffmpeg","https:\u002F\u002Fffmpeg.org","2020","ApV9_VXvOROhOvHzPYhx23qctHIqsAdUiIIvG6U8HeE",{"id":250,"category":171,"extension":140,"icon":251,"level":153,"meta":252,"name":253,"stem":254,"url":255,"year":158,"__hash__":256},"skills\u002Fskills\u002Ffigma.yml","i-logos-figma",{},"Figma","skills\u002Ffigma","https:\u002F\u002Fwww.figma.com","7YpzoWeTiTmAMs8PL1jIfpLLzHc028OaNC-k2XmWF7c",{"id":258,"category":259,"extension":140,"icon":260,"level":153,"meta":261,"name":262,"stem":263,"url":264,"year":247,"__hash__":265},"skills\u002Fskills\u002Ffirebase.yml","Data","i-logos-firebase",{},"Firebase","skills\u002Ffirebase","https:\u002F\u002Ffirebase.google.com","2BZXkjqAiQI7NcBh95AwkW55Kg9OYJcTd4g7BZlVyH8",{"id":267,"category":139,"extension":140,"icon":268,"level":191,"meta":269,"name":270,"stem":271,"url":272,"year":185,"__hash__":273},"skills\u002Fskills\u002Fgo.yml","i-logos-go",{},"Go","skills\u002Fgo","https:\u002F\u002Fgo.dev","jfqLu9ALZexHbFIxbNX4hXCa9YWsGQ_J879h7nG3Mwg",{"id":275,"category":151,"extension":140,"icon":276,"level":153,"meta":277,"name":278,"stem":279,"url":280,"year":281,"__hash__":282},"skills\u002Fskills\u002Fgrafana.yml","i-logos-grafana",{},"Grafana","skills\u002Fgrafana","https:\u002F\u002Fgrafana.com","2019","bAJDLy0__P9oiyY9zBlhcQLKAc6ijpLfODLoQFmcXRk",{"id":284,"category":189,"extension":140,"icon":285,"level":191,"meta":286,"name":287,"stem":288,"url":289,"year":196,"__hash__":290},"skills\u002Fskills\u002Fhtml.yml","i-logos-html-5",{},"HTML","skills\u002Fhtml","https:\u002F\u002Fdeveloper.mozilla.org\u002Fdocs\u002FWeb\u002FHTML","uKm-23PNdCtyRNJPSwsp0T81LlpZYyDem_nanppkV40",{"id":292,"category":189,"extension":140,"icon":293,"level":191,"meta":294,"name":295,"stem":296,"url":297,"year":298,"__hash__":299},"skills\u002Fskills\u002Fjavascript.yml","i-logos-javascript",{},"JavaScript","skills\u002Fjavascript","https:\u002F\u002Fdeveloper.mozilla.org\u002Fdocs\u002FWeb\u002FJavaScript","2017","IAVd2T2nFt-Keg7ky5OkJQv0XHXgH5Q6azMVo_EwOZc",{"id":301,"category":302,"extension":140,"icon":303,"level":142,"meta":304,"name":305,"stem":306,"url":307,"year":308,"__hash__":309},"skills\u002Fskills\u002Fk6.yml","Testing","i-simple-icons-k6",{},"k6","skills\u002Fk6","https:\u002F\u002Fk6.io","2025","9LQe3jOXpzWYeu4o8j4frNKF_kRfmU34bztg9h0iybs",{"id":311,"category":151,"extension":140,"icon":312,"level":153,"meta":313,"name":314,"stem":315,"url":316,"year":158,"__hash__":317},"skills\u002Fskills\u002Fkubernetes.yml","i-logos-kubernetes",{},"Kubernetes","skills\u002Fkubernetes","https:\u002F\u002Fkubernetes.io","QZKWLGxmYYLjqMaWXYElwW6LzZIhRiWviV7EqzTuf20",{"id":319,"category":151,"extension":140,"icon":320,"level":142,"meta":321,"name":322,"stem":323,"url":324,"year":308,"__hash__":325},"skills\u002Fskills\u002Floki.yml","\u002Fimages\u002Fskills\u002Floki.png",{},"Loki","skills\u002Floki","https:\u002F\u002Fgrafana.com\u002Foss\u002Floki","6XbX8pKz3kJ-UNj2sa0D5jiJpCuOjHZPHW6K0p9yc5c",{"id":327,"category":259,"extension":140,"icon":328,"level":153,"meta":329,"name":330,"stem":331,"url":332,"year":247,"__hash__":333},"skills\u002Fskills\u002Fmongodb.yml","i-logos-mongodb-icon",{},"MongoDB","skills\u002Fmongodb","https:\u002F\u002Fwww.mongodb.com","vAymZsawe3eHWefRddwCPUkOz4ENH0f27f3c7qoPaiU",{"id":335,"category":139,"extension":140,"icon":336,"level":153,"meta":337,"name":338,"stem":339,"url":340,"year":158,"__hash__":341},"skills\u002Fskills\u002Fnest.yml","i-logos-nestjs",{},"Nest","skills\u002Fnest","https:\u002F\u002Fnestjs.com","_k_OLI2yWacjZ6bnL_2SY5foR4PTtG05W754HMLaw84",{"id":343,"category":139,"extension":140,"icon":344,"level":191,"meta":345,"name":346,"stem":347,"url":348,"year":214,"__hash__":349},"skills\u002Fskills\u002Fnode-js.yml","i-logos-nodejs-icon",{},"Node.js","skills\u002Fnode-js","https:\u002F\u002Fnodejs.org","EDZpDGWxfyGs0KkLE0Lb99w_kAQ3M6Q7drthHbUYEY0",{"id":351,"category":189,"extension":140,"icon":352,"level":191,"meta":353,"name":354,"stem":355,"url":356,"year":205,"__hash__":357},"skills\u002Fskills\u002Fnuxt.yml","i-logos-nuxt-icon",{},"Nuxt","skills\u002Fnuxt","https:\u002F\u002Fnuxt.com","kH1NvQG2PGmpWgMoKRLQGjTCwFTGQmiXgMDGdRNAcOI",{"id":359,"category":189,"extension":140,"icon":352,"level":153,"meta":360,"name":361,"stem":362,"url":363,"year":167,"__hash__":364},"skills\u002Fskills\u002Fnuxt-content.yml",{},"Nuxt Content","skills\u002Fnuxt-content","https:\u002F\u002Fcontent.nuxt.com","RgsSePMO7r_6Hu61Hnfy5f4ll2ofq37vk0rJxmPjfg0",{"id":366,"category":189,"extension":140,"icon":352,"level":153,"meta":367,"name":368,"stem":369,"url":370,"year":167,"__hash__":371},"skills\u002Fskills\u002Fnuxt-ui.yml",{},"Nuxt UI","skills\u002Fnuxt-ui","https:\u002F\u002Fui.nuxt.com","e8h3Pmq1FaZ6dXccd_HW3_NTbNofuk5zfmn7_FmlBnU",{"id":373,"category":139,"extension":140,"icon":374,"level":142,"meta":375,"name":376,"stem":377,"url":378,"year":379,"__hash__":380},"skills\u002Fskills\u002Fphp.yml","i-logos-php",{},"PHP","skills\u002Fphp","https:\u002F\u002Fwww.php.net","2016","s1Q64crnDcVTJ7GDn-w43Gl5HMI8gYVM7AOWotWdEWc",{"id":382,"category":189,"extension":140,"icon":383,"level":153,"meta":384,"name":385,"stem":386,"url":387,"year":205,"__hash__":388},"skills\u002Fskills\u002Fpinia.yml","i-logos-pinia",{},"Pinia","skills\u002Fpinia","https:\u002F\u002Fpinia.vuejs.org","otf3EcrCxdIwH7CiBpeIxBI-K0pma63F5TzHHSN51IA",{"id":390,"category":302,"extension":140,"icon":391,"level":153,"meta":392,"name":393,"stem":394,"url":395,"year":167,"__hash__":396},"skills\u002Fskills\u002Fplaywright.yml","i-logos-playwright",{},"Playwright","skills\u002Fplaywright","https:\u002F\u002Fplaywright.dev","U-Tn8P9DTjsve7P0YEyG-yEgkuI9kLgoY3KIcnUZ8Qw",{"id":398,"category":259,"extension":140,"icon":399,"level":191,"meta":400,"name":401,"stem":402,"url":403,"year":167,"__hash__":404},"skills\u002Fskills\u002Fpostgres.yml","i-logos-postgresql",{},"Postgres","skills\u002Fpostgres","https:\u002F\u002Fwww.postgresql.org","SkbJBjm46QnLyVmsyIEO7LGDxT46TkJ5yLBcO-KOl3A",{"id":406,"category":139,"extension":140,"icon":407,"level":153,"meta":408,"name":409,"stem":410,"url":411,"year":185,"__hash__":412},"skills\u002Fskills\u002Fprisma.yml","i-logos-prisma",{},"Prisma","skills\u002Fprisma","https:\u002F\u002Fwww.prisma.io","q8u6bLwKxVNFZN18eMkhkkQW9KO1tzZzNCryalAhOQU",{"id":414,"category":151,"extension":140,"icon":415,"level":142,"meta":416,"name":417,"stem":418,"url":419,"year":308,"__hash__":420},"skills\u002Fskills\u002Fprometheus.yml","i-logos-prometheus",{},"Prometheus","skills\u002Fprometheus","https:\u002F\u002Fprometheus.io","wFPFPMT9NMAGyNakkGxpy1sdEZkiIYGD14Z-a9iSh7Y",{"id":422,"category":139,"extension":140,"icon":423,"level":142,"meta":424,"name":425,"stem":426,"url":427,"year":167,"__hash__":428},"skills\u002Fskills\u002Fpruvious.yml","\u002Fimages\u002Fskills\u002Fpruvious.svg",{},"Pruvious","skills\u002Fpruvious","https:\u002F\u002Fpruvious.com","OPpO35l5b9442tiQxW7FFq8LEVi8h2xGuNHgriT2UXM",{"id":430,"category":189,"extension":140,"icon":431,"level":153,"meta":432,"name":433,"stem":434,"url":435,"year":214,"__hash__":436},"skills\u002Fskills\u002Freact.yml","i-logos-react",{},"React","skills\u002Freact","https:\u002F\u002Freact.dev","0GbioLLfFPZRDh0rOzkolvqdcZFEEMKUh0_3lzOVaL4",{"id":438,"category":259,"extension":140,"icon":439,"level":153,"meta":440,"name":441,"stem":442,"url":443,"year":167,"__hash__":444},"skills\u002Fskills\u002Fsqlite.yml","i-logos-sqlite",{},"SQLite","skills\u002Fsqlite","https:\u002F\u002Fwww.sqlite.org","gHx-0xMVX6TE88ObCbbLoWfkLG1t3B_z6zSzT8m__fI",{"id":446,"category":139,"extension":140,"icon":447,"level":153,"meta":448,"name":449,"stem":450,"url":451,"year":185,"__hash__":452},"skills\u002Fskills\u002Fstripe.yml","i-logos-stripe",{},"Stripe","skills\u002Fstripe","https:\u002F\u002Fstripe.com","UGj0EO6yOfztwtcQ_wMiqUU1UYgTLbB5jxl9e-asFpA",{"id":454,"category":189,"extension":140,"icon":455,"level":191,"meta":456,"name":457,"stem":458,"url":459,"year":185,"__hash__":460},"skills\u002Fskills\u002Ftailwind.yml","i-logos-tailwindcss-icon",{},"Tailwind","skills\u002Ftailwind","https:\u002F\u002Ftailwindcss.com","VkKWaTtKA70dUgAsMIDKN8N94TH1MsU8-b1kPUx-Wq8",{"id":462,"category":189,"extension":140,"icon":463,"level":142,"meta":464,"name":465,"stem":466,"url":467,"year":308,"__hash__":468},"skills\u002Fskills\u002Ftiptap.yml","i-custom-tiptap",{},"Tiptap","skills\u002Ftiptap","https:\u002F\u002Ftiptap.dev","gBw3cx61wA-4kZNeChkBoB38Z2aS7Y5P7_ufagI8BSU",{"id":470,"category":151,"extension":140,"icon":471,"level":142,"meta":472,"name":473,"stem":474,"url":475,"year":185,"__hash__":476},"skills\u002Fskills\u002Ftraefik.yml","i-simple-icons-traefikproxy",{},"Traefik","skills\u002Ftraefik","https:\u002F\u002Ftraefik.io","o-rECQEfSq4kbulKrfx14EeER1PTEYFavnEQHhAuaBw",{"id":478,"category":189,"extension":140,"icon":479,"level":191,"meta":480,"name":107,"stem":481,"url":482,"year":281,"__hash__":483},"skills\u002Fskills\u002Ftypescript.yml","i-logos-typescript-icon",{},"skills\u002Ftypescript","https:\u002F\u002Fwww.typescriptlang.org","C6S0SKAC_EKz2ITnMm4hCCUKG2P5KsOfbGXqMzFI-EY",{"id":485,"category":171,"extension":140,"icon":486,"level":153,"meta":487,"name":488,"stem":489,"url":490,"year":205,"__hash__":491},"skills\u002Fskills\u002Fvite.yml","i-logos-vitejs",{},"Vite","skills\u002Fvite","https:\u002F\u002Fvite.dev","TpxW7LK8p6-A-XypTE_uBmHo2vAWbB_1Zy8pSt8Ih8A",{"id":493,"category":302,"extension":140,"icon":494,"level":153,"meta":495,"name":496,"stem":497,"url":498,"year":185,"__hash__":499},"skills\u002Fskills\u002Fvitest.yml","i-logos-vitest",{},"Vitest","skills\u002Fvitest","https:\u002F\u002Fvitest.dev","IS5nla0e3iC4ACuhoQjqBEdsXwdYY2WRZ118YrtMNHg",{"id":501,"category":189,"extension":140,"icon":502,"level":191,"meta":503,"name":110,"stem":504,"url":505,"year":281,"__hash__":506},"skills\u002Fskills\u002Fvue.yml","i-logos-vue",{},"skills\u002Fvue","https:\u002F\u002Fvuejs.org","F0ztv5f98yIVCbyfDGbwlJ22KROp3yL3Izjp0VBWlAU",{"id":508,"category":189,"extension":140,"icon":509,"level":142,"meta":510,"name":511,"stem":512,"url":513,"year":158,"__hash__":514},"skills\u002Fskills\u002Fvuetify.yml","i-logos-vuetifyjs",{},"Vuetify","skills\u002Fvuetify","https:\u002F\u002Fvuetifyjs.com","g2xXVDYSXlGLfnyLDkx3zPBVc3BCYEiGx5Ilh5-pTT4",{"id":516,"category":189,"extension":140,"icon":517,"level":153,"meta":518,"name":519,"stem":520,"url":521,"year":185,"__hash__":522},"skills\u002Fskills\u002Fvueuse.yml","i-logos-vueuse",{},"VueUse","skills\u002Fvueuse","https:\u002F\u002Fvueuse.org","-6U_Vo_7APwR3Oo6rLI2mWO_Emse0aAoL1vL4noxZEk",{"id":524,"category":171,"extension":140,"icon":525,"level":153,"meta":526,"name":527,"stem":528,"url":529,"year":185,"__hash__":530},"skills\u002Fskills\u002Fwhisper.yml","i-simple-icons-openai",{},"Whisper","skills\u002Fwhisper","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fwhisper","KtdfiQb3uVjd4DFgV3SN8y6xCAu-eP81lC8nH3NM0S8",{"id":532,"category":139,"extension":140,"icon":533,"level":153,"meta":534,"name":535,"stem":536,"url":537,"year":185,"__hash__":538},"skills\u002Fskills\u002Fzod.yml","i-logos-zod",{},"Zod","skills\u002Fzod","https:\u002F\u002Fzod.dev","DLk6ZAEEgRjsJqbGw9uXcZmhZaVQZj7gSbhWpolBDNk",1784578080523]