<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Gabriel Rodrigues — Blog</title><description>Senior Frontend Engineer writing about Vue, Angular, TypeScript, and web architecture.</description><link>https://gabriel-rodrigues.com/</link><language>en</language><item><title>CasinoCraftz Bridge Versioning Lessons: How We Avoided Cross-Route Drift</title><link>https://gabriel-rodrigues.com/en/blog/casinocraftz-bridge-versioning-parity-lessons/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/casinocraftz-bridge-versioning-parity-lessons/</guid><description>A practical engineering write-up on event envelope versioning, safe parsing, authority isolation, and EN/PT parity checks in CasinoCraftz.</description><pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate><category>architecture</category><category>events</category><category>testing</category><category>i18n</category><category>slots</category></item><item><title>How I Built CasinoCraftz Slots with AI: A Phase-by-Phase Engineering Diary</title><link>https://gabriel-rodrigues.com/en/blog/casinocraftz-slots-ai-engineering-diary/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/casinocraftz-slots-ai-engineering-diary/</guid><description>A practical, first-person breakdown of how I used AI in real implementation loops across bridge safety, parity, deterministic behavior, and milestone closure.</description><pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate><category>ai</category><category>engineering</category><category>slots</category><category>testing</category><category>astro</category></item><item><title>Add to Favorites: From Browser APIs to PWA Install</title><link>https://gabriel-rodrigues.com/en/blog/add-to-favorites-bookmark-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/add-to-favorites-bookmark-then-vs-now/</guid><description>My 2015 SO answer showed window.external.AddFavorite() for IE. In 2026, browsers removed programmatic bookmarking entirely — but PWA Install replaced it.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>javascript</category><category>browsers</category><category>stackoverflow</category><category>ux</category></item><item><title>Alamofire Swift HTTP: From Essential Library to Optional Convenience</title><link>https://gabriel-rodrigues.com/en/blog/alamofire-swift-http-requests-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/alamofire-swift-http-requests-then-vs-now/</guid><description>My Stack Overflow answer about Alamofire HTTP requests in Swift scored 5 upvotes. In 2026, URLSession with async/await and structured concurrency makes Alamofire optional for most projects.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>swift</category><category>ios</category><category>networking</category><category>stackoverflow</category></item><item><title>AngularJS Form Validation Lessons: From $dirty/$valid to Modern Schema Validation</title><link>https://gabriel-rodrigues.com/en/blog/angularjs-form-validation-lessons-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/angularjs-form-validation-lessons-then-vs-now/</guid><description>My Stack Overflow answer about AngularJS form validation scored 5 upvotes. In 2026, React Hook Form with Zod or Valibot shows how far form state management has come.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>angularjs</category><category>forms</category><category>stackoverflow</category><category>history</category></item><item><title>BLOB Fields in Databases: When to Store Binary Data and When Not To</title><link>https://gabriel-rodrigues.com/en/blog/blob-database-fields-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/blob-database-fields-then-vs-now/</guid><description>From a 2015 Stack Overflow answer on MySQL and Firebird BLOB types to the object storage era of 2026 — why the answer to &quot;how to store files in a database&quot; is now &quot;don&apos;t.&quot;</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>databases</category><category>stackoverflow</category><category>architecture</category><category>storage</category></item><item><title>Block Special Characters in Input: From Regex to Native Validation</title><link>https://gabriel-rodrigues.com/en/blog/block-special-characters-input-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/block-special-characters-input-then-vs-now/</guid><description>My 2015 Stack Overflow answer used keypress events to filter characters. In 2026, the input event and native validation do it better.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>html</category><category>javascript</category><category>validation</category><category>stackoverflow</category></item><item><title>Bootstrap Modal + Tooltip: From jQuery Plugin Wars to Native HTML</title><link>https://gabriel-rodrigues.com/en/blog/bootstrap-modal-tooltip-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/bootstrap-modal-tooltip-then-vs-now/</guid><description>My 2015 Stack Overflow answer tackled Bootstrap modal and tooltip conflicts on the same element. In 2026, native dialog and popover make Bootstrap optional.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>bootstrap</category><category>javascript</category><category>stackoverflow</category><category>ui</category></item><item><title>Bootstrap Responsive Classes: From visible-xs to Container Queries</title><link>https://gabriel-rodrigues.com/en/blog/bootstrap-responsive-classes-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/bootstrap-responsive-classes-then-vs-now/</guid><description>My Stack Overflow answer about Bootstrap 3 visible-xs and hidden-md scored 5 upvotes. In 2026, Bootstrap 5 utility classes and native CSS container queries handle responsive visibility far better.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>bootstrap</category><category>css</category><category>responsive</category><category>stackoverflow</category></item><item><title>Bootstrap Responsive Navbar: From jQuery Collapse to CSS-Only Navigation</title><link>https://gabriel-rodrigues.com/en/blog/bootstrap-responsive-navbar-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/bootstrap-responsive-navbar-then-vs-now/</guid><description>I answered a Stack Overflow question about Bootstrap 3 responsive navbars in 2017. Today you can build the same thing with zero JavaScript.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>bootstrap</category><category>css</category><category>responsive</category><category>stackoverflow</category></item><item><title>Geolocation: How to Identify a User&apos;s City in the Browser</title><link>https://gabriel-rodrigues.com/en/blog/browser-geolocation-user-city-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/browser-geolocation-user-city-then-vs-now/</guid><description>My 2015 Stack Overflow question used navigator.geolocation freely. In 2026, privacy restrictions changed the entire approach.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>javascript</category><category>geolocation</category><category>stackoverflow</category><category>privacy</category></item><item><title>Button Alignment UX: From Platform Wars to Design System Consensus</title><link>https://gabriel-rodrigues.com/en/blog/button-alignment-ux-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/button-alignment-ux-then-vs-now/</guid><description>In 2015, I answered a Stack Overflow question about button alignment conventions. The debate was Windows vs Mac. Today, design systems have settled the argument.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>ux</category><category>design</category><category>stackoverflow</category><category>accessibility</category></item><item><title>Centering a Modal with CSS: From Transform Hacks to Native Dialog</title><link>https://gabriel-rodrigues.com/en/blog/center-modal-css-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/center-modal-css-then-vs-now/</guid><description>From a 2016 Stack Overflow answer on centering Bootstrap modals with negative margins to 2026 — native &lt;dialog&gt;, flexbox, and the death of centering tricks.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>css</category><category>bootstrap</category><category>stackoverflow</category><category>layout</category></item><item><title>Check Email via AJAX Before Submit: From jQuery Blur to Fetch and Security Tradeoffs</title><link>https://gabriel-rodrigues.com/en/blog/check-email-ajax-before-submit-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/check-email-ajax-before-submit-then-vs-now/</guid><description>From a 2016 Stack Overflow answer on checking email availability with jQuery AJAX to 2026 — fetch, AbortController, debouncing, and why user enumeration is a real risk.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>javascript</category><category>forms</category><category>validation</category><category>stackoverflow</category></item><item><title>Code Smell Explained: From Buzzword to Practical Refactoring Guide</title><link>https://gabriel-rodrigues.com/en/blog/code-smell-explained-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/code-smell-explained-then-vs-now/</guid><description>What code smells really are, how to spot them, and how the tooling evolved from Fowler&apos;s catalog to AI-powered detection. A then-vs-now perspective from a real SO question.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>architecture</category><category>refactoring</category><category>stackoverflow</category><category>best-practices</category></item><item><title>contenteditable Bugs: How Browser Pain Created Modern Editors</title><link>https://gabriel-rodrigues.com/en/blog/contenteditable-bugs-rich-text-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/contenteditable-bugs-rich-text-then-vs-now/</guid><description>My Stack Overflow answer tackled Firefox padding bugs in contenteditable. In 2026, Tiptap, ProseMirror, and Lexical exist because nobody should hand-roll rich text.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>html</category><category>browsers</category><category>stackoverflow</category><category>editors</category></item><item><title>C/C++ Decimal Formatting: From printf to std::format</title><link>https://gabriel-rodrigues.com/en/blog/cpp-limit-decimal-places-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/cpp-limit-decimal-places-then-vs-now/</guid><description>My 2015 SO answer used printf(&quot;%.2f&quot;) to limit decimal places. C++20 std::format brought Python-style format strings to C++.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>cpp</category><category>formatting</category><category>stackoverflow</category><category>language-features</category></item><item><title>C++ Templates: From Generic Programming Basics to C++20 Concepts</title><link>https://gabriel-rodrigues.com/en/blog/cpp-templates-generics-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/cpp-templates-generics-then-vs-now/</guid><description>My 2015 SO question about C++ templates. In 2026, Concepts constrain templates with clear error messages and expressive intent.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>cpp</category><category>templates</category><category>stackoverflow</category><category>language-features</category></item><item><title>CSS @import vs link: The Debate That CSS Layers Resurrected</title><link>https://gabriel-rodrigues.com/en/blog/css-import-vs-link-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/css-import-vs-link-then-vs-now/</guid><description>My 2015 Stack Overflow question about including stylesheets had a clear answer: use link. In 2026, @import found a new purpose with @layer.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>css</category><category>performance</category><category>stackoverflow</category><category>web-development</category></item><item><title>CSS Preprocessors in 2026: Sass vs Less vs Stylus — Do You Still Need Them?</title><link>https://gabriel-rodrigues.com/en/blog/css-preprocessors-sass-less-stylus-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/css-preprocessors-sass-less-stylus-then-vs-now/</guid><description>A Stack Overflow question from 2015 asked about Sass vs Less vs Stylus. In 2026, native CSS has caught up. Here is what changed and when preprocessors still make sense.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>css</category><category>sass</category><category>stackoverflow</category><category>web-development</category></item><item><title>CSS Print Styles for A4 Pages: From @media print to Paged.js</title><link>https://gabriel-rodrigues.com/en/blog/css-print-styles-a4-pages-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/css-print-styles-a4-pages-then-vs-now/</guid><description>My 2015 SO question about CSS print styles. In 2026, @page rules and Paged.js give you precise control over printed output.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>css</category><category>print</category><category>stackoverflow</category><category>layout</category></item><item><title>CSS word-wrap and Text Overflow: From Hack to Standard</title><link>https://gabriel-rodrigues.com/en/blog/css-word-wrap-overflow-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/css-word-wrap-overflow-then-vs-now/</guid><description>My 2015 Stack Overflow answer used word-wrap: break-word as a quick fix. In 2026, CSS handles text overflow with elegance and intelligence.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>css</category><category>stackoverflow</category><category>typography</category><category>web-development</category></item><item><title>Custom Scrollbar Styling: From WebKit Hacks to W3C Standards</title><link>https://gabriel-rodrigues.com/en/blog/custom-scrollbar-styling-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/custom-scrollbar-styling-then-vs-now/</guid><description>My 2015 Stack Overflow answer used ::-webkit-scrollbar pseudo-elements for custom scrollbars. In 2026, two standard CSS properties replace dozens of pseudo-elements.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>css</category><category>ux</category><category>stackoverflow</category><category>design</category></item><item><title>Datepicker Enable Specific Days: From beforeShowDay to Modern Date Controls</title><link>https://gabriel-rodrigues.com/en/blog/datepicker-enable-specific-days-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/datepicker-enable-specific-days-then-vs-now/</guid><description>My Stack Overflow answer about enabling only specific days in a Bootstrap datepicker scored 5 upvotes. In 2026, native date inputs and headless datepicker libraries handle this with far less code.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>bootstrap</category><category>forms</category><category>javascript</category><category>stackoverflow</category></item><item><title>Delete Table Rows Dynamically with JavaScript</title><link>https://gabriel-rodrigues.com/en/blog/delete-table-row-dynamically-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/delete-table-row-dynamically-then-vs-now/</guid><description>My 2016 Stack Overflow answer used parentNode.removeChild to delete rows. In 2026, element.remove() and closest() made it a one-liner.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>javascript</category><category>dom</category><category>stackoverflow</category><category>html</category></item><item><title>disabled vs readonly: The HTML Attribute Nobody Gets Right</title><link>https://gabriel-rodrigues.com/en/blog/disabled-vs-readonly-html-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/disabled-vs-readonly-html-then-vs-now/</guid><description>My 2015 Stack Overflow answer showed that disabled=&quot;false&quot; still disables. In 2026, the inert attribute adds a third option to the mix.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>html</category><category>forms</category><category>stackoverflow</category><category>accessibility</category></item><item><title>Drag-and-Drop Programming: From Dreamweaver to AI-Generated UIs</title><link>https://gabriel-rodrigues.com/en/blog/drag-drop-programming-low-code-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/drag-drop-programming-low-code-then-vs-now/</guid><description>My 2014 Stack Overflow answer discussed pros and cons of visual programming. In 2026, the line between real coding and visual building dissolved.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>low-code</category><category>ux</category><category>stackoverflow</category><category>tools</category></item><item><title>Dynamic Image Zoom with CSS: Hover Effects That Scale</title><link>https://gabriel-rodrigues.com/en/blog/dynamic-image-zoom-css-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/dynamic-image-zoom-css-then-vs-now/</guid><description>My 2015 SO answer used transform:scale on hover. In 2026, View Transitions and @starting-style make smooth zoom effects native.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>css</category><category>animation</category><category>stackoverflow</category><category>design</category></item><item><title>Email HTML Templates: From Table Layouts to Modern Authoring Tools</title><link>https://gabriel-rodrigues.com/en/blog/email-html-templates-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/email-html-templates-then-vs-now/</guid><description>From a 2016 Stack Overflow answer on email HTML compatibility to 2026 — MJML, React Email, and why email development is still its own universe.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>html</category><category>email</category><category>stackoverflow</category><category>css</category></item><item><title>ES6 Symbol Explained: The Most Misunderstood JavaScript Primitive</title><link>https://gabriel-rodrigues.com/en/blog/es6-symbol-explained-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/es6-symbol-explained-then-vs-now/</guid><description>In 2015, Symbol seemed like a curiosity with no practical use. In 2026, it powers iterators, async iteration, resource cleanup, and the entire JS metaprogramming layer.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>javascript</category><category>es6</category><category>stackoverflow</category><category>language-features</category></item><item><title>Fallback Image: Handling Broken Images Gracefully</title><link>https://gabriel-rodrigues.com/en/blog/fallback-image-broken-images-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/fallback-image-broken-images-then-vs-now/</guid><description>My 2015 SO question used onerror to swap broken image src. In 2026, picture element, skeleton loading, and CSS handle this more elegantly.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>html</category><category>images</category><category>ux</category><category>stackoverflow</category></item><item><title>Filter File Input by Type: From accept Attributes to File System Access API</title><link>https://gabriel-rodrigues.com/en/blog/filter-file-input-type-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/filter-file-input-type-then-vs-now/</guid><description>Back in 2015, I asked on Stack Overflow how to filter file inputs by type. The accept attribute was the answer then — but today we have far more powerful options.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>html</category><category>forms</category><category>javascript</category><category>stackoverflow</category></item><item><title>Fixed Header: From position:fixed to position:sticky</title><link>https://gabriel-rodrigues.com/en/blog/fixed-header-css-sticky-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/fixed-header-css-sticky-then-vs-now/</guid><description>My 2015 SO answer showed position:fixed with body padding hacks. In 2026, position:sticky stays in flow until you need it.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>css</category><category>layout</category><category>stackoverflow</category><category>web-development</category></item><item><title>Front-end vs Back-end: A Definition That Keeps Shifting</title><link>https://gabriel-rodrigues.com/en/blog/frontend-vs-backend-explained-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/frontend-vs-backend-explained-then-vs-now/</guid><description>In 2014, the divide was clear: jQuery on the front, PHP on the back. In 2026, server components and edge functions blurred the line entirely.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>web-development</category><category>career</category><category>stackoverflow</category><category>fundamentals</category></item><item><title>Get Current Filename in PHP: From $_SERVER to Modern Routing</title><link>https://gabriel-rodrigues.com/en/blog/get-current-filename-php-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/get-current-filename-php-then-vs-now/</guid><description>In 2015, I asked on Stack Overflow how to get the current filename in PHP. The answer was simple then — but modern frameworks made the question mostly irrelevant.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>stackoverflow</category><category>basics</category><category>web-development</category></item><item><title>What&apos;s Allowed Inside an Anchor Tag in HTML5</title><link>https://gabriel-rodrigues.com/en/blog/html5-anchor-tag-content-model-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/html5-anchor-tag-content-model-then-vs-now/</guid><description>My 2016 Stack Overflow answer about putting divs inside links. In 2026, valid HTML and accessible HTML are two different conversations.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>html</category><category>html5</category><category>stackoverflow</category><category>accessibility</category></item><item><title>HTML5 data-* Attributes: From jQuery Convenience to Framework Architecture</title><link>https://gabriel-rodrigues.com/en/blog/html5-data-attributes-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/html5-data-attributes-then-vs-now/</guid><description>My 2016 SO answer showed data-* attributes with jQuery .data(). In 2026, Alpine.js and htmx use them as their entire API.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>html</category><category>javascript</category><category>stackoverflow</category><category>dom</category></item><item><title>HTML5 Form Semantics: fieldset, legend, label, and optgroup</title><link>https://gabriel-rodrigues.com/en/blog/html5-form-semantics-fieldset-legend-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/html5-form-semantics-fieldset-legend-then-vs-now/</guid><description>My 2015 Stack Overflow answer explained form tags most developers ignored. In 2026, WCAG compliance made them essential.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>html</category><category>forms</category><category>accessibility</category><category>stackoverflow</category></item><item><title>HTTPS for Web Applications: From Optional to Mandatory</title><link>https://gabriel-rodrigues.com/en/blog/https-web-applications-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/https-web-applications-then-vs-now/</guid><description>My 2015 Stack Overflow question asked about HTTPS for web apps. In 2026, it&apos;s not a question anymore — it&apos;s the baseline.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>security</category><category>web-development</category><category>stackoverflow</category><category>https</category></item><item><title>Input Uppercase + Placeholder Lowercase: A CSS Inheritance Headache, Solved</title><link>https://gabriel-rodrigues.com/en/blog/input-uppercase-placeholder-lowercase-css-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/input-uppercase-placeholder-lowercase-css-then-vs-now/</guid><description>From a Stack Overflow question about text-transform: uppercase breaking placeholder styles to the fully standardized ::placeholder pseudo-element in 2026.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>css</category><category>forms</category><category>stackoverflow</category><category>ux</category></item><item><title>Java Date Formatting in Portuguese: From SimpleDateFormat to java.time</title><link>https://gabriel-rodrigues.com/en/blog/java-date-formatting-portuguese-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/java-date-formatting-portuguese-then-vs-now/</guid><description>From a Stack Overflow question about formatting dates in Brazilian Portuguese with SimpleDateFormat to the modern java.time API and a comparison with JS Temporal.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>java</category><category>datetime</category><category>localization</category><category>stackoverflow</category></item><item><title>jQuery DOM Traversal to Vanilla JS: siblings(), next(), and Beyond</title><link>https://gabriel-rodrigues.com/en/blog/jquery-dom-traversal-vanilla-js-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/jquery-dom-traversal-vanilla-js-then-vs-now/</guid><description>My Stack Overflow answer explained jQuery siblings() and next(). In 2026, native DOM methods like closest() and :has() cover everything jQuery offered.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>javascript</category><category>jquery</category><category>dom</category><category>stackoverflow</category></item><item><title>MIME Types Explained: What Browsers Actually Do with Content-Type</title><link>https://gabriel-rodrigues.com/en/blog/mime-types-explained-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/mime-types-explained-then-vs-now/</guid><description>From a 2015 Stack Overflow question about why script tags work without type attributes, to the security-critical MIME enforcement of 2026.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>web-development</category><category>http</category><category>stackoverflow</category><category>fundamentals</category></item><item><title>mPDF to Modern PDF Generation: Browser Engines Won</title><link>https://gabriel-rodrigues.com/en/blog/mpdf-php-pdf-generation-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/mpdf-php-pdf-generation-then-vs-now/</guid><description>My Stack Overflow answer wrestled with mPDF layout and CSS limitations. In 2026, Puppeteer, Playwright, and Gotenberg use real browser engines for pixel-perfect PDFs.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>pdf</category><category>stackoverflow</category><category>tools</category></item><item><title>Multiple Bootstrap Modals: From z-index Wars to Native Dialogs</title><link>https://gabriel-rodrigues.com/en/blog/multiple-bootstrap-modals-stacking-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/multiple-bootstrap-modals-stacking-then-vs-now/</guid><description>From a 2015 Stack Overflow question about stacking Bootstrap modals with z-index hacks to the native &lt;dialog&gt; element and top-layer API in 2026.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>bootstrap</category><category>javascript</category><category>ux</category><category>stackoverflow</category></item><item><title>ORM Explained: What It Is, Why It Matters, and How It Evolved</title><link>https://gabriel-rodrigues.com/en/blog/orm-explained-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/orm-explained-then-vs-now/</guid><description>From a 2016 Stack Overflow answer on ORM basics to the type-safe, edge-ready query layers of 2026 — what changed and what stayed the same.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>databases</category><category>orm</category><category>stackoverflow</category><category>architecture</category></item><item><title>PHP array_merge vs array_replace vs + Union: The Definitive Guide</title><link>https://gabriel-rodrigues.com/en/blog/php-array-merge-replace-union-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/php-array-merge-replace-union-then-vs-now/</guid><description>My 2016 Stack Overflow answer untangled PHP array merging confusion. In 2026, the spread operator simplified everything.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>stackoverflow</category><category>arrays</category><category>web-development</category></item><item><title>Calculating Age in PHP: DateTime::diff Then and Now</title><link>https://gabriel-rodrigues.com/en/blog/php-calculate-age-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/php-calculate-age-then-vs-now/</guid><description>From a 2015 Stack Overflow answer on calculating age with PHP DateTime to 2026 — the same approach still works, but Carbon and timezone awareness changed the game.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>datetime</category><category>stackoverflow</category><category>web-development</category></item><item><title>PHP Date and Weekend Check: From date(&quot;w&quot;) to DateTimeImmutable</title><link>https://gabriel-rodrigues.com/en/blog/php-date-weekend-check-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/php-date-weekend-check-then-vs-now/</guid><description>From a 2015 Stack Overflow answer about checking if a date falls on a weekend in PHP to the modern era of DateTimeImmutable, Carbon, and locale-aware calendars.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>datetime</category><category>stackoverflow</category><category>web-development</category></item><item><title>PHP Namespaces and Autoload: From PSR-0 to Modern PHP</title><link>https://gabriel-rodrigues.com/en/blog/php-namespaces-autoload-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/php-namespaces-autoload-then-vs-now/</guid><description>From a 2015 Stack Overflow answer explaining PHP namespaces and autoloading to the PSR-4, Composer-driven, type-safe PHP 8.x world of 2026.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>stackoverflow</category><category>architecture</category><category>best-practices</category></item><item><title>PHP Number to Words in Portuguese: From Custom Functions to Intl</title><link>https://gabriel-rodrigues.com/en/blog/php-number-to-words-portuguese-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/php-number-to-words-portuguese-then-vs-now/</guid><description>My Stack Overflow answer built a recursive PHP function to spell numbers in Portuguese. In 2026, PHP intl and JS Intl.NumberFormat handle it natively.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>localization</category><category>stackoverflow</category><category>portuguese</category></item><item><title>PHP Read CSV Files: From fgetcsv() Headaches to Modern Libraries</title><link>https://gabriel-rodrigues.com/en/blog/php-read-csv-files-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/php-read-csv-files-then-vs-now/</guid><description>My 2015 Stack Overflow answer showed how to read CSV in PHP with fgetcsv(). In 2026, League\Csv and generators handle the edge cases that raw functions miss.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>csv</category><category>stackoverflow</category><category>data</category></item><item><title>PHP Threading: From pthreads to Fibers, ReactPHP, and Beyond</title><link>https://gabriel-rodrigues.com/en/blog/php-threading-pthreads-fibers-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/php-threading-pthreads-fibers-then-vs-now/</guid><description>From a Stack Overflow question about PHP threading with pthreads to the modern landscape of PHP 8.1 Fibers, ReactPHP, Amp, and FrankenPHP in 2026.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>concurrency</category><category>stackoverflow</category><category>architecture</category></item><item><title>PHPMailer to Transactional Email Services: How We Stopped Fighting SMTP</title><link>https://gabriel-rodrigues.com/en/blog/phpmailer-transactional-email-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/phpmailer-transactional-email-then-vs-now/</guid><description>From a 2016 Stack Overflow answer on PHPMailer SMTP setup to the transactional email API era of 2026 — why raw SMTP is almost never the right choice anymore.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>email</category><category>stackoverflow</category><category>tools</category></item><item><title>Pick List / Dual Listbox: From jQuery Sortable to Headless Drag-and-Drop</title><link>https://gabriel-rodrigues.com/en/blog/pick-list-dual-listbox-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/pick-list-dual-listbox-then-vs-now/</guid><description>My Stack Overflow answer about building a dual listbox pick list scored 5 upvotes. In 2026, headless UI libraries and the native drag-and-drop API make this pattern accessible by default.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>ui</category><category>ux</category><category>javascript</category><category>stackoverflow</category></item><item><title>Progress Bar with AJAX and PHP: From Polling to Streams</title><link>https://gabriel-rodrigues.com/en/blog/progress-bar-ajax-php-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/progress-bar-ajax-php-then-vs-now/</guid><description>My 2015 Stack Overflow question about real-time progress bars used AJAX polling. In 2026, Server-Sent Events and ReadableStream do it natively.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>javascript</category><category>ajax</category><category>stackoverflow</category></item><item><title>Removing CSS with jQuery to Modern Dynamic Styles</title><link>https://gabriel-rodrigues.com/en/blog/remove-css-jquery-dynamic-styles-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/remove-css-jquery-dynamic-styles-then-vs-now/</guid><description>My Stack Overflow answer showed jQuery .css() and .removeAttr(&quot;style&quot;) tricks. In 2026, classList, CSS custom properties, and CSSStyleSheet API handle dynamic styles natively.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>javascript</category><category>css</category><category>jquery</category><category>stackoverflow</category></item><item><title>Removing Duplicate Words from a String in PHP: Then vs Now</title><link>https://gabriel-rodrigues.com/en/blog/remove-duplicate-words-string-php-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/remove-duplicate-words-string-php-then-vs-now/</guid><description>My Stack Overflow answer used explode + array_unique + implode to deduplicate words. In 2026, the same pipeline still works — plus regex backreferences and modern alternatives.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>php</category><category>strings</category><category>stackoverflow</category><category>algorithms</category></item><item><title>Rewrite vs Incremental Improvement: The Question Every Team Faces</title><link>https://gabriel-rodrigues.com/en/blog/rewrite-vs-incremental-improvement-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/rewrite-vs-incremental-improvement-then-vs-now/</guid><description>From a 2015 Stack Overflow answer about rewriting billing software to the strangler fig reality of 2026 — when to rewrite, when to improve, and why the answer is usually both.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>architecture</category><category>stackoverflow</category><category>engineering-management</category><category>best-practices</category></item><item><title>Show/Hide Divs with Radio Buttons: CSS :has() Replaces JS</title><link>https://gabriel-rodrigues.com/en/blog/show-hide-radio-buttons-css-has-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/show-hide-radio-buttons-css-has-then-vs-now/</guid><description>My 2015 SO answer used jQuery to show/hide divs based on radio button selection. CSS :has() does this with zero JavaScript in 2026.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>html</category><category>css</category><category>javascript</category><category>stackoverflow</category></item><item><title>SVG Explained: From XML Curiosity to First-Class Web Citizen</title><link>https://gabriel-rodrigues.com/en/blog/svg-explained-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/svg-explained-then-vs-now/</guid><description>From a 2015 Stack Overflow answer explaining what SVG is to the component-driven, optimized SVG workflows of 2026 — how vector graphics won the web.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>svg</category><category>html</category><category>stackoverflow</category><category>graphics</category></item><item><title>Xcode Testing Without a Paid Developer License</title><link>https://gabriel-rodrigues.com/en/blog/xcode-testing-without-paid-license-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/xcode-testing-without-paid-license-then-vs-now/</guid><description>My 2015 SO answer explained the $99/year barrier to device testing. In 2026, free provisioning has been standard since Xcode 7.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>ios</category><category>xcode</category><category>stackoverflow</category><category>swift</category></item><item><title>The Year 2038 Bug: What I Explained in 2015 and What Actually Happened</title><link>https://gabriel-rodrigues.com/en/blog/year-2038-bug-then-vs-now/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/year-2038-bug-then-vs-now/</guid><description>In 2015, I wrote a Stack Overflow answer about the Y2038 problem. Twelve years later, here is what the industry fixed — and what is still broken.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><category>systems</category><category>stackoverflow</category><category>history</category><category>unix</category></item><item><title>10 JavaScript Patterns I Learned from 300+ Stack Overflow Answers</title><link>https://gabriel-rodrigues.com/en/blog/javascript-patterns-stackoverflow/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/javascript-patterns-stackoverflow/</guid><description>Real patterns from real questions — DOM performance, debounce, clipboard, file uploads, and more. Each one taught me something I still use today.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><category>javascript</category><category>stackoverflow</category><category>patterns</category><category>web development</category></item><item><title>Shareable Brand URLs with KV Caching and XSS Hardening</title><link>https://gabriel-rodrigues.com/en/blog/shareable-brand-urls/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/shareable-brand-urls/</guid><description>How I added branded shareable links to Company Canvas — with Cloudflare KV caching to cut API costs and a security fix I almost missed.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><category>cloudflare</category><category>security</category><category>canvas</category><category>architecture</category></item><item><title>Building Story Animations That Tell What a Company Does</title><link>https://gabriel-rodrigues.com/en/blog/story-driven-animations/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/story-driven-animations/</guid><description>How I designed four new Three.js animation styles that turn brand keywords into visual narratives — from cinematic captions to interactive star maps.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><category>three.js</category><category>canvas</category><category>creative-coding</category><category>ai</category></item><item><title>AI-Powered Frontend: Shipping Claude-Generated Code to Production</title><link>https://gabriel-rodrigues.com/en/blog/ai-powered-frontend/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/ai-powered-frontend/</guid><description>Practical lessons from using Claude API as a backend service — prompt engineering, structured output, error handling, and the Worker proxy pattern.</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude</category><category>cloudflare</category><category>architecture</category></item><item><title>Building a Canvas Animation Generator with AI</title><link>https://gabriel-rodrigues.com/en/blog/building-canvas-generator/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/building-canvas-generator/</guid><description>How I built Company Canvas — a tool that turns any company name into a living brand animation using Claude AI and Three.js.</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><category>three.js</category><category>ai</category><category>canvas</category><category>project</category></item><item><title>From Side Project to Micro-Product: Adding Payments to a Portfolio Site</title><link>https://gabriel-rodrigues.com/en/blog/from-idea-to-product/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/from-idea-to-product/</guid><description>How I turned a portfolio showcase into a revenue-generating micro-product with Stripe, versioning, and a $1 price point.</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><category>stripe</category><category>product</category><category>cloudflare</category><category>business</category></item><item><title>Scaling a Micro-Product with Strategic Skills: The Company Canvas Toolkit</title><link>https://gabriel-rodrigues.com/en/blog/scaling-with-skills/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/scaling-with-skills/</guid><description>How I built 10 reusable AI-assisted skills to systematically iterate Company Canvas from MVP to polished product — covering security, testing, caching, analytics, pricing, and more.</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><category>product</category><category>ai</category><category>architecture</category><category>developer-tools</category></item><item><title>Hello World</title><link>https://gabriel-rodrigues.com/en/blog/hello-world/</link><guid isPermaLink="true">https://gabriel-rodrigues.com/en/blog/hello-world/</guid><description>Welcome to my blog! A brief introduction about what to expect here.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><category>intro</category><category>web development</category></item></channel></rss>