<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Philip Ang</title>
    <link>https://portfolio-fawn-zeta-lj36yqwhax.vercel.app</link>
    <description>Software engineer building playful, useful things for the web</description>
    <language>en</language>
    <item>
      <title>What five years of on-call taught me about writing logs</title>
      <link>https://portfolio-fawn-zeta-lj36yqwhax.vercel.app/blog/what-five-years-of-on-call-taught-me-about-writing-logs</link>
      <guid isPermaLink="true">https://portfolio-fawn-zeta-lj36yqwhax.vercel.app/blog/what-five-years-of-on-call-taught-me-about-writing-logs</guid>
      <pubDate>Tue, 11 Aug 2026 09:00:00 GMT</pubDate>
      <description>The log line you need at three in the morning is never the one you wrote at three in the afternoon. Some rules I now follow without arguing.</description>
    </item>
    <item>
      <title>A slug is a decision, not a derivation</title>
      <link>https://portfolio-fawn-zeta-lj36yqwhax.vercel.app/blog/a-slug-is-a-decision-not-a-derivation</link>
      <guid isPermaLink="true">https://portfolio-fawn-zeta-lj36yqwhax.vercel.app/blog/a-slug-is-a-decision-not-a-derivation</guid>
      <pubDate>Sat, 20 Jun 2026 09:00:00 GMT</pubDate>
      <description>Deriving a URL from a title looks like a pure function. It is actually a small pile of product decisions wearing a regular expression.</description>
    </item>
    <item>
      <title>Springs beat easing curves for interface motion</title>
      <link>https://portfolio-fawn-zeta-lj36yqwhax.vercel.app/blog/springs-beat-easing-curves-for-interface-motion</link>
      <guid isPermaLink="true">https://portfolio-fawn-zeta-lj36yqwhax.vercel.app/blog/springs-beat-easing-curves-for-interface-motion</guid>
      <pubDate>Sat, 02 May 2026 09:00:00 GMT</pubDate>
      <description>A duration and a bezier curve describe how an animation looks. A spring describes how an object behaves. That difference shows up everywhere once you notice it.</description>
    </item>
    <item>
      <title>Why I stopped reaching for an ORM abstraction layer</title>
      <link>https://portfolio-fawn-zeta-lj36yqwhax.vercel.app/blog/why-i-stopped-reaching-for-an-orm-abstraction-layer</link>
      <guid isPermaLink="true">https://portfolio-fawn-zeta-lj36yqwhax.vercel.app/blog/why-i-stopped-reaching-for-an-orm-abstraction-layer</guid>
      <pubDate>Sat, 14 Mar 2026 09:00:00 GMT</pubDate>
      <description>Every project I have worked on eventually grew a repository layer on top of its ORM. Every one of them regretted it. Here is what I do instead.</description>
    </item>
  </channel>
</rss>