[{"data":1,"prerenderedAt":517},["ShallowReactive",2],{"case-studies-list":3},[4,193,349],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":8,"area":10,"summary":11,"order":12,"body":13,"_type":187,"_id":188,"_source":189,"_file":190,"_stem":191,"_extension":192},"\u002Fcase-studies\u002Fqa-transformation","case-studies",false,"","QA transformation: Pest migration + AI-assisted E2E","Testing & quality","Modernized a mature PHP codebase",1,{"type":14,"children":15,"toc":179},"root",[16,36,45,52,57,63,107,113,136,142,147,153],{"type":17,"tag":18,"props":19,"children":20},"element","blockquote",{},[21],{"type":17,"tag":22,"props":23,"children":24},"p",{},[25,28,34],{"type":26,"value":27},"text","Sanitized excerpt of commercial work on ",{"type":17,"tag":29,"props":30,"children":31},"strong",{},[32],{"type":26,"value":33},"Salutte2 (Alephoo HDE)",{"type":26,"value":35}," — an EMR SaaS\nused across 5 countries. No proprietary code is disclosed.",{"type":17,"tag":22,"props":37,"children":38},{},[39],{"type":17,"tag":40,"props":41,"children":44},"img",{"alt":42,"src":43},"AI-assisted E2E flow","\u002Fdiagrams\u002Fqa-flow.svg",[],{"type":17,"tag":46,"props":47,"children":49},"h2",{"id":48},"context",[50],{"type":26,"value":51},"Context",{"type":17,"tag":22,"props":53,"children":54},{},[55],{"type":26,"value":56},"A large, mature PHP codebase (CodeIgniter 3, jQuery) with a thin, inconsistent\ntest suite. Regressions were caught late, and manual QA was the bottleneck before\nevery release.",{"type":17,"tag":46,"props":58,"children":60},{"id":59},"what-i-did",[61],{"type":26,"value":62},"What I did",{"type":17,"tag":64,"props":65,"children":66},"ul",{},[67,78,88],{"type":17,"tag":68,"props":69,"children":70},"li",{},[71,76],{"type":17,"tag":29,"props":72,"children":73},{},[74],{"type":26,"value":75},"Migrated the backend test suite to Pest",{"type":26,"value":77}," — ~64,000 lines of tests across 600+\nfiles — establishing the team's modern testing practice.",{"type":17,"tag":68,"props":79,"children":80},{},[81,86],{"type":17,"tag":29,"props":82,"children":83},{},[84],{"type":26,"value":85},"Designed and built an E2E methodology on Playwright, assisted by an AI agent",{"type":26,"value":87},"\n— a reusable harness (shared helpers, config, pilot-module validation) that\ngenerates and maintains end-to-end coverage. ~+48,000 lines, 1,414 files.",{"type":17,"tag":68,"props":89,"children":90},{},[91,96,98,105],{"type":17,"tag":29,"props":92,"children":93},{},[94],{"type":26,"value":95},"Stood up CI on GitHub Actions",{"type":26,"value":97}," (with ",{"type":17,"tag":99,"props":100,"children":102},"code",{"className":101},[],[103],{"type":26,"value":104},"actionlint",{"type":26,"value":106},") and consolidated error\nmonitoring on Sentry.",{"type":17,"tag":46,"props":108,"children":110},{"id":109},"decisions-worth-defending",[111],{"type":26,"value":112},"Decisions worth defending",{"type":17,"tag":64,"props":114,"children":115},{},[116,126],{"type":17,"tag":68,"props":117,"children":118},{},[119,124],{"type":17,"tag":29,"props":120,"children":121},{},[122],{"type":26,"value":123},"Pest over PHPUnit",{"type":26,"value":125}," — faster feedback and a fluent API that lowered the friction\nof writing tests, which mattered more for adoption than raw parity.",{"type":17,"tag":68,"props":127,"children":128},{},[129,134],{"type":17,"tag":29,"props":130,"children":131},{},[132],{"type":26,"value":133},"AI-assisted E2E as a methodology, not a one-off",{"type":26,"value":135}," — the agents generate and\nmaintain specs; the team owns the harness. The win is sustained coverage, not a\nsingle generated test.",{"type":17,"tag":46,"props":137,"children":139},{"id":138},"outcome",[140],{"type":26,"value":141},"Outcome",{"type":17,"tag":22,"props":143,"children":144},{},[145],{"type":26,"value":146},"Modernized the testing practice of the team and cut manual QA effort per release\ncycle, accelerating release cadence for a product serving tens of thousands of users.",{"type":17,"tag":46,"props":148,"children":150},{"id":149},"evidence-public-pr-metadata",[151],{"type":26,"value":152},"Evidence (public PR metadata)",{"type":17,"tag":64,"props":154,"children":155},{},[156,161,174],{"type":17,"tag":68,"props":157,"children":158},{},[159],{"type":26,"value":160},"PR #13594 — migration to Pest (~64k lines).",{"type":17,"tag":68,"props":162,"children":163},{},[164,166,172],{"type":26,"value":165},"PR #13782 — ",{"type":17,"tag":99,"props":167,"children":169},{"className":168},[],[170],{"type":26,"value":171},"feat(e2e): AI agent E2E testing methodology",{"type":26,"value":173}," (+48k lines).",{"type":17,"tag":68,"props":175,"children":176},{},[177],{"type":26,"value":178},"PR #13645 — full E2E + unit migration to Pest.",{"title":8,"searchDepth":180,"depth":180,"links":181},2,[182,183,184,185,186],{"id":48,"depth":180,"text":51},{"id":59,"depth":180,"text":62},{"id":109,"depth":180,"text":112},{"id":138,"depth":180,"text":141},{"id":149,"depth":180,"text":152},"markdown","content:case-studies:qa-transformation.md","content","case-studies\u002Fqa-transformation.md","case-studies\u002Fqa-transformation","md",{"_path":194,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":195,"description":8,"area":196,"summary":197,"order":180,"body":198,"_type":187,"_id":346,"_source":189,"_file":347,"_stem":348,"_extension":192},"\u002Fcase-studies\u002Fpayments-integrations","Payments & third-party integrations","Integrations","MercadoPago QR payments, multi-country electronic invoicing, and RIS\u002FLIS bridges — idempotency and signature verification treated as defaults.",{"type":14,"children":199,"toc":339},[200,213,221,225,230,236,281,285,308,312,317,321],{"type":17,"tag":18,"props":201,"children":202},{},[203],{"type":17,"tag":22,"props":204,"children":205},{},[206,207,211],{"type":26,"value":27},{"type":17,"tag":29,"props":208,"children":209},{},[210],{"type":26,"value":33},{"type":26,"value":212},". No proprietary\ncode is disclosed.",{"type":17,"tag":22,"props":214,"children":215},{},[216],{"type":17,"tag":40,"props":217,"children":220},{"alt":218,"src":219},"Webhook idempotency flow","\u002Fdiagrams\u002Fpayments-webhook.svg",[],{"type":17,"tag":46,"props":222,"children":223},{"id":48},[224],{"type":26,"value":51},{"type":17,"tag":22,"props":226,"children":227},{},[228],{"type":26,"value":229},"An EMR product expanding into new payment flows and external systems. Each\nintegration needed to be reliable under real-world conditions: retries, duplicate\nevents, signature verification, and partial failures.",{"type":17,"tag":46,"props":231,"children":233},{"id":232},"what-i-built",[234],{"type":26,"value":235},"What I built",{"type":17,"tag":64,"props":237,"children":238},{},[239,249,259,269],{"type":17,"tag":68,"props":240,"children":241},{},[242,247],{"type":17,"tag":29,"props":243,"children":244},{},[245],{"type":26,"value":246},"MercadoPago QR + webhook",{"type":26,"value":248}," — a payment flow with blocking UX, webhook ingestion,\nidempotency, and signature verification (+16,000 lines, 94 files).",{"type":17,"tag":68,"props":250,"children":251},{},[252,257],{"type":17,"tag":29,"props":253,"children":254},{},[255],{"type":26,"value":256},"HC → RIS integration",{"type":26,"value":258}," — bridged the EMR to an external radiology system\n(RIS Eden) via a client + factory + controllers + tests (+7.7k\u002F-3k lines).",{"type":17,"tag":68,"props":260,"children":261},{},[262,267],{"type":17,"tag":29,"props":263,"children":264},{},[265],{"type":26,"value":266},"Electronic invoicing with Facturacion.Cl",{"type":26,"value":268}," — enabled platform operations in Chile\n(a new country market).",{"type":17,"tag":68,"props":270,"children":271},{},[272,274,279],{"type":26,"value":273},"A reusable ",{"type":17,"tag":29,"props":275,"children":276},{},[277],{"type":26,"value":278},"integration pattern",{"type":26,"value":280}," (client, signature\u002Fidempotency, retry) applied\nacross webhooks and external APIs, plus social-work\u002Finsurance coverage-validation\nintegrations (obra-social brokers).",{"type":17,"tag":46,"props":282,"children":283},{"id":109},[284],{"type":26,"value":112},{"type":17,"tag":64,"props":286,"children":287},{},[288,298],{"type":17,"tag":68,"props":289,"children":290},{},[291,296],{"type":17,"tag":29,"props":292,"children":293},{},[294],{"type":26,"value":295},"Idempotency + signature verification first.",{"type":26,"value":297}," Webhooks redeliver; a missing\nidempotency key means double-charging or double-processing. I treat \"the\nintegration will receive duplicate\u002Fmalformed events\" as the default.",{"type":17,"tag":68,"props":299,"children":300},{},[301,306],{"type":17,"tag":29,"props":302,"children":303},{},[304],{"type":26,"value":305},"Client + factory for the RIS bridge",{"type":26,"value":307}," — swappable adapter so the EMR isn't\nhard-coupled to one radiology vendor.",{"type":17,"tag":46,"props":309,"children":310},{"id":138},[311],{"type":26,"value":141},{"type":17,"tag":22,"props":313,"children":314},{},[315],{"type":26,"value":316},"New payment capability and market expansion (Chile), plus a hardened integration\nlayer reused by subsequent third-party connections — for a product operating across\nArgentina, Chile, Colombia, México, and the Dominican Republic.",{"type":17,"tag":46,"props":318,"children":319},{"id":149},[320],{"type":26,"value":152},{"type":17,"tag":64,"props":322,"children":323},{},[324,329,334],{"type":17,"tag":68,"props":325,"children":326},{},[327],{"type":26,"value":328},"PR #13461 — MercadoPago QR + webhook (+16k\u002F-5k lines).",{"type":17,"tag":68,"props":330,"children":331},{},[332],{"type":26,"value":333},"PR #13424 — HC → RIS Eden integration (+7.7k\u002F-3k).",{"type":17,"tag":68,"props":335,"children":336},{},[337],{"type":26,"value":338},"PR #13105 — Facturacion.Cl electronic invoicing.",{"title":8,"searchDepth":180,"depth":180,"links":340},[341,342,343,344,345],{"id":48,"depth":180,"text":51},{"id":232,"depth":180,"text":235},{"id":109,"depth":180,"text":112},{"id":138,"depth":180,"text":141},{"id":149,"depth":180,"text":152},"content:case-studies:payments-integrations.md","case-studies\u002Fpayments-integrations.md","case-studies\u002Fpayments-integrations",{"_path":350,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":351,"description":8,"area":352,"summary":353,"order":354,"body":355,"_type":187,"_id":514,"_source":189,"_file":515,"_stem":516,"_extension":192},"\u002Fcase-studies\u002Fperformance-reliability","Performance & reliability under load","Performance","Cut a critical database query from 30s to ~2s, hardened a corrupted-cache path, and ran 100+ production hotfixes with disciplined, reversible changes.",3,{"type":14,"children":356,"toc":507},[357,370,378,382,387,391,434,438,461,465,470,474],{"type":17,"tag":18,"props":358,"children":359},{},[360],{"type":17,"tag":22,"props":361,"children":362},{},[363,364,368],{"type":26,"value":27},{"type":17,"tag":29,"props":365,"children":366},{},[367],{"type":26,"value":33},{"type":26,"value":369}," — an EMR SaaS\nwhere some clinics process up to 30,000 appointments\u002Fday. No proprietary code is\ndisclosed.",{"type":17,"tag":22,"props":371,"children":372},{},[373],{"type":17,"tag":40,"props":374,"children":377},{"alt":375,"src":376},"Slow query optimization: 30s to ~2s","\u002Fdiagrams\u002Fperf-query.svg",[],{"type":17,"tag":46,"props":379,"children":380},{"id":48},[381],{"type":26,"value":51},{"type":17,"tag":22,"props":383,"children":384},{},[385],{"type":26,"value":386},"At scale, a few slow queries and a couple of corrupt-cache incidents degraded the\nexperience in the highest-volume clinics. Reliability is critical in healthcare\nsoftware — a degraded appointment flow blocks patients.",{"type":17,"tag":46,"props":388,"children":389},{"id":59},[390],{"type":26,"value":62},{"type":17,"tag":64,"props":392,"children":393},{},[394,404,414,424],{"type":17,"tag":68,"props":395,"children":396},{},[397,402],{"type":17,"tag":29,"props":398,"children":399},{},[400],{"type":26,"value":401},"Cut critical database queries from >30s to ~2s (~15×)",{"type":26,"value":403}," by rewriting them and\nadding the right indexes — the single most-quoted metric from this work.",{"type":17,"tag":68,"props":405,"children":406},{},[407,412],{"type":17,"tag":29,"props":408,"children":409},{},[410],{"type":26,"value":411},"Diagnosed and fixed corrupted-cache incidents",{"type":26,"value":413}," and hardened the cache path.",{"type":17,"tag":68,"props":415,"children":416},{},[417,422],{"type":17,"tag":29,"props":418,"children":419},{},[420],{"type":26,"value":421},"100+ production deploys and hotfixes",{"type":26,"value":423},", including urgent incident response.",{"type":17,"tag":68,"props":425,"children":426},{},[427,432],{"type":17,"tag":29,"props":428,"children":429},{},[430],{"type":26,"value":431},"Consolidated error monitoring on Sentry",{"type":26,"value":433}," so regressions surface immediately\nrather than via user reports.",{"type":17,"tag":46,"props":435,"children":436},{"id":109},[437],{"type":26,"value":112},{"type":17,"tag":64,"props":439,"children":440},{},[441,451],{"type":17,"tag":68,"props":442,"children":443},{},[444,449],{"type":17,"tag":29,"props":445,"children":446},{},[447],{"type":26,"value":448},"Measure, then optimize.",{"type":26,"value":450}," The 30s→2s win came from identifying the actual\noffending queries (via slow-query analysis), not speculative indexing.",{"type":17,"tag":68,"props":452,"children":453},{},[454,459],{"type":17,"tag":29,"props":455,"children":456},{},[457],{"type":26,"value":458},"Treat production access as a first-class skill",{"type":26,"value":460}," — disciplined, small, reversible\nhotfixes under pressure, not heroics.",{"type":17,"tag":46,"props":462,"children":463},{"id":138},[464],{"type":26,"value":141},{"type":17,"tag":22,"props":466,"children":467},{},[468],{"type":26,"value":469},"Materially better UX in high-volume clinics and faster incident detection and\nresolution across the platform.",{"type":17,"tag":46,"props":471,"children":472},{"id":149},[473],{"type":26,"value":152},{"type":17,"tag":64,"props":475,"children":476},{},[477,490,495],{"type":17,"tag":68,"props":478,"children":479},{},[480,482,488],{"type":26,"value":481},"PR #13795 — ",{"type":17,"tag":99,"props":483,"children":485},{"className":484},[],[486],{"type":26,"value":487},"Production mejoras slow queries",{"type":26,"value":489},".",{"type":17,"tag":68,"props":491,"children":492},{},[493],{"type":26,"value":494},"PR #13468 — corrupted-cache fix.",{"type":17,"tag":68,"props":496,"children":497},{},[498,500,506],{"type":26,"value":499},"100+ PRs tagged ",{"type":17,"tag":99,"props":501,"children":503},{"className":502},[],[504],{"type":26,"value":505},"Production",{"type":26,"value":489},{"title":8,"searchDepth":180,"depth":180,"links":508},[509,510,511,512,513],{"id":48,"depth":180,"text":51},{"id":59,"depth":180,"text":62},{"id":109,"depth":180,"text":112},{"id":138,"depth":180,"text":141},{"id":149,"depth":180,"text":152},"content:case-studies:performance-reliability.md","case-studies\u002Fperformance-reliability.md","case-studies\u002Fperformance-reliability",1788209837520]