<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Cards on boulder dan</title>
    <link>https://boulderhopkins.com/tags/cards/</link>
    <description>Recent content in Cards on boulder dan</description>
    <generator>Hugo -- 0.152.2</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 21 Jul 2026 09:00:00 -0600</lastBuildDate>
    <atom:link href="https://boulderhopkins.com/tags/cards/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Meld: A Score Keeper for Game Night</title>
      <link>https://boulderhopkins.com/posts/2026-07-21-meld-a-score-keeper-for-game-night/</link>
      <pubDate>Tue, 21 Jul 2026 09:00:00 -0600</pubDate>
      <guid>https://boulderhopkins.com/posts/2026-07-21-meld-a-score-keeper-for-game-night/</guid>
      <description>&lt;p&gt;Every game night in this house ends the same way: somebody grabs the nearest envelope, draws a wobbly grid on the back of it, and we keep score there until the columns stop lining up. Then somebody asks who won last time and nobody knows.&lt;/p&gt;
&lt;p&gt;So I built &lt;strong&gt;Meld&lt;/strong&gt;, an iOS score keeper for card and board games. It&amp;rsquo;s in TestFlight now, and the first beta &lt;a href=&#34;https://testflight.apple.com/join/FxQT6A5C&#34;&gt;just cleared Apple&amp;rsquo;s review&lt;/a&gt;.&lt;/p&gt;

&lt;style&gt;
  .shots {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: flex-start;
    gap: 1.75rem;
    margin: 2.25rem 0 0.9rem;
  }

  /* Device bezel — brushed titanium edge, deep inner rail, soft table shadow. */
  .shot {
    margin: 0;
    width: 258px;
    max-width: 100%;
    padding: 7px;
    border-radius: 38px;
    background:
      linear-gradient(150deg, #6e6e75 0%, #2b2b30 18%, #111114 48%, #2b2b30 82%, #77777e 100%);
    box-shadow:
      0 22px 45px rgba(0, 0, 0, 0.26),
      0 6px 14px rgba(0, 0, 0, 0.16),
      inset 0 0 0 1px rgba(255, 255, 255, 0.16);
    transition: transform 0.35s ease, box-shadow 0.35s ease;
  }

  .shot img {
    display: block;
    width: 100%;
    height: auto;
    border-radius: 31px;
    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.6);
  }

  .shot:hover {
    transform: translateY(-5px);
    box-shadow:
      0 32px 60px rgba(0, 0, 0, 0.32),
      0 8px 18px rgba(0, 0, 0, 0.2),
      inset 0 0 0 1px rgba(255, 255, 255, 0.22);
  }

  [data-theme=&#34;dark&#34;] .shot {
    box-shadow:
      0 22px 45px rgba(0, 0, 0, 0.55),
      0 6px 14px rgba(0, 0, 0, 0.35),
      inset 0 0 0 1px rgba(255, 255, 255, 0.2);
  }

  [data-theme=&#34;dark&#34;] .shot:hover {
    box-shadow:
      0 32px 60px rgba(0, 0, 0, 0.62),
      0 8px 18px rgba(0, 0, 0, 0.4),
      inset 0 0 0 1px rgba(255, 255, 255, 0.26);
  }

  /* Hero: one phone, slightly larger. */
  .shots--solo .shot { width: 300px; padding: 8px; border-radius: 44px; }
  .shots--solo .shot img { border-radius: 36px; }

  .shots-caption {
    text-align: center;
    font-size: 0.85rem;
    color: var(--secondary);
    margin: 0 0 2.25rem;
  }

  @media (max-width: 620px) {
    .shots { gap: 1rem; }
    .shot { width: 45%; padding: 4px; border-radius: 24px; }
    .shot img { border-radius: 20px; }
    .shots--solo .shot { width: 72%; padding: 6px; border-radius: 34px; }
    .shots--solo .shot img { border-radius: 28px; }
  }

  @media (prefers-reduced-motion: reduce) {
    .shot, .shot:hover { transition: none; transform: none; }
  }
&lt;/style&gt;

&lt;div class=&#34;shots shots--solo&#34;&gt;
  &lt;figure class=&#34;shot&#34;&gt;
    &lt;img src=&#34;https://boulderhopkins.com/images/meld-board.png&#34; alt=&#34;The Meld scorepad for a game of Spades, showing two teams, four rounds, bids, and a running total&#34;&gt;
  &lt;/figure&gt;
&lt;/div&gt;
&lt;p class=&#34;shots-caption&#34;&gt;The scorepad: two teams, four rounds, bids turned on partway through.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
