[{"data":1,"prerenderedAt":406},["ShallowReactive",2],{"home":3,"case-study-gogh":228},{"id":4,"title":5,"avatar":6,"body":7,"contact":21,"description":22,"email":23,"extension":24,"headline":25,"location":26,"meta":27,"name":28,"navigation":29,"path":30,"projects":31,"seo":191,"socials":195,"stem":225,"username":226,"__hash__":227},"home\u002Findex.md","mgldvd.online — Tech Developer","\u002Fimages\u002Favatar.webp",{"type":8,"value":9,"toc":17},"minimark",[10,14],[11,12,13],"p",{},"I care about the quiet parts of software: load times, keyboard focus, the wording\nof an error message. Most of my work lives in TypeScript and Vue, on teams that\nship to real users every week.",[11,15,16],{},"Outside of client work I write small tools for myself and read far too much about\ntypography. This page is one of those tools — content lives in a markdown file,\nand everything else is a handful of components.",{"title":18,"searchDepth":19,"depth":19,"links":20},"",2,[],"Open to new projects and collaborations. Email is the fastest way to reach me.","I build fast, accessible interfaces for the web.","mgldvd@proton.me","md","Tech Developer","Bogotá, Colombia",{},"mgldvd.online",true,"\u002F",[32,43,51,60,67,76,85,92,100,107,114,123,132,141,149,156,161,170,177,184],{"title":33,"description":34,"url":35,"year":36,"icon":37,"caseStudy":38,"tags":39},"Gogh","1,250 color schemes for 19 terminal emulators — GNOME Terminal, Alacritty, Kitty, iTerm and more — installed with a single command. Open source since 2013, with 10k+ stars on GitHub.","https:\u002F\u002Fgogh.website\u002F","2013 — now","palette","\u002Fprojects\u002Fgogh",[40,41,42],"Bash","Terminal","Open source",{"title":44,"description":45,"url":46,"year":47,"icon":48,"tags":49},"Moma","A standalone Bash library and executable for terminal UI components, so a shell script can have a real interface without leaving the shell.","https:\u002F\u002Fmgldvd.github.io\u002Fmoma\u002F","2026","terminal",[40,50],"TUI",{"title":52,"description":53,"url":54,"year":47,"icon":55,"tags":56},"Omarchy × Gogh","Turns any of Gogh's ~370 terminal color schemes into a full Omarchy system theme.","https:\u002F\u002Fgithub.com\u002FGogh-Co\u002Fomarchy-theme-x-gogh","desktop",[57,58,59],"QML","Omarchy","Theming",{"title":61,"description":62,"url":63,"year":47,"icon":64,"tags":65},"Gona Launcher","A highly configurable app launcher for Omarchy: tiles you split, colour and arrange yourself, one tap of Super away.","https:\u002F\u002Fgithub.com\u002FMgldvd\u002Fgona-launcher","tiles",[57,66,58],"Quickshell",{"title":68,"description":69,"url":70,"year":47,"icon":71,"tags":72},"Amalgam","A complete desktop look for Cinnamon on Linux Mint: icons, cursors, desktop theme, Nemo add-ons, an applet and desklets, with a visual index of every piece.","https:\u002F\u002Famalgam.arcano.site\u002F","shapes",[73,74,75],"Icons","Cinnamon","Linux Mint",{"title":77,"description":78,"url":79,"year":80,"icon":81,"tags":82},"Task Runner TUI","taskg — a minimal terminal UI wrapper around Task (taskfile.dev), for running a project's tasks from a list instead of from memory.","https:\u002F\u002Fgithub.com\u002FMgldvd\u002Ftask-gui","2025 — now","checklist",[83,50,84],"Go","Experimental",{"title":86,"description":87,"url":88,"year":47,"icon":89,"tags":90},"ScanLAN","An interactive Linux network scanner: it finds the active hosts on one or more local IPv4 networks, then scans the common TCP ports of the ones you pick.","https:\u002F\u002Fgithub.com\u002FMgldvd\u002Fscanlan","network",[40,91,84],"Network",{"title":93,"description":94,"url":95,"year":96,"icon":97,"tags":98},"Linux-Utils","A field manual of scripts and notes for Linux, plus one command that turns a fresh Linux Mint install into a maintained workstation: it bootstraps Ansible and applies a chosen profile, from a minimal shell to a full desktop.","https:\u002F\u002Fmgldvd.gitlab.io\u002FLinux-Utils\u002F","2018 — now","toolbox",[40,99,75],"Ansible",{"title":101,"description":102,"url":103,"year":47,"icon":104,"tags":105},"Workspace Switcher Desklet","A Cinnamon desklet that shows one translucent rectangle per workspace on the desktop: click or scroll to switch. Any layout, any monitor, with custom colors and labels.","https:\u002F\u002Fgithub.com\u002FMgldvd\u002Fworkspace-switcher-desklet","columns",[106,74,75],"JavaScript",{"title":108,"description":109,"url":110,"year":47,"icon":111,"tags":112},"Emblems for Nemo","Adds an Emblems submenu to Nemo's right-click menu: hover it and click an icon to toggle that emblem on the selected files or folders, without digging through Properties.","https:\u002F\u002Fgithub.com\u002FMgldvd\u002FEmblems-for-Nemo","emblem",[40,113,74],"Nemo",{"title":115,"description":116,"url":117,"year":118,"icon":119,"tags":120},"Markdown Template","The spec for a dynamic Markdown template system: an extended Mustache-style syntax for interactive, form-driven Markdown documents.","https:\u002F\u002Fgithub.com\u002FMgldvd\u002Fmarkdown-template","2025","markdown",[121,122],"Markdown","Spec",{"title":124,"description":125,"url":126,"year":127,"icon":128,"tags":129},"Mgldvd VS Code Theme","A clean light theme for VS Code, with soft contrasts and vivid accents for readable code.","https:\u002F\u002Fgithub.com\u002FMgldvd\u002Fvscode-theme","2022 — now","code",[130,131],"VS Code","Theme",{"title":133,"description":134,"url":135,"year":136,"icon":137,"tags":138},"Git Presentation","An interactive HTML presentation about Git, the version control system, from the first commit to everyday workflows.","https:\u002F\u002Fmgldvd.github.io\u002Fgit-presentation\u002F","2020","slides",[139,140],"Git","HTML",{"title":142,"description":143,"url":144,"year":118,"icon":145,"tags":146},"Alpine PHP 8.5","A lightweight Docker image based on Alpine and PHP 8.5: a CLI environment ready for developing and running PHP projects.","https:\u002F\u002Fhub.docker.com\u002Fr\u002Fmgldvd\u002Falpine-php85","container",[147,148],"Docker","PHP",{"title":150,"description":151,"url":152,"year":118,"icon":145,"tags":153},"Slim Python 3 + uv","A lightweight Docker image based on Debian Slim and Python 3, with uv and a CLI environment for developing and running Python projects.","https:\u002F\u002Fhub.docker.com\u002Fr\u002Fmgldvd\u002Fslim-python3-uv",[147,154,155],"Python","uv",{"title":157,"description":158,"url":159,"year":118,"icon":145,"tags":160},"Alpine Python 3.12 + uv","A lightweight Docker image based on Alpine and Python 3.12, with uv and a CLI environment for developing and running Python projects.","https:\u002F\u002Fhub.docker.com\u002Fr\u002Fmgldvd\u002Falpine-python3.12-uv",[147,154,155],{"title":162,"description":163,"url":164,"year":165,"icon":166,"tags":167},"Docker phpMyAdmin","A Docker container for running phpMyAdmin with MariaDB, to manage a local database from the browser.","https:\u002F\u002Fgitlab.com\u002Fmgldvd\u002Fdocker-phpmyadmin","2024","database",[147,168,169],"phpMyAdmin","MariaDB",{"title":171,"description":172,"url":173,"year":165,"icon":174,"tags":175},"Docker PHP Server","A Docker container for running PHP applications on Apache.","https:\u002F\u002Fgitlab.com\u002Fmgldvd\u002Fdocker-php-server","server",[147,148,176],"Apache",{"title":178,"description":179,"url":180,"year":165,"icon":181,"tags":182},"Docker n8n","A Docker container for running n8n, the open-source workflow automation tool, on your own machine.","https:\u002F\u002Fgitlab.com\u002Fmgldvd\u002Fdocker-n8n","workflow",[147,183],"n8n",{"title":185,"description":186,"url":187,"year":165,"icon":145,"tags":188},"Docker Docksal Laravel","A Docker setup for running Laravel applications with Docksal.","https:\u002F\u002Fgitlab.com\u002Fmgldvd\u002Fdocker-docksal-laravel",[147,189,190],"Docksal","Laravel",{"title":192,"description":193,"image":194},"mgldvd.online — Miguel D. Quintero, Tech Developer","Miguel D. Quintero, a tech developer in Bogotá, Colombia. I build fast, accessible interfaces for the web.","\u002Fimages\u002Fog.jpg",[196,201,206,211,216,220],{"label":197,"handle":198,"url":199,"icon":200},"GitHub","Mgldvd","https:\u002F\u002Fgithub.com\u002FMgldvd","github",{"label":202,"handle":203,"url":204,"icon":205},"GitLab","mgldvd","https:\u002F\u002Fgitlab.com\u002Fmgldvd","gitlab",{"label":207,"handle":208,"url":209,"icon":210},"LinkedIn","miguel-d-quintero","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fmiguel-d-quintero","linkedin",{"label":212,"handle":213,"url":214,"icon":215},"X","@Mgldvd_tech","https:\u002F\u002Fx.com\u002FMgldvd_tech","x",{"label":217,"handle":203,"url":218,"icon":219},"CodePen","https:\u002F\u002Fcodepen.io\u002Fmgldvd","codepen",{"label":221,"handle":222,"url":223,"icon":224},"CV","cv.mgldvd.online","https:\u002F\u002Fcv.mgldvd.online\u002F","cv","index",null,"IXSP1bd_r2JcpcL55g5I_a6I1zizJbjDFYd6DKxq1hQ",{"id":229,"title":33,"body":230,"description":366,"extension":24,"eyebrow":367,"license":368,"links":369,"meta":377,"navigation":29,"path":378,"role":379,"seo":380,"stack":381,"stats":384,"statsAsOf":403,"stem":404,"timeline":36,"__hash__":405},"caseStudies\u002Fcase-studies\u002Fgogh.md",{"type":8,"value":231,"toc":357},[232,237,240,243,247,258,261,264,268,275,289,293,304,308,311,315,324,328],[233,234,236],"h2",{"id":235},"the-problem","The problem",[11,238,239],{},"Every terminal emulator keeps its colors somewhere different. GNOME Terminal\nreads them from dconf profiles, Alacritty and Kitty from config files, the\nLinux console from escape sequences. Changing a theme meant finding where your\nterminal hid its sixteen colors and typing them in by hand, once per machine\nand once per terminal.",[11,241,242],{},"Gogh started on November 18, 2013, inspired by the clean, minimal look of\nelementary OS: a way to try a color scheme in one step and keep it if you\nliked it.",[233,244,246],{"id":245},"one-palette-many-terminals","One palette, many terminals",[11,248,249,250,253,254,257],{},"The whole project rests on one idea: a theme is data, and each terminal is an\nadapter. A theme is a small YAML file with sixteen ANSI colors, plus the\nbackground, foreground and cursor. ",[128,251,252],{},"apply-colors.sh"," works out which terminal\nit is running in and calls that terminal's own ",[128,255,256],{},"apply_*"," function, which\nwrites the same palette in whatever shape that terminal expects.",[11,259,260],{},"Adding a terminal never touches the themes; adding a theme never touches the\nterminals. That split is why both lists could grow for more than a decade\nwithout the code growing with them.",[262,263],"theme-terminal",{},[233,265,267],{"id":266},"one-file-to-contribute","One file to contribute",[11,269,270,271,274],{},"Gogh's themes come from its community: 177 people have contributed so far.\nSo the path to contributing is a single file: drop a YAML file in ",[128,272,273],{},"themes\u002F",", open a pull\nrequest, done. Contributors never touch an installer, a JSON file or a list\nof names.",[11,276,277,278,281,282,285,286,288],{},"Pull requests are checked automatically: hex colors are uppercase, the file\nname matches the theme's name, the variant is ",[128,279,280],{},"dark"," or ",[128,283,284],{},"light",", the name\ndoes not collide with an existing theme, and a theme pull request only\ntouches ",[128,287,273],{},". Foreground-to-background contrast below 2.5:1 is reported,\nbut it does not fail the check: contrast is a judgment call, not a fact like\na mismatched file name. And only newly added themes are checked, so an old\nissue on a theme nobody is touching never blocks someone else's pull request.",[233,290,292],{"id":291},"everything-else-is-generated","Everything else is generated",[11,294,295,296,299,300,303],{},"Every push to ",[128,297,298],{},"master"," runs a ten-step pipeline (Python for the first nine,\nDeno for the last) that builds everything from those YAML files: the theme\ndata as JSON, CSV and YAML, one install script per theme, the theme list\ninside ",[128,301,302],{},"gogh.sh",", and a WCAG contrast report for every palette. Nothing\ngenerated is ever edited by hand, so nothing generated can drift from the\nthemes.",[233,305,307],{"id":306},"tested-where-it-runs","Tested where it runs",[11,309,310],{},"A color scheme that only works on my machine is not much use. Sixteen of the\nnineteen supported terminals have their own Docker test in the repository,\nso a change to one adapter can be checked in that terminal without\ninstalling it.",[233,312,314],{"id":313},"data-anyone-can-use","Data anyone can use",[11,316,317,318,323],{},"The themes are also published as plain static files (JSON, CSV and YAML)\nthat need no API key and have no rate limit. Each palette carries a hash of\nits colors, so palettes can be compared and duplicates spotted across the\nwhole collection. Other tools build on that data, including my own\n",[319,320,52],"a",{"href":54,"rel":321},[322],"nofollow",", which\nturns any Gogh palette into a full desktop theme.",[233,325,327],{"id":326},"what-it-taught-me","What it taught me",[329,330,331,339,345,351],"ul",{},[332,333,334,338],"li",{},[335,336,337],"strong",{},"Make contributing a single file."," Every step you remove from a\ncontributor's path is one fewer reason to give up halfway.",[332,340,341,344],{},[335,342,343],{},"Generate, don't maintain."," If a file can be built from another one, it\nshould be, by a machine, every time.",[332,346,347,350],{},[335,348,349],{},"Separate gates from advice."," Block only what is objectively wrong;\nreport the rest. People keep contributing when the checks are fair.",[332,352,353,356],{},[335,354,355],{},"Keep the core boring."," Bash and plain YAML are still the right tools\nafter thirteen years, and that is a big part of why the project is still\nalive.",{"title":18,"searchDepth":19,"depth":19,"links":358},[359,360,361,362,363,364,365],{"id":235,"depth":19,"text":236},{"id":245,"depth":19,"text":246},{"id":266,"depth":19,"text":267},{"id":291,"depth":19,"text":292},{"id":306,"depth":19,"text":307},{"id":313,"depth":19,"text":314},{"id":326,"depth":19,"text":327},"Color schemes for 19 terminal emulators, applied with one command. Started in 2013, now 1,250 themes from 177 contributors, with 10k+ stars.","Case study \u002F open source","MIT or Apache-2.0",[370,372,374],{"label":371,"url":35},"gogh.website",{"label":197,"url":373},"https:\u002F\u002Fgithub.com\u002FGogh-Co\u002FGogh",{"label":375,"url":376},"Theme browser","https:\u002F\u002Fgogh-co.github.io\u002FGogh\u002F",{},"\u002Fcase-studies\u002Fgogh","Creator and maintainer",{"title":33,"description":366},[40,154,382,383,147],"Deno","GitHub Actions",[385,388,391,394,397,400],{"label":386,"value":387},"Themes","1,250",{"label":389,"value":390},"Terminals","19",{"label":392,"value":393},"Stars","10.3k",{"label":395,"value":396},"Forks","638",{"label":398,"value":399},"Contributors","177",{"label":401,"value":402},"Commits","1,350+","October 2026","case-studies\u002Fgogh","hSiJ2_Dx7EMAYnsk5hAiNEBgjrPFwhPUasmyBbdmWVE",1792597979264]