[{"data":1,"prerenderedAt":246},["ShallowReactive",2],{"work-partner":3},[4,82,192],{"id":5,"title":6,"anonymised":7,"architecture":8,"body":28,"client":53,"description":48,"extension":54,"featured":7,"headline":55,"industry":56,"meta":57,"metrics":58,"navigation":62,"order":63,"path":64,"practice":65,"role":66,"screens":67,"seo":68,"stack":69,"status":77,"stem":78,"url":79,"year":80,"__hash__":81},"work\u002Fwork\u002Fcubitts.md","Stabilising the Cubitts tech stack",false,[9,14,19,23],{"name":10,"items":11},"Customer",[12,13],"Website","POS",{"name":15,"items":16},"Operations",[17,18],"Production","Inventory",{"name":20,"items":21},"Data",[22],"Customer management",{"name":24,"items":25},"Infra",[26,27],"AWS","Docker",{"type":29,"value":30,"toc":47},"minimark",[31,36,40,44],[32,33,35],"h2",{"id":34},"the-brief","The brief",[37,38,39],"p",{},"Cubitts' technology spanned five areas, built over time in Python, PHP, Vue, React and AWS. Legacy issues were causing real problems for the business, and the production labs depended on these systems to route orders and make lenses.",[32,41,43],{"id":42},"what-we-did","What we did",[37,45,46],{},"Working cross-functionally with the Cubitts team, we stabilised all five areas, consolidating where we could and rebuilding from first principles where it was safe to — always mindful that the labs couldn't stop.",{"title":48,"searchDepth":49,"depth":49,"links":50},"",2,[51,52],{"id":34,"depth":49,"text":35},{"id":42,"depth":49,"text":43},"Cubitts","md","Stabilising five connected systems — website, production, POS, inventory and customer management — that the lens labs rely on.","Eyewear",{},[59],{"value":60,"label":61},"5","Business areas stabilised",true,9,"\u002Fwork\u002Fcubitts","partner","Principal Full Stack Engineer",[],{"title":6,"description":48},[70,71,72,73,74,75,26,76,27],"Shopify","Python","PHP","Symfony","Vue","React","MySQL",null,"work\u002Fcubitts","https:\u002F\u002Fcubitts.com","Feb – Nov 2024","LRptkTAEnC_Ki-fiN4oKML85SsasdkoRw--fgGm1yvY",{"id":83,"title":84,"anonymised":7,"architecture":85,"body":110,"client":161,"description":48,"extension":54,"featured":7,"headline":162,"industry":163,"meta":164,"metrics":165,"navigation":62,"order":175,"path":176,"practice":65,"role":177,"screens":178,"seo":179,"stack":180,"status":77,"stem":188,"url":189,"year":190,"__hash__":191},"work\u002Fwork\u002Fbirl.md","Engineering process for an AI resale startup",[86,92,98,105],{"name":87,"items":88},"Process",[89,90,91],"Trunk-based branching","Staging gate","Two-layer review",{"name":93,"items":94},"Delivery",[95,96,97],"GitHub Actions","Turborepo","Vercel previews",{"name":99,"items":100},"Platform",[101,102,103,104],"Cloud Run","GKE","OIDC auth","Cloud Logging",{"name":106,"items":107},"AI",[108,109],"Vertex AI image pipeline","Product embeddings",{"type":29,"value":111,"toc":157},[112,114,117,119,122],[32,113,35],{"id":34},[37,115,116],{},"Birl builds an AI platform that helps brands manage second-hand inventory across eBay, Shopify and Depop. The team was growing and needed engineering process to match.",[32,118,43],{"id":42},[37,120,121],{},"Mark led a team of four engineers across three repositories, while contributing directly to the code.",[123,124,125,133,139,145,151],"ul",{},[126,127,128,132],"li",{},[129,130,131],"strong",{},"Process."," Documented Birl's first development process: dev, staging and production environments, trunk-based branching with a staging gate, AI-plus-human code review, CI\u002FCD, QA sign-off and a release cadence. The founders signed off an 8-week rollout plan.",[126,134,135,138],{},[129,136,137],{},"Infrastructure."," A three-environment GCP setup with Cloud Run, GKE namespaces and Vercel previews, and GitHub Actions pipelines with affected-only Turborepo builds.",[126,140,141,144],{},[129,142,143],{},"Production readiness."," An audit of the resale API found 18 issues, from missing route authentication to webhook signature checks. We then implemented the fixes, including GCP OIDC authentication across all routes.",[126,146,147,150],{},[129,148,149],{},"AI pipeline."," Migrated image processing from direct Gemini calls to Vertex AI, with clearer prompts, error handling and logging.",[126,152,153,156],{},[129,154,155],{},"Desktop app."," Helped take the Electron studio app from prototype to production, with 14 releases in a month.",{"title":48,"searchDepth":49,"depth":49,"links":158},[159,160],{"id":34,"depth":49,"text":35},{"id":42,"depth":49,"text":43},"Birl Technology","Setting up Birl's first formal engineering process while contributing to the AI pipeline and desktop studio app.","AI \u002F Fashion resale",{},[166,169,172],{"value":167,"label":168},"18","Readiness issues found and remediated",{"value":170,"label":171},"~275","Team commits a month across three repos",{"value":173,"label":174},"14","Desktop app releases in one month",10,"\u002Fwork\u002Fbirl","Tech Lead",[],{"title":84,"description":48},[181,182,183,184,185,186,187,95,96],"TypeScript","Node.js","Next.js","Electron","GCP","Vertex AI","Supabase","work\u002Fbirl","https:\u002F\u002Fwearebirl.com","Jan – Apr 2026","jSxq68eRqMrghrM2gRA__I9R5l11j6bnZ_cJLTdqKfM",{"id":193,"title":194,"anonymised":7,"architecture":195,"body":204,"client":228,"description":48,"extension":54,"featured":7,"headline":229,"industry":230,"meta":231,"metrics":232,"navigation":62,"order":236,"path":237,"practice":65,"role":177,"screens":238,"seo":239,"stack":240,"status":77,"stem":243,"url":244,"year":77,"__hash__":245},"work\u002Fwork\u002Fpluro.md","Closing the gap between founder and team at Pluro",[196,200],{"name":197,"items":198},"Leadership",[199],"CEO visibility",{"name":93,"items":201},[202,203],"PM + dev collaboration","Shared ownership",{"type":29,"value":205,"toc":224},[206,208,211,213],[32,207,35],{"id":34},[37,209,210],{},"Pluro's CEO wanted a clearer view of how the development team delivered projects, and better collaboration between developers and project management.",[32,212,43],{"id":42},[123,214,215,218,221],{},[126,216,217],{},"Identified gaps in how the tech team communicated with the PM and CEO.",[126,219,220],{},"Set up a way of working where everyone collaborates on projects and each person owns a particular part of it.",[126,222,223],{},"Rather than building a bridge between founder knowledge and team knowledge, we brought the two closer together. It's been a positive change for Pluro and an ongoing relationship.",{"title":48,"searchDepth":49,"depth":49,"links":225},[226,227],{"id":34,"depth":49,"text":35},{"id":42,"depth":49,"text":43},"Pluro","Working with the CEO to shape how projects run, and bring founder and team knowledge closer together.","Agency",{},[233],{"value":234,"label":235},"Ownership","Each team member owns part of every project",11,"\u002Fwork\u002Fpluro",[],{"title":194,"description":48},[241,242],"Delivery process","Team structure","work\u002Fpluro","https:\u002F\u002Fpluro.co.uk","w3C-Gu-BPeHpb5YPavESV8tSI8g1Kw7aMTvtPm2fCIc",1790883139390]