<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Claude on Vitor Pontual | The VeePee Hub</title>
    <link>https://vitorpontual.com/tags/claude/</link>
    <description>Recent content in Claude on Vitor Pontual | The VeePee Hub</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 04 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://vitorpontual.com/tags/claude/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>VeePeenini, Part 7: What&#39;s Next</title>
      <link>https://vitorpontual.com/posts/veepeenini-7-whats-next/</link>
      <pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://vitorpontual.com/posts/veepeenini-7-whats-next/</guid>
      <description>&lt;p&gt;Everything in the first six parts was me building against a deadline. This part is the opposite: the build is done, and now I wait for the only test that matters. The World Cup starts on June 11. Until a real match kicks off with my friends all logged in at once, a lot of what I built is a well-reasoned guess.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what I&amp;rsquo;m actually watching for.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://vitorpontual.com/images/projects/veepeenini/pack-opening.png&#34; alt=&#34;Opening a pack&#34;&gt;&#xA;&lt;em&gt;Ripping open a pack. The build is done; the tournament is the test.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>VeePeenini, Part 6: Quality of Life</title>
      <link>https://vitorpontual.com/posts/veepeenini-6-quality-of-life/</link>
      <pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://vitorpontual.com/posts/veepeenini-6-quality-of-life/</guid>
      <description>&lt;p&gt;With the game fair and the lounge live, the rest of the work was quality of life. None of it is headline material. All of it decides whether the app earns a spot on the home screen or gets swiped off it. This is the stuff I find most satisfying to get right, because it&amp;rsquo;s invisible when it works and grating when it doesn&amp;rsquo;t.&lt;/p&gt;&#xA;&lt;h2 id=&#34;push-notifications-and-an-app-icon-badge&#34;&gt;Push notifications and an app-icon badge&lt;/h2&gt;&#xA;&lt;p&gt;A trade is a social act. Someone makes you an offer and then waits. If you don&amp;rsquo;t know it&amp;rsquo;s there, the whole loop stalls. So the app got web push: you get pinged when someone offers, counters, accepts, or declines a trade. And the installed app icon carries a number badge, the same red dot you know from every other app, that works even while the app is closed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VeePeenini, Part 5: Going Live</title>
      <link>https://vitorpontual.com/posts/veepeenini-5-going-live/</link>
      <pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://vitorpontual.com/posts/veepeenini-5-going-live/</guid>
      <description>&lt;p&gt;The last stretch before kickoff was about one feeling: when a match is on, the app should feel like everyone is in the same room. The album is a between-matches thing. The lounge is a during-the-match thing, and it needed real reasons to be open while a game is playing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;half-drops&#34;&gt;Half-drops&lt;/h2&gt;&#xA;&lt;p&gt;The core new lever is half-drops. During each half of a live match, everyone can claim one free card, but only from inside the lounge, and only while that half is actually running. Miss the window and it&amp;rsquo;s gone. Two cards a match, max. It rewards being there, live, with the group.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VeePeenini, Part 4: Correctness Before Kickoff</title>
      <link>https://vitorpontual.com/posts/veepeenini-4-correctness-before-kickoff/</link>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://vitorpontual.com/posts/veepeenini-4-correctness-before-kickoff/</guid>
      <description>&lt;p&gt;With the first match a few days out, my priorities flipped. Up to now the question had been &amp;ldquo;what should this do next.&amp;rdquo; Now it was &amp;ldquo;can I promise this won&amp;rsquo;t lose anyone&amp;rsquo;s cards or mis-grade a prediction.&amp;rdquo; Those are different jobs. The first is additive and fun. The second is paranoid and quiet, and it&amp;rsquo;s the one that decides whether a group of friends still trusts the app in week three.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VeePeenini, Part 3: Launch and the Long Tail of Data</title>
      <link>https://vitorpontual.com/posts/veepeenini-3-launch-and-the-long-tail/</link>
      <pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate>
      <guid>https://vitorpontual.com/posts/veepeenini-3-launch-and-the-long-tail/</guid>
      <description>&lt;p&gt;The day after launch, one of my friends sent me a message: a group on the bracket was showing the wrong teams. Not a crash, not an error page. Just quietly, confidently wrong. This is exactly the kind of bug you only catch once real people are looking, because they know the tournament better than your test data does.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-bug-that-was-really-two-files-arguing&#34;&gt;The bug that was really two files arguing&lt;/h2&gt;&#xA;&lt;p&gt;The group letters were wrong on the bracket but right everywhere the actual fixtures were involved. When I dug in with Claude, the cause was almost funny: two different files in the codebase each held their own hardcoded copy of which team is in which group, and over a week of changes they had drifted apart. Nine of the twelve groups had at least one wrong assignment in one of the files. The database, the actual source of truth, had been correct the whole time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VeePeenini, Part 2: Making It Real</title>
      <link>https://vitorpontual.com/posts/veepeenini-2-making-it-real/</link>
      <pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate>
      <guid>https://vitorpontual.com/posts/veepeenini-2-making-it-real/</guid>
      <description>&lt;p&gt;By the end of day one VeePeenini ran. That is a very different thing from being ready to put in front of people I actually like. The next two days were about the unglamorous distance between those two states, and most of it was product work, not new features.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-auth-reckoning&#34;&gt;The auth reckoning&lt;/h2&gt;&#xA;&lt;p&gt;My first auth choice was magic links. Click a link in your email, you&amp;rsquo;re in. Clean, no passwords to manage. Except it broke the moment the app went behind a Cloudflare Tunnel. The verification token is tied to the host that issued it, and the proxied host didn&amp;rsquo;t match, so every link came back invalid. I spent a little time poking at it and then made a product call: this is a closed group of about a dozen people I know personally. I don&amp;rsquo;t need self-serve signup. I&amp;rsquo;ll provision the accounts myself and hand out passwords.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VeePeenini, Part 1: The Idea and Day One</title>
      <link>https://vitorpontual.com/posts/veepeenini-1-the-idea-and-day-one/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      <guid>https://vitorpontual.com/posts/veepeenini-1-the-idea-and-day-one/</guid>
      <description>&lt;p&gt;The idea showed up on a plane. I was flying back from Las Vegas on May 24 with a few empty hours and nothing to do, and I started sketching out a World Cup app for my friends. The tournament kicks off June 11, so I&amp;rsquo;d handed myself a little under three weeks. That&amp;rsquo;s exactly the kind of deadline that forces you to scope hard and skip everything that doesn&amp;rsquo;t matter.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
