[{"data":1,"prerenderedAt":434},["ShallowReactive",2],{"site-settings":3,"projects-index":56,"projects":76},{"id":4,"contact":5,"email":11,"extension":12,"footer":13,"jobTitle":16,"keywords":17,"location":25,"meta":26,"name":18,"nav":27,"ogImage":36,"sameAs":37,"socials":40,"stem":51,"telegram":52,"url":54,"__hash__":55},"settings\u002Fsettings\u002Fsite.yml",{"title":6,"description":7,"cta":8},"Let’s build something","Have a product to ship, an interface to rebuild, or an API that needs a front end? Tell me what you’re working on — I read every message.",{"label":9,"to":10},"See projects","\u002Fprojects","azizsobirovdev@gmail.com","yml",{"note":14,"byline":15},"2026 © Built with Nuxt","By AzizDev","Full Stack Developer",[18,16,19,20,21,22,23,24],"Aziz Sobirov","Vue developer","Nuxt developer","NestJS","TypeScript","Frontend developer Tashkent","Web developer Uzbekistan","Tashkent, Uzbekistan",{},[28,31,33],{"label":29,"to":30},"Home","\u002F",{"label":32,"to":10},"Projects",{"label":34,"to":35},"About","\u002Fabout","\u002Fog-image.png",[38,39],"https:\u002F\u002Fgithub.com\u002FAzizSobirov","https:\u002F\u002Ft.me\u002FAziz_Sobirov",[41,45,48],{"label":42,"href":43,"icon":44},"Email","mailto:azizdevuz@gmail.com","i-lucide-mail",{"label":46,"href":39,"icon":47},"Telegram","i-lucide-send",{"label":49,"href":38,"icon":50},"GitHub","i-lucide-github","settings\u002Fsite",{"username":53,"url":39},"@Aziz_Sobirov","https:\u002F\u002Fazizdev.uz","rZAK3A1w5iBtnBApGcVoM81340oKXT1OwOSld2vnqBE",{"id":57,"title":32,"body":58,"description":65,"extension":66,"heading":67,"meta":68,"navigation":69,"path":10,"seo":70,"stem":73,"subheading":74,"__hash__":75},"projectsIndex\u002Fprojects.md",{"type":59,"value":60,"toc":61},"minimark",[],{"title":62,"searchDepth":63,"depth":63,"links":64},"",2,[],"Full stack web products, interfaces and experiments I’ve designed, built and shipped.","md","Work & case studies",{},true,{"title":71,"description":72},"Projects & Case Studies","Selected full stack work by Aziz Sobirov — web apps, interfaces and experiments built with Vue, Nuxt, TypeScript and NestJS, with a short case study for each.","projects","Products, experiments and collaborations I’m especially proud to have shipped.","i2Y5oqTmJATpSUOpWKkfdC2T37rpBUYi9sw5Glw4thM",[77,151,208,266,325,379],{"id":78,"title":79,"body":80,"byline":128,"cover":129,"description":134,"extension":66,"featured":69,"gallery":135,"headline":90,"icon":136,"iconLabel":137,"liveUrl":138,"meta":139,"navigation":69,"path":140,"position":141,"repoUrl":135,"role":142,"seo":143,"stack":144,"stem":148,"timeline":149,"__hash__":150},"projects\u002Fprojects\u002Floom.md","Loom",{"type":59,"value":81,"toc":122},[82,87,91,95,98,102,115,119],[83,84,86],"h2",{"id":85},"overview","Overview",[88,89,90],"p",{},"An AI writing companion that thinks alongside you, allowing you to capture ideas, edits, and drafts in one focused space.",[83,92,94],{"id":93},"the-problem","The problem",[88,96,97],{},"Writing tools that bolt a chat panel onto a document force a constant context switch. Every suggestion arrives as a separate conversation the writer has to translate back into prose.",[83,99,101],{"id":100},"what-i-did","What I did",[103,104,105,109,112],"ul",{},[106,107,108],"li",{},"Mapped the writing session as one continuous surface rather than a document plus an assistant.",[106,110,111],{},"Designed an inline suggestion model where edits appear as reversible diffs in place.",[106,113,114],{},"Built the prototype in Nuxt with a streaming edit pipeline and optimistic rendering.",[83,116,118],{"id":117},"outcome","Outcome",[88,120,121],{},"Drafting sessions stayed in one window. Testers described the assistance as \"quiet\", which was the whole point.",{"title":62,"searchDepth":63,"depth":63,"links":123},[124,125,126,127],{"id":85,"depth":63,"text":86},{"id":93,"depth":63,"text":94},{"id":100,"depth":63,"text":101},{"id":117,"depth":63,"text":118},"Design Engineer, 2024",{"src":130,"alt":131,"width":132,"height":133},"https:\u002F\u002Fcdn.dribbble.com\u002Fuserupload\u002F46128964\u002Ffile\u002Fb92b9d268dd928642ca94bd49e32923a.jpg?resize=752x497&vertical=center","Loom AI writing companion mockup",752,497,"I designed Loom, a focused writing surface where ideas, edits, and drafts coexist without the chat clutter.",null,"i-lucide-sparkles","LOOM","https:\u002F\u002Fexample.com",{},"\u002Fprojects\u002Floom",1,"Design Engineer",{"title":79,"description":134},[145,22,146,147],"Nuxt","Tailwind CSS","OpenAI API","projects\u002Floom","Jan – Jun 2024","ThXVvOXfhjmSTLePAYvf8ssiakNoAv0nnPffR_pXlw4",{"id":152,"title":153,"body":154,"byline":190,"cover":191,"description":196,"extension":66,"featured":69,"gallery":135,"headline":160,"icon":197,"iconLabel":153,"liveUrl":138,"meta":198,"navigation":69,"path":199,"position":63,"repoUrl":135,"role":200,"seo":201,"stack":202,"stem":205,"timeline":206,"__hash__":207},"projects\u002Fprojects\u002Fatlas.md","Atlas Studio",{"type":59,"value":155,"toc":184},[156,158,161,163,166,168,179,181],[83,157,86],{"id":85},[88,159,160],{},"A two week brand and product sprint for a creative studio.",[83,162,94],{"id":93},[88,164,165],{},"The studio had strong work and no coherent way to present it. Three different logos were in circulation and the site predated half the portfolio.",[83,167,101],{"id":100},[103,169,170,173,176],{},[106,171,172],{},"Ran a two day positioning workshop and cut the messaging down to a single sentence.",[106,174,175],{},"Built an identity system — type scale, palette, grid — small enough that the team could extend it alone.",[106,177,178],{},"Shipped the marketing site and a lightweight client portal on the same tokens.",[83,180,118],{"id":117},[88,182,183],{},"One system, three surfaces, and a team that stopped asking which logo to use.",{"title":62,"searchDepth":63,"depth":63,"links":185},[186,187,188,189],{"id":85,"depth":63,"text":86},{"id":93,"depth":63,"text":94},{"id":100,"depth":63,"text":101},{"id":117,"depth":63,"text":118},"Product & Brand Designer, 2025",{"src":192,"alt":193,"width":194,"height":195},"https:\u002F\u002Fcdn.dribbble.com\u002Fuserupload\u002F24599416\u002Ffile\u002Foriginal-1ae5075dcd129aebb16bdbca24b41ac7.png?resize=1024x768&vertical=center","Atlas Studio brand and product sprint mockup",1024,768,"End to end identity, marketing site, and a small product surface designed to feel quietly confident across every touchpoint.","i-lucide-compass",{},"\u002Fprojects\u002Fatlas","Product & Brand Designer",{"title":153,"description":196},[203,145,146,204],"Figma","Motion","projects\u002Fatlas","Feb 2025, two weeks","ZuKVny93_zEC_K0GfJNcW2BbzE6x-fdToHHs_xS09sc",{"id":209,"title":210,"body":211,"byline":247,"cover":248,"description":251,"extension":66,"featured":69,"gallery":135,"headline":217,"icon":252,"iconLabel":210,"liveUrl":138,"meta":253,"navigation":69,"path":254,"position":255,"repoUrl":256,"role":257,"seo":258,"stack":259,"stem":263,"timeline":264,"__hash__":265},"projects\u002Fprojects\u002Frhythm.md","Rhythm",{"type":59,"value":212,"toc":241},[213,215,218,220,223,225,236,238],[83,214,86],{"id":85},[88,216,217],{},"Calm analytics for indie founders.",[83,219,94],{"id":93},[88,221,222],{},"Analytics dashboards optimise for exploration. Most solo founders do not want to explore — they want to know whether last week went well.",[83,224,101],{"id":100},[103,226,227,230,233],{},[106,228,229],{},"Replaced the dashboard with a single weekly email written in sentences, not charts.",[106,231,232],{},"Picked four metrics and refused to add a fifth.",[106,234,235],{},"Built the aggregation on Nitro tasks against SQLite so the whole thing runs on one small box.",[83,237,118],{"id":117},[88,239,240],{},"Open rates sit far above what a dashboard login rate would ever be. The product is boring on purpose.",{"title":62,"searchDepth":63,"depth":63,"links":242},[243,244,245,246],{"id":85,"depth":63,"text":86},{"id":93,"depth":63,"text":94},{"id":100,"depth":63,"text":101},{"id":117,"depth":63,"text":118},"Founder & Designer, 2024",{"src":249,"alt":250,"width":194,"height":195},"https:\u002F\u002Fcdn.dribbble.com\u002Fuserupload\u002F47357856\u002Ffile\u002F75841fa59f32f05ca6c5ddf02d08dfe6.png?resize=1024x768&vertical=center","Rhythm calm analytics mockup","A weekly digest that turns raw product data into a simple narrative. Built so you can read it on a Sunday with coffee.","i-lucide-line-chart",{},"\u002Fprojects\u002Frhythm",3,"https:\u002F\u002Fgithub.com","Founder & Designer",{"title":210,"description":251},[145,260,261,262],"Nitro","SQLite","Resend","projects\u002Frhythm","2024 – present","_50p2fqrfL87mGAWtn43g-vOMNeBKTb37y4Xok39JVA",{"id":267,"title":268,"body":269,"byline":305,"cover":306,"description":309,"extension":66,"featured":69,"gallery":310,"headline":275,"icon":312,"iconLabel":268,"liveUrl":135,"meta":313,"navigation":69,"path":314,"position":315,"repoUrl":135,"role":316,"seo":317,"stack":318,"stem":322,"timeline":323,"__hash__":324},"projects\u002Fprojects\u002Fgroove.md","Groove",{"type":59,"value":270,"toc":299},[271,273,276,278,281,283,294,296],[83,272,86],{"id":85},[88,274,275],{},"Reimagining the booking flow for a music school, assisting thousands of students in finding the right lessons.",[83,277,94],{"id":93},[88,279,280],{},"Booking a lesson took eleven screens and asked for payment details before showing a single available slot.",[83,282,101],{"id":100},[103,284,285,288,291],{},[106,286,287],{},"Instrumented the funnel and found two thirds of the loss happened before any teacher was shown.",[106,289,290],{},"Rebuilt the flow around availability first: pick a time, then a teacher, then pay.",[106,292,293],{},"Shipped a shared calendar component covering both the student and the admin side.",[83,295,118],{"id":117},[88,297,298],{},"Drop off fell by roughly half, and support tickets about \"where do I see times\" went away entirely.",{"title":62,"searchDepth":63,"depth":63,"links":300},[301,302,303,304],{"id":85,"depth":63,"text":86},{"id":93,"depth":63,"text":94},{"id":100,"depth":63,"text":101},{"id":117,"depth":63,"text":118},"Lead Designer, 2023",{"src":307,"alt":308,"width":194,"height":195},"https:\u002F\u002Fcdn.dribbble.com\u002Fuserupload\u002F43955214\u002Ffile\u002Foriginal-d4cde1de803e84b97d8892e3444c04b0.png?resize=1024x768&vertical=center","Groove music school booking flow mockup","I led a redesign of the lesson booking experience, cutting drop off in half and making the schedule feel like a calendar people actually want to open.",[311],{},"i-lucide-wand-2",{},"\u002Fprojects\u002Fgroove",4,"Lead Designer",{"title":268,"description":309},[319,22,320,321],"Vue","Storybook","Playwright","projects\u002Fgroove","Mar – Nov 2023","q0Hzm2fsj7sM7jsYLSGkBI_hOIFm679UGgGGSMdTq1A",{"id":326,"title":327,"body":328,"byline":128,"cover":364,"description":367,"extension":66,"featured":368,"gallery":135,"headline":334,"icon":369,"iconLabel":327,"liveUrl":135,"meta":370,"navigation":69,"path":371,"position":372,"repoUrl":256,"role":142,"seo":373,"stack":374,"stem":376,"timeline":377,"__hash__":378},"projects\u002Fprojects\u002Ffieldnote.md","Fieldnote",{"type":59,"value":329,"toc":358},[330,332,335,337,340,342,353,355],[83,331,86],{"id":85},[88,333,334],{},"A pocket sized research tool for design teams that want to get out of their docs and into the world.",[83,336,94],{"id":93},[88,338,339],{},"Research notes get taken on a phone in the field and then re-typed into a doc that evening. The re-typing is where the nuance dies.",[83,341,101],{"id":100},[103,343,344,347,350],{},[106,345,346],{},"Designed capture around one thumb: a quote, a tag, done.",[106,348,349],{},"Made everything offline-first with IndexedDB so a basement interview still works.",[106,351,352],{},"Added a synthesis view that clusters by tag instead of by session.",[83,354,118],{"id":117},[88,356,357],{},"Notes stopped being re-typed. Themes emerged from the tags rather than from memory.",{"title":62,"searchDepth":63,"depth":63,"links":359},[360,361,362,363],{"id":85,"depth":63,"text":86},{"id":93,"depth":63,"text":94},{"id":100,"depth":63,"text":101},{"id":117,"depth":63,"text":118},{"src":365,"alt":366,"width":194,"height":195},"https:\u002F\u002Fcdn.dribbble.com\u002Fuserupload\u002F30310902\u002Ffile\u002Foriginal-621e7fe47be9d11ee14544456c693bec.png?resize=1024x768&vertical=center","Fieldnote pocket sized research tool mockup","Capture quotes, tag patterns, and synthesize themes in one place. The interface stays out of the way so the thinking can happen.",false,"i-lucide-layers",{},"\u002Fprojects\u002Ffieldnote",5,{"title":327,"description":367},[145,375,146],"IndexedDB","projects\u002Ffieldnote","Sep – Dec 2024","xZOe8JZex_6l2AllsIEdi9-L_A1SrxuL2JAckJyGiis",{"id":380,"title":381,"body":382,"byline":418,"cover":419,"description":422,"extension":66,"featured":368,"gallery":135,"headline":388,"icon":423,"iconLabel":381,"liveUrl":138,"meta":424,"navigation":69,"path":425,"position":426,"repoUrl":256,"role":427,"seo":428,"stack":429,"stem":431,"timeline":432,"__hash__":433},"projects\u002Fprojects\u002Ftalkback.md","Talkback",{"type":59,"value":383,"toc":412},[384,386,389,391,394,396,407,409],[83,385,86],{"id":85},[88,387,388],{},"A friendlier interface for talking to language models.",[83,390,94],{"id":93},[88,392,393],{},"Chat interfaces inherited the terminal: a log, a prompt, and a blinking cursor. None of that is how conversation actually feels.",[83,395,101],{"id":100},[103,397,398,401,404],{},[106,399,400],{},"Explored turn-taking as motion rather than as stacked bubbles.",[106,402,403],{},"Gave replies a settling animation so arrival reads as thinking, not as printing.",[106,405,406],{},"Prototyped voice input as a first-class mode instead of a microphone icon.",[83,408,118],{"id":117},[88,410,411],{},"An exploration, not a product. Two of the interaction ideas ended up in client work.",{"title":62,"searchDepth":63,"depth":63,"links":413},[414,415,416,417],{"id":85,"depth":63,"text":86},{"id":93,"depth":63,"text":94},{"id":100,"depth":63,"text":101},{"id":117,"depth":63,"text":118},"Independent Project, 2025",{"src":420,"alt":421,"width":194,"height":195},"https:\u002F\u002Fcdn.dribbble.com\u002Fuserupload\u002F16560717\u002Ffile\u002Foriginal-c6f745d50302d66609bfe080f99f5396.png?resize=1024x768&vertical=center","Talkback friendlier AI chat interface mockup","An exploration of how AI chat could feel less like a terminal and more like a conversation with a curious friend.","i-lucide-bot",{},"\u002Fprojects\u002Ftalkback",6,"Independent Project",{"title":381,"description":422},[145,204,430],"Web Speech API","projects\u002Ftalkback","2025","CBIudEWOas7phx4-Ow58IF3WINAIzsoNMJGj6-fokUE",1788852690432]