[{"data":1,"prerenderedAt":540},["ShallowReactive",2],{"site-settings":3,"home":56,"projects":187},{"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":29,"body":58,"description":65,"extension":66,"faq":67,"hero":89,"intro":99,"meta":117,"navigation":118,"path":30,"seo":119,"stack":122,"stem":160,"testimonials":161,"work":181,"__hash__":186},"home\u002Findex.md",{"type":59,"value":60,"toc":61},"minimark",[],{"title":62,"searchDepth":63,"depth":63,"links":64},"",2,[],"Full stack developer in Tashkent, Uzbekistan, building fast, accessible web apps with Vue, Nuxt, TypeScript and NestJS.","md",{"title":68,"description":69,"items":70},"Working together","The questions that come up before every project.",[71,74,77,80,83,86],{"question":72,"answer":73},"What kind of work do you take on?","Complete web products. Nuxt and Vue front ends, NestJS or Firebase back ends, and the API layer that ties them together — marketing sites, dashboards, internal tools, and mobile apps with React Native or Flutter.",{"question":75,"answer":76},"What is your tech stack?","TypeScript everywhere. Vue 3, Nuxt 4 and Tailwind CSS on the front end; NestJS, Firebase and REST APIs documented with Swagger on the back end; Git, GitHub and CI\u002FCD around all of it.",{"question":78,"answer":79},"Are you available for freelance or full-time work?","Yes. I build products at the Digitalization Center of MIIT.uz and take on selected freelance projects alongside it. Send me the shape of your project and I’ll tell you when I could start.",{"question":81,"answer":82},"Do you work remotely?","Always. I’m based in Tashkent, Uzbekistan (UTC+5) and have worked remotely with clients and teams since 2022 — mostly async, with a shared overlap window for calls.",{"question":84,"answer":85},"How do you handle performance and SEO?","Every site ships server-rendered or prerendered, with Core Web Vitals checked before launch: images sized and lazy-loaded, fonts self-hosted, JavaScript kept off the critical path, and structured data in place so search engines can actually read the page.",{"question":87,"answer":88},"How do we get started?","Message me on Telegram or by email with a rough brief — what you’re building, who it’s for, and roughly when you need it. You’ll get an honest answer on scope and timing within a day.",{"greeting":90,"headline":91,"description":92,"portrait":93,"cta":97},"Hey 👋, I’m Aziz",[16],"I build fast, accessible web apps end to end — Vue and Nuxt on the front, NestJS behind them.",{"src":94,"hoverSrc":95,"alt":96},"\u002Fjosh.webp","\u002Fjosh_wave.webp","Portrait of Aziz Sobirov, full stack developer",{"label":98,"to":10},"View My Work",{"eyebrow":100,"title":101,"paragraphs":102,"cta":105,"stats":107},"A bit about me","Full stack, from first pixel to production",[103,104],"I’m a **full stack developer** based in Tashkent, Uzbekistan. I design the interface, build the API behind it, and ship the whole thing — mostly with **Vue**, **Nuxt** and **NestJS**.","I started writing code in 2020, and I still care most about **performance**, **accessibility** and the small details that make a product feel obvious to use.",{"label":106,"to":35},"More about me",[108,111,114],{"value":109,"label":110},"2020","Writing code since",{"value":112,"label":113},"3+","Years of professional experience",{"value":115,"label":116},"2","Companies worked with",{},true,{"title":120,"description":121},"Aziz Sobirov — Full Stack Developer (Vue, Nuxt, NestJS)","Aziz Sobirov is a full stack developer in Tashkent, Uzbekistan, building fast, accessible web apps end to end with Vue, Nuxt, TypeScript and NestJS. See recent work.",{"title":123,"description":124,"tools":125,"extras":154},"My tech stack","A small set of tools I know well enough to stop thinking about.",[126,131,136,140,144,149],{"name":127,"use":128,"slug":129,"brand":130},"Nuxt","Every project ships on it","nuxt","#00DC82",{"name":132,"use":133,"slug":134,"brand":135},"Vue","Components, state and routing","vuedotjs","#4FC08D",{"name":22,"use":137,"slug":138,"brand":139},"Types before runtime","typescript","#3178C6",{"name":21,"use":141,"slug":142,"brand":143},"APIs, auth and business logic","nestjs","#E0234E",{"name":145,"use":146,"slug":147,"brand":148},"Tailwind CSS","Utility-first styling","tailwindcss","#06B6D4",{"name":150,"use":151,"slug":152,"brand":153},"Astro","Better performance","astro","#DD2C00",[155,156,150,157,158,159],"React & React Native","Flutter","Figma","Git & CI\u002FCD","AI-Assisted Development","index",{"enabled":162,"title":163,"description":164,"items":165},false,"Kind words","A few notes from people I’ve built things with.",[166,171,176],{"quote":167,"name":168,"role":169,"brand":170},"Handed over a design system that our engineers actually enjoyed using. Six months later it is still the thing everyone builds on.","Mara Ellis","Head of Product, Atlas Studio","#5E6AD2",{"quote":172,"name":173,"role":174,"brand":175},"Rare to find someone who can hold the visual craft and the implementation at once. The prototypes shipped almost unchanged.","Devan Rao","Engineering Lead, Rhythm","#0AE448",{"quote":177,"name":178,"role":179,"brand":180},"Cut our booking drop off in half and left the team with a calendar component we still use everywhere.","Sofia Lind","Founder, Groove","#FF5A5F",{"title":182,"description":183,"cta":184},"Featured projects","Products I’ve designed, built and shipped — interface, API and everything between.",{"label":185,"to":10},"View all projects","2i70Cp0pP0Tm61tMb3rvx718uae3S3uIW5PZpmKnl5M",[188,260,316,374,432,485],{"id":189,"title":190,"body":191,"byline":239,"cover":240,"description":245,"extension":66,"featured":118,"gallery":246,"headline":201,"icon":247,"iconLabel":248,"liveUrl":249,"meta":250,"navigation":118,"path":251,"position":252,"repoUrl":246,"role":253,"seo":254,"stack":255,"stem":257,"timeline":258,"__hash__":259},"projects\u002Fprojects\u002Floom.md","Loom",{"type":59,"value":192,"toc":233},[193,198,202,206,209,213,226,230],[194,195,197],"h2",{"id":196},"overview","Overview",[199,200,201],"p",{},"An AI writing companion that thinks alongside you, allowing you to capture ideas, edits, and drafts in one focused space.",[194,203,205],{"id":204},"the-problem","The problem",[199,207,208],{},"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.",[194,210,212],{"id":211},"what-i-did","What I did",[214,215,216,220,223],"ul",{},[217,218,219],"li",{},"Mapped the writing session as one continuous surface rather than a document plus an assistant.",[217,221,222],{},"Designed an inline suggestion model where edits appear as reversible diffs in place.",[217,224,225],{},"Built the prototype in Nuxt with a streaming edit pipeline and optimistic rendering.",[194,227,229],{"id":228},"outcome","Outcome",[199,231,232],{},"Drafting sessions stayed in one window. Testers described the assistance as \"quiet\", which was the whole point.",{"title":62,"searchDepth":63,"depth":63,"links":234},[235,236,237,238],{"id":196,"depth":63,"text":197},{"id":204,"depth":63,"text":205},{"id":211,"depth":63,"text":212},{"id":228,"depth":63,"text":229},"Design Engineer, 2024",{"src":241,"alt":242,"width":243,"height":244},"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":190,"description":245},[127,22,145,256],"OpenAI API","projects\u002Floom","Jan – Jun 2024","ThXVvOXfhjmSTLePAYvf8ssiakNoAv0nnPffR_pXlw4",{"id":261,"title":262,"body":263,"byline":299,"cover":300,"description":305,"extension":66,"featured":118,"gallery":246,"headline":269,"icon":306,"iconLabel":262,"liveUrl":249,"meta":307,"navigation":118,"path":308,"position":63,"repoUrl":246,"role":309,"seo":310,"stack":311,"stem":313,"timeline":314,"__hash__":315},"projects\u002Fprojects\u002Fatlas.md","Atlas Studio",{"type":59,"value":264,"toc":293},[265,267,270,272,275,277,288,290],[194,266,197],{"id":196},[199,268,269],{},"A two week brand and product sprint for a creative studio.",[194,271,205],{"id":204},[199,273,274],{},"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.",[194,276,212],{"id":211},[214,278,279,282,285],{},[217,280,281],{},"Ran a two day positioning workshop and cut the messaging down to a single sentence.",[217,283,284],{},"Built an identity system — type scale, palette, grid — small enough that the team could extend it alone.",[217,286,287],{},"Shipped the marketing site and a lightweight client portal on the same tokens.",[194,289,229],{"id":228},[199,291,292],{},"One system, three surfaces, and a team that stopped asking which logo to use.",{"title":62,"searchDepth":63,"depth":63,"links":294},[295,296,297,298],{"id":196,"depth":63,"text":197},{"id":204,"depth":63,"text":205},{"id":211,"depth":63,"text":212},{"id":228,"depth":63,"text":229},"Product & Brand Designer, 2025",{"src":301,"alt":302,"width":303,"height":304},"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":262,"description":305},[157,127,145,312],"Motion","projects\u002Fatlas","Feb 2025, two weeks","ZuKVny93_zEC_K0GfJNcW2BbzE6x-fdToHHs_xS09sc",{"id":317,"title":318,"body":319,"byline":355,"cover":356,"description":359,"extension":66,"featured":118,"gallery":246,"headline":325,"icon":360,"iconLabel":318,"liveUrl":249,"meta":361,"navigation":118,"path":362,"position":363,"repoUrl":364,"role":365,"seo":366,"stack":367,"stem":371,"timeline":372,"__hash__":373},"projects\u002Fprojects\u002Frhythm.md","Rhythm",{"type":59,"value":320,"toc":349},[321,323,326,328,331,333,344,346],[194,322,197],{"id":196},[199,324,325],{},"Calm analytics for indie founders.",[194,327,205],{"id":204},[199,329,330],{},"Analytics dashboards optimise for exploration. Most solo founders do not want to explore — they want to know whether last week went well.",[194,332,212],{"id":211},[214,334,335,338,341],{},[217,336,337],{},"Replaced the dashboard with a single weekly email written in sentences, not charts.",[217,339,340],{},"Picked four metrics and refused to add a fifth.",[217,342,343],{},"Built the aggregation on Nitro tasks against SQLite so the whole thing runs on one small box.",[194,345,229],{"id":228},[199,347,348],{},"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":350},[351,352,353,354],{"id":196,"depth":63,"text":197},{"id":204,"depth":63,"text":205},{"id":211,"depth":63,"text":212},{"id":228,"depth":63,"text":229},"Founder & Designer, 2024",{"src":357,"alt":358,"width":303,"height":304},"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":318,"description":359},[127,368,369,370],"Nitro","SQLite","Resend","projects\u002Frhythm","2024 – present","_50p2fqrfL87mGAWtn43g-vOMNeBKTb37y4Xok39JVA",{"id":375,"title":376,"body":377,"byline":413,"cover":414,"description":417,"extension":66,"featured":118,"gallery":418,"headline":383,"icon":420,"iconLabel":376,"liveUrl":246,"meta":421,"navigation":118,"path":422,"position":423,"repoUrl":246,"role":424,"seo":425,"stack":426,"stem":429,"timeline":430,"__hash__":431},"projects\u002Fprojects\u002Fgroove.md","Groove",{"type":59,"value":378,"toc":407},[379,381,384,386,389,391,402,404],[194,380,197],{"id":196},[199,382,383],{},"Reimagining the booking flow for a music school, assisting thousands of students in finding the right lessons.",[194,385,205],{"id":204},[199,387,388],{},"Booking a lesson took eleven screens and asked for payment details before showing a single available slot.",[194,390,212],{"id":211},[214,392,393,396,399],{},[217,394,395],{},"Instrumented the funnel and found two thirds of the loss happened before any teacher was shown.",[217,397,398],{},"Rebuilt the flow around availability first: pick a time, then a teacher, then pay.",[217,400,401],{},"Shipped a shared calendar component covering both the student and the admin side.",[194,403,229],{"id":228},[199,405,406],{},"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":408},[409,410,411,412],{"id":196,"depth":63,"text":197},{"id":204,"depth":63,"text":205},{"id":211,"depth":63,"text":212},{"id":228,"depth":63,"text":229},"Lead Designer, 2023",{"src":415,"alt":416,"width":303,"height":304},"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.",[419],{},"i-lucide-wand-2",{},"\u002Fprojects\u002Fgroove",4,"Lead Designer",{"title":376,"description":417},[132,22,427,428],"Storybook","Playwright","projects\u002Fgroove","Mar – Nov 2023","q0Hzm2fsj7sM7jsYLSGkBI_hOIFm679UGgGGSMdTq1A",{"id":433,"title":434,"body":435,"byline":239,"cover":471,"description":474,"extension":66,"featured":162,"gallery":246,"headline":441,"icon":475,"iconLabel":434,"liveUrl":246,"meta":476,"navigation":118,"path":477,"position":478,"repoUrl":364,"role":253,"seo":479,"stack":480,"stem":482,"timeline":483,"__hash__":484},"projects\u002Fprojects\u002Ffieldnote.md","Fieldnote",{"type":59,"value":436,"toc":465},[437,439,442,444,447,449,460,462],[194,438,197],{"id":196},[199,440,441],{},"A pocket sized research tool for design teams that want to get out of their docs and into the world.",[194,443,205],{"id":204},[199,445,446],{},"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.",[194,448,212],{"id":211},[214,450,451,454,457],{},[217,452,453],{},"Designed capture around one thumb: a quote, a tag, done.",[217,455,456],{},"Made everything offline-first with IndexedDB so a basement interview still works.",[217,458,459],{},"Added a synthesis view that clusters by tag instead of by session.",[194,461,229],{"id":228},[199,463,464],{},"Notes stopped being re-typed. Themes emerged from the tags rather than from memory.",{"title":62,"searchDepth":63,"depth":63,"links":466},[467,468,469,470],{"id":196,"depth":63,"text":197},{"id":204,"depth":63,"text":205},{"id":211,"depth":63,"text":212},{"id":228,"depth":63,"text":229},{"src":472,"alt":473,"width":303,"height":304},"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.","i-lucide-layers",{},"\u002Fprojects\u002Ffieldnote",5,{"title":434,"description":474},[127,481,145],"IndexedDB","projects\u002Ffieldnote","Sep – Dec 2024","xZOe8JZex_6l2AllsIEdi9-L_A1SrxuL2JAckJyGiis",{"id":486,"title":487,"body":488,"byline":524,"cover":525,"description":528,"extension":66,"featured":162,"gallery":246,"headline":494,"icon":529,"iconLabel":487,"liveUrl":249,"meta":530,"navigation":118,"path":531,"position":532,"repoUrl":364,"role":533,"seo":534,"stack":535,"stem":537,"timeline":538,"__hash__":539},"projects\u002Fprojects\u002Ftalkback.md","Talkback",{"type":59,"value":489,"toc":518},[490,492,495,497,500,502,513,515],[194,491,197],{"id":196},[199,493,494],{},"A friendlier interface for talking to language models.",[194,496,205],{"id":204},[199,498,499],{},"Chat interfaces inherited the terminal: a log, a prompt, and a blinking cursor. None of that is how conversation actually feels.",[194,501,212],{"id":211},[214,503,504,507,510],{},[217,505,506],{},"Explored turn-taking as motion rather than as stacked bubbles.",[217,508,509],{},"Gave replies a settling animation so arrival reads as thinking, not as printing.",[217,511,512],{},"Prototyped voice input as a first-class mode instead of a microphone icon.",[194,514,229],{"id":228},[199,516,517],{},"An exploration, not a product. Two of the interaction ideas ended up in client work.",{"title":62,"searchDepth":63,"depth":63,"links":519},[520,521,522,523],{"id":196,"depth":63,"text":197},{"id":204,"depth":63,"text":205},{"id":211,"depth":63,"text":212},{"id":228,"depth":63,"text":229},"Independent Project, 2025",{"src":526,"alt":527,"width":303,"height":304},"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":487,"description":528},[127,312,536],"Web Speech API","projects\u002Ftalkback","2025","CBIudEWOas7phx4-Ow58IF3WINAIzsoNMJGj6-fokUE",1788852690400]