<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>From the studio · lhcreative.studio</title>
    <link>https://lhcreative.studio/tech-blog</link>
    <atom:link href="https://lhcreative.studio/tech-blog/feed.xml" rel="self" type="application/rss+xml" />
    <description>Articles from lhcreative.studio.</description>
    <language>en-us</language>
    <item>
      <title>How to build a thought-bubble tooltip with pure CSS</title>
      <link>https://lhcreative.studio/tech-blog/how-to-build-a-thought-bubble-tooltip-with-css</link>
      <guid isPermaLink="true">https://lhcreative.studio/tech-blog/how-to-build-a-thought-bubble-tooltip-with-css</guid>
      <description>A step-by-step CSS tutorial for a tooltip that reads its label from a data attribute, pops up in a rounded bubble, trails off in three little circles and stays clickable, with no JavaScript.</description>
      <category>Coding Tutorials</category>
    </item>
    <item>
      <title>Building night sky effects that know when to sit out</title>
      <link>https://lhcreative.studio/tech-blog/night-sky-effects-that-know-when-to-sit-out</link>
      <guid isPermaLink="true">https://lhcreative.studio/tech-blog/night-sky-effects-that-know-when-to-sit-out</guid>
      <description>How the Night Sky UI Kit&apos;s star cursor, starfield and aurora check the visitor&apos;s device and settings before they draw a single frame.</description>
      <category>Engineering</category>
    </item>
    <item>
      <title>How Romeo learned to answer to its own name</title>
      <link>https://lhcreative.studio/tech-blog/hey-romeo-custom-wake-word</link>
      <guid isPermaLink="true">https://lhcreative.studio/tech-blog/hey-romeo-custom-wake-word</guid>
      <description>Romeo ships a custom-trained Hey Romeo wake word, picks the right model format for your hardware, and hands your voice off to capture without extra clicks.</description>
      <category>AI</category>
    </item>
    <item>
      <title>How our pull requests get an automatic first review</title>
      <link>https://lhcreative.studio/tech-blog/automatic-pull-request-reviews-with-a-cloudflare-worker</link>
      <guid isPermaLink="true">https://lhcreative.studio/tech-blog/automatic-pull-request-reviews-with-a-cloudflare-worker</guid>
      <description>A Cloudflare Worker picks up GitHub pull request webhooks, has Claude review the diff, submits a real GitHub review, and posts the notification into the correct Slack channel for pull requests.</description>
      <category>Agentic development</category>
    </item>
    <item>
      <title>How visitors book a call on our site</title>
      <link>https://lhcreative.studio/tech-blog/how-visitors-book-a-call</link>
      <guid isPermaLink="true">https://lhcreative.studio/tech-blog/how-visitors-book-a-call</guid>
      <description>A look at the site&apos;s booking flow: a custom scheduling component, a small two-route API, and the checks that keep a 60-minute call from being double-booked.</description>
      <category>Studio notes</category>
    </item>
    <item>
      <title>Inside our resumable, review-gated video production pipeline</title>
      <link>https://lhcreative.studio/tech-blog/inside-our-resumable-video-production-pipeline</link>
      <guid isPermaLink="true">https://lhcreative.studio/tech-blog/inside-our-resumable-video-production-pipeline</guid>
      <description>How we built a local seven-step pipeline that turns a history topic into a captioned video, with resumable state, bounded retries, and a human review gate.</description>
      <category>AI</category>
    </item>
  </channel>
</rss>
