[{"data":1,"prerenderedAt":268},["ShallowReactive",2],{"work":3},[4,61,100,145,185,226],{"id":5,"title":6,"accent":7,"body":8,"client":41,"description":35,"extension":42,"location":43,"meta":44,"navigation":45,"order":46,"path":47,"period":48,"role":49,"seo":50,"slug":51,"stem":52,"summary":53,"tech":54,"year":59,"__hash__":60},"work\u002Fwork\u002F01-apex-invest.md","Apex Invest","#7C5CFF",{"type":9,"value":10,"toc":34},"minimark",[11,16,20,24,27,31],[12,13,15],"h2",{"id":14},"problem","Problem",[17,18,19],"p",{},"Tokeny needed two new investor-facing surfaces under the Apex Invest umbrella, plus\na high-stakes migration of a long-lived React app onto Vue without revenue\ninterruption or feature regression.",[12,21,23],{"id":22},"approach","Approach",[17,25,26],{},"I joined as the senior FE voice, paired with the lead architect to define a thin\ntranslation layer for shared design primitives and used a route-by-route migration\nstrategy to keep both stacks in production simultaneously. New surfaces were built\nVue-first to amortise the migration cost.",[12,28,30],{"id":29},"outcome","Outcome",[17,32,33],{},"Both new products launched on schedule. The migration was incremental and reversible\nat every step — at no point was the React or Vue app ever down. Internal teams now\nshare components across both stacks via a small token + primitive layer.",{"title":35,"searchDepth":36,"depth":36,"links":37},"",2,[38,39,40],{"id":14,"depth":36,"text":15},{"id":22,"depth":36,"text":23},{"id":29,"depth":36,"text":30},"Tokeny","md","Luxembourg \u002F remote",{},true,1,"\u002Fwork\u002F01-apex-invest","Sep 2025 — Present","Senior Front-end Engineer",{"title":6,"description":35},"apex-invest","work\u002F01-apex-invest","Two new Apex Invest products and a live React → Vue migration on a revenue surface.",[55,56,57,58],"Vue 3","React","TypeScript","Tailwind",2025,"xMSDKWUL14Hn9HzU_THwE-YXqgbAcpc_SvaIsybBC-M",{"id":62,"title":63,"accent":64,"body":65,"client":87,"description":35,"extension":42,"location":88,"meta":89,"navigation":45,"order":36,"path":90,"period":91,"role":49,"seo":92,"slug":93,"stem":94,"summary":95,"tech":96,"year":59,"__hash__":99},"work\u002Fwork\u002F02-volkswagen.md","Volkswagen platform","#C6FF3D",{"type":9,"value":66,"toc":82},[67,69,72,74,77,79],[12,68,15],{"id":14},[17,70,71],{},"A regional Volkswagen platform with strict brand, accessibility, and localisation\nrequirements — multiple markets, multiple languages, one shared codebase. The\nexisting FE pipeline had drift between markets and inconsistent component coverage.",[12,73,23],{"id":22},[17,75,76],{},"I owned the FE work alongside the German lead, tightening the design-system layer\nand reducing per-market divergence. We standardised the way new market variants\nplugged in, and aligned all teams on a single tokens-and-primitives rhythm.",[12,78,30],{"id":29},[17,80,81],{},"Shipped consistently across markets for a year. Reduced per-market delivery time\nby harmonising the component layer and cutting bespoke per-region forks.",{"title":35,"searchDepth":36,"depth":36,"links":83},[84,85,86],{"id":14,"depth":36,"text":15},{"id":22,"depth":36,"text":23},{"id":29,"depth":36,"text":30},"AKNA (for a German OEM)","Yerevan \u002F embedded with Germany",{},"\u002Fwork\u002F02-volkswagen","Sep 2024 — Sep 2025",{"title":63,"description":35},"volkswagen","work\u002F02-volkswagen","Embedded with a German client team as the senior FE voice on a Volkswagen platform shipping to multiple regional markets.",[56,57,97,98],"Internationalisation","Design systems","mX0NS8nMzL-S5MdKmDYbSAI62EqW0cExlLlbQttNujQ",{"id":101,"title":102,"accent":103,"body":104,"client":126,"description":35,"extension":42,"location":127,"meta":128,"navigation":45,"order":129,"path":130,"period":131,"role":132,"seo":133,"slug":134,"stem":135,"summary":136,"tech":137,"year":143,"__hash__":144},"work\u002Fwork\u002F03-infinity-ai.md","Infinity AI","#FF2A6D",{"type":9,"value":105,"toc":121},[106,108,111,113,116,118],[12,107,15],{"id":14},[17,109,110],{},"A small SF startup needed an AI video tool live, end-to-end, in months — without\na full team. They wanted product-quality polish, not a prototype.",[12,112,23],{"id":22},[17,114,115],{},"Next.js for app + APIs, Supabase for auth + database + storage, OpenAI for the\nprompt-and-script pipeline, Replicate for video generation, Vercel for delivery.\nDesigned the schemas, built the queue \u002F status flows, wired billing, and shipped\nthe entire UI myself.",[12,117,30],{"id":29},[17,119,120],{},"The product launched on schedule. Solo delivery from a brief to a billable product\nin roughly four months — including all infra, UI, and the AI pipeline.",{"title":35,"searchDepth":36,"depth":36,"links":122},[123,124,125],{"id":14,"depth":36,"text":15},{"id":22,"depth":36,"text":23},{"id":29,"depth":36,"text":30},"Infinity AI (San Francisco)","Yerevan \u002F remote SF",{},3,"\u002Fwork\u002F03-infinity-ai","Feb 2024 — Jun 2024","Full-stack Engineer (freelance)",{"title":102,"description":35},"infinity-ai","work\u002F03-infinity-ai","Solo-built an AI video tool from zero — front, back, prompt pipeline, billing, deploy.",[138,139,140,141,142],"Next.js","Supabase","OpenAI","Replicate","Vercel",2024,"0fr6Gt5QIPwZBWgqsUCU1g_wop7BhPGRs1qTqCe7CwQ",{"id":146,"title":147,"accent":148,"body":149,"client":171,"description":35,"extension":42,"location":172,"meta":173,"navigation":45,"order":174,"path":175,"period":176,"role":177,"seo":178,"slug":179,"stem":180,"summary":181,"tech":182,"year":143,"__hash__":184},"work\u002Fwork\u002F04-flexy-global.md","Two products, one team","#5436E6",{"type":9,"value":150,"toc":166},[151,153,156,158,161,163],[12,152,15],{"id":14},[17,154,155],{},"Two products, two velocities, one engineer doing FE work on both: a greenfield\nReact + Next build and a legacy app that needed continuous fixes alongside new\nfeatures. Context-switching was the real constraint.",[12,157,23],{"id":22},[17,159,160],{},"Maintained a clear split: hard \"no-touch\" boundaries between products, separate\nPR queues, separate test pipelines. On the legacy side, every new feature came\nwith a small refactor in the same PR — no green-field rewrites, but constant\nincremental cleanup.",[12,162,30],{"id":29},[17,164,165],{},"Greenfield shipped on time. Legacy app's defect rate trended down quarter over\nquarter. Showed how steady, disciplined incremental cleanup beats big-bang\nrewrites in real budget environments.",{"title":35,"searchDepth":36,"depth":36,"links":167},[168,169,170],{"id":14,"depth":36,"text":15},{"id":22,"depth":36,"text":23},{"id":29,"depth":36,"text":30},"Flexy Global","Yerevan, Armenia",{},4,"\u002Fwork\u002F04-flexy-global","Dec 2023 — Sep 2024","Front-end Engineer",{"title":147,"description":35},"flexy-global","work\u002F04-flexy-global","Parallel work on a greenfield product and a legacy codebase — extending while stabilising.",[56,138,183],"Legacy refactor","HxShi9QRFMSOjyj7zKj3MIvy3GvgTZrQiKBLXbjQ2MM",{"id":186,"title":187,"accent":188,"body":189,"client":211,"description":35,"extension":42,"location":172,"meta":212,"navigation":45,"order":213,"path":214,"period":215,"role":216,"seo":217,"slug":218,"stem":219,"summary":220,"tech":221,"year":224,"__hash__":225},"work\u002Fwork\u002F05-coderiders.md","Three clients, three years","#05D9E8",{"type":9,"value":190,"toc":206},[191,193,196,198,201,203],[12,192,15],{"id":14},[17,194,195],{},"Three years embedded in three different client products as the front-end lead,\nplus the back-end CRUD APIs for the agency's own marketing surface. Different\nteams, different cultures, one engineer needing to read each room fast.",[12,197,23],{"id":22},[17,199,200],{},"Ground rules: ship the work the client wanted, keep the work the agency owned\nsmall and tight. Built the agency's CRUD APIs in NestJS, mentored juniors and\ninterns through code review and pairing — turning the more curious ones into\nreviewers themselves.",[12,202,30],{"id":29},[17,204,205],{},"All three client engagements ended cleanly with the clients happy. Several\njuniors I mentored are now mid-level engineers. The agency website still runs\non the API I built.",{"title":35,"searchDepth":36,"depth":36,"links":207},[208,209,210],{"id":14,"depth":36,"text":15},{"id":22,"depth":36,"text":23},{"id":29,"depth":36,"text":30},"Coderiders",{},5,"\u002Fwork\u002F05-coderiders","Nov 2020 — Oct 2023","Full-stack Engineer",{"title":187,"description":35},"coderiders","work\u002F05-coderiders","Embedded in three client products as FE lead, shipped NestJS APIs, and mentored juniors.",[56,222,223],"NestJS","Mentorship",2023,"WnFqTYMsDunxo9WwCR--Souur6ilqAsYOkecPcTCab4",{"id":227,"title":228,"accent":229,"body":230,"client":252,"description":35,"extension":42,"location":253,"meta":254,"navigation":45,"order":255,"path":256,"period":257,"role":177,"seo":258,"slug":259,"stem":260,"summary":261,"tech":262,"year":266,"__hash__":267},"work\u002Fwork\u002F06-limlines.md","CMS, app, analytics","#9B82FF",{"type":9,"value":231,"toc":247},[232,234,237,239,242,244],[12,233,15],{"id":14},[17,235,236],{},"My first front-end job — a publication that needed an editorial CMS for the\nbusiness team, an analytics layer, a public website, and a mobile app, all\nsharing brand, content, and identity.",[12,238,23],{"id":22},[17,240,241],{},"Built and maintained the CMS where the business team CRUD-ed articles. Wired\nanalytics dashboards in Graph.js so editors could see what was working in\nnear-real-time. Shipped features on the public site in React, ported a few\npieces to React Native for the app, and configured Node + Webpack so meta tags\nrendered server-side for proper sharing.",[12,243,30],{"id":29},[17,245,246],{},"The business team owned their content workflow without needing engineering\nhand-holding. Editorial decisions got faster because the analytics arrived\nsooner. This is the role where I learned that the \"boring\" parts of the front\nend — meta tags, cache, SSR — are where most of the user trust is built.",{"title":35,"searchDepth":36,"depth":36,"links":248},[249,250,251],{"id":14,"depth":36,"text":15},{"id":22,"depth":36,"text":23},{"id":29,"depth":36,"text":30},"Limlines","Beirut, Lebanon",{},6,"\u002Fwork\u002F06-limlines","Sep 2018 — Sep 2020",{"title":228,"description":35},"limlines","work\u002F06-limlines","Editorial CMS, mobile app, and the SSR plumbing that kept the meta tags dynamic.",[56,263,264,265],"React Native","Node + Webpack SSR","Graph.js",2020,"9mEhHtfzrYtTx0NGhdLWxMndL7KGbwzwvqosTAtIPD0",1778258805175]