<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Marc Santos - Blog]]></title><description><![CDATA[Latest posts from Marc Santos on software engineering, product development, and photography experiments.]]></description><link>https://marcsantos.com</link><generator>GatsbyJS</generator><lastBuildDate>Mon, 01 Jun 2026 23:35:14 GMT</lastBuildDate><atom:link href="https://marcsantos.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><item><title><![CDATA[Disqus to Giscus in Gatsby]]></title><description><![CDATA[I ran Disqus on this site for years, and it did its job. Comments appeared, people used them occasionally, and I didn't have to think about it much. That stability was valuable, but it wasn't enough…]]></description><link>https://marcsantos.com/blog/2026/05/disqus-to-giscus-in-gatsby</link><guid isPermaLink="false">https://marcsantos.com/blog/2026/05/disqus-to-giscus-in-gatsby</guid><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><content:encoded>I ran Disqus on this site for years, and it did its job. Comments appeared, people used them occasionally, and I didn&apos;t have to think about it much. That stability was valuable, but it wasn&apos;t enough…</content:encoded></item><item><title><![CDATA[Masonry Grid Implementation]]></title><description><![CDATA[Making photo galleries feel natural I wanted a cleaner way to browse photos without forcing every image into the same height.

A regular CSS grid looked fine in mockups, but it fell apart once I mixed…]]></description><link>https://marcsantos.com/blog/2026/05/masonry-grid-implementation</link><guid isPermaLink="false">https://marcsantos.com/blog/2026/05/masonry-grid-implementation</guid><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><content:encoded>Making photo galleries feel natural I wanted a cleaner way to browse photos without forcing every image into the same height.

A regular CSS grid looked fine in mockups, but it fell apart once I mixed…</content:encoded></item><item><title><![CDATA[Japan: A Practical 14-Day Itinerary]]></title><description><![CDATA[Planning a 14-day Japan trip eventually turned into train schedules, hotel check-ins, reservation windows, and a pinned map that kept growing. This was our trip: April 29 to May 12, 2026, flying into…]]></description><link>https://marcsantos.com/blog/2026/04/japan-14-day-itinerary</link><guid isPermaLink="false">https://marcsantos.com/blog/2026/04/japan-14-day-itinerary</guid><pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate><content:encoded>Planning a 14-day Japan trip eventually turned into train schedules, hotel check-ins, reservation windows, and a pinned map that kept growing. This was our trip: April 29 to May 12, 2026, flying into…</content:encoded></item><item><title><![CDATA[Disqus in Gatsby]]></title><description><![CDATA[I moved away from Blogger in October 2016 and had no comment capability for a while. I added Disqus in May 2020, and this post is a retrospective of how I implemented it. My goals were pretty specific…]]></description><link>https://marcsantos.com/blog/2026/04/disqus-in-gatsby</link><guid isPermaLink="false">https://marcsantos.com/blog/2026/04/disqus-in-gatsby</guid><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate><content:encoded>I moved away from Blogger in October 2016 and had no comment capability for a while. I added Disqus in May 2020, and this post is a retrospective of how I implemented it. My goals were pretty specific…</content:encoded></item><item><title><![CDATA[Beat Docs Drift]]></title><description><![CDATA[I use npm run docs:check as a lightweight guardrail against documentation drift. Under the hood it's one script: node scripts/check-docs.js. I wrote it after the third time I found a broken file…]]></description><link>https://marcsantos.com/blog/2026/03/beat-docs-drift</link><guid isPermaLink="false">https://marcsantos.com/blog/2026/03/beat-docs-drift</guid><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><content:encoded>I use npm run docs:check as a lightweight guardrail against documentation drift. Under the hood it&apos;s one script: node scripts/check-docs.js. I wrote it after the third time I found a broken file…</content:encoded></item><item><title><![CDATA[Travel Map Build]]></title><description><![CDATA[It was supposed to be simple I wanted one thing: a map showing where my photos were taken. One pin per location, nothing clever, no surprise API bills at the end of the month.

Then I actually started…]]></description><link>https://marcsantos.com/blog/2026/03/travel-map-build</link><guid isPermaLink="false">https://marcsantos.com/blog/2026/03/travel-map-build</guid><pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate><content:encoded>It was supposed to be simple I wanted one thing: a map showing where my photos were taken. One pin per location, nothing clever, no surprise API bills at the end of the month.

Then I actually started…</content:encoded></item><item><title><![CDATA[Fifteen Years In (and Counting)]]></title><description><![CDATA[So… what’s the point of all this? Honestly, it started small.

I wanted my own personalized @ email address, and this website became a side effect.

Looking back at more than a decade of iterations…]]></description><link>https://marcsantos.com/blog/2026/03/fifteen-years-in-and-counting</link><guid isPermaLink="false">https://marcsantos.com/blog/2026/03/fifteen-years-in-and-counting</guid><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate><content:encoded>So… what’s the point of all this? Honestly, it started small.

I wanted my own personalized @ email address, and this website became a side effect.

Looking back at more than a decade of iterations…</content:encoded></item></channel></rss>