{"version":1,"lang":"en","user":"guest","home":"/home/guest","downloads":"Downloads","root":{"type":"dir","name":"","id":"root","children":[{"type":"dir","name":"home","id":"home","children":[{"type":"dir","name":"guest","id":"guest","children":[{"type":"file","name":".plan","id":".plan","mime":"text/plain","raw":"You found the .plan, like in the old finger days.\n\nRight now: building Armadillo Gaming (gaming tables with IoT and AI) and teaching Software\nEngineering at IDRA.\n"},{"type":"file","name":"about.md","id":"about.md","mime":"text/markdown","raw":"# About me\n\nI'm Martín, a Principal Engineer and software architect based in Mar del Plata, Argentina.\nI've been designing backend, cloud and IoT systems for over 14 years, and what I enjoy most\nis finding the simplest architecture that solves a hard problem.\n\nI've spent much of my career in media and entertainment, building video pipelines for WWE\nand Canela Media that bring content to platforms like WWE Network, YouTube, Peacock and\nBrightcove. Before that I worked in fintech, on Tigo Money across several Latin American\ncountries. Today I'm also building Armadillo Gaming, modular gaming tables with IoT and AI.\n\nI work with spec-driven development and AI agents, and I teach Software Engineering at\nIDRA, where I mentor students through projects for real clients.\n\nTo see what I've worked on, try `ls projects` or `cv`. To reach me, `contact`.\n","alt":"sobre-mi.md","html":"<h1>About me</h1>\n<p>I'm Martín, a Principal Engineer and software architect based in Mar del Plata, Argentina.\nI've been designing backend, cloud and IoT systems for over 14 years, and what I enjoy most\nis finding the simplest architecture that solves a hard problem.</p>\n<p>I've spent much of my career in media and entertainment, building video pipelines for WWE\nand Canela Media that bring content to platforms like WWE Network, YouTube, Peacock and\nBrightcove. Before that I worked in fintech, on Tigo Money across several Latin American\ncountries. Today I'm also building Armadillo Gaming, modular gaming tables with IoT and AI.</p>\n<p>I work with spec-driven development and AI agents, and I teach Software Engineering at\nIDRA, where I mentor students through projects for real clients.</p>\n<p>To see what I've worked on, try <code data-cmd=\"ls projects\">ls projects</code> or <code data-cmd=\"cv\">cv</code>. To reach me, <code data-cmd=\"contact\">contact</code>.</p>"},{"type":"file","name":"contact.md","id":"contact.md","mime":"text/markdown","raw":"# Contact\n\nLinkedIn is the preferred way: send me a message about what you need.\n\n- **LinkedIn:** [linkedin.com/in/magregorio](https://www.linkedin.com/in/magregorio)\n- **GitHub:** [github.com/martingregorio](https://github.com/martingregorio)\n- **Email:** hi (at) martingregorio (dot) com (dot) ar\n","alt":"contacto.md","html":"<h1>Contact</h1>\n<p>LinkedIn is the preferred way: send me a message about what you need.</p>\n<ul>\n<li><strong>LinkedIn:</strong> <a href=\"https://www.linkedin.com/in/magregorio\" target=\"_blank\" rel=\"noopener noreferrer\">linkedin.com/in/magregorio</a></li>\n<li><strong>GitHub:</strong> <a href=\"https://github.com/martingregorio\" target=\"_blank\" rel=\"noopener noreferrer\">github.com/martingregorio</a></li>\n<li><strong>Email:</strong> hi (at) martingregorio (dot) com (dot) ar</li>\n</ul>"},{"type":"file","name":"cv.json","id":"cv.json","mime":"application/json","raw":"{\n  \"lang\": \"en\",\n  \"basics\": {\n    \"name\": \"Martin Gregorio\",\n    \"label\": \"Principal Engineer & Software Architect\",\n    \"location\": \"Mar del Plata, Argentina\",\n    \"summary\": \"Principal Engineer and software architect with over 14 years designing backend, cloud and IoT systems. I've built video pipelines for WWE and Canela Media and multi-country fintech with Tigo Money, and today I'm building Armadillo Gaming, an AI-powered gaming table platform. I work with spec-driven development and AI agents, and I teach Software Engineering at IDRA, where I mentor students through projects for real clients.\",\n    \"email\": \"hi@martingregorio.com.ar\",\n    \"profiles\": [\n      {\n        \"network\": \"LinkedIn\",\n        \"url\": \"https://www.linkedin.com/in/magregorio\"\n      },\n      {\n        \"network\": \"GitHub\",\n        \"url\": \"https://github.com/martingregorio\"\n      }\n    ]\n  },\n  \"experience\": [\n    {\n      \"id\": \"idra-ingsoft\",\n      \"company\": \"IDRA\",\n      \"role\": \"Software Engineering Teacher\",\n      \"start\": \"2026\",\n      \"end\": null,\n      \"location\": \"Mar del Plata\",\n      \"highlights\": [\n        \"Software lifecycle, agile methods, CI/CD, unit testing, metrics and team roles.\",\n        \"Integrations with REST and GraphQL APIs.\",\n        \"I mentor students through the yearly project, a real solution for a real client.\"\n      ],\n      \"stack\": [\n        \"GraphQL\",\n        \"GitHub Actions\"\n      ],\n      \"tags\": [\n        \"docencia\"\n      ]\n    },\n    {\n      \"id\": \"armadillo\",\n      \"company\": \"Armadillo Gaming\",\n      \"role\": \"Founder & Software Architect\",\n      \"start\": \"2025-01\",\n      \"end\": null,\n      \"location\": \"Mar del Plata\",\n      \"highlights\": [\n        \"I founded and lead a product that combines hardware and software. I coordinate the team that designs the modular solid-wood tables, builds their electronics and crafts them.\",\n        \"Designed the IoT platform end to end, from the devices to the cloud, on AWS with infrastructure as code.\",\n        \"Built an AI board game coach that teaches games and answers rules questions out loud, with answers that cite the rulebook.\",\n        \"Implemented signed over-the-air firmware updates with automatic rollback.\",\n        \"I work with spec-driven development and AI agents, backed by versioned contracts and CI quality gates.\"\n      ],\n      \"stack\": [\n        \"Go\",\n        \"TypeScript\",\n        \"NestJS\",\n        \"Svelte\",\n        \"PostgreSQL\",\n        \"MQTT\",\n        \"AWS\",\n        \"Terraform / OpenTofu\",\n        \"GitHub Actions\",\n        \"LLMs (Claude, Gemini)\",\n        \"RAG and embeddings\",\n        \"AI agents\"\n      ],\n      \"tags\": [\n        \"iot\",\n        \"ia\",\n        \"arquitectura\",\n        \"liderazgo\"\n      ]\n    },\n    {\n      \"id\": \"idra-prog2\",\n      \"company\": \"IDRA\",\n      \"role\": \"Programming 2 Teacher\",\n      \"start\": \"2022-02\",\n      \"end\": \"2023-07\",\n      \"location\": \"Mar del Plata\",\n      \"highlights\": [\n        \"Programming languages, object-oriented programming and SOLID principles.\"\n      ],\n      \"stack\": [],\n      \"tags\": [\n        \"docencia\"\n      ]\n    },\n    {\n      \"id\": \"intive-canela\",\n      \"company\": \"intive (ex Spark Digital)\",\n      \"role\": \"Principal Engineer · Canela Media\",\n      \"start\": \"2022\",\n      \"end\": null,\n      \"location\": \"Mar del Plata (remote)\",\n      \"highlights\": [\n        \"Own the full media pipeline, from the moment a rightsholder's source file arrives until the content is available to customers.\",\n        \"Mezzanine and proxy transcoding, and automated delivery to QuickPlay and Brightcove.\",\n        \"Integrated Vionlabs to extract metadata and ad breaks from proxies, speeding up the content team's work.\",\n        \"CI/CD with GitHub Actions and infrastructure with Terraform on AWS.\"\n      ],\n      \"stack\": [\n        \"TypeScript\",\n        \"DynamoDB\",\n        \"PostgreSQL\",\n        \"AWS\",\n        \"Terraform / OpenTofu\",\n        \"GitHub Actions\"\n      ],\n      \"tags\": [\n        \"media\",\n        \"streaming\",\n        \"arquitectura\"\n      ]\n    },\n    {\n      \"id\": \"intive-wwe\",\n      \"company\": \"intive (ex Spark Digital)\",\n      \"role\": \"Senior Engineer / Tech Lead · WWE\",\n      \"start\": \"2016-09\",\n      \"end\": \"2022\",\n      \"location\": \"Mar del Plata (remote)\",\n      \"highlights\": [\n        \"Built the internal system that transcodes video with on-premise AWS Elemental Server and delivers it to WWE.com, WWE Network, YouTube, Peacock and Sony LIV.\",\n        \"Owned the MDM, whose master records each platform inherits metadata from and overrides to meet its own requirements.\",\n        \"CI/CD with GitLab, and services in Laravel, NestJS and Go on AWS.\"\n      ],\n      \"stack\": [\n        \"Laravel\",\n        \"Vue\",\n        \"NestJS\",\n        \"MySQL\",\n        \"Beanstalkd\",\n        \"Redis\",\n        \"Go\",\n        \"AWS\",\n        \"AWS Elemental\",\n        \"GitLab CI\"\n      ],\n      \"tags\": [\n        \"media\",\n        \"streaming\",\n        \"video\"\n      ]\n    },\n    {\n      \"id\": \"globant\",\n      \"company\": \"Globant\",\n      \"role\": \"PHP Developer → Tech Lead\",\n      \"start\": \"2014-08\",\n      \"end\": \"2016-09\",\n      \"location\": \"Mar del Plata\",\n      \"highlights\": [\n        \"For Millicom/TIGO, I built the Tigo Money backend, a Phalcon REST API connecting the mobile apps to each carrier's SOAP middleware.\",\n        \"I rolled it out in Honduras, Guatemala and Bolivia, and supported El Salvador and Tanzania. I started as a developer and became tech lead.\",\n        \"Then I worked on Handler, a Laravel marketplace for booking home services such as electricians, plumbers or cleaning.\"\n      ],\n      \"stack\": [\n        \"PHP\",\n        \"Phalcon\",\n        \"Laravel\",\n        \"MySQL\"\n      ],\n      \"tags\": [\n        \"fintech\",\n        \"liderazgo\"\n      ]\n    },\n    {\n      \"id\": \"freelance\",\n      \"company\": \"Freelance\",\n      \"role\": \"Software consultant and developer\",\n      \"start\": \"2012-07\",\n      \"end\": null,\n      \"location\": \"Mar del Plata\",\n      \"highlights\": [\n        \"Since 2017 I've built and maintained the CRM of a children's charity foundation, which generates its donors' direct debits across seven card networks (Visa, Mastercard, Cabal and Naranja, among others).\",\n        \"In 2026 I rebuilt it on Symfony 8 and AWS, with infrastructure as code, CI/CD and atomic deploys with automatic rollback, for about 10 dollars a month.\",\n        \"Consulting and development on Laravel projects.\"\n      ],\n      \"stack\": [\n        \"PHP\",\n        \"Symfony\",\n        \"Laravel\",\n        \"MySQL\",\n        \"AWS\",\n        \"Terraform / OpenTofu\",\n        \"GitHub Actions\"\n      ],\n      \"tags\": [\n        \"fintech\",\n        \"consultoria\"\n      ]\n    }\n  ],\n  \"projects\": [\n    {\n      \"id\": \"this-site\",\n      \"title\": \"This site\",\n      \"year\": 2026,\n      \"role\": \"Author\",\n      \"summary\": \"A personal site that is a fish-style terminal, built with Astro and Svelte.\",\n      \"stack\": [\n        \"Astro\",\n        \"Svelte\",\n        \"TypeScript\",\n        \"AWS\",\n        \"Terraform / OpenTofu\"\n      ],\n      \"tags\": [\n        \"web\",\n        \"open-source\"\n      ],\n      \"url\": \"https://github.com/martingregorio/site\"\n    },\n    {\n      \"id\": \"armadillo-gaming\",\n      \"title\": \"Armadillo Gaming\",\n      \"year\": 2025,\n      \"role\": \"Founder & architect\",\n      \"summary\": \"Modular IoT gaming tables with AI that set the mood of every game with light and sound, and teach you how to play.\",\n      \"stack\": [\n        \"Go\",\n        \"TypeScript\",\n        \"NestJS\",\n        \"Svelte\",\n        \"PostgreSQL\",\n        \"MQTT\",\n        \"AWS\",\n        \"Terraform / OpenTofu\",\n        \"GitHub Actions\",\n        \"LLMs (Claude, Gemini)\",\n        \"RAG and embeddings\",\n        \"Python\"\n      ],\n      \"tags\": [\n        \"iot\",\n        \"ai\",\n        \"hardware\",\n        \"architecture\"\n      ]\n    },\n    {\n      \"id\": \"canela-media\",\n      \"title\": \"Media pipeline for Canela Media\",\n      \"year\": 2022,\n      \"role\": \"Principal Engineer\",\n      \"summary\": \"Video ingest, transcoding and delivery, from the rightsholder's file to QuickPlay and Brightcove.\",\n      \"stack\": [\n        \"TypeScript\",\n        \"DynamoDB\",\n        \"PostgreSQL\",\n        \"AWS\",\n        \"Terraform / OpenTofu\",\n        \"GitHub Actions\"\n      ],\n      \"tags\": [\n        \"media\",\n        \"streaming\",\n        \"architecture\"\n      ]\n    },\n    {\n      \"id\": \"wwe-media\",\n      \"title\": \"Transcoding and metadata for WWE\",\n      \"year\": 2016,\n      \"role\": \"Senior Engineer / Tech Lead\",\n      \"summary\": \"Internal system that transcodes and delivers video to WWE Network, YouTube, Peacock and Sony LIV, with a metadata MDM.\",\n      \"stack\": [\n        \"Laravel\",\n        \"Vue\",\n        \"NestJS\",\n        \"MySQL\",\n        \"Beanstalkd\",\n        \"Redis\",\n        \"Go\",\n        \"AWS\",\n        \"AWS Elemental\",\n        \"GitLab CI\"\n      ],\n      \"tags\": [\n        \"media\",\n        \"streaming\",\n        \"video\"\n      ]\n    },\n    {\n      \"id\": \"tigo-money\",\n      \"title\": \"Tigo Money\",\n      \"year\": 2014,\n      \"role\": \"Developer → Tech lead\",\n      \"summary\": \"Backend for Millicom/TIGO's mobile wallet, rolled out across several Latin American countries.\",\n      \"stack\": [\n        \"PHP\",\n        \"Phalcon\",\n        \"MySQL\"\n      ],\n      \"tags\": [\n        \"fintech\",\n        \"mobile\",\n        \"integrations\"\n      ]\n    }\n  ],\n  \"skills\": [\n    {\n      \"category\": \"Architecture and cloud\",\n      \"items\": [\n        \"AWS\",\n        \"AWS Elemental\",\n        \"Terraform / OpenTofu\",\n        \"MQTT\",\n        \"IoT\"\n      ]\n    },\n    {\n      \"category\": \"Backend\",\n      \"items\": [\n        \"Go\",\n        \"TypeScript\",\n        \"Node.js\",\n        \"NestJS\",\n        \"PHP\",\n        \"Laravel\",\n        \"Symfony\",\n        \"GraphQL\",\n        \"RabbitMQ\"\n      ]\n    },\n    {\n      \"category\": \"Frontend\",\n      \"items\": [\n        \"Vue\",\n        \"Svelte\",\n        \"Astro\"\n      ]\n    },\n    {\n      \"category\": \"Data\",\n      \"items\": [\n        \"PostgreSQL\",\n        \"MySQL\",\n        \"DynamoDB\",\n        \"Redis\",\n        \"MongoDB\"\n      ]\n    },\n    {\n      \"category\": \"AI\",\n      \"items\": [\n        \"LLMs (Claude, Gemini)\",\n        \"RAG / embeddings\",\n        \"AI agents\"\n      ]\n    },\n    {\n      \"category\": \"DevOps\",\n      \"items\": [\n        \"GitHub Actions\",\n        \"GitLab CI\",\n        \"Docker\"\n      ]\n    }\n  ],\n  \"education\": [\n    {\n      \"institution\": \"Universidad Tecnológica Nacional, Mar del Plata\",\n      \"degree\": \"Higher Technician in Programming\",\n      \"start\": \"2011\",\n      \"end\": \"2013\"\n    },\n    {\n      \"institution\": \"Universidad FASTA\",\n      \"degree\": \"Computer Engineering (partial studies)\",\n      \"start\": \"2006\",\n      \"end\": \"2011\"\n    }\n  ],\n  \"languages\": [\n    {\n      \"language\": \"Spanish\",\n      \"level\": \"Native\"\n    },\n    {\n      \"language\": \"English\",\n      \"level\": \"Professional working proficiency\"\n    }\n  ],\n  \"certifications\": [\n    {\n      \"name\": \"Go: The Complete Developer's Guide (Golang)\"\n    },\n    {\n      \"name\": \"RabbitMQ and Messaging Concepts\"\n    },\n    {\n      \"name\": \"gRPC [Golang] Master Class: Build Modern API & Microservices\"\n    },\n    {\n      \"name\": \"Software Architecture for the Enterprise Architect\"\n    },\n    {\n      \"name\": \"M121: The MongoDB Aggregation Framework\",\n      \"issuer\": \"MongoDB University\"\n    }\n  ]\n}\n"},{"type":"file","name":"cv.md","id":"cv.md","mime":"text/markdown","raw":"# Martin Gregorio\n\n**Principal Engineer & Software Architect** · Mar del Plata, Argentina\n\n[LinkedIn](https://www.linkedin.com/in/magregorio) · [GitHub](https://github.com/martingregorio)\n\n## Summary\n\nPrincipal Engineer and software architect with over 14 years designing backend, cloud and IoT systems. I've built video pipelines for WWE and Canela Media and multi-country fintech with Tigo Money, and today I'm building Armadillo Gaming, an AI-powered gaming table platform. I work with spec-driven development and AI agents, and I teach Software Engineering at IDRA, where I mentor students through projects for real clients.\n\n## Experience\n\n### Software Engineering Teacher — IDRA\n\n*2026 – present* · Mar del Plata\n\n- Software lifecycle, agile methods, CI/CD, unit testing, metrics and team roles.\n- Integrations with REST and GraphQL APIs.\n- I mentor students through the yearly project, a real solution for a real client.\n\n**Stack:** GraphQL, GitHub Actions\n\n### Founder & Software Architect — Armadillo Gaming\n\n*Jan 2025 – present* · Mar del Plata\n\n- I founded and lead a product that combines hardware and software. I coordinate the team that designs the modular solid-wood tables, builds their electronics and crafts them.\n- Designed the IoT platform end to end, from the devices to the cloud, on AWS with infrastructure as code.\n- Built an AI board game coach that teaches games and answers rules questions out loud, with answers that cite the rulebook.\n- Implemented signed over-the-air firmware updates with automatic rollback.\n- I work with spec-driven development and AI agents, backed by versioned contracts and CI quality gates.\n\n**Stack:** Go, TypeScript, NestJS, Svelte, PostgreSQL, MQTT, AWS, Terraform / OpenTofu, GitHub Actions, LLMs (Claude, Gemini), RAG and embeddings, AI agents\n\n### Programming 2 Teacher — IDRA\n\n*Feb 2022 – Jul 2023* · Mar del Plata\n\n- Programming languages, object-oriented programming and SOLID principles.\n\n### Principal Engineer · Canela Media — intive (ex Spark Digital)\n\n*2022 – present* · Mar del Plata (remote)\n\n- Own the full media pipeline, from the moment a rightsholder's source file arrives until the content is available to customers.\n- Mezzanine and proxy transcoding, and automated delivery to QuickPlay and Brightcove.\n- Integrated Vionlabs to extract metadata and ad breaks from proxies, speeding up the content team's work.\n- CI/CD with GitHub Actions and infrastructure with Terraform on AWS.\n\n**Stack:** TypeScript, DynamoDB, PostgreSQL, AWS, Terraform / OpenTofu, GitHub Actions\n\n### Senior Engineer / Tech Lead · WWE — intive (ex Spark Digital)\n\n*Sep 2016 – 2022* · Mar del Plata (remote)\n\n- Built the internal system that transcodes video with on-premise AWS Elemental Server and delivers it to WWE.com, WWE Network, YouTube, Peacock and Sony LIV.\n- Owned the MDM, whose master records each platform inherits metadata from and overrides to meet its own requirements.\n- CI/CD with GitLab, and services in Laravel, NestJS and Go on AWS.\n\n**Stack:** Laravel, Vue, NestJS, MySQL, Beanstalkd, Redis, Go, AWS, AWS Elemental, GitLab CI\n\n### PHP Developer → Tech Lead — Globant\n\n*Aug 2014 – Sep 2016* · Mar del Plata\n\n- For Millicom/TIGO, I built the Tigo Money backend, a Phalcon REST API connecting the mobile apps to each carrier's SOAP middleware.\n- I rolled it out in Honduras, Guatemala and Bolivia, and supported El Salvador and Tanzania. I started as a developer and became tech lead.\n- Then I worked on Handler, a Laravel marketplace for booking home services such as electricians, plumbers or cleaning.\n\n**Stack:** PHP, Phalcon, Laravel, MySQL\n\n### Software consultant and developer — Freelance\n\n*Jul 2012 – present* · Mar del Plata\n\n- Since 2017 I've built and maintained the CRM of a children's charity foundation, which generates its donors' direct debits across seven card networks (Visa, Mastercard, Cabal and Naranja, among others).\n- In 2026 I rebuilt it on Symfony 8 and AWS, with infrastructure as code, CI/CD and atomic deploys with automatic rollback, for about 10 dollars a month.\n- Consulting and development on Laravel projects.\n\n**Stack:** PHP, Symfony, Laravel, MySQL, AWS, Terraform / OpenTofu, GitHub Actions\n\n## Projects\n\n### [This site](https://github.com/martingregorio/site) (2026)\n\nAuthor. A personal site that is a fish-style terminal, built with Astro and Svelte.\n\n**Stack:** Astro, Svelte, TypeScript, AWS, Terraform / OpenTofu\n\n### Armadillo Gaming (2025)\n\nFounder & architect. Modular IoT gaming tables with AI that set the mood of every game with light and sound, and teach you how to play.\n\n**Stack:** Go, TypeScript, NestJS, Svelte, PostgreSQL, MQTT, AWS, Terraform / OpenTofu, GitHub Actions, LLMs (Claude, Gemini), RAG and embeddings, Python\n\n### Media pipeline for Canela Media (2022)\n\nPrincipal Engineer. Video ingest, transcoding and delivery, from the rightsholder's file to QuickPlay and Brightcove.\n\n**Stack:** TypeScript, DynamoDB, PostgreSQL, AWS, Terraform / OpenTofu, GitHub Actions\n\n### Transcoding and metadata for WWE (2016)\n\nSenior Engineer / Tech Lead. Internal system that transcodes and delivers video to WWE Network, YouTube, Peacock and Sony LIV, with a metadata MDM.\n\n**Stack:** Laravel, Vue, NestJS, MySQL, Beanstalkd, Redis, Go, AWS, AWS Elemental, GitLab CI\n\n### Tigo Money (2014)\n\nDeveloper → Tech lead. Backend for Millicom/TIGO's mobile wallet, rolled out across several Latin American countries.\n\n**Stack:** PHP, Phalcon, MySQL\n\n## Skills\n\n- **Architecture and cloud:** AWS, AWS Elemental, Terraform / OpenTofu, MQTT, IoT\n- **Backend:** Go, TypeScript, Node.js, NestJS, PHP, Laravel, Symfony, GraphQL, RabbitMQ\n- **Frontend:** Vue, Svelte, Astro\n- **Data:** PostgreSQL, MySQL, DynamoDB, Redis, MongoDB\n- **AI:** LLMs (Claude, Gemini), RAG / embeddings, AI agents\n- **DevOps:** GitHub Actions, GitLab CI, Docker\n\n## Education\n\n- **Higher Technician in Programming**, Universidad Tecnológica Nacional, Mar del Plata (2011 – 2013)\n- **Computer Engineering (partial studies)**, Universidad FASTA (2006 – 2011)\n\n## Languages\n\n- **Spanish:** Native\n- **English:** Professional working proficiency\n\n## Certifications\n\n- Go: The Complete Developer's Guide (Golang)\n- RabbitMQ and Messaging Concepts\n- gRPC [Golang] Master Class: Build Modern API & Microservices\n- Software Architecture for the Enterprise Architect\n- M121: The MongoDB Aggregation Framework (MongoDB University)\n","html":"<h1>Martin Gregorio</h1>\n<p><strong>Principal Engineer &#x26; Software Architect</strong> · Mar del Plata, Argentina</p>\n<p><a href=\"https://www.linkedin.com/in/magregorio\" target=\"_blank\" rel=\"noopener noreferrer\">LinkedIn</a> · <a href=\"https://github.com/martingregorio\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a></p>\n<h2>Summary</h2>\n<p>Principal Engineer and software architect with over 14 years designing backend, cloud and IoT systems. I've built video pipelines for WWE and Canela Media and multi-country fintech with Tigo Money, and today I'm building Armadillo Gaming, an AI-powered gaming table platform. I work with spec-driven development and AI agents, and I teach Software Engineering at IDRA, where I mentor students through projects for real clients.</p>\n<h2>Experience</h2>\n<h3>Software Engineering Teacher — IDRA</h3>\n<p><em>2026 – present</em> · Mar del Plata</p>\n<ul>\n<li>Software lifecycle, agile methods, CI/CD, unit testing, metrics and team roles.</li>\n<li>Integrations with REST and GraphQL APIs.</li>\n<li>I mentor students through the yearly project, a real solution for a real client.</li>\n</ul>\n<p><strong>Stack:</strong> GraphQL, GitHub Actions</p>\n<h3>Founder &#x26; Software Architect — Armadillo Gaming</h3>\n<p><em>Jan 2025 – present</em> · Mar del Plata</p>\n<ul>\n<li>I founded and lead a product that combines hardware and software. I coordinate the team that designs the modular solid-wood tables, builds their electronics and crafts them.</li>\n<li>Designed the IoT platform end to end, from the devices to the cloud, on AWS with infrastructure as code.</li>\n<li>Built an AI board game coach that teaches games and answers rules questions out loud, with answers that cite the rulebook.</li>\n<li>Implemented signed over-the-air firmware updates with automatic rollback.</li>\n<li>I work with spec-driven development and AI agents, backed by versioned contracts and CI quality gates.</li>\n</ul>\n<p><strong>Stack:</strong> Go, TypeScript, NestJS, Svelte, PostgreSQL, MQTT, AWS, Terraform / OpenTofu, GitHub Actions, LLMs (Claude, Gemini), RAG and embeddings, AI agents</p>\n<h3>Programming 2 Teacher — IDRA</h3>\n<p><em>Feb 2022 – Jul 2023</em> · Mar del Plata</p>\n<ul>\n<li>Programming languages, object-oriented programming and SOLID principles.</li>\n</ul>\n<h3>Principal Engineer · Canela Media — intive (ex Spark Digital)</h3>\n<p><em>2022 – present</em> · Mar del Plata (remote)</p>\n<ul>\n<li>Own the full media pipeline, from the moment a rightsholder's source file arrives until the content is available to customers.</li>\n<li>Mezzanine and proxy transcoding, and automated delivery to QuickPlay and Brightcove.</li>\n<li>Integrated Vionlabs to extract metadata and ad breaks from proxies, speeding up the content team's work.</li>\n<li>CI/CD with GitHub Actions and infrastructure with Terraform on AWS.</li>\n</ul>\n<p><strong>Stack:</strong> TypeScript, DynamoDB, PostgreSQL, AWS, Terraform / OpenTofu, GitHub Actions</p>\n<h3>Senior Engineer / Tech Lead · WWE — intive (ex Spark Digital)</h3>\n<p><em>Sep 2016 – 2022</em> · Mar del Plata (remote)</p>\n<ul>\n<li>Built the internal system that transcodes video with on-premise AWS Elemental Server and delivers it to WWE.com, WWE Network, YouTube, Peacock and Sony LIV.</li>\n<li>Owned the MDM, whose master records each platform inherits metadata from and overrides to meet its own requirements.</li>\n<li>CI/CD with GitLab, and services in Laravel, NestJS and Go on AWS.</li>\n</ul>\n<p><strong>Stack:</strong> Laravel, Vue, NestJS, MySQL, Beanstalkd, Redis, Go, AWS, AWS Elemental, GitLab CI</p>\n<h3>PHP Developer → Tech Lead — Globant</h3>\n<p><em>Aug 2014 – Sep 2016</em> · Mar del Plata</p>\n<ul>\n<li>For Millicom/TIGO, I built the Tigo Money backend, a Phalcon REST API connecting the mobile apps to each carrier's SOAP middleware.</li>\n<li>I rolled it out in Honduras, Guatemala and Bolivia, and supported El Salvador and Tanzania. I started as a developer and became tech lead.</li>\n<li>Then I worked on Handler, a Laravel marketplace for booking home services such as electricians, plumbers or cleaning.</li>\n</ul>\n<p><strong>Stack:</strong> PHP, Phalcon, Laravel, MySQL</p>\n<h3>Software consultant and developer — Freelance</h3>\n<p><em>Jul 2012 – present</em> · Mar del Plata</p>\n<ul>\n<li>Since 2017 I've built and maintained the CRM of a children's charity foundation, which generates its donors' direct debits across seven card networks (Visa, Mastercard, Cabal and Naranja, among others).</li>\n<li>In 2026 I rebuilt it on Symfony 8 and AWS, with infrastructure as code, CI/CD and atomic deploys with automatic rollback, for about 10 dollars a month.</li>\n<li>Consulting and development on Laravel projects.</li>\n</ul>\n<p><strong>Stack:</strong> PHP, Symfony, Laravel, MySQL, AWS, Terraform / OpenTofu, GitHub Actions</p>\n<h2>Projects</h2>\n<h3><a href=\"https://github.com/martingregorio/site\" target=\"_blank\" rel=\"noopener noreferrer\">This site</a> (2026)</h3>\n<p>Author. A personal site that is a fish-style terminal, built with Astro and Svelte.</p>\n<p><strong>Stack:</strong> Astro, Svelte, TypeScript, AWS, Terraform / OpenTofu</p>\n<h3>Armadillo Gaming (2025)</h3>\n<p>Founder &#x26; architect. Modular IoT gaming tables with AI that set the mood of every game with light and sound, and teach you how to play.</p>\n<p><strong>Stack:</strong> Go, TypeScript, NestJS, Svelte, PostgreSQL, MQTT, AWS, Terraform / OpenTofu, GitHub Actions, LLMs (Claude, Gemini), RAG and embeddings, Python</p>\n<h3>Media pipeline for Canela Media (2022)</h3>\n<p>Principal Engineer. Video ingest, transcoding and delivery, from the rightsholder's file to QuickPlay and Brightcove.</p>\n<p><strong>Stack:</strong> TypeScript, DynamoDB, PostgreSQL, AWS, Terraform / OpenTofu, GitHub Actions</p>\n<h3>Transcoding and metadata for WWE (2016)</h3>\n<p>Senior Engineer / Tech Lead. Internal system that transcodes and delivers video to WWE Network, YouTube, Peacock and Sony LIV, with a metadata MDM.</p>\n<p><strong>Stack:</strong> Laravel, Vue, NestJS, MySQL, Beanstalkd, Redis, Go, AWS, AWS Elemental, GitLab CI</p>\n<h3>Tigo Money (2014)</h3>\n<p>Developer → Tech lead. Backend for Millicom/TIGO's mobile wallet, rolled out across several Latin American countries.</p>\n<p><strong>Stack:</strong> PHP, Phalcon, MySQL</p>\n<h2>Skills</h2>\n<ul>\n<li><strong>Architecture and cloud:</strong> AWS, AWS Elemental, Terraform / OpenTofu, MQTT, IoT</li>\n<li><strong>Backend:</strong> Go, TypeScript, Node.js, NestJS, PHP, Laravel, Symfony, GraphQL, RabbitMQ</li>\n<li><strong>Frontend:</strong> Vue, Svelte, Astro</li>\n<li><strong>Data:</strong> PostgreSQL, MySQL, DynamoDB, Redis, MongoDB</li>\n<li><strong>AI:</strong> LLMs (Claude, Gemini), RAG / embeddings, AI agents</li>\n<li><strong>DevOps:</strong> GitHub Actions, GitLab CI, Docker</li>\n</ul>\n<h2>Education</h2>\n<ul>\n<li><strong>Higher Technician in Programming</strong>, Universidad Tecnológica Nacional, Mar del Plata (2011 – 2013)</li>\n<li><strong>Computer Engineering (partial studies)</strong>, Universidad FASTA (2006 – 2011)</li>\n</ul>\n<h2>Languages</h2>\n<ul>\n<li><strong>Spanish:</strong> Native</li>\n<li><strong>English:</strong> Professional working proficiency</li>\n</ul>\n<h2>Certifications</h2>\n<ul>\n<li>Go: The Complete Developer's Guide (Golang)</li>\n<li>RabbitMQ and Messaging Concepts</li>\n<li>gRPC [Golang] Master Class: Build Modern API &#x26; Microservices</li>\n<li>Software Architecture for the Enterprise Architect</li>\n<li>M121: The MongoDB Aggregation Framework (MongoDB University)</li>\n</ul>"},{"type":"dir","name":"Downloads","id":"downloads","children":[],"writable":true,"alt":"Descargas"},{"type":"dir","name":"experience","id":"experience","children":[{"type":"file","name":"2012-freelance.md","id":"freelance","mime":"text/markdown","raw":"# Software consultant and developer — Freelance\n\n*Jul 2012 – present* · Mar del Plata\n\n- Since 2017 I've built and maintained the CRM of a children's charity foundation, which generates its donors' direct debits across seven card networks (Visa, Mastercard, Cabal and Naranja, among others).\n- In 2026 I rebuilt it on Symfony 8 and AWS, with infrastructure as code, CI/CD and atomic deploys with automatic rollback, for about 10 dollars a month.\n- Consulting and development on Laravel projects.\n\nAlongside my main job, I work with clients on long-term projects. The foundation's CRM is\nthe best example: I built it in 2017, maintained it for years and rebuilt it in 2026 on a\nmodern stack without changing the business rules that already worked.\n\n**Stack:** [PHP](~/technologies/php) · [Symfony](~/technologies/symfony) · [Laravel](~/technologies/laravel) · [MySQL](~/technologies/mysql) · [AWS](~/technologies/aws) · [Terraform / OpenTofu](~/technologies/terraform) · [GitHub Actions](~/technologies/github-actions)\n","meta":{"title":"Software consultant and developer — Freelance","year":2012,"role":"Software consultant and developer","company":"Freelance","tags":["fintech","consultoria"]},"alt":"2012-independiente.md","html":"<h1>Software consultant and developer — Freelance</h1>\n<p><em>Jul 2012 – present</em> · Mar del Plata</p>\n<ul>\n<li>Since 2017 I've built and maintained the CRM of a children's charity foundation, which generates its donors' direct debits across seven card networks (Visa, Mastercard, Cabal and Naranja, among others).</li>\n<li>In 2026 I rebuilt it on Symfony 8 and AWS, with infrastructure as code, CI/CD and atomic deploys with automatic rollback, for about 10 dollars a month.</li>\n<li>Consulting and development on Laravel projects.</li>\n</ul>\n<p>Alongside my main job, I work with clients on long-term projects. The foundation's CRM is\nthe best example: I built it in 2017, maintained it for years and rebuilt it in 2026 on a\nmodern stack without changing the business rules that already worked.</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/php/\" data-cmd=\"cd ~/technologies/php; and ls\">PHP</a> · <a href=\"/en/plain/technologies/symfony/\" data-cmd=\"cd ~/technologies/symfony; and ls\">Symfony</a> · <a href=\"/en/plain/technologies/laravel/\" data-cmd=\"cd ~/technologies/laravel; and ls\">Laravel</a> · <a href=\"/en/plain/technologies/mysql/\" data-cmd=\"cd ~/technologies/mysql; and ls\">MySQL</a> · <a href=\"/en/plain/technologies/aws/\" data-cmd=\"cd ~/technologies/aws; and ls\">AWS</a> · <a href=\"/en/plain/technologies/terraform/\" data-cmd=\"cd ~/technologies/terraform; and ls\">Terraform / OpenTofu</a> · <a href=\"/en/plain/technologies/github-actions/\" data-cmd=\"cd ~/technologies/github-actions; and ls\">GitHub Actions</a></p>"},{"type":"file","name":"2014-globant.md","id":"globant","mime":"text/markdown","raw":"# PHP Developer → Tech Lead — Globant\n\n*Aug 2014 – Sep 2016* · Mar del Plata\n\n- For Millicom/TIGO, I built the Tigo Money backend, a Phalcon REST API connecting the mobile apps to each carrier's SOAP middleware.\n- I rolled it out in Honduras, Guatemala and Bolivia, and supported El Salvador and Tanzania. I started as a developer and became tech lead.\n- Then I worked on Handler, a Laravel marketplace for booking home services such as electricians, plumbers or cleaning.\n\nAt Globant I made the jump from developer to tech lead, on a financial product that had to\nwork the same way in countries with very different integrations.\n\n**Stack:** [PHP](~/technologies/php) · [Phalcon](~/technologies/phalcon) · [Laravel](~/technologies/laravel) · [MySQL](~/technologies/mysql)\n","meta":{"title":"PHP Developer → Tech Lead — Globant","year":2014,"role":"PHP Developer → Tech Lead","company":"Globant","tags":["fintech","liderazgo"]},"html":"<h1>PHP Developer → Tech Lead — Globant</h1>\n<p><em>Aug 2014 – Sep 2016</em> · Mar del Plata</p>\n<ul>\n<li>For Millicom/TIGO, I built the Tigo Money backend, a Phalcon REST API connecting the mobile apps to each carrier's SOAP middleware.</li>\n<li>I rolled it out in Honduras, Guatemala and Bolivia, and supported El Salvador and Tanzania. I started as a developer and became tech lead.</li>\n<li>Then I worked on Handler, a Laravel marketplace for booking home services such as electricians, plumbers or cleaning.</li>\n</ul>\n<p>At Globant I made the jump from developer to tech lead, on a financial product that had to\nwork the same way in countries with very different integrations.</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/php/\" data-cmd=\"cd ~/technologies/php; and ls\">PHP</a> · <a href=\"/en/plain/technologies/phalcon/\" data-cmd=\"cd ~/technologies/phalcon; and ls\">Phalcon</a> · <a href=\"/en/plain/technologies/laravel/\" data-cmd=\"cd ~/technologies/laravel; and ls\">Laravel</a> · <a href=\"/en/plain/technologies/mysql/\" data-cmd=\"cd ~/technologies/mysql; and ls\">MySQL</a></p>"},{"type":"file","name":"2016-intive-wwe.md","id":"intive-wwe","mime":"text/markdown","raw":"# Senior Engineer / Tech Lead · WWE — intive (ex Spark Digital)\n\n*Sep 2016 – 2022* · Mar del Plata (remote)\n\n- Built the internal system that transcodes video with on-premise AWS Elemental Server and delivers it to WWE.com, WWE Network, YouTube, Peacock and Sony LIV.\n- Owned the MDM, whose master records each platform inherits metadata from and overrides to meet its own requirements.\n- CI/CD with GitLab, and services in Laravel, NestJS and Go on AWS.\n\nI joined Spark Digital, which later became intive, and spent six years working for WWE.\nThat's where I learned the craft of moving video at scale: transcoding, metadata and\ndelivery to platforms with very different requirements.\n\n**Stack:** [Laravel](~/technologies/laravel) · [Vue](~/technologies/vue) · [NestJS](~/technologies/nestjs) · [MySQL](~/technologies/mysql) · [Beanstalkd](~/technologies/beanstalkd) · [Redis](~/technologies/redis) · [Go](~/technologies/go) · [AWS](~/technologies/aws) · [AWS Elemental](~/technologies/aws-elemental) · [GitLab CI](~/technologies/gitlab-ci)\n","meta":{"title":"Senior Engineer / Tech Lead · WWE — intive (ex Spark Digital)","year":2016,"role":"Senior Engineer / Tech Lead · WWE","company":"intive (ex Spark Digital)","tags":["media","streaming","video"]},"html":"<h1>Senior Engineer / Tech Lead · WWE — intive (ex Spark Digital)</h1>\n<p><em>Sep 2016 – 2022</em> · Mar del Plata (remote)</p>\n<ul>\n<li>Built the internal system that transcodes video with on-premise AWS Elemental Server and delivers it to WWE.com, WWE Network, YouTube, Peacock and Sony LIV.</li>\n<li>Owned the MDM, whose master records each platform inherits metadata from and overrides to meet its own requirements.</li>\n<li>CI/CD with GitLab, and services in Laravel, NestJS and Go on AWS.</li>\n</ul>\n<p>I joined Spark Digital, which later became intive, and spent six years working for WWE.\nThat's where I learned the craft of moving video at scale: transcoding, metadata and\ndelivery to platforms with very different requirements.</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/laravel/\" data-cmd=\"cd ~/technologies/laravel; and ls\">Laravel</a> · <a href=\"/en/plain/technologies/vue/\" data-cmd=\"cd ~/technologies/vue; and ls\">Vue</a> · <a href=\"/en/plain/technologies/nestjs/\" data-cmd=\"cd ~/technologies/nestjs; and ls\">NestJS</a> · <a href=\"/en/plain/technologies/mysql/\" data-cmd=\"cd ~/technologies/mysql; and ls\">MySQL</a> · <a href=\"/en/plain/technologies/beanstalkd/\" data-cmd=\"cd ~/technologies/beanstalkd; and ls\">Beanstalkd</a> · <a href=\"/en/plain/technologies/redis/\" data-cmd=\"cd ~/technologies/redis; and ls\">Redis</a> · <a href=\"/en/plain/technologies/go/\" data-cmd=\"cd ~/technologies/go; and ls\">Go</a> · <a href=\"/en/plain/technologies/aws/\" data-cmd=\"cd ~/technologies/aws; and ls\">AWS</a> · <a href=\"/en/plain/technologies/aws-elemental/\" data-cmd=\"cd ~/technologies/aws-elemental; and ls\">AWS Elemental</a> · <a href=\"/en/plain/technologies/gitlab-ci/\" data-cmd=\"cd ~/technologies/gitlab-ci; and ls\">GitLab CI</a></p>"},{"type":"file","name":"2022-idra-programming-2.md","id":"idra-prog2","mime":"text/markdown","raw":"# Programming 2 Teacher — IDRA\n\n*Feb 2022 – Jul 2023* · Mar del Plata\n\n- Programming languages, object-oriented programming and SOLID principles.\n\nMy first teaching experience: the object-oriented and design fundamentals that later show\nup in every large system.\n","meta":{"title":"Programming 2 Teacher — IDRA","year":2022,"role":"Programming 2 Teacher","company":"IDRA","tags":["docencia"]},"alt":"2022-idra-programacion-2.md","html":"<h1>Programming 2 Teacher — IDRA</h1>\n<p><em>Feb 2022 – Jul 2023</em> · Mar del Plata</p>\n<ul>\n<li>Programming languages, object-oriented programming and SOLID principles.</li>\n</ul>\n<p>My first teaching experience: the object-oriented and design fundamentals that later show\nup in every large system.</p>"},{"type":"file","name":"2022-intive-canela.md","id":"intive-canela","mime":"text/markdown","raw":"# Principal Engineer · Canela Media — intive (ex Spark Digital)\n\n*2022 – present* · Mar del Plata (remote)\n\n- Own the full media pipeline, from the moment a rightsholder's source file arrives until the content is available to customers.\n- Mezzanine and proxy transcoding, and automated delivery to QuickPlay and Brightcove.\n- Integrated Vionlabs to extract metadata and ad breaks from proxies, speeding up the content team's work.\n- CI/CD with GitHub Actions and infrastructure with Terraform on AWS.\n\nAt Canela Media I went from building parts of a media system to owning the whole pipeline,\nincluding architecture, infrastructure and continuous delivery decisions.\n\n**Stack:** [TypeScript](~/technologies/typescript) · [DynamoDB](~/technologies/dynamodb) · [PostgreSQL](~/technologies/postgresql) · [AWS](~/technologies/aws) · [Terraform / OpenTofu](~/technologies/terraform) · [GitHub Actions](~/technologies/github-actions)\n","meta":{"title":"Principal Engineer · Canela Media — intive (ex Spark Digital)","year":2022,"role":"Principal Engineer · Canela Media","company":"intive (ex Spark Digital)","tags":["media","streaming","arquitectura"]},"html":"<h1>Principal Engineer · Canela Media — intive (ex Spark Digital)</h1>\n<p><em>2022 – present</em> · Mar del Plata (remote)</p>\n<ul>\n<li>Own the full media pipeline, from the moment a rightsholder's source file arrives until the content is available to customers.</li>\n<li>Mezzanine and proxy transcoding, and automated delivery to QuickPlay and Brightcove.</li>\n<li>Integrated Vionlabs to extract metadata and ad breaks from proxies, speeding up the content team's work.</li>\n<li>CI/CD with GitHub Actions and infrastructure with Terraform on AWS.</li>\n</ul>\n<p>At Canela Media I went from building parts of a media system to owning the whole pipeline,\nincluding architecture, infrastructure and continuous delivery decisions.</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/typescript/\" data-cmd=\"cd ~/technologies/typescript; and ls\">TypeScript</a> · <a href=\"/en/plain/technologies/dynamodb/\" data-cmd=\"cd ~/technologies/dynamodb; and ls\">DynamoDB</a> · <a href=\"/en/plain/technologies/postgresql/\" data-cmd=\"cd ~/technologies/postgresql; and ls\">PostgreSQL</a> · <a href=\"/en/plain/technologies/aws/\" data-cmd=\"cd ~/technologies/aws; and ls\">AWS</a> · <a href=\"/en/plain/technologies/terraform/\" data-cmd=\"cd ~/technologies/terraform; and ls\">Terraform / OpenTofu</a> · <a href=\"/en/plain/technologies/github-actions/\" data-cmd=\"cd ~/technologies/github-actions; and ls\">GitHub Actions</a></p>"},{"type":"file","name":"2025-armadillo-gaming.md","id":"armadillo","mime":"text/markdown","raw":"# Founder & Software Architect — Armadillo Gaming\n\n*Jan 2025 – present* · Mar del Plata\n\n- I founded and lead a product that combines hardware and software. I coordinate the team that designs the modular solid-wood tables, builds their electronics and crafts them.\n- Designed the IoT platform end to end, from the devices to the cloud, on AWS with infrastructure as code.\n- Built an AI board game coach that teaches games and answers rules questions out loud, with answers that cite the rulebook.\n- Implemented signed over-the-air firmware updates with automatic rollback.\n- I work with spec-driven development and AI agents, backed by versioned contracts and CI quality gates.\n\nArmadillo Gaming came from bringing together two things I love: board games and software\narchitecture. It's my most complete project, because it goes from the table's wood and\nelectronics all the way to the cloud and AI, and it makes me think through every decision\nend to end.\n\n**Stack:** [Go](~/technologies/go) · [TypeScript](~/technologies/typescript) · [NestJS](~/technologies/nestjs) · [Svelte](~/technologies/svelte) · [PostgreSQL](~/technologies/postgresql) · [MQTT](~/technologies/mqtt) · [AWS](~/technologies/aws) · [Terraform / OpenTofu](~/technologies/terraform) · [GitHub Actions](~/technologies/github-actions) · [LLMs (Claude, Gemini)](~/technologies/llm) · [RAG and embeddings](~/technologies/rag) · [AI agents](~/technologies/ai-agents)\n","meta":{"title":"Founder & Software Architect — Armadillo Gaming","year":2025,"role":"Founder & Software Architect","company":"Armadillo Gaming","tags":["iot","ia","arquitectura","liderazgo"]},"html":"<h1>Founder &#x26; Software Architect — Armadillo Gaming</h1>\n<p><em>Jan 2025 – present</em> · Mar del Plata</p>\n<ul>\n<li>I founded and lead a product that combines hardware and software. I coordinate the team that designs the modular solid-wood tables, builds their electronics and crafts them.</li>\n<li>Designed the IoT platform end to end, from the devices to the cloud, on AWS with infrastructure as code.</li>\n<li>Built an AI board game coach that teaches games and answers rules questions out loud, with answers that cite the rulebook.</li>\n<li>Implemented signed over-the-air firmware updates with automatic rollback.</li>\n<li>I work with spec-driven development and AI agents, backed by versioned contracts and CI quality gates.</li>\n</ul>\n<p>Armadillo Gaming came from bringing together two things I love: board games and software\narchitecture. It's my most complete project, because it goes from the table's wood and\nelectronics all the way to the cloud and AI, and it makes me think through every decision\nend to end.</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/go/\" data-cmd=\"cd ~/technologies/go; and ls\">Go</a> · <a href=\"/en/plain/technologies/typescript/\" data-cmd=\"cd ~/technologies/typescript; and ls\">TypeScript</a> · <a href=\"/en/plain/technologies/nestjs/\" data-cmd=\"cd ~/technologies/nestjs; and ls\">NestJS</a> · <a href=\"/en/plain/technologies/svelte/\" data-cmd=\"cd ~/technologies/svelte; and ls\">Svelte</a> · <a href=\"/en/plain/technologies/postgresql/\" data-cmd=\"cd ~/technologies/postgresql; and ls\">PostgreSQL</a> · <a href=\"/en/plain/technologies/mqtt/\" data-cmd=\"cd ~/technologies/mqtt; and ls\">MQTT</a> · <a href=\"/en/plain/technologies/aws/\" data-cmd=\"cd ~/technologies/aws; and ls\">AWS</a> · <a href=\"/en/plain/technologies/terraform/\" data-cmd=\"cd ~/technologies/terraform; and ls\">Terraform / OpenTofu</a> · <a href=\"/en/plain/technologies/github-actions/\" data-cmd=\"cd ~/technologies/github-actions; and ls\">GitHub Actions</a> · <a href=\"/en/plain/technologies/llm/\" data-cmd=\"cd ~/technologies/llm; and ls\">LLMs (Claude, Gemini)</a> · <a href=\"/en/plain/technologies/rag/\" data-cmd=\"cd ~/technologies/rag; and ls\">RAG and embeddings</a> · <a href=\"/en/plain/technologies/ai-agents/\" data-cmd=\"cd ~/technologies/ai-agents; and ls\">AI agents</a></p>"},{"type":"file","name":"2026-idra-software-engineering.md","id":"idra-ingsoft","mime":"text/markdown","raw":"# Software Engineering Teacher — IDRA\n\n*2026 – present* · Mar del Plata\n\n- Software lifecycle, agile methods, CI/CD, unit testing, metrics and team roles.\n- Integrations with REST and GraphQL APIs.\n- I mentor students through the yearly project, a real solution for a real client.\n\nTeaching makes me explain why we do what we do. In Software Engineering I bring into the\nclassroom what I use every day, and I mentor student teams while they build a solution for\na real client.\n\n**Stack:** [GraphQL](~/technologies/graphql) · [GitHub Actions](~/technologies/github-actions)\n","meta":{"title":"Software Engineering Teacher — IDRA","year":2026,"role":"Software Engineering Teacher","company":"IDRA","tags":["docencia"]},"alt":"2026-idra-ingenieria-de-software.md","html":"<h1>Software Engineering Teacher — IDRA</h1>\n<p><em>2026 – present</em> · Mar del Plata</p>\n<ul>\n<li>Software lifecycle, agile methods, CI/CD, unit testing, metrics and team roles.</li>\n<li>Integrations with REST and GraphQL APIs.</li>\n<li>I mentor students through the yearly project, a real solution for a real client.</li>\n</ul>\n<p>Teaching makes me explain why we do what we do. In Software Engineering I bring into the\nclassroom what I use every day, and I mentor student teams while they build a solution for\na real client.</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/graphql/\" data-cmd=\"cd ~/technologies/graphql; and ls\">GraphQL</a> · <a href=\"/en/plain/technologies/github-actions/\" data-cmd=\"cd ~/technologies/github-actions; and ls\">GitHub Actions</a></p>"}],"alt":"experiencia"},{"type":"dir","name":"projects","id":"projects","children":[{"type":"dir","name":"armadillo-gaming","id":"armadillo-gaming","children":[{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Armadillo Gaming\n\n**Year:** 2025 · **Role:** Founder & architect · **Tags:** iot, ai, hardware, architecture\n\n**Stack:** [Go](~/technologies/go) · [TypeScript](~/technologies/typescript) · [NestJS](~/technologies/nestjs) · [Svelte](~/technologies/svelte) · [PostgreSQL](~/technologies/postgresql) · [MQTT](~/technologies/mqtt) · [AWS](~/technologies/aws) · [Terraform / OpenTofu](~/technologies/terraform) · [GitHub Actions](~/technologies/github-actions) · [LLMs (Claude, Gemini)](~/technologies/llm) · [RAG and embeddings](~/technologies/rag) · [Python](~/technologies/python)\n\n## Description\n\nArmadillo Gaming is a physical and digital product: modular solid-wood gaming tables with\ntheir own electronics. Place NFC-tagged figures on the table and it recognizes the game and\nsets the mood with lights and music. Players control it from an app and keep track of their\ngames.\n\nThe table also has an AI coach that teaches games step by step and answers rules questions\nout loud, citing the rulebook section each answer comes from.\n\n## Role\n\nI'm the founder. I coordinate the team that designs the tables, builds their electronics\nand crafts them, and I lead the architecture and development of all the software: device\nfirmware, the IoT platform on AWS, the backend, the apps and the AI coach.\n\n## Results\n\n- An end-to-end IoT platform, with a versioned messaging contract between devices and the\n  cloud.\n- Signed over-the-air firmware updates with automatic rollback if anything fails.\n- An AI coach that answers with verifiable citations and says \"I don't know\" when the\n  rulebook doesn't cover the question.\n- Infrastructure as code, CI/CD with no long-lived credentials, and spec-driven development\n  with AI agents.\n","html":"<h1>Armadillo Gaming</h1>\n<p><strong>Year:</strong> 2025 · <strong>Role:</strong> Founder &#x26; architect · <strong>Tags:</strong> iot, ai, hardware, architecture</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/go/\" data-cmd=\"cd ~/technologies/go; and ls\">Go</a> · <a href=\"/en/plain/technologies/typescript/\" data-cmd=\"cd ~/technologies/typescript; and ls\">TypeScript</a> · <a href=\"/en/plain/technologies/nestjs/\" data-cmd=\"cd ~/technologies/nestjs; and ls\">NestJS</a> · <a href=\"/en/plain/technologies/svelte/\" data-cmd=\"cd ~/technologies/svelte; and ls\">Svelte</a> · <a href=\"/en/plain/technologies/postgresql/\" data-cmd=\"cd ~/technologies/postgresql; and ls\">PostgreSQL</a> · <a href=\"/en/plain/technologies/mqtt/\" data-cmd=\"cd ~/technologies/mqtt; and ls\">MQTT</a> · <a href=\"/en/plain/technologies/aws/\" data-cmd=\"cd ~/technologies/aws; and ls\">AWS</a> · <a href=\"/en/plain/technologies/terraform/\" data-cmd=\"cd ~/technologies/terraform; and ls\">Terraform / OpenTofu</a> · <a href=\"/en/plain/technologies/github-actions/\" data-cmd=\"cd ~/technologies/github-actions; and ls\">GitHub Actions</a> · <a href=\"/en/plain/technologies/llm/\" data-cmd=\"cd ~/technologies/llm; and ls\">LLMs (Claude, Gemini)</a> · <a href=\"/en/plain/technologies/rag/\" data-cmd=\"cd ~/technologies/rag; and ls\">RAG and embeddings</a> · <a href=\"/en/plain/technologies/python/\" data-cmd=\"cd ~/technologies/python; and ls\">Python</a></p>\n<h2>Description</h2>\n<p>Armadillo Gaming is a physical and digital product: modular solid-wood gaming tables with\ntheir own electronics. Place NFC-tagged figures on the table and it recognizes the game and\nsets the mood with lights and music. Players control it from an app and keep track of their\ngames.</p>\n<p>The table also has an AI coach that teaches games step by step and answers rules questions\nout loud, citing the rulebook section each answer comes from.</p>\n<h2>Role</h2>\n<p>I'm the founder. I coordinate the team that designs the tables, builds their electronics\nand crafts them, and I lead the architecture and development of all the software: device\nfirmware, the IoT platform on AWS, the backend, the apps and the AI coach.</p>\n<h2>Results</h2>\n<ul>\n<li>An end-to-end IoT platform, with a versioned messaging contract between devices and the\ncloud.</li>\n<li>Signed over-the-air firmware updates with automatic rollback if anything fails.</li>\n<li>An AI coach that answers with verifiable citations and says \"I don't know\" when the\nrulebook doesn't cover the question.</li>\n<li>Infrastructure as code, CI/CD with no long-lived credentials, and spec-driven development\nwith AI agents.</li>\n</ul>"},{"type":"file","name":"stack.txt","id":"stack.txt","mime":"text/plain","raw":"Go\nTypeScript\nNestJS\nSvelte\nPostgreSQL\nMQTT\nAWS\nTerraform / OpenTofu\nGitHub Actions\nLLMs (Claude, Gemini)\nRAG and embeddings\nPython\n"}],"meta":{"title":"Armadillo Gaming","summary":"Modular IoT gaming tables with AI that set the mood of every game with light and sound, and teach you how to play.","year":2025,"role":"Founder & architect","tags":["iot","ai","hardware","architecture"],"links":{}}},{"type":"dir","name":"canela-media","id":"canela-media","children":[{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Media pipeline for Canela Media\n\n**Year:** 2022 · **Role:** Principal Engineer · **Tags:** media, streaming, architecture\n\n**Stack:** [TypeScript](~/technologies/typescript) · [DynamoDB](~/technologies/dynamodb) · [PostgreSQL](~/technologies/postgresql) · [AWS](~/technologies/aws) · [Terraform / OpenTofu](~/technologies/terraform) · [GitHub Actions](~/technologies/github-actions)\n\n## Description\n\nCanela Media distributes Spanish-language content. Its media pipeline receives each\nrightsholder's source file, produces the mezzanine and proxy, and delivers the content to\nQuickPlay and Brightcove for its customers.\n\n## Role\n\nAt intive, my team owns the pipeline end to end: architecture, development, infrastructure\nwith Terraform on AWS, and CI/CD with GitHub Actions.\n\n## Results\n\n- An automated flow from file intake to publishing on every platform.\n- A Vionlabs integration that extracts metadata and ad breaks from proxies, speeding up the\n  content team's work.\n","html":"<h1>Media pipeline for Canela Media</h1>\n<p><strong>Year:</strong> 2022 · <strong>Role:</strong> Principal Engineer · <strong>Tags:</strong> media, streaming, architecture</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/typescript/\" data-cmd=\"cd ~/technologies/typescript; and ls\">TypeScript</a> · <a href=\"/en/plain/technologies/dynamodb/\" data-cmd=\"cd ~/technologies/dynamodb; and ls\">DynamoDB</a> · <a href=\"/en/plain/technologies/postgresql/\" data-cmd=\"cd ~/technologies/postgresql; and ls\">PostgreSQL</a> · <a href=\"/en/plain/technologies/aws/\" data-cmd=\"cd ~/technologies/aws; and ls\">AWS</a> · <a href=\"/en/plain/technologies/terraform/\" data-cmd=\"cd ~/technologies/terraform; and ls\">Terraform / OpenTofu</a> · <a href=\"/en/plain/technologies/github-actions/\" data-cmd=\"cd ~/technologies/github-actions; and ls\">GitHub Actions</a></p>\n<h2>Description</h2>\n<p>Canela Media distributes Spanish-language content. Its media pipeline receives each\nrightsholder's source file, produces the mezzanine and proxy, and delivers the content to\nQuickPlay and Brightcove for its customers.</p>\n<h2>Role</h2>\n<p>At intive, my team owns the pipeline end to end: architecture, development, infrastructure\nwith Terraform on AWS, and CI/CD with GitHub Actions.</p>\n<h2>Results</h2>\n<ul>\n<li>An automated flow from file intake to publishing on every platform.</li>\n<li>A Vionlabs integration that extracts metadata and ad breaks from proxies, speeding up the\ncontent team's work.</li>\n</ul>"},{"type":"file","name":"stack.txt","id":"stack.txt","mime":"text/plain","raw":"TypeScript\nDynamoDB\nPostgreSQL\nAWS\nTerraform / OpenTofu\nGitHub Actions\n"}],"meta":{"title":"Media pipeline for Canela Media","summary":"Video ingest, transcoding and delivery, from the rightsholder's file to QuickPlay and Brightcove.","year":2022,"role":"Principal Engineer","tags":["media","streaming","architecture"],"links":{}}},{"type":"dir","name":"this-site","id":"this-site","children":[{"type":"file","name":"links.txt","id":"links.txt","mime":"text/plain","raw":"repo: https://github.com/martingregorio/site\n","alt":"enlaces.txt"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# This site\n\n**Year:** 2026 · **Role:** Author · **Tags:** web, open-source\n\n**Stack:** [Astro](~/technologies/astro) · [Svelte](~/technologies/svelte) · [TypeScript](~/technologies/typescript) · [AWS](~/technologies/aws) · [Terraform / OpenTofu](~/technologies/terraform)\n\n## Description\n\nA personal site whose interface is a terminal that mimics fish shell. Built with Astro and\nSvelte, with a custom shell in TypeScript: parser, pipes, redirections and a virtual\nfilesystem built from Markdown files.\n\n## Role\n\nEverything: design, development and AWS infrastructure with OpenTofu.\n\n## Results\n\nYou're using it right now. Try `cat cv.json | grep -i svelte`.\n\n**Links:** [repo](https://github.com/martingregorio/site)\n","html":"<h1>This site</h1>\n<p><strong>Year:</strong> 2026 · <strong>Role:</strong> Author · <strong>Tags:</strong> web, open-source</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/astro/\" data-cmd=\"cd ~/technologies/astro; and ls\">Astro</a> · <a href=\"/en/plain/technologies/svelte/\" data-cmd=\"cd ~/technologies/svelte; and ls\">Svelte</a> · <a href=\"/en/plain/technologies/typescript/\" data-cmd=\"cd ~/technologies/typescript; and ls\">TypeScript</a> · <a href=\"/en/plain/technologies/aws/\" data-cmd=\"cd ~/technologies/aws; and ls\">AWS</a> · <a href=\"/en/plain/technologies/terraform/\" data-cmd=\"cd ~/technologies/terraform; and ls\">Terraform / OpenTofu</a></p>\n<h2>Description</h2>\n<p>A personal site whose interface is a terminal that mimics fish shell. Built with Astro and\nSvelte, with a custom shell in TypeScript: parser, pipes, redirections and a virtual\nfilesystem built from Markdown files.</p>\n<h2>Role</h2>\n<p>Everything: design, development and AWS infrastructure with OpenTofu.</p>\n<h2>Results</h2>\n<p>You're using it right now. Try <code data-cmd=\"cat cv.json | grep -i svelte\">cat cv.json | grep -i svelte</code>.</p>\n<p><strong>Links:</strong> <a href=\"https://github.com/martingregorio/site\" target=\"_blank\" rel=\"noopener noreferrer\">repo</a></p>"},{"type":"file","name":"stack.txt","id":"stack.txt","mime":"text/plain","raw":"Astro\nSvelte\nTypeScript\nAWS\nTerraform / OpenTofu\n"}],"meta":{"title":"This site","summary":"A personal site that is a fish-style terminal, built with Astro and Svelte.","year":2026,"role":"Author","tags":["web","open-source"],"links":{"repo":"https://github.com/martingregorio/site"}},"alt":"este-sitio"},{"type":"dir","name":"tigo-money","id":"tigo-money","children":[{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Tigo Money\n\n**Year:** 2014 · **Role:** Developer → Tech lead · **Tags:** fintech, mobile, integrations\n\n**Stack:** [PHP](~/technologies/php) · [Phalcon](~/technologies/phalcon) · [MySQL](~/technologies/mysql)\n\n## Description\n\nTigo Money is Millicom/TIGO's mobile wallet. Its backend is a Phalcon REST API that sits\nbetween the mobile apps and each carrier's SOAP middleware.\n\n## Role\n\nAt Globant, I started as a backend developer and became the team's tech lead.\n\n## Results\n\n- Rolled out in Honduras, Guatemala and Bolivia.\n- Supported El Salvador and Tanzania, where the service was already live.\n- One API in front of a different integration in each country.\n","html":"<h1>Tigo Money</h1>\n<p><strong>Year:</strong> 2014 · <strong>Role:</strong> Developer → Tech lead · <strong>Tags:</strong> fintech, mobile, integrations</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/php/\" data-cmd=\"cd ~/technologies/php; and ls\">PHP</a> · <a href=\"/en/plain/technologies/phalcon/\" data-cmd=\"cd ~/technologies/phalcon; and ls\">Phalcon</a> · <a href=\"/en/plain/technologies/mysql/\" data-cmd=\"cd ~/technologies/mysql; and ls\">MySQL</a></p>\n<h2>Description</h2>\n<p>Tigo Money is Millicom/TIGO's mobile wallet. Its backend is a Phalcon REST API that sits\nbetween the mobile apps and each carrier's SOAP middleware.</p>\n<h2>Role</h2>\n<p>At Globant, I started as a backend developer and became the team's tech lead.</p>\n<h2>Results</h2>\n<ul>\n<li>Rolled out in Honduras, Guatemala and Bolivia.</li>\n<li>Supported El Salvador and Tanzania, where the service was already live.</li>\n<li>One API in front of a different integration in each country.</li>\n</ul>"},{"type":"file","name":"stack.txt","id":"stack.txt","mime":"text/plain","raw":"PHP\nPhalcon\nMySQL\n"}],"meta":{"title":"Tigo Money","summary":"Backend for Millicom/TIGO's mobile wallet, rolled out across several Latin American countries.","year":2014,"role":"Developer → Tech lead","tags":["fintech","mobile","integrations"],"links":{}}},{"type":"dir","name":"wwe-media","id":"wwe-media","children":[{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Transcoding and metadata for WWE\n\n**Year:** 2016 · **Role:** Senior Engineer / Tech Lead · **Tags:** media, streaming, video\n\n**Stack:** [Laravel](~/technologies/laravel) · [Vue](~/technologies/vue) · [NestJS](~/technologies/nestjs) · [MySQL](~/technologies/mysql) · [Beanstalkd](~/technologies/beanstalkd) · [Redis](~/technologies/redis) · [Go](~/technologies/go) · [AWS](~/technologies/aws) · [AWS Elemental](~/technologies/aws-elemental) · [GitLab CI](~/technologies/gitlab-ci)\n\n## Description\n\nThe internal system WWE uses to prepare its video for every platform. It transcodes with\non-premise AWS Elemental Server and delivers to WWE.com, WWE Network, YouTube and partners\nsuch as Peacock and Sony LIV.\n\nAt its core is an MDM (master data management) with master records: each platform inherits\nmetadata from the master and overrides it to meet its own requirements.\n\n## Role\n\nAt intive, I built the system and later became its tech lead: services in Laravel, NestJS\nand Go, a Vue frontend, Beanstalkd queues and CI/CD with GitLab.\n\n## Results\n\n- A single source of metadata for every delivery platform.\n- Automated delivery to both WWE-owned and third-party services.\n","html":"<h1>Transcoding and metadata for WWE</h1>\n<p><strong>Year:</strong> 2016 · <strong>Role:</strong> Senior Engineer / Tech Lead · <strong>Tags:</strong> media, streaming, video</p>\n<p><strong>Stack:</strong> <a href=\"/en/plain/technologies/laravel/\" data-cmd=\"cd ~/technologies/laravel; and ls\">Laravel</a> · <a href=\"/en/plain/technologies/vue/\" data-cmd=\"cd ~/technologies/vue; and ls\">Vue</a> · <a href=\"/en/plain/technologies/nestjs/\" data-cmd=\"cd ~/technologies/nestjs; and ls\">NestJS</a> · <a href=\"/en/plain/technologies/mysql/\" data-cmd=\"cd ~/technologies/mysql; and ls\">MySQL</a> · <a href=\"/en/plain/technologies/beanstalkd/\" data-cmd=\"cd ~/technologies/beanstalkd; and ls\">Beanstalkd</a> · <a href=\"/en/plain/technologies/redis/\" data-cmd=\"cd ~/technologies/redis; and ls\">Redis</a> · <a href=\"/en/plain/technologies/go/\" data-cmd=\"cd ~/technologies/go; and ls\">Go</a> · <a href=\"/en/plain/technologies/aws/\" data-cmd=\"cd ~/technologies/aws; and ls\">AWS</a> · <a href=\"/en/plain/technologies/aws-elemental/\" data-cmd=\"cd ~/technologies/aws-elemental; and ls\">AWS Elemental</a> · <a href=\"/en/plain/technologies/gitlab-ci/\" data-cmd=\"cd ~/technologies/gitlab-ci; and ls\">GitLab CI</a></p>\n<h2>Description</h2>\n<p>The internal system WWE uses to prepare its video for every platform. It transcodes with\non-premise AWS Elemental Server and delivers to WWE.com, WWE Network, YouTube and partners\nsuch as Peacock and Sony LIV.</p>\n<p>At its core is an MDM (master data management) with master records: each platform inherits\nmetadata from the master and overrides it to meet its own requirements.</p>\n<h2>Role</h2>\n<p>At intive, I built the system and later became its tech lead: services in Laravel, NestJS\nand Go, a Vue frontend, Beanstalkd queues and CI/CD with GitLab.</p>\n<h2>Results</h2>\n<ul>\n<li>A single source of metadata for every delivery platform.</li>\n<li>Automated delivery to both WWE-owned and third-party services.</li>\n</ul>"},{"type":"file","name":"stack.txt","id":"stack.txt","mime":"text/plain","raw":"Laravel\nVue\nNestJS\nMySQL\nBeanstalkd\nRedis\nGo\nAWS\nAWS Elemental\nGitLab CI\n"}],"meta":{"title":"Transcoding and metadata for WWE","summary":"Internal system that transcodes and delivers video to WWE Network, YouTube, Peacock and Sony LIV, with a metadata MDM.","year":2016,"role":"Senior Engineer / Tech Lead","tags":["media","streaming","video"],"links":{}}}],"alt":"proyectos"},{"type":"dir","name":"services","id":"services","children":[{"type":"file","name":"consulting.md","id":"consulting","mime":"text/markdown","raw":"# Architecture consulting\n\n## What's included\n\n- Architecture, code and AWS infrastructure review.\n- Design of new systems: media pipelines, IoT platforms or adding AI to an existing product.\n- A report with prioritized risks, costs and a work plan.\n- A wrap-up session with the team.\n\n## Who it's for\n\nProduct teams about to make a major architecture decision, or teams that grew fast and feel\nevery change costs more than the last one.\n\n## Format\n\nFixed project of two to four weeks, or hourly for one-off questions.\n\n## Related work\n\n- [Media pipeline for Canela Media](~/projects/canela-media)\n- [Transcoding and metadata for WWE](~/projects/wwe-media)\n- [Armadillo Gaming](~/projects/armadillo-gaming)\n\n## How to start\n\nInterested? Type `linkedin` and send me a message mentioning this service.\n","meta":{"title":"Architecture consulting","summary":"An architecture review and a concrete plan for your product, in cloud, IoT, media or AI."},"alt":"consultoria.md","html":"<h1>Architecture consulting</h1>\n<h2>What's included</h2>\n<ul>\n<li>Architecture, code and AWS infrastructure review.</li>\n<li>Design of new systems: media pipelines, IoT platforms or adding AI to an existing product.</li>\n<li>A report with prioritized risks, costs and a work plan.</li>\n<li>A wrap-up session with the team.</li>\n</ul>\n<h2>Who it's for</h2>\n<p>Product teams about to make a major architecture decision, or teams that grew fast and feel\nevery change costs more than the last one.</p>\n<h2>Format</h2>\n<p>Fixed project of two to four weeks, or hourly for one-off questions.</p>\n<h2>Related work</h2>\n<ul>\n<li><a href=\"/en/plain/projects/canela-media/\" data-cmd=\"cd ~/projects/canela-media; and ls\">Media pipeline for Canela Media</a></li>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a></li>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a></li>\n</ul>\n<h2>How to start</h2>\n<p>Interested? Type <code data-cmd=\"linkedin\">linkedin</code> and send me a message mentioning this service.</p>"},{"type":"file","name":"development.md","id":"development","mime":"text/markdown","raw":"# Development\n\n## What's included\n\n- Backends and APIs in TypeScript, Go or PHP.\n- Vue or Svelte frontends when the product needs one.\n- Infrastructure as code on AWS, CI/CD and uneventful deploys.\n- Documentation and handover to the team that will maintain it.\n\n## Who it's for\n\nCompanies and startups that need to take a product to production, or to modernize a working\nsystem without breaking what already works.\n\n## Format\n\nPer project with incremental deliveries, or as part of your team for an agreed period.\n\n## Related work\n\n- [Armadillo Gaming](~/projects/armadillo-gaming)\n- [Tigo Money](~/projects/tigo-money)\n- [This site](~/projects/this-site)\n\n## How to start\n\nInterested? Type `linkedin` and send me a message mentioning this service.\n","meta":{"title":"Development","summary":"End-to-end product development, from the backend to the infrastructure."},"alt":"desarrollo.md","html":"<h1>Development</h1>\n<h2>What's included</h2>\n<ul>\n<li>Backends and APIs in TypeScript, Go or PHP.</li>\n<li>Vue or Svelte frontends when the product needs one.</li>\n<li>Infrastructure as code on AWS, CI/CD and uneventful deploys.</li>\n<li>Documentation and handover to the team that will maintain it.</li>\n</ul>\n<h2>Who it's for</h2>\n<p>Companies and startups that need to take a product to production, or to modernize a working\nsystem without breaking what already works.</p>\n<h2>Format</h2>\n<p>Per project with incremental deliveries, or as part of your team for an agreed period.</p>\n<h2>Related work</h2>\n<ul>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a></li>\n<li><a href=\"/en/plain/projects/tigo-money/\" data-cmd=\"cd ~/projects/tigo-money; and ls\">Tigo Money</a></li>\n<li><a href=\"/en/plain/projects/this-site/\" data-cmd=\"cd ~/projects/this-site; and ls\">This site</a></li>\n</ul>\n<h2>How to start</h2>\n<p>Interested? Type <code data-cmd=\"linkedin\">linkedin</code> and send me a message mentioning this service.</p>"}],"alt":"servicios"},{"type":"dir","name":"technologies","id":"technologies","children":[{"type":"dir","name":"ai-agents","id":"ai-agents","children":[{"type":"dir","name":"projects","id":"projects","children":[],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# AI agents\n\n**Category:** AI · **Level:** advanced · Since 2025 (1 years)\n\nSpec-driven development with coding agents. The agents write the code and I review every change.\n","html":"<h1>AI agents</h1>\n<p><strong>Category:</strong> AI · <strong>Level:</strong> advanced · Since 2025 (1 years)</p>\n<p>Spec-driven development with coding agents. The agents write the code and I review every change.</p>"}],"meta":{"title":"AI agents","category":"ai","level":"advanced"}},{"type":"dir","name":"astro","id":"astro","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"this-site","id":"this-site","target":"/home/guest/projects/this-site","alt":"este-sitio"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Astro\n\n**Category:** frontend · **Level:** intermediate · Since 2026 (0 years)\n\nStatic sites with interactive islands. This site is built with Astro.\n\n## Projects where I used it\n\n- [This site](~/projects/this-site) (2026)\n","html":"<h1>Astro</h1>\n<p><strong>Category:</strong> frontend · <strong>Level:</strong> intermediate · Since 2026 (0 years)</p>\n<p>Static sites with interactive islands. This site is built with Astro.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/this-site/\" data-cmd=\"cd ~/projects/this-site; and ls\">This site</a> (2026)</li>\n</ul>"}],"meta":{"title":"Astro","category":"frontend","level":"intermediate"}},{"type":"dir","name":"aws","id":"aws","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"},{"type":"link","name":"canela-media","id":"canela-media","target":"/home/guest/projects/canela-media"},{"type":"link","name":"this-site","id":"this-site","target":"/home/guest/projects/this-site","alt":"este-sitio"},{"type":"link","name":"wwe-media","id":"wwe-media","target":"/home/guest/projects/wwe-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# AWS\n\n**Category:** cloud · **Level:** advanced · Since 2016 (10 years)\n\nLambda, EC2, S3, CloudFront, IoT Core, DynamoDB, RDS and plenty of IAM. Always with infrastructure as code and an eye on cost.\n\n## Projects where I used it\n\n- [This site](~/projects/this-site) (2026)\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n- [Media pipeline for Canela Media](~/projects/canela-media) (2022)\n- [Transcoding and metadata for WWE](~/projects/wwe-media) (2016)\n","html":"<h1>AWS</h1>\n<p><strong>Category:</strong> cloud · <strong>Level:</strong> advanced · Since 2016 (10 years)</p>\n<p>Lambda, EC2, S3, CloudFront, IoT Core, DynamoDB, RDS and plenty of IAM. Always with infrastructure as code and an eye on cost.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/this-site/\" data-cmd=\"cd ~/projects/this-site; and ls\">This site</a> (2026)</li>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n<li><a href=\"/en/plain/projects/canela-media/\" data-cmd=\"cd ~/projects/canela-media; and ls\">Media pipeline for Canela Media</a> (2022)</li>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a> (2016)</li>\n</ul>"}],"meta":{"title":"AWS","category":"cloud","level":"advanced"}},{"type":"dir","name":"aws-elemental","id":"aws-elemental","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"wwe-media","id":"wwe-media","target":"/home/guest/projects/wwe-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# AWS Elemental\n\n**Category:** cloud · **Level:** advanced · Since 2016 (10 years)\n\nVideo transcoding at scale with on-premise AWS Elemental Server, for delivery to multiple platforms.\n\n## Projects where I used it\n\n- [Transcoding and metadata for WWE](~/projects/wwe-media) (2016)\n","html":"<h1>AWS Elemental</h1>\n<p><strong>Category:</strong> cloud · <strong>Level:</strong> advanced · Since 2016 (10 years)</p>\n<p>Video transcoding at scale with on-premise AWS Elemental Server, for delivery to multiple platforms.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a> (2016)</li>\n</ul>"}],"meta":{"title":"AWS Elemental","category":"cloud","level":"advanced"}},{"type":"dir","name":"beanstalkd","id":"beanstalkd","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"wwe-media","id":"wwe-media","target":"/home/guest/projects/wwe-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Beanstalkd\n\n**Category:** backend · **Level:** intermediate · Since 2016 (10 years)\n\nSimple work queues for background video processing.\n\n## Projects where I used it\n\n- [Transcoding and metadata for WWE](~/projects/wwe-media) (2016)\n","html":"<h1>Beanstalkd</h1>\n<p><strong>Category:</strong> backend · <strong>Level:</strong> intermediate · Since 2016 (10 years)</p>\n<p>Simple work queues for background video processing.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a> (2016)</li>\n</ul>"}],"meta":{"title":"Beanstalkd","category":"backend","level":"intermediate"}},{"type":"dir","name":"docker","id":"docker","children":[{"type":"dir","name":"projects","id":"projects","children":[],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Docker\n\n**Category:** devops · **Level:** advanced · Since 2017 (9 years)\n\nReproducible development environments and CI services.\n","html":"<h1>Docker</h1>\n<p><strong>Category:</strong> devops · <strong>Level:</strong> advanced · Since 2017 (9 years)</p>\n<p>Reproducible development environments and CI services.</p>"}],"meta":{"title":"Docker","category":"devops","level":"advanced"}},{"type":"dir","name":"dynamodb","id":"dynamodb","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"canela-media","id":"canela-media","target":"/home/guest/projects/canela-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# DynamoDB\n\n**Category:** data · **Level:** advanced · Since 2022 (4 years)\n\nFor simple, high-volume access patterns: pipeline state, deduplication and device data.\n\n## Projects where I used it\n\n- [Media pipeline for Canela Media](~/projects/canela-media) (2022)\n","html":"<h1>DynamoDB</h1>\n<p><strong>Category:</strong> data · <strong>Level:</strong> advanced · Since 2022 (4 years)</p>\n<p>For simple, high-volume access patterns: pipeline state, deduplication and device data.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/canela-media/\" data-cmd=\"cd ~/projects/canela-media; and ls\">Media pipeline for Canela Media</a> (2022)</li>\n</ul>"}],"meta":{"title":"DynamoDB","category":"data","level":"advanced"}},{"type":"dir","name":"github-actions","id":"github-actions","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"},{"type":"link","name":"canela-media","id":"canela-media","target":"/home/guest/projects/canela-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# GitHub Actions\n\n**Category:** devops · **Level:** advanced · Since 2022 (4 years)\n\nCI/CD with OIDC into AWS, no long-lived credentials, and automatically versioned releases.\n\n## Projects where I used it\n\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n- [Media pipeline for Canela Media](~/projects/canela-media) (2022)\n","html":"<h1>GitHub Actions</h1>\n<p><strong>Category:</strong> devops · <strong>Level:</strong> advanced · Since 2022 (4 years)</p>\n<p>CI/CD with OIDC into AWS, no long-lived credentials, and automatically versioned releases.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n<li><a href=\"/en/plain/projects/canela-media/\" data-cmd=\"cd ~/projects/canela-media; and ls\">Media pipeline for Canela Media</a> (2022)</li>\n</ul>"}],"meta":{"title":"GitHub Actions","category":"devops","level":"advanced"}},{"type":"dir","name":"gitlab-ci","id":"gitlab-ci","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"wwe-media","id":"wwe-media","target":"/home/guest/projects/wwe-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# GitLab CI\n\n**Category:** devops · **Level:** advanced · Since 2018 (8 years)\n\nBuild, test and deploy pipelines for media services.\n\n## Projects where I used it\n\n- [Transcoding and metadata for WWE](~/projects/wwe-media) (2016)\n","html":"<h1>GitLab CI</h1>\n<p><strong>Category:</strong> devops · <strong>Level:</strong> advanced · Since 2018 (8 years)</p>\n<p>Build, test and deploy pipelines for media services.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a> (2016)</li>\n</ul>"}],"meta":{"title":"GitLab CI","category":"devops","level":"advanced"}},{"type":"dir","name":"go","id":"go","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"},{"type":"link","name":"wwe-media","id":"wwe-media","target":"/home/guest/projects/wwe-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Go\n\n**Category:** language · **Level:** advanced · Since 2020 (6 years)\n\nI use it for services that need to be simple, fast and easy to deploy: Lambdas, workers and the software that runs on IoT devices.\n\n## Projects where I used it\n\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n- [Transcoding and metadata for WWE](~/projects/wwe-media) (2016)\n","html":"<h1>Go</h1>\n<p><strong>Category:</strong> language · <strong>Level:</strong> advanced · Since 2020 (6 years)</p>\n<p>I use it for services that need to be simple, fast and easy to deploy: Lambdas, workers and the software that runs on IoT devices.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a> (2016)</li>\n</ul>"}],"meta":{"title":"Go","category":"language","level":"advanced"}},{"type":"dir","name":"graphql","id":"graphql","children":[{"type":"dir","name":"projects","id":"projects","children":[],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# GraphQL\n\n**Category:** backend · **Level:** intermediate · Since 2019 (7 years)\n\nAPIs with a typed schema, for clients that need to ask for exactly what they use.\n","html":"<h1>GraphQL</h1>\n<p><strong>Category:</strong> backend · <strong>Level:</strong> intermediate · Since 2019 (7 years)</p>\n<p>APIs with a typed schema, for clients that need to ask for exactly what they use.</p>"}],"meta":{"title":"GraphQL","category":"backend","level":"intermediate"}},{"type":"dir","name":"laravel","id":"laravel","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"wwe-media","id":"wwe-media","target":"/home/guest/projects/wwe-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Laravel\n\n**Category:** backend · **Level:** advanced · Since 2016 (10 years)\n\nAPIs, back offices and marketplaces. Productive for moving fast without giving up structure.\n\n## Projects where I used it\n\n- [Transcoding and metadata for WWE](~/projects/wwe-media) (2016)\n","html":"<h1>Laravel</h1>\n<p><strong>Category:</strong> backend · <strong>Level:</strong> advanced · Since 2016 (10 years)</p>\n<p>APIs, back offices and marketplaces. Productive for moving fast without giving up structure.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a> (2016)</li>\n</ul>"}],"meta":{"title":"Laravel","category":"backend","level":"advanced"}},{"type":"dir","name":"llm","id":"llm","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# LLMs (Claude, Gemini)\n\n**Category:** AI · **Level:** advanced · Since 2025 (1 years)\n\nI integrate language models into real products, with tools, per-turn limits, cost control and verifiable answers.\n\n## Projects where I used it\n\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n","html":"<h1>LLMs (Claude, Gemini)</h1>\n<p><strong>Category:</strong> AI · <strong>Level:</strong> advanced · Since 2025 (1 years)</p>\n<p>I integrate language models into real products, with tools, per-turn limits, cost control and verifiable answers.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n</ul>"}],"meta":{"title":"LLMs (Claude, Gemini)","category":"ai","level":"advanced"}},{"type":"dir","name":"mongodb","id":"mongodb","children":[{"type":"dir","name":"projects","id":"projects","children":[],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# MongoDB\n\n**Category:** data · **Level:** intermediate · Since 2014 (12 years)\n\nDocuments and aggregation pipelines.\n","html":"<h1>MongoDB</h1>\n<p><strong>Category:</strong> data · <strong>Level:</strong> intermediate · Since 2014 (12 years)</p>\n<p>Documents and aggregation pipelines.</p>"}],"meta":{"title":"MongoDB","category":"data","level":"intermediate"}},{"type":"dir","name":"mqtt","id":"mqtt","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# MQTT\n\n**Category:** backend · **Level:** advanced · Since 2025 (1 years)\n\nMessaging between IoT devices and the cloud over AWS IoT Core, with a versioned contract and reliable delivery over flaky networks.\n\n## Projects where I used it\n\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n","html":"<h1>MQTT</h1>\n<p><strong>Category:</strong> backend · <strong>Level:</strong> advanced · Since 2025 (1 years)</p>\n<p>Messaging between IoT devices and the cloud over AWS IoT Core, with a versioned contract and reliable delivery over flaky networks.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n</ul>"}],"meta":{"title":"MQTT","category":"backend","level":"advanced"}},{"type":"dir","name":"mysql","id":"mysql","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"tigo-money","id":"tigo-money","target":"/home/guest/projects/tigo-money"},{"type":"link","name":"wwe-media","id":"wwe-media","target":"/home/guest/projects/wwe-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# MySQL\n\n**Category:** data · **Level:** advanced · Since 2012 (14 years)\n\nThe database behind most of my PHP systems, now on Aurora too.\n\n## Projects where I used it\n\n- [Transcoding and metadata for WWE](~/projects/wwe-media) (2016)\n- [Tigo Money](~/projects/tigo-money) (2014)\n","html":"<h1>MySQL</h1>\n<p><strong>Category:</strong> data · <strong>Level:</strong> advanced · Since 2012 (14 years)</p>\n<p>The database behind most of my PHP systems, now on Aurora too.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a> (2016)</li>\n<li><a href=\"/en/plain/projects/tigo-money/\" data-cmd=\"cd ~/projects/tigo-money; and ls\">Tigo Money</a> (2014)</li>\n</ul>"}],"meta":{"title":"MySQL","category":"data","level":"advanced"}},{"type":"dir","name":"nestjs","id":"nestjs","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"},{"type":"link","name":"wwe-media","id":"wwe-media","target":"/home/guest/projects/wwe-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# NestJS\n\n**Category:** backend · **Level:** advanced · Since 2019 (7 years)\n\nMy base for TypeScript backends: modules, dependency injection and a layered architecture that is easy to test.\n\n## Projects where I used it\n\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n- [Transcoding and metadata for WWE](~/projects/wwe-media) (2016)\n","html":"<h1>NestJS</h1>\n<p><strong>Category:</strong> backend · <strong>Level:</strong> advanced · Since 2019 (7 years)</p>\n<p>My base for TypeScript backends: modules, dependency injection and a layered architecture that is easy to test.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a> (2016)</li>\n</ul>"}],"meta":{"title":"NestJS","category":"backend","level":"advanced"}},{"type":"dir","name":"node","id":"node","children":[{"type":"dir","name":"projects","id":"projects","children":[],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Node.js\n\n**Category:** backend · **Level:** advanced · Since 2019 (7 years)\n\nAPIs, workers and command-line tools.\n","html":"<h1>Node.js</h1>\n<p><strong>Category:</strong> backend · <strong>Level:</strong> advanced · Since 2019 (7 years)</p>\n<p>APIs, workers and command-line tools.</p>"}],"meta":{"title":"Node.js","category":"backend","level":"advanced"}},{"type":"dir","name":"phalcon","id":"phalcon","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"tigo-money","id":"tigo-money","target":"/home/guest/projects/tigo-money"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Phalcon\n\n**Category:** backend · **Level:** advanced · Since 2014 (12 years)\n\nA high-performance PHP framework. I used it for the Tigo Money API.\n\n## Projects where I used it\n\n- [Tigo Money](~/projects/tigo-money) (2014)\n","html":"<h1>Phalcon</h1>\n<p><strong>Category:</strong> backend · <strong>Level:</strong> advanced · Since 2014 (12 years)</p>\n<p>A high-performance PHP framework. I used it for the Tigo Money API.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/tigo-money/\" data-cmd=\"cd ~/projects/tigo-money; and ls\">Tigo Money</a> (2014)</li>\n</ul>"}],"meta":{"title":"Phalcon","category":"backend","level":"advanced"}},{"type":"dir","name":"php","id":"php","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"tigo-money","id":"tigo-money","target":"/home/guest/projects/tigo-money"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# PHP\n\n**Category:** language · **Level:** advanced · Since 2012 (14 years)\n\nMy first professional language. I have used it from Symfony 2 to Symfony 8 and Laravel, in systems that have been in production for years.\n\n## Projects where I used it\n\n- [Tigo Money](~/projects/tigo-money) (2014)\n","html":"<h1>PHP</h1>\n<p><strong>Category:</strong> language · <strong>Level:</strong> advanced · Since 2012 (14 years)</p>\n<p>My first professional language. I have used it from Symfony 2 to Symfony 8 and Laravel, in systems that have been in production for years.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/tigo-money/\" data-cmd=\"cd ~/projects/tigo-money; and ls\">Tigo Money</a> (2014)</li>\n</ul>"}],"meta":{"title":"PHP","category":"language","level":"advanced"}},{"type":"dir","name":"postgresql","id":"postgresql","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"},{"type":"link","name":"canela-media","id":"canela-media","target":"/home/guest/projects/canela-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# PostgreSQL\n\n**Category:** data · **Level:** advanced · Since 2022 (4 years)\n\nMy default database. With pgvector and full-text search it also handles AI retrieval without adding another moving part.\n\n## Projects where I used it\n\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n- [Media pipeline for Canela Media](~/projects/canela-media) (2022)\n","html":"<h1>PostgreSQL</h1>\n<p><strong>Category:</strong> data · <strong>Level:</strong> advanced · Since 2022 (4 years)</p>\n<p>My default database. With pgvector and full-text search it also handles AI retrieval without adding another moving part.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n<li><a href=\"/en/plain/projects/canela-media/\" data-cmd=\"cd ~/projects/canela-media; and ls\">Media pipeline for Canela Media</a> (2022)</li>\n</ul>"}],"meta":{"title":"PostgreSQL","category":"data","level":"advanced"}},{"type":"dir","name":"python","id":"python","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Python\n\n**Category:** language · **Level:** intermediate · Since 2024 (2 years)\n\nScripts and tooling: document processing, audio analysis and automation.\n\n## Projects where I used it\n\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n","html":"<h1>Python</h1>\n<p><strong>Category:</strong> language · <strong>Level:</strong> intermediate · Since 2024 (2 years)</p>\n<p>Scripts and tooling: document processing, audio analysis and automation.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n</ul>"}],"meta":{"title":"Python","category":"language","level":"intermediate"}},{"type":"dir","name":"rabbitmq","id":"rabbitmq","children":[{"type":"dir","name":"projects","id":"projects","children":[],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# RabbitMQ\n\n**Category:** backend · **Level:** intermediate · Since 2020 (6 years)\n\nQueues and messaging between services.\n","html":"<h1>RabbitMQ</h1>\n<p><strong>Category:</strong> backend · <strong>Level:</strong> intermediate · Since 2020 (6 years)</p>\n<p>Queues and messaging between services.</p>"}],"meta":{"title":"RabbitMQ","category":"backend","level":"intermediate"}},{"type":"dir","name":"rag","id":"rag","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# RAG and embeddings\n\n**Category:** AI · **Level:** intermediate · Since 2026 (0 years)\n\nHybrid search (vector plus keyword) with reranking, so the AI answers by citing its source.\n\n## Projects where I used it\n\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n","html":"<h1>RAG and embeddings</h1>\n<p><strong>Category:</strong> AI · <strong>Level:</strong> intermediate · Since 2026 (0 years)</p>\n<p>Hybrid search (vector plus keyword) with reranking, so the AI answers by citing its source.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n</ul>"}],"meta":{"title":"RAG and embeddings","category":"ai","level":"intermediate"}},{"type":"dir","name":"redis","id":"redis","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"wwe-media","id":"wwe-media","target":"/home/guest/projects/wwe-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Redis\n\n**Category:** data · **Level:** intermediate · Since 2016 (10 years)\n\nCaching and state shared across processes.\n\n## Projects where I used it\n\n- [Transcoding and metadata for WWE](~/projects/wwe-media) (2016)\n","html":"<h1>Redis</h1>\n<p><strong>Category:</strong> data · <strong>Level:</strong> intermediate · Since 2016 (10 years)</p>\n<p>Caching and state shared across processes.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a> (2016)</li>\n</ul>"}],"meta":{"title":"Redis","category":"data","level":"intermediate"}},{"type":"dir","name":"svelte","id":"svelte","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"},{"type":"link","name":"this-site","id":"this-site","target":"/home/guest/projects/this-site","alt":"este-sitio"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Svelte\n\n**Category:** frontend · **Level:** advanced · Since 2025 (1 years)\n\nI use it when JavaScript weight matters, as on this site, and for mobile-first apps.\n\n## Projects where I used it\n\n- [This site](~/projects/this-site) (2026)\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n","html":"<h1>Svelte</h1>\n<p><strong>Category:</strong> frontend · <strong>Level:</strong> advanced · Since 2025 (1 years)</p>\n<p>I use it when JavaScript weight matters, as on this site, and for mobile-first apps.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/this-site/\" data-cmd=\"cd ~/projects/this-site; and ls\">This site</a> (2026)</li>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n</ul>"}],"meta":{"title":"Svelte","category":"frontend","level":"advanced"}},{"type":"dir","name":"symfony","id":"symfony","children":[{"type":"dir","name":"projects","id":"projects","children":[],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Symfony\n\n**Category:** backend · **Level:** advanced · Since 2012 (14 years)\n\nFrom Symfony 2 to Symfony 8. My pick for business applications that need to last.\n","html":"<h1>Symfony</h1>\n<p><strong>Category:</strong> backend · <strong>Level:</strong> advanced · Since 2012 (14 years)</p>\n<p>From Symfony 2 to Symfony 8. My pick for business applications that need to last.</p>"}],"meta":{"title":"Symfony","category":"backend","level":"advanced"}},{"type":"dir","name":"terraform","id":"terraform","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"},{"type":"link","name":"canela-media","id":"canela-media","target":"/home/guest/projects/canela-media"},{"type":"link","name":"this-site","id":"this-site","target":"/home/guest/projects/this-site","alt":"este-sitio"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Terraform / OpenTofu\n\n**Category:** devops · **Level:** advanced · Since 2022 (4 years)\n\nAll infrastructure as code, with a plan on every pull request and a reviewed apply.\n\n## Projects where I used it\n\n- [This site](~/projects/this-site) (2026)\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n- [Media pipeline for Canela Media](~/projects/canela-media) (2022)\n","html":"<h1>Terraform / OpenTofu</h1>\n<p><strong>Category:</strong> devops · <strong>Level:</strong> advanced · Since 2022 (4 years)</p>\n<p>All infrastructure as code, with a plan on every pull request and a reviewed apply.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/this-site/\" data-cmd=\"cd ~/projects/this-site; and ls\">This site</a> (2026)</li>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n<li><a href=\"/en/plain/projects/canela-media/\" data-cmd=\"cd ~/projects/canela-media; and ls\">Media pipeline for Canela Media</a> (2022)</li>\n</ul>"}],"meta":{"title":"Terraform / OpenTofu","category":"devops","level":"advanced"}},{"type":"dir","name":"typescript","id":"typescript","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"armadillo-gaming","id":"armadillo-gaming","target":"/home/guest/projects/armadillo-gaming"},{"type":"link","name":"canela-media","id":"canela-media","target":"/home/guest/projects/canela-media"},{"type":"link","name":"this-site","id":"this-site","target":"/home/guest/projects/this-site","alt":"este-sitio"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# TypeScript\n\n**Category:** language · **Level:** advanced · Since 2019 (7 years)\n\nThe language I use most for Node backends and Vue and Svelte frontends. Types are documentation the compiler checks.\n\n## Projects where I used it\n\n- [This site](~/projects/this-site) (2026)\n- [Armadillo Gaming](~/projects/armadillo-gaming) (2025)\n- [Media pipeline for Canela Media](~/projects/canela-media) (2022)\n","html":"<h1>TypeScript</h1>\n<p><strong>Category:</strong> language · <strong>Level:</strong> advanced · Since 2019 (7 years)</p>\n<p>The language I use most for Node backends and Vue and Svelte frontends. Types are documentation the compiler checks.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/this-site/\" data-cmd=\"cd ~/projects/this-site; and ls\">This site</a> (2026)</li>\n<li><a href=\"/en/plain/projects/armadillo-gaming/\" data-cmd=\"cd ~/projects/armadillo-gaming; and ls\">Armadillo Gaming</a> (2025)</li>\n<li><a href=\"/en/plain/projects/canela-media/\" data-cmd=\"cd ~/projects/canela-media; and ls\">Media pipeline for Canela Media</a> (2022)</li>\n</ul>"}],"meta":{"title":"TypeScript","category":"language","level":"advanced"}},{"type":"dir","name":"vue","id":"vue","children":[{"type":"dir","name":"projects","id":"projects","children":[{"type":"link","name":"wwe-media","id":"wwe-media","target":"/home/guest/projects/wwe-media"}],"alt":"proyectos"},{"type":"file","name":"README.md","id":"README.md","mime":"text/markdown","raw":"# Vue\n\n**Category:** frontend · **Level:** advanced · Since 2017 (9 years)\n\nMy go-to framework for large apps: the reactivity system is clear and the ecosystem is mature.\n\n## Projects where I used it\n\n- [Transcoding and metadata for WWE](~/projects/wwe-media) (2016)\n","html":"<h1>Vue</h1>\n<p><strong>Category:</strong> frontend · <strong>Level:</strong> advanced · Since 2017 (9 years)</p>\n<p>My go-to framework for large apps: the reactivity system is clear and the ecosystem is mature.</p>\n<h2>Projects where I used it</h2>\n<ul>\n<li><a href=\"/en/plain/projects/wwe-media/\" data-cmd=\"cd ~/projects/wwe-media; and ls\">Transcoding and metadata for WWE</a> (2016)</li>\n</ul>"}],"meta":{"title":"Vue","category":"frontend","level":"advanced"}}],"alt":"tecnologias"}]}]},{"type":"dir","name":"tmp","id":"tmp","children":[],"writable":true}]}}