<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blogs on nuteo.info</title><link>https://nuteo.info/en/blog/</link><description>Recent content in Blogs on nuteo.info</description><generator>Hugo</generator><language>en</language><copyright>© 2026 Nuteo</copyright><lastBuildDate>Mon, 03 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://nuteo.info/en/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Postmortem: the day Postgres took down production</title><link>https://nuteo.info/en/blog/postmortem-postgres-outage/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><guid>https://nuteo.info/en/blog/postmortem-postgres-outage/</guid><description>&lt;h1 id="postmortem-the-day-postgres-took-down-production"&gt;Postmortem: the day Postgres took down production&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: A missing index on a foreign key column, combined with a cron
job running during peak hours, caused a 47-minute outage on a billing API.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="timeline-all-times-utc"&gt;Timeline (all times UTC)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;14:00&lt;/strong&gt; — Cron job starts: &lt;code&gt;cleanup_old_invoices.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;14:02&lt;/strong&gt; — Customer reports slow checkout&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;14:05&lt;/strong&gt; — PagerDuty alert: API latency p99 &amp;gt; 5s&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;14:08&lt;/strong&gt; — On-call engineer (me) opens laptop&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;14:14&lt;/strong&gt; — Identify: Postgres CPU 100%, hundreds of &lt;code&gt;DELETE&lt;/code&gt; queries waiting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;14:22&lt;/strong&gt; — Kill the cron job manually → queries drain in ~30s&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;14:25&lt;/strong&gt; — Service recovering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;14:47&lt;/strong&gt; — Full recovery, replication caught up&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Total impact&lt;/strong&gt;: 47 minutes of degraded service, ~120 failed transactions.&lt;/p&gt;</description></item><item><title>Welcome to nuteo.info</title><link>https://nuteo.info/en/blog/welcome/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><guid>https://nuteo.info/en/blog/welcome/</guid><description>&lt;h1 id="-welcome"&gt;👋 Welcome&lt;/h1&gt;
&lt;p&gt;The site is live. The design works. The content pipeline is AI-assisted.
Time to explain what this is and why.&lt;/p&gt;
&lt;h2 id="whats-working"&gt;What&amp;rsquo;s working&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;✅ Hugo + custom theme (dark by default, gradient hero)&lt;/li&gt;
&lt;li&gt;✅ Bilingual: TH + EN, switchable from the header&lt;/li&gt;
&lt;li&gt;✅ Sections: &lt;a href="https://nuteo.info/en/work/"&gt;Work&lt;/a&gt;, &lt;a href="https://nuteo.info/en/guides/"&gt;Guides&lt;/a&gt;, &lt;a href="https://nuteo.info/en/tools/"&gt;Tools&lt;/a&gt;, &lt;a href="https://nuteo.info/en/blog/"&gt;Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;✅ RSS, sitemap, OpenGraph basics&lt;/li&gt;
&lt;li&gt;✅ Git-tracked for version control&lt;/li&gt;
&lt;li&gt;✅ Deployed via Docker + Caddy, zero-downtime&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="whats-next"&gt;What&amp;rsquo;s next&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔍 Full-text search (Pagefind)&lt;/li&gt;
&lt;li&gt;💬 Comments via Giscus (GitHub Discussions)&lt;/li&gt;
&lt;li&gt;📊 Analytics (Plausible — privacy-friendly)&lt;/li&gt;
&lt;li&gt;📝 More guides, more postmortems&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-ai-experiment-in-one-paragraph"&gt;The AI experiment, in one paragraph&lt;/h2&gt;
&lt;p&gt;Every piece of content on this site was drafted by AI.
Every line of theme CSS was written by AI. Every Docker config, every Caddyfile,
every deploy script. I reviewed and edited. I made decisions. But the typing? AI.&lt;/p&gt;</description></item></channel></rss>