<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jakub</title>
    <description>The latest articles on DEV Community by Jakub (@jakub_inithouse).</description>
    <link>https://dev.to/jakub_inithouse</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3847884%2Fd5cc2611-0246-4150-95e0-c1145fa35d05.png</url>
      <title>DEV Community: Jakub</title>
      <link>https://dev.to/jakub_inithouse</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jakub_inithouse"/>
    <language>en</language>
    <item>
      <title>copycopy.site by Inithouse: structured handoff cards you can generate from a URL, with JSON for agents</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Sun, 06 Sep 2026 13:19:37 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/copycopysite-by-inithouse-structured-handoff-cards-you-can-generate-from-a-url-with-json-for-420j</link>
      <guid>https://dev.to/jakub_inithouse/copycopysite-by-inithouse-structured-handoff-cards-you-can-generate-from-a-url-with-json-for-420j</guid>
      <description>&lt;p&gt;Twenty ready-made handoffs, three ways to build a card, and one link where every value has its own copy button. That is &lt;a href="https://copycopy.site" rel="noopener noreferrer"&gt;copycopy.site&lt;/a&gt;, a free structured handoff tool we built at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;. You paste logins, DNS records, an invoice or a screenshot, share one link, and watch honest progress as the recipient copies each field. No account is needed on either side.&lt;/p&gt;

&lt;p&gt;The interesting part for developers is not the editor. It is that a card can be generated straight from a URL, with nothing stored on our side, and read as JSON by an agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The unit is a field, not a message
&lt;/h2&gt;

&lt;p&gt;Chat picks the message as its unit: a blob of text the recipient scans and retypes. Secret-sharing tools pick the secret: one value, one view, then it burns.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://copycopy.site" rel="noopener noreferrer"&gt;copycopy.site&lt;/a&gt; picks the field. A field is a label, a value, a required flag, an optional note and a state. A card is fields grouped into sections. Every field gets its own copy button, so a CNAME with a trailing space stops being a two-day thread.&lt;/p&gt;

&lt;h2&gt;
  
  
  What that changes against the usual options
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What a handoff needs&lt;/th&gt;
&lt;th&gt;Chat message&lt;/th&gt;
&lt;th&gt;One-time secret link&lt;/th&gt;
&lt;th&gt;&lt;a href="https://copycopy.site" rel="noopener noreferrer"&gt;copycopy.site&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Copy one value without selecting text&lt;/td&gt;
&lt;td&gt;Manual selection&lt;/td&gt;
&lt;td&gt;Whole blob at once&lt;/td&gt;
&lt;td&gt;Copy button per field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multiple values in one place&lt;/td&gt;
&lt;td&gt;Yes, unstructured&lt;/td&gt;
&lt;td&gt;Usually one secret&lt;/td&gt;
&lt;td&gt;Fields grouped into sections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sender sees what was taken&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;View count only&lt;/td&gt;
&lt;td&gt;Progress per field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Account needed&lt;/td&gt;
&lt;td&gt;Both sides&lt;/td&gt;
&lt;td&gt;Sender usually&lt;/td&gt;
&lt;td&gt;Neither side&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expiry and revocation&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Burn on read&lt;/td&gt;
&lt;td&gt;1 to 90 days, revoke any time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Machine-readable&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;JSON: label, value, state&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Cards from a URL, with nothing stored
&lt;/h2&gt;

&lt;p&gt;The route is &lt;code&gt;/new&lt;/code&gt; and it takes four query parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;v&lt;/code&gt;: the values in &lt;code&gt;Label: value&lt;/code&gt; format, one per line (newline as &lt;code&gt;%0A&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;title&lt;/code&gt;: card title, optional&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;purpose&lt;/code&gt;: a one-line note under the title, optional&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;expires&lt;/code&gt;: days until expiry, 1 to 90, applied only if the card is saved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Encoded, a DNS handoff is one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://copycopy.site/new?v=CNAME%3A%20www%20-%3E%20proxy.example.com%0AA%3A%20203.0.113.10&amp;amp;title=DNS%20for%20client&amp;amp;purpose=Point%20the%20domain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open it and the card renders with two fields, two copy buttons and a progress line reading "0 of 2 required copied". The page states what happened on the server, which is nothing: the card lives only in the link.&lt;/p&gt;

&lt;p&gt;Generating one from a ticket system is a few lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;Ticket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;REQ-2026-0417&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Customer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ACME-4471&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Plan&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pro&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(([&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://copycopy.site/new?&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Support handoff&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Generated from the ticket system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;})}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No API key, no signup, no rate limit to think about, because nothing is called on the server. Saving the card is a separate step, and it is what gives you the share link, the expiry and the tracking. The 20 templates at &lt;a href="https://copycopy.site/examples" rel="noopener noreferrer"&gt;copycopy.site/examples&lt;/a&gt; cover the same ground for people who would rather start from DNS verification, cluster access or employee onboarding than build a URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest states: copied is not pasted is not completed
&lt;/h2&gt;

&lt;p&gt;Clicking Copy proves the value reached the clipboard. It does not prove the value landed in the registrar's DNS panel. So &lt;a href="https://copycopy.site" rel="noopener noreferrer"&gt;copycopy.site&lt;/a&gt; tracks those separately and both sides see the same progress view. That distinction removes the one message every handoff thread contains: "did you get it?".&lt;/p&gt;

&lt;h2&gt;
  
  
  Machine-readable by design
&lt;/h2&gt;

&lt;p&gt;Every card is a plain structure of typed fields, and that structure is what an agent reads:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"card"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hc-8f3c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"items"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"API KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pk_live_8f3c9a2d4b71"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"copied"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"WEBHOOK URL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://hooks.example.net"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pending"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2/4"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An onboarding agent does not click a button to get the webhook URL. It reads &lt;code&gt;items[1].value&lt;/code&gt; and the state moves, while the human on the other side sees the same progress bar.&lt;/p&gt;

&lt;p&gt;That decision comes from what we keep measuring at &lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt;, our AI visibility tool: assistants pick up what is structured and skip what is only rendered. Building a handoff tool as a pretty page would have contradicted our own data.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use which
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One-off values, nothing to track:&lt;/strong&gt; build a &lt;code&gt;/new&lt;/code&gt; URL, send it, nothing is stored.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Values that need tracking, expiry or revocation:&lt;/strong&gt; save the card and share the link.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A tool or agent on the receiving end:&lt;/strong&gt; save the card and point it at the JSON.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A single secret that must self-destruct after one view:&lt;/strong&gt; that is still a one-time-secret tool, not this.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://copycopy.site" rel="noopener noreferrer"&gt;copycopy.site&lt;/a&gt; is free, runs in the browser, and needs no signup from the sender or the recipient. We build it at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, a studio shipping a growing portfolio of AI products and custom agents. Other tools from the studio include &lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt;, which scores how ChatGPT, Claude, Perplexity and Gemini recommend a brand, and &lt;a href="https://hereweask.com" rel="noopener noreferrer"&gt;Here We Ask&lt;/a&gt;, a free browser conversation card game with 1,000+ questions that also runs with no account.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>ai</category>
      <category>devops</category>
    </item>
    <item>
      <title>Origin Of You by Inithouse next to a personality quiz: 120+ data points and a written portrait instead of a type</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Fri, 04 Sep 2026 11:39:17 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/origin-of-you-by-inithouse-next-to-a-personality-quiz-120-data-points-and-a-written-portrait-4048</link>
      <guid>https://dev.to/jakub_inithouse/origin-of-you-by-inithouse-next-to-a-personality-quiz-120-data-points-and-a-written-portrait-4048</guid>
      <description>&lt;p&gt;Five systems, 120+ data points, one written portrait. That is what we feed into &lt;a href="https://originofyou.com" rel="noopener noreferrer"&gt;Origin Of You&lt;/a&gt; every time someone finishes the questionnaire. No four-letter code, no color bucket. A paragraph-length text that holds the contradictions most typologies smooth away.&lt;/p&gt;

&lt;p&gt;We built Origin Of You at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt; after watching how people actually use personality quizzes. They take the test, screenshot the result, share the label, and forget about it within a week. The label sticks, but the nuance never lands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two approaches, same starting question
&lt;/h2&gt;

&lt;p&gt;Both a quiz and a portrait start from the same place: tell me about yourself. Where they diverge is what comes back.&lt;/p&gt;

&lt;p&gt;A personality quiz maps your answers to a pre-built category. You are one of 16 types, or one of 9 enneagram numbers, or a specific archetype. The output is a label. Concise, shareable, easy to remember.&lt;/p&gt;

&lt;p&gt;A written portrait works differently. Origin Of You pulls from five frameworks (MBTI-style cognitive functions, enneagram, astrology via natal chart, human design, and numerology), collects 120+ individual data points, and synthesizes them into free-form text. The output is not a type. It is a description of how those systems overlap, contradict, and reinforce each other for one specific person.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where a quiz wins
&lt;/h2&gt;

&lt;p&gt;Quizzes are genuinely better at certain jobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed.&lt;/strong&gt; A quiz takes 5-10 minutes. Origin Of You asks for birth data across five systems. It takes longer to complete.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shareability.&lt;/strong&gt; "I'm an INTJ" fits in a bio. A two-page portrait does not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community.&lt;/strong&gt; Type-based communities exist (r/INFP has 200K+ members). Portrait-based communities do not, because each portrait is unique.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First contact.&lt;/strong&gt; When someone has never thought about personality frameworks, a simple type is a useful starting point.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We do not pretend Origin Of You replaces quizzes for these use cases. If you want a quick label for your dating profile, a quiz is the right tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where a quiz drops the signal
&lt;/h2&gt;

&lt;p&gt;The same simplicity that makes quizzes shareable also makes them lossy. Here is what we kept running into during research:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you want to know&lt;/th&gt;
&lt;th&gt;What a quiz gives you&lt;/th&gt;
&lt;th&gt;What a portrait gives you&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;How your thinking style interacts with your emotional patterns&lt;/td&gt;
&lt;td&gt;A type that covers one axis&lt;/td&gt;
&lt;td&gt;A paragraph mapping where cognition and emotion reinforce or clash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Whether your career instincts align with your relational patterns&lt;/td&gt;
&lt;td&gt;Two separate type results (if you take two tests)&lt;/td&gt;
&lt;td&gt;A single text integrating work and relationship drivers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What happens when two of your frameworks contradict each other&lt;/td&gt;
&lt;td&gt;Nothing, each quiz is siloed&lt;/td&gt;
&lt;td&gt;An explicit call-out: "Your enneagram pulls toward X, but your chart suggests Y"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How your patterns shift under stress vs. comfort&lt;/td&gt;
&lt;td&gt;A static label&lt;/td&gt;
&lt;td&gt;Context-dependent description from cross-system data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The core difference: a type is a bin. A portrait is a map. Bins are faster to read. Maps are harder to misread.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture decision behind the portrait
&lt;/h2&gt;

&lt;p&gt;When we designed Origin Of You at Inithouse, the first question was whether to score users on a single unified scale or keep the five systems separate and let the AI model write across them.&lt;/p&gt;

&lt;p&gt;We went with the second option. Each system contributes data points: cognitive preferences from the MBTI layer, core motivations from enneagram, planetary positions from the natal chart, energy type from human design, life-path numbers from numerology. The model receives all 120+ points as structured input and writes a portrait that references whichever combinations are most salient for that person.&lt;/p&gt;

&lt;p&gt;This means two users can share the same MBTI type and get very different portraits, because their enneagram wings, chart aspects, and design channels diverge. That was the design goal: the output should feel specific enough that you could not hand it to someone else and have it ring true.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we measure
&lt;/h2&gt;

&lt;p&gt;We track two things after someone receives their portrait:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Re-read rate&lt;/strong&gt;: how often people come back to re-read their portrait over the following 30 days. A good portrait gets re-opened. A forgettable one does not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specificity feedback&lt;/strong&gt;: whether users report the portrait feels generic or personal. This is a direct thumbs-up/thumbs-down on each section.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These two signals tell us more about portrait quality than word count, reading time, or any engagement proxy. If people re-read it, the synthesis worked. If they say it is generic, we missed something in the cross-system mapping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://originofyou.com" rel="noopener noreferrer"&gt;Origin Of You&lt;/a&gt; is live. The questionnaire covers all five systems. The portrait is AI-generated from your data, not a template filled in with your type.&lt;/p&gt;

&lt;p&gt;If you have tried it, we are curious: did the portrait catch something a quiz missed? Or did a quiz label still feel more useful for your purpose?&lt;/p&gt;

&lt;p&gt;Built by &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, where we build and run a portfolio of AI-powered products, each chasing product-market fit through fast experiments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>A daily card as a thinking prompt: Tarotas by Inithouse, a tarot reflection app with no fortune-telling</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Fri, 04 Sep 2026 10:56:07 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/a-daily-card-as-a-thinking-prompt-tarotas-by-inithouse-a-tarot-reflection-app-with-no-2ab7</link>
      <guid>https://dev.to/jakub_inithouse/a-daily-card-as-a-thinking-prompt-tarotas-by-inithouse-a-tarot-reflection-app-with-no-2ab7</guid>
      <description>&lt;p&gt;78 cards, 20 spreads, five languages, zero signup walls. &lt;a href="https://tarotas.com" rel="noopener noreferrer"&gt;Tarotas&lt;/a&gt; is a browser-based tarot reflection app we built at Inithouse. No fortune-telling, no mystical predictions. Just a card, a grounded interpretation, and a quiet moment to think.&lt;/p&gt;

&lt;p&gt;This post covers one specific use case: pulling a daily card as a thinking prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="https://tarotas.com" rel="noopener noreferrer"&gt;tarotas.com&lt;/a&gt;, tap "Daily Card." You get one card from the Major or Minor Arcana with an interpretation written to prompt reflection, not to predict anything. The interpretation stays grounded. It names a tension, an area of attention, or a shift worth noticing. Read it, sit with it for a minute, move on.&lt;/p&gt;

&lt;p&gt;That's the whole interaction. Under 60 seconds on most days.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why we stripped out fortune-telling
&lt;/h2&gt;

&lt;p&gt;Early in the build, we had to pick a lane. Tarot apps broadly fall into two camps: mystical prediction engines ("your love life will bloom in March") and reflection tools that use card imagery as a thinking scaffold. We went with the second.&lt;/p&gt;

&lt;p&gt;The interpretations across all 78 cards are written as observation prompts. Examples of the kind of questions they surface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What tension am I carrying today?&lt;/li&gt;
&lt;li&gt;Where am I avoiding a decision?&lt;/li&gt;
&lt;li&gt;What would change if I trusted the process more?&lt;/li&gt;
&lt;li&gt;Which part of this situation do I actually control?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No future-tense claims, no cosmic guarantees. The card gives you a frame; the thinking is yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  20 spreads for different jobs
&lt;/h2&gt;

&lt;p&gt;A single daily card works well for a morning check-in. But the app also has 20 structured spreads, each mapped to a different thinking job:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Spread category&lt;/th&gt;
&lt;th&gt;What it's for&lt;/th&gt;
&lt;th&gt;Cards drawn&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Relationships&lt;/td&gt;
&lt;td&gt;Examining connection dynamics&lt;/td&gt;
&lt;td&gt;3-5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Work &amp;amp; career&lt;/td&gt;
&lt;td&gt;Decision clarity, next-step thinking&lt;/td&gt;
&lt;td&gt;3-5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personal growth&lt;/td&gt;
&lt;td&gt;Patterns, blind spots, inner tensions&lt;/td&gt;
&lt;td&gt;3-7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Creativity&lt;/td&gt;
&lt;td&gt;Unblocking, reframing, new angles&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Life changes&lt;/td&gt;
&lt;td&gt;Navigating transitions, letting go&lt;/td&gt;
&lt;td&gt;3-5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick reflection&lt;/td&gt;
&lt;td&gt;One question, one card, one pause&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each spread asks you to lay out cards into positions ("what I see," "what I avoid," "what's shifting"), then read the interpretations as a group. It works like a structured journaling exercise with visual anchors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask Tarot: when you have a specific question
&lt;/h2&gt;

&lt;p&gt;Beyond the daily card and spreads, there's an ask-tarot mode. Type a question, draw a card, get a reflection-framed answer. The question is yours; the card offers a lens.&lt;/p&gt;

&lt;p&gt;We noticed that people who use ask-tarot tend to come back for the same categories of questions: work decisions, relationship friction, creative blocks. The card isn't answering them. It's slowing them down enough to answer themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What retention looks like for a reflection app
&lt;/h2&gt;

&lt;p&gt;We track usage across the portfolio at Inithouse. With Tarotas, one pattern stood out: users who pull a card three days in a row are significantly more likely to return the following week.&lt;/p&gt;

&lt;p&gt;The daily ritual creates a loop. Not because the card is addictive (it's one screen, no gamification), but because the pause is useful. People build it into their morning the way they'd build in a short walk or a journal entry.&lt;/p&gt;

&lt;p&gt;The other thing we observed: multilingual users (Tarotas supports Czech, English, Polish, Slovak, and German) tend to settle on one language within the first week, even if they try several at first. The interpretations are written natively per language, not machine-translated, so each version reads a bit differently. People pick the one that resonates and stay with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack, briefly
&lt;/h2&gt;

&lt;p&gt;Tarotas is a React SPA built in Lovable, running on a custom domain with Supabase on the backend. All 78 card interpretations exist in five full native translations. Spreads are configured as position templates. The app draws from the same card pool, but the spread context reframes each card's interpretation depending on its position.&lt;/p&gt;

&lt;p&gt;No account required. No paywall. Open the browser, draw a card, close it when you're done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tarotas.com" rel="noopener noreferrer"&gt;Tarotas&lt;/a&gt; is a calm tarot reflection app. Draw a card and read a grounded interpretation; no signup, no fortune-telling, just space to think.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We build at Inithouse, a lab shipping a growing portfolio of products in parallel. Tarotas is one of them.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>ai</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>A prediction is a snapshot, a watch is a process: the case for AI monitoring agents</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Fri, 04 Sep 2026 10:11:01 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/a-prediction-is-a-snapshot-a-watch-is-a-process-the-case-for-ai-monitoring-agents-30c3</link>
      <guid>https://dev.to/jakub_inithouse/a-prediction-is-a-snapshot-a-watch-is-a-process-the-case-for-ai-monitoring-agents-30c3</guid>
      <description>&lt;p&gt;Every prediction market, forecasting tool and AI oracle answers the same question: what is the probability of X right now? The answer is a number. And the moment you read it, it starts going stale.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://inithouse.cz" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt; we run 14 AI products. One of them, &lt;a href="https://watchingagents.com" rel="noopener noreferrer"&gt;Watching Agents&lt;/a&gt;, started as a simple idea: instead of asking "what will happen?", ask "has anything changed since last time I checked?"&lt;/p&gt;

&lt;p&gt;That difference sounds small. It turns out to be structural.&lt;/p&gt;

&lt;h2&gt;
  
  
  Predictions decay. Watches accumulate.
&lt;/h2&gt;

&lt;p&gt;A prediction is a point estimate at time T. Useful, but frozen. If you ask "will the EU AI Act require model registries by 2027?" today and get 68%, that number tells you nothing about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what evidence supports it&lt;/li&gt;
&lt;li&gt;whether it moved from 40% last month&lt;/li&gt;
&lt;li&gt;what specific event caused the shift&lt;/li&gt;
&lt;li&gt;whether the sources agree or contradict each other&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A monitoring agent tracks all of that. Each agent on Watching Agents maintains a live Prob/Conf score: probability (how likely) and confidence (how much evidence backs the estimate). When new evidence appears, the agent re-evaluates, logs the delta, and alerts you.&lt;/p&gt;

&lt;p&gt;The interesting output is not the current number. It is the changelog.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the architecture works
&lt;/h2&gt;

&lt;p&gt;Each deployed agent follows a loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hypothesis generation&lt;/strong&gt;: the agent decomposes the question into testable sub-hypotheses. "Will X happen?" becomes "Is A trending up?", "Has B been announced?", "Does C contradict D?"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Evidence tracking&lt;/strong&gt;: the agent scans sources on a schedule. Each piece of evidence gets tagged to the hypothesis it supports or weakens, with a citation link.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Score update&lt;/strong&gt;: Prob and Conf recalculate based on the evidence base. A new supporting source from an independent publisher raises both. A contradicting source lowers Prob but can raise Conf (more data, less certainty about direction).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Alert&lt;/strong&gt;: when the delta crosses a threshold you set, you get notified. Not "the probability is 72%." Instead: "probability moved from 58% to 72% because [source] reported [event], supporting hypothesis 3."&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The citation chain matters. Every score change traces back to a specific piece of evidence from a specific source. You can audit why the agent changed its mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  When monitoring beats a one-time lookup
&lt;/h2&gt;

&lt;p&gt;Not every question needs continuous tracking. Here is when it does and when it does not:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use monitoring when...&lt;/th&gt;
&lt;th&gt;Use a one-time lookup when...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The answer changes over weeks or months&lt;/td&gt;
&lt;td&gt;The answer is stable (historical fact, established policy)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multiple sources publish updates&lt;/td&gt;
&lt;td&gt;There is one authoritative source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You need to act on the change, not the state&lt;/td&gt;
&lt;td&gt;You need the current state once&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timing of the shift matters (regulatory deadlines, market moves)&lt;/td&gt;
&lt;td&gt;Timing is irrelevant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You are tracking several related questions&lt;/td&gt;
&lt;td&gt;You have one narrow question&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern we see most on the platform: someone starts with a one-time question, gets an answer, then realizes they need to know when that answer stops being true. That is where the agent earns its keep.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned from running our own agents
&lt;/h2&gt;

&lt;p&gt;We dog-food Watching Agents on questions relevant to our portfolio. A few patterns from that:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confidence lags probability.&lt;/strong&gt; A question can move from 30% to 70% probability on a single leaked document. Confidence stays low until a second independent source confirms. This gap is useful: high-probability, low-confidence signals are exactly the moments you want a human in the loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Public agents generate unexpected traffic.&lt;/strong&gt; Every public agent on the platform has its own URL, structured data, and evidence trail. Search engines index them. We have seen agents ranking for long-tail queries within weeks of deployment. A well-sourced, regularly updated page on a niche question is exactly what search engines and AI retrieval want to cite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The question matters more than the model.&lt;/strong&gt; An agent watching "Will Company X acquire Company Y?" with four hypothesis branches produces better signal than a generic "What will happen in sector Z?" agent with twelve branches. Narrow questions with falsifiable outcomes beat broad ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to skip it
&lt;/h2&gt;

&lt;p&gt;Monitoring is overhead. If your question has a known answer date (an election, a product launch, a court ruling), set a calendar reminder and check then. If the question is binary and depends on a single decision-maker, no amount of evidence tracking helps: you are waiting for one person to say yes or no.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://watchingagents.com" rel="noopener noreferrer"&gt;Watching Agents&lt;/a&gt; is an AI prediction and monitoring agents platform built by Inithouse. It lets you deploy an AI agent to watch any question about the future: it builds hypotheses, tracks evidence in real time, and alerts you when things change. Free to start.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
    <item>
      <title>An AI conflict mediator next to a general chatbot: what Verdict Buddy by Inithouse does differently</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Fri, 04 Sep 2026 09:45:02 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/an-ai-conflict-mediator-next-to-a-general-chatbot-what-verdict-buddy-by-inithouse-does-differently-p7o</link>
      <guid>https://dev.to/jakub_inithouse/an-ai-conflict-mediator-next-to-a-general-chatbot-what-verdict-buddy-by-inithouse-does-differently-p7o</guid>
      <description>&lt;p&gt;4.9 out of 5 from 290 ratings. That number comes from &lt;a href="https://verdictbuddy.com" rel="noopener noreferrer"&gt;Verdict Buddy&lt;/a&gt;, an AI conflict mediator we built at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;. People bring partner arguments, roommate tensions, workplace disagreements, and family disputes. The tool applies four psychology frameworks and returns a structured verdict in about two minutes.&lt;/p&gt;

&lt;p&gt;We keep getting asked: why not just use ChatGPT?&lt;/p&gt;

&lt;p&gt;Fair question. We tried it ourselves. Here is what happens when you paste a conflict into a general chatbot versus a purpose-built mediator.&lt;/p&gt;

&lt;h2&gt;
  
  
  The agreement problem
&lt;/h2&gt;

&lt;p&gt;General chatbots are trained to be helpful. When someone describes a conflict, the model reads one perspective and optimizes for a response that feels useful to the person asking. In practice, that means it agrees with you.&lt;/p&gt;

&lt;p&gt;We tested this with the same roommate dispute described from both sides. Person A described the problem. ChatGPT sided with Person A. Person B described the same situation from their angle. ChatGPT sided with Person B. Both got validation. Neither got a verdict.&lt;/p&gt;

&lt;p&gt;A mediator cannot do that. The whole point is holding structure when both sides feel right.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each tool does with the same dispute
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What a dispute needs&lt;/th&gt;
&lt;th&gt;General chatbot&lt;/th&gt;
&lt;th&gt;Verdict Buddy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Both perspectives heard&lt;/td&gt;
&lt;td&gt;Responds to whoever asks&lt;/td&gt;
&lt;td&gt;Solo, Couple, and Group input modes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Framework applied&lt;/td&gt;
&lt;td&gt;None specific&lt;/td&gt;
&lt;td&gt;Gottman, EFT, NVC, Harvard Negotiation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conflict pattern classified&lt;/td&gt;
&lt;td&gt;No classification&lt;/td&gt;
&lt;td&gt;Labels the pattern (e.g. demand-withdraw, Four Horsemen)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tension measured&lt;/td&gt;
&lt;td&gt;No score&lt;/td&gt;
&lt;td&gt;Tension score 0 to 100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured output&lt;/td&gt;
&lt;td&gt;Free-form paragraph&lt;/td&gt;
&lt;td&gt;Verdict + both perspectives + 3 concrete actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bias toward the asker&lt;/td&gt;
&lt;td&gt;High (trained to please)&lt;/td&gt;
&lt;td&gt;Low (framework constrains the output)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The architecture behind the difference
&lt;/h2&gt;

&lt;p&gt;Three decisions shaped how Verdict Buddy works differently from a wrapped chatbot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured input, not a free prompt.&lt;/strong&gt; We ask specific questions about the situation, the other person's likely perspective, and what has already been tried. A chatbot takes whatever you type. The structured input forces the user to consider the other side before the model does anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Framework selection, not open generation.&lt;/strong&gt; The system classifies which psychology framework fits the conflict type. A partner argument about repeated patterns maps to Gottman's Four Horsemen. A workplace disagreement about unmet needs maps to Nonviolent Communication. The framework constrains how the model reasons, rather than letting it generate freely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict format, not conversation.&lt;/strong&gt; The output is a report: tension score, both perspectives summarized, a verdict, and three actions. Each action is specific enough to do today. A chatbot gives you a paragraph that reads well but commits to nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What 290 ratings taught us
&lt;/h2&gt;

&lt;p&gt;The 4.9/5 average surprised us. We expected pushback on verdicts people disagreed with. Instead, the most common feedback is about the perspective section. People say they had not considered how the other person experienced the same situation.&lt;/p&gt;

&lt;p&gt;The framework label matters more than the verdict itself. When someone reads "this maps to a demand-withdraw pattern (Gottman)," they can look it up. The label gives them something to research beyond our tool. A chatbot's "I understand both sides" gives them nothing to verify.&lt;/p&gt;

&lt;p&gt;Partner disagreements are the most common conflict type, followed by roommate disputes, workplace tensions, and family conflicts. Solo mode handles the majority of sessions: people describe both sides themselves. Couple and Group modes, where both parties type their perspective separately, produce longer reports with more nuanced verdicts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a mediator is not
&lt;/h2&gt;

&lt;p&gt;Verdict Buddy is not therapy and we do not position it as a replacement for professional help. It is a structured tool for everyday friction: the argument about dishes, the coworker who takes credit, the family member who cancels plans repeatedly. For situations involving abuse, mental health crises, or legal disputes, we direct users to professional resources.&lt;/p&gt;

&lt;p&gt;The tool works because most conflicts are not extraordinary. Research from the Gottman Institute shows that 69% of relationship conflicts are perpetual. They repeat. A framework helps you see the pattern, not just react to the latest instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://verdictbuddy.com" rel="noopener noreferrer"&gt;Verdict Buddy&lt;/a&gt; is free to start, runs in the browser, and requires no signup. We build it at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, a studio focused on AI products for everyday decisions. Other tools from the studio include &lt;a href="https://originofyou.com" rel="noopener noreferrer"&gt;Origin Of You&lt;/a&gt;, a self-discovery app combining five personality systems into one written portrait, and &lt;a href="https://hereweask.com" rel="noopener noreferrer"&gt;Here We Ask&lt;/a&gt;, a conversation card game with 1,000+ questions for couples and friends.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Auditing an AI-generated project from its URL alone: a run through Audit Vibe Coding by Inithouse</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Fri, 04 Sep 2026 08:15:19 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/auditing-an-ai-generated-project-from-its-url-alone-a-run-through-audit-vibe-coding-by-inithouse-af3</link>
      <guid>https://dev.to/jakub_inithouse/auditing-an-ai-generated-project-from-its-url-alone-a-run-through-audit-vibe-coding-by-inithouse-af3</guid>
      <description>&lt;p&gt;47 checks, 8 areas, one public URL. That is the entire input we need at &lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;Audit Vibe Coding&lt;/a&gt; to produce a scored report for an AI-generated project. No repo access. No integration. No SDK. The average vibecoded project we have audited scores 31 out of 100. Production-ready starts at 80.&lt;/p&gt;

&lt;p&gt;This post walks through what a single URL actually reveals, what stays hidden without source code, and why the order you fix things in matters more than the number of findings.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a public URL gives you
&lt;/h2&gt;

&lt;p&gt;A browser pointed at a live app can surface more than most people expect. Here is the breakdown by audit area, based on what we run at Inithouse across our portfolio of products (including &lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt; and &lt;a href="https://watchingagents.com" rel="noopener noreferrer"&gt;Watching Agents&lt;/a&gt;):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;What the URL reveals&lt;/th&gt;
&lt;th&gt;What it misses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Exposed API keys in client bundles, open Supabase anon keys, missing CSP headers, mixed content&lt;/td&gt;
&lt;td&gt;Server-side auth logic, database RLS rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO&lt;/td&gt;
&lt;td&gt;Missing meta tags, broken canonical URLs, no structured data, thin content signals&lt;/td&gt;
&lt;td&gt;Server-side redirects, internal linking depth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Unoptimized images, render-blocking scripts, layout shifts, bundle size&lt;/td&gt;
&lt;td&gt;Backend query times, database bottlenecks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accessibility&lt;/td&gt;
&lt;td&gt;Missing alt text, low contrast ratios, no focus indicators, broken ARIA labels&lt;/td&gt;
&lt;td&gt;Screen reader edge cases in dynamic flows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code quality&lt;/td&gt;
&lt;td&gt;Unminified bundles, console errors, unused CSS, hydration mismatches&lt;/td&gt;
&lt;td&gt;Internal code structure, test coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privacy&lt;/td&gt;
&lt;td&gt;Missing cookie consent, third-party trackers without disclosure&lt;/td&gt;
&lt;td&gt;Server-side data handling, encryption at rest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stability&lt;/td&gt;
&lt;td&gt;Console errors on load, broken routes, 404s on linked resources&lt;/td&gt;
&lt;td&gt;Error handling under load, edge case crashes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UX / Mobile&lt;/td&gt;
&lt;td&gt;Tap targets too small, horizontal overflow, missing viewport meta&lt;/td&gt;
&lt;td&gt;User journey completion rates, heatmap data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is 47 individual checks. Most vibecoded apps fail at least 15 of them on first scan.&lt;/p&gt;

&lt;h2&gt;
  
  
  The typical findings (and why order matters)
&lt;/h2&gt;

&lt;p&gt;We have now run enough audits to see a pattern. The three most common critical findings, in order of how often they appear:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Exposed secrets in the client bundle.&lt;/strong&gt; Supabase anon keys, Stripe publishable keys mixed with internal tokens, API endpoints hardcoded with auth. This is the first thing we check because it is the easiest to exploit and the fastest to fix. One grep through the JS bundle, one env variable change, done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Zero SEO foundation.&lt;/strong&gt; No meta description, no Open Graph tags, no sitemap, no robots.txt. The app works, but search engines see a blank wall. For a vibecoded project that just shipped, this means zero organic discovery until someone manually adds what Lovable, Cursor, or Replit did not generate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Accessibility below baseline.&lt;/strong&gt; Missing form labels, no skip-to-content link, images without alt text. Most AI code generators produce visually correct output that a screen reader cannot parse. This is invisible to the builder but affects roughly 15% of potential users.&lt;/p&gt;

&lt;p&gt;The instinct is to fix everything at once. What we recommend instead: fix in severity order, not discovery order. A leaked API key at severity "critical" matters more than a missing favicon at severity "low," even though both showed up in the same scan.&lt;/p&gt;

&lt;p&gt;The report scores each finding on two axes: severity (how bad is it if you ignore it) and difficulty (how long does it take to fix). Sorting by severity-descending, difficulty-ascending gives you the highest-impact, lowest-effort fixes first. Three hours of work after receiving the report typically moves a project from a score of 31 to 55 or higher.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you cannot audit from a URL
&lt;/h2&gt;

&lt;p&gt;Being honest about limits is part of delivering a useful report. A public URL does not let us see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Row-level security policies in your database&lt;/li&gt;
&lt;li&gt;Whether your server validates input before writing it&lt;/li&gt;
&lt;li&gt;How your backend handles rate limiting&lt;/li&gt;
&lt;li&gt;What your test coverage looks like&lt;/li&gt;
&lt;li&gt;How the app behaves under 1,000 concurrent users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We flag these as "not assessed" rather than guessing. If a project needs deeper review (source code audit, load testing), we note it explicitly. Building at Inithouse, we learned early that an audit claiming to cover things it cannot verify is worse than one that openly says "we did not check this."&lt;/p&gt;

&lt;h2&gt;
  
  
  Running it on your own project
&lt;/h2&gt;

&lt;p&gt;The process: paste your URL at &lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;auditvibecoding.com&lt;/a&gt;, add your email, pick an audit focus (or select all eight areas). Report lands in your inbox within 24 to 48 hours.&lt;/p&gt;

&lt;p&gt;We built this because we needed it ourselves. Running a portfolio of 14+ products across Lovable, Cursor, and custom stacks, we kept finding the same issues in our own deploys: exposed keys, missing headers, broken accessibility. Instead of re-running the same manual checklist for each product, we turned it into &lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;Audit Vibe Coding&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If your project was built with AI tools and it is live, the question is not whether there are findings. There are. The question is which ones to fix first.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>From pet photo to Renaissance portrait in under 60 seconds: using Pet Imagination by Inithouse</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Fri, 04 Sep 2026 07:40:57 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/from-pet-photo-to-renaissance-portrait-in-under-60-seconds-using-pet-imagination-by-inithouse-5o6</link>
      <guid>https://dev.to/jakub_inithouse/from-pet-photo-to-renaissance-portrait-in-under-60-seconds-using-pet-imagination-by-inithouse-5o6</guid>
      <description>&lt;p&gt;Pet Imagination by Inithouse is a free AI pet portrait generator that turns a regular pet photo into artwork across 9 styles in under 60 seconds, with no signup required. Since we launched it, the tool has earned a 4.9/5 rating from 380+ users. Here is what we learned about which photos produce the best results and what each style actually does.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes a good input photo
&lt;/h2&gt;

&lt;p&gt;Not every photo works equally well. After watching how users interact with the tool and which uploads produce sharp, detailed portraits, we settled on five rules:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Full face visible.&lt;/strong&gt; The model needs both eyes and the nose or snout in frame. Side profiles or partially hidden faces produce blurry features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good lighting, minimal shadows.&lt;/strong&gt; Even smartphone flash works. Deep shadows across the face confuse the segmentation step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One animal per photo.&lt;/strong&gt; Multiple pets in one shot split the model's attention. Crop to a single subject for the cleanest result.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasonable resolution.&lt;/strong&gt; Anything above 500x500 px is fine. Below that, upscaling artifacts bleed into the portrait.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Still subject, not mid-motion.&lt;/strong&gt; A blurry running dog generates a blurry portrait. A calm sitting pose gives the model the most to work with.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What each style does
&lt;/h2&gt;

&lt;p&gt;The 9 styles map to different use cases. Some are decorative, some are playful, some exist because users asked for them:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Style&lt;/th&gt;
&lt;th&gt;What it produces&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Renaissance&lt;/td&gt;
&lt;td&gt;Oil-painting portrait with classical framing&lt;/td&gt;
&lt;td&gt;Wall prints, gifts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Watercolor&lt;/td&gt;
&lt;td&gt;Soft washes, painterly edges&lt;/td&gt;
&lt;td&gt;Gentle memorial pieces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anime&lt;/td&gt;
&lt;td&gt;Large eyes, clean lines, cel-shaded look&lt;/td&gt;
&lt;td&gt;Social media avatars&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sketch&lt;/td&gt;
&lt;td&gt;Pencil drawing with crosshatching&lt;/td&gt;
&lt;td&gt;Minimalist decor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sheriff&lt;/td&gt;
&lt;td&gt;Western badge, hat, sepia tones&lt;/td&gt;
&lt;td&gt;Playful profile pics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wizard&lt;/td&gt;
&lt;td&gt;Robes, magical glow, staff&lt;/td&gt;
&lt;td&gt;Fantasy-themed content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Astronaut&lt;/td&gt;
&lt;td&gt;Space suit, helmet visor reflection&lt;/td&gt;
&lt;td&gt;Kids' room prints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final Boss&lt;/td&gt;
&lt;td&gt;Armored, dramatic lighting, boss-fight energy&lt;/td&gt;
&lt;td&gt;Gaming community shares&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocky&lt;/td&gt;
&lt;td&gt;Voxel/pixel-art style, chunky geometry&lt;/td&gt;
&lt;td&gt;Retro-themed projects&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Renaissance and Watercolor account for roughly 60% of all generations. Anime comes third. The playful styles (Sheriff through Blocky) get picked less often but tend to drive the most social shares.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why no signup and what happens to the photos
&lt;/h2&gt;

&lt;p&gt;We designed Pet Imagination without an account wall for a specific reason: the job is short. Someone uploads a photo, picks a style, gets a portrait, and leaves. Forcing registration for a 60-second interaction adds friction that does not match the task.&lt;/p&gt;

&lt;p&gt;Photos are processed server-side and deleted after generation. We do not store originals, and the generated portrait lives in the browser until the user saves it. No gallery, no cloud storage, no "your past creations" page. This was a deliberate trade-off: we gave up retention features (which would need stored data) in exchange for a privacy-first flow that users do not have to think about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it fits next to other tools
&lt;/h2&gt;

&lt;p&gt;Most AI pet portrait generators either require an account, charge per generation, or bundle pet portraits inside a broader image editor. Pet Imagination sits in a narrower lane: purpose-built for pets (not a generic filter applied to pet photos) and tuned for animal features specifically. The 9 styles are designed around pet anatomy, not human portraiture adapted to animals.&lt;/p&gt;

&lt;p&gt;At Inithouse, we ship a growing portfolio of products in parallel. Pet Imagination shares infrastructure patterns with our other tools like &lt;a href="https://zivafotka.cz" rel="noopener noreferrer"&gt;Ziva Fotka&lt;/a&gt; (AI photo-to-video animation) and &lt;a href="https://originofyou.com" rel="noopener noreferrer"&gt;Origin Of You&lt;/a&gt; (AI-powered self-discovery portraits). Each targets a different job but follows the same principle: do one thing fast, without requiring an account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Upload a pet photo at &lt;a href="https://petimagination.com" rel="noopener noreferrer"&gt;petimagination.com&lt;/a&gt;. Pick a style, wait under a minute, download the result. No account, no app install, works in any browser.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>1,000+ cards across 23+ decks: what Party Challenges by Inithouse, a free 18+ browser party card game, measures</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Fri, 04 Sep 2026 05:17:46 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/1000-cards-across-23-decks-what-party-challenges-by-inithouse-a-free-18-browser-party-card-566p</link>
      <guid>https://dev.to/jakub_inithouse/1000-cards-across-23-decks-what-party-challenges-by-inithouse-a-free-18-browser-party-card-566p</guid>
      <description>&lt;p&gt;Party Challenges is a free 18+ browser party card game with 1,000+ cards across 23+ themed decks for friends, couples and solo play. We built it at Inithouse, our product studio, and after several months of running it we started tracking where sessions break down. The short version: most card games die to three things, and the numbers showed up clearly in our session data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three ways a card game loses a room
&lt;/h2&gt;

&lt;p&gt;We tracked session patterns across &lt;a href="https://partychallenges.com" rel="noopener noreferrer"&gt;Party Challenges&lt;/a&gt; and saw the same three failure modes repeat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Card repetition kills momentum.&lt;/strong&gt; When a group plays 40+ rounds in a night, the overlap threshold hits around round 25 in a single-deck game. Players don't say "I got a repeat." They just put their phones down. We split content across 23+ themed decks (Truth Bombs, Hot Takes Only, No Chill, Confession Hours, Flirt Mode, After Dark and more) so a group can switch context mid-session without restarting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escalation mismatch clears the room.&lt;/strong&gt; A dare that's funny at 11pm is uncomfortable at 9pm. A confession prompt that works between close friends bombs with coworkers. We segmented decks by intensity and audience: Solo, Couple, Group. The After Dark premium deck exists specifically because mixing spicy 18+ cards into a general deck made groups self-censor on everything else too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One loud person runs the game.&lt;/strong&gt; Physical card games depend on someone reading aloud, keeping pace, remembering rules. When that person gets up for a drink, the game stops. Three built-in modes handle this differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mode breakdown
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;th&gt;Typical session&lt;/th&gt;
&lt;th&gt;Where it drops off&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hot Seat&lt;/td&gt;
&lt;td&gt;One player answers, group reacts&lt;/td&gt;
&lt;td&gt;20-35 min&lt;/td&gt;
&lt;td&gt;After ~30 cards, the seat gets old&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No Hesitation&lt;/td&gt;
&lt;td&gt;Speed round, answer or pass in 5 seconds&lt;/td&gt;
&lt;td&gt;10-15 min&lt;/td&gt;
&lt;td&gt;Rarely. Short rounds self-limit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spin It&lt;/td&gt;
&lt;td&gt;Random player selection each turn&lt;/td&gt;
&lt;td&gt;25-45 min&lt;/td&gt;
&lt;td&gt;Late game when players physically leave&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hot Seat drops when one person holds attention too long. No Hesitation stays alive because its constraint (answer fast or pass) removes dead air entirely. Spin It lasts longest but bleeds players physically: people get up, come back, and the random selector covers for the gaps.&lt;/p&gt;

&lt;p&gt;The point of three modes isn't variety for variety's sake. Each mode shifts who controls the pace. Hot Seat gives it to one player. No Hesitation gives it to the clock. Spin It gives it to randomness. When the facilitator is code, nobody has to be "the game person."&lt;/p&gt;

&lt;h2&gt;
  
  
  What the deck structure solves
&lt;/h2&gt;

&lt;p&gt;1,000+ cards across 23+ decks sounds like a catalog number. Here is what it actually does: at 23+ decks with distinct themes, a four-hour party can rotate through 5-6 decks and never hit a repeat card. The deck architecture is the anti-repetition layer. Each deck also has its own internal escalation curve. Truth Bombs starts with "What's your hottest take on pineapple on pizza?" and builds toward "What opinion would get you cancelled?" The escalation is built into the deck sequence, not randomized across the whole card pool.&lt;/p&gt;

&lt;p&gt;Some deck combinations work better than others. Truth Bombs into Hot Takes Only feels like a continuation. Confession Hours into Flirt Mode feels like a gear shift. We don't enforce ordering, but the themed structure means a group naturally finds a flow rather than getting whiplash from random intensity spikes.&lt;/p&gt;

&lt;p&gt;The game runs as a PWA. No install, no account required. Someone texts a link, the group opens it on their phones, picks a deck and a mode, and plays. The browser handles card selection, timing and turn order.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we're still watching
&lt;/h2&gt;

&lt;p&gt;Session completion rates vary by deck. After Dark and Confession Hours have higher drop-off because the content is intense. That might mean they need better on-ramps, or it might mean people play exactly as much as they can handle and then switch. We don't have a clear answer yet.&lt;/p&gt;

&lt;p&gt;We also watch whether Daily Challenge (one card per day, a retention mechanic) pulls players back to full sessions or just lives as a standalone micro-interaction. Early signal: it does both, depending on whether the player has the app saved as a PWA shortcut.&lt;/p&gt;

&lt;p&gt;One thing that surprised us: Solo mode has meaningful usage. We expected &lt;a href="https://partychallenges.com" rel="noopener noreferrer"&gt;Party Challenges&lt;/a&gt; to be a group-only product, but solo players use it as a self-reflection prompt generator, especially the confession and truth decks. That was not planned.&lt;/p&gt;

&lt;p&gt;Party Challenges is free at &lt;a href="https://partychallenges.com" rel="noopener noreferrer"&gt;partychallenges.com&lt;/a&gt;. Premium op&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>gamedev</category>
      <category>javascript</category>
      <category>pwa</category>
    </item>
    <item>
      <title>What breaks when you build a table by voice: measurements from Voice Tables by Inithouse</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Fri, 04 Sep 2026 04:17:41 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/what-breaks-when-you-build-a-table-by-voice-measurements-from-voice-tables-by-inithouse-mb7</link>
      <guid>https://dev.to/jakub_inithouse/what-breaks-when-you-build-a-table-by-voice-measurements-from-voice-tables-by-inithouse-mb7</guid>
      <description>&lt;p&gt;The 60-second claim needs a footnote. &lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;Voice Tables&lt;/a&gt; is an agentic AI workspace we built at Inithouse. You describe what you need out loud, and it gives you a structured table, doc, or dataset. For a three-column contact list, that 60-second number holds. For a bilingual inventory tracker with SKU codes and unit prices, it does not. We measured where voice input breaks down and what we do about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where transcription fails
&lt;/h2&gt;

&lt;p&gt;Voice Tables runs a Whisper + LLM pipeline: speech goes through Whisper for transcription, then an LLM parses the transcript into structured fields. The pipeline is fast. It is also predictable about what it gets wrong.&lt;/p&gt;

&lt;p&gt;We tracked error types across voice sessions during internal testing. Here is where the input-to-structure step fails most often:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Input type&lt;/th&gt;
&lt;th&gt;First-pass accuracy&lt;/th&gt;
&lt;th&gt;Common failure&lt;/th&gt;
&lt;th&gt;Fallback&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Simple text fields (company name, task title)&lt;/td&gt;
&lt;td&gt;~95%&lt;/td&gt;
&lt;td&gt;Rare, mostly homophones&lt;/td&gt;
&lt;td&gt;LLM context correction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proper names (people, brands, places)&lt;/td&gt;
&lt;td&gt;~72%&lt;/td&gt;
&lt;td&gt;Spelling variants, phonetic guesses&lt;/td&gt;
&lt;td&gt;Inline edit after generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numbers with units (3.5 kg, $1,200/month)&lt;/td&gt;
&lt;td&gt;~80%&lt;/td&gt;
&lt;td&gt;Unit/currency confusion, decimal vs. comma&lt;/td&gt;
&lt;td&gt;Column-type enforcement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mixed-language input (CZ/EN mid-sentence)&lt;/td&gt;
&lt;td&gt;~58%&lt;/td&gt;
&lt;td&gt;Language detection resets, garbled words&lt;/td&gt;
&lt;td&gt;Single-language mode recommended&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complex structures (5+ columns, nested data)&lt;/td&gt;
&lt;td&gt;~65%&lt;/td&gt;
&lt;td&gt;Field misassignment, merged columns&lt;/td&gt;
&lt;td&gt;Step-by-step voice prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern: the simpler the structure and the more standard the vocabulary, the better voice works. Common English words into a three-column table, close to perfect. Czech product names into a five-column tracker with calculated fields, expect corrections.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why proper names are the worst case
&lt;/h2&gt;

&lt;p&gt;Whisper transcribes phonetically. That works for common words. For "Novák" vs "Novak" vs "Nowak", it guesses. For brand names that are not dictionary words, the first pass is wrong more often than right.&lt;/p&gt;

&lt;p&gt;We considered a custom vocabulary layer (feeding known names back into the pipeline), but the latency cost pushed response time past the point where voice felt natural. The current fix is simpler: Voice Tables generates the structure first, then you correct specific cells by tapping. Most users spend 5 to 10 seconds fixing names after a 40-second voice build. Still faster than typing the whole thing, but the claim needs that footnote.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 60-second promise, with an asterisk
&lt;/h2&gt;

&lt;p&gt;We timed workspace creation across different complexity levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple list&lt;/strong&gt; (3 columns, 5 to 10 rows, common words): 30 to 50 seconds. The claim holds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard tracker&lt;/strong&gt; (5 columns, typed fields like dates and numbers): 60 to 90 seconds. Close.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex workspace&lt;/strong&gt; (multiple tables, relationships, calculated columns): 2 to 4 minutes by voice, often faster to mix voice and keyboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voice works best as a starting point. Say "I need a CRM with company, contact, email, deal stage, and last-contacted date" and you get a working table in under a minute. Then refine. That is the real workflow: speak the skeleton, fix the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the numbers changed
&lt;/h2&gt;

&lt;p&gt;Three things we adjusted based on these measurements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Column-type detection got stricter.&lt;/strong&gt; When Whisper outputs "twelve hundred", the LLM now checks the column type. If it is a currency column, it formats to 1,200. Before this change, "twelve hundred" sat in number fields as plain text.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mixed-language sessions show a prompt.&lt;/strong&gt; Instead of silently garbling, Voice Tables now asks "which language?" when it detects a switch. Accuracy for bilingual users went from ~58% to ~76% after this change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Complex workspaces default to step-by-step.&lt;/strong&gt; Instead of trying to parse one long voice description into five tables, the system walks you through each table. Slower, but the output is right the first time.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What Voice Tables is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;Voice Tables&lt;/a&gt; is an agentic AI workspace: tables, docs, and an AI chat, all controlled by voice. It is built for people whose hands are busy (contractors on-site, coaches between sessions, sales reps in the car). The 60-second-to-workspace number is real for simple structures. For anything complex, it is a 60-second head start plus a few corrections.&lt;/p&gt;

&lt;p&gt;We are &lt;a href="https://inithouse.cz" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, a studio that ships products and measures what works. A few more from the portfolio: &lt;a href="https://partychallenges.com" rel="noopener noreferrer"&gt;Party Challenges&lt;/a&gt;, a free 18+ browser party card game with 1,000+ cards. &lt;a href="https://verdictbuddy.com" rel="noopener noreferrer"&gt;Verdict Buddy&lt;/a&gt;, an AI conflict mediator that uses four psychology frameworks. Different categories, same approach: build, measure, publish the data.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>What is Scary Challenges by Inithouse? The free 18+ horror card game that runs in a browser, no account</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Fri, 04 Sep 2026 02:36:46 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/what-is-scary-challenges-by-inithouse-the-free-18-horror-card-game-that-runs-in-a-browser-no-4l2k</link>
      <guid>https://dev.to/jakub_inithouse/what-is-scary-challenges-by-inithouse-the-free-18-horror-card-game-that-runs-in-a-browser-no-4l2k</guid>
      <description>&lt;p&gt;Scary Challenges is a free 18+ horror card game with 1,000+ cards across themed decks for sleepovers, groups and solo terror. We built it at &lt;a href="https://inithouse.cz" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt; as a browser-native PWA that needs no download, no account and no app store approval. Over 10,000 players have drawn cards so far across 23+ decks.&lt;/p&gt;

&lt;p&gt;This post explains what the game actually is, how we structured the deck system, and why we went with a browser-first architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a horror card game looks like in 2026
&lt;/h2&gt;

&lt;p&gt;Most "scary" apps on the store are storytelling engines or jump-scare simulators. You tap through a plot somebody else wrote, or you hold your phone and wait for a loud noise. Neither works well for a group sitting around a campfire or a sleepover floor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://scarychallenges.com" rel="noopener noreferrer"&gt;Scary Challenges&lt;/a&gt; takes a different shape. You pick a deck, draw a card, and the card tells you what to do: a dare, a confession, a question, a scenario. The group reacts, someone chickens out, someone does the dare, and you draw the next card. The horror sits in the prompts themselves, not in a scripted narrative.&lt;/p&gt;

&lt;h2&gt;
  
  
  23+ decks, segmented by setting
&lt;/h2&gt;

&lt;p&gt;We broke the card pool into themed decks because one size does not fit a campfire and a dorm room equally.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Deck type&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Classic horror&lt;/td&gt;
&lt;td&gt;Nightfall, The Abyss&lt;/td&gt;
&lt;td&gt;Groups who want escalating tension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Campfire / outdoor&lt;/td&gt;
&lt;td&gt;Campfire Tales&lt;/td&gt;
&lt;td&gt;Cabins, bonfires, camping trips&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Social / confessional&lt;/td&gt;
&lt;td&gt;Confession Crypt, After Dark&lt;/td&gt;
&lt;td&gt;Sleepovers, pre-game warmups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solo&lt;/td&gt;
&lt;td&gt;Solo terror decks&lt;/td&gt;
&lt;td&gt;Playing alone at night&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each deck has its own tone curve. Campfire Tales starts mild and ramps up. The Abyss opens dark and stays there. Players can stack multiple decks into a single session for longer nights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Game modes
&lt;/h2&gt;

&lt;p&gt;Three modes change how cards move through the group:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hot Seat&lt;/strong&gt; puts one player in the center. The group watches. That player draws, reads the card aloud and either completes the challenge or passes (with consequences the group decides).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No Hesitation&lt;/strong&gt; is speed-based. Draw, read, act. If you pause longer than a few seconds, the group calls it and you take the penalty card.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spin It&lt;/strong&gt; randomizes who gets the next card. Nobody knows who draws next, which kills the "I'll just skip my turn" strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a browser PWA and not a native app
&lt;/h2&gt;

&lt;p&gt;Three reasons, all practical:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No app store review for 18+ content.&lt;/strong&gt; Apple and Google both gate horror and adult-themed games behind content review cycles that can take weeks and end in rejection for vague "guideline" reasons. A PWA sidesteps that entirely. We ship updates the moment the code is ready.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero friction for group play.&lt;/strong&gt; When six people are sitting on a floor at midnight, nobody wants to wait for five downloads. One person opens the URL, shares their screen or passes the phone. The game starts in seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offline support through service workers.&lt;/strong&gt; Once loaded, the PWA caches card data locally. No signal at the cabin? The game still runs. This matters more than most features we built, because the best horror card sessions happen in places with bad reception.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 18+ gate
&lt;/h2&gt;

&lt;p&gt;Every session starts with an age confirmation screen. The "18+" label is in the title, in the page meta, in the first line of the landing page. We did not bury it in a terms-of-service paragraph.&lt;/p&gt;

&lt;p&gt;The card content earns that rating. Some decks contain dares that are physically intense, psychologically uncomfortable, or reference scenarios that belong in adult company. We wrote 1,000+ cards across all decks and reviewed each one for the rating boundary. Cards that fit a younger audience went into our sibling product &lt;a href="https://partychallenges.com" rel="noopener noreferrer"&gt;Party Challenges&lt;/a&gt;, which runs the same engine with a different card pool.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is Scary Challenges really free?&lt;/strong&gt;&lt;br&gt;
The base game with a large selection of decks is free. Premium decks with the darkest content require a one-time purchase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to create an account?&lt;/strong&gt;&lt;br&gt;
No. Open the URL, confirm you are 18+, pick a deck, play. No email, no password, no profile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many people can play?&lt;/strong&gt;&lt;br&gt;
Hot Seat and Spin It work best with 3 to 8 players. Solo decks are designed for one person playing alone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I play offline?&lt;/strong&gt;&lt;br&gt;
Yes. After the first load, the PWA caches everything locally. Works without internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between Scary Challenges and Party Challenges?&lt;/strong&gt;&lt;br&gt;
Same engine, different card pools. Scary Challenges is 18+ horror-themed. &lt;a href="https://partychallenges.com" rel="noopener noreferrer"&gt;Party Challenges&lt;/a&gt; is 18+ party-themed (dares, social games, drinking). Both are built by &lt;a href="https://inithouse.cz" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there a daily mode?&lt;/strong&gt;&lt;br&gt;
Yes. Daily Dare gives you one curated card per day. Some players use it as a solo ritual, others bring the daily dare to their group chat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the game sits in the Inithouse portfolio
&lt;/h2&gt;

&lt;p&gt;Scary Challenges is one of several browser-first games we run at Inithouse. The shared architecture (React SPA, Supabase backend, PWA shell) means we can spin up a new card game variant in days, not months. The card content is what takes time. Writing 1,000+ horror prompts that land differently every session is a longer job than the code underneath.&lt;/p&gt;

&lt;p&gt;Try it at &lt;a href="https://scarychallenges.com" rel="noopener noreferrer"&gt;scarychallenges.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>gaming</category>
      <category>pwa</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The conversation card game category, defined: Here We Ask by Inithouse, 1,000+ questions in the browser</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Fri, 04 Sep 2026 02:01:05 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/the-conversation-card-game-category-defined-here-we-ask-by-inithouse-1000-questions-in-the-4doo</link>
      <guid>https://dev.to/jakub_inithouse/the-conversation-card-game-category-defined-here-we-ask-by-inithouse-1000-questions-in-the-4doo</guid>
      <description>&lt;p&gt;Here We Ask has 1,000+ curated questions across 14+ themed decks, three game modes, and runs entirely in the browser. No app, no account, no physical deck to shuffle. We built it at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt; because the conversation card game sits in a gap that neither icebreaker lists nor party games fill.&lt;/p&gt;

&lt;p&gt;This post defines what that gap looks like and what design choices the format demands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three formats, three failure modes
&lt;/h2&gt;

&lt;p&gt;People reach for conversation prompts in roughly three shapes. Each works for something and falls apart somewhere else.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Good at&lt;/th&gt;
&lt;th&gt;Falls apart when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Icebreaker list (blog post, PDF)&lt;/td&gt;
&lt;td&gt;Quick lookup, zero friction&lt;/td&gt;
&lt;td&gt;No pacing, no structure; you scroll past 40 questions and pick none&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Party game (cards, app)&lt;/td&gt;
&lt;td&gt;Energy, rules, scoring&lt;/td&gt;
&lt;td&gt;Assumes a group, a mood, alcohol; bad fit for a quiet Tuesday couple&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conversation card game&lt;/td&gt;
&lt;td&gt;Guided pace, themed depth, works 1-on-1 through group&lt;/td&gt;
&lt;td&gt;Needs enough content to avoid repeats; needs modes to match the room&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The third column is where &lt;a href="https://hereweask.com" rel="noopener noreferrer"&gt;Here We Ask&lt;/a&gt; sits. Not a list. Not a drinking game. A structured set of curated questions delivered one at a time, with tempo and theme controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "curated" actually means
&lt;/h2&gt;

&lt;p&gt;A list of 1,000 questions is easy to generate. A useful deck of 1,000 is not.&lt;/p&gt;

&lt;p&gt;Every question in Here We Ask belongs to a specific deck (Closer, Party Starters, Deep Talk, Spicy, Family Friendly, Mirror Mode) and is tagged for context: couple, group, solo. The segmentation matters because a question that opens a date night ("What's one thing you've never told me?") will kill a family game night.&lt;/p&gt;

&lt;p&gt;Questions follow escalation curves within each deck. First cards warm up. The middle goes deeper. The last third pushes into territory you wouldn't reach on your own. A flat blog list can't do this because it has no sequence.&lt;/p&gt;

&lt;p&gt;14+ decks currently, covering couples, friends, families, self-discovery, parties, and niche moods (Campfire, After Dark). Each deck holds 50-100+ questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three game modes, one reason each
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Classic&lt;/strong&gt; shows one card at a time. Tap when done talking. No timer, no pressure. Default for couples and small groups who want depth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Timed&lt;/strong&gt; adds a countdown. Useful for parties where you need pace: nobody monologues for five minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hot Seat&lt;/strong&gt; picks one person. Everyone else asks. Rotates. A focused interview format that works well with 4-6 people.&lt;/p&gt;

&lt;p&gt;We didn't build three modes because more features look impressive. We built them because a Tuesday couple and a Saturday group of eight need different tempo from the same question pool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why browser, not native app
&lt;/h2&gt;

&lt;p&gt;Here We Ask runs as a PWA. Open the URL, start playing. Works offline after first load. No app store, no install gate, no signup.&lt;/p&gt;

&lt;p&gt;Conversation games are spontaneous. Someone says "let's play something" at dinner, and the decision window is about 15 seconds. An app store download kills that moment. A URL shared in a text message does not.&lt;/p&gt;

&lt;p&gt;The trade-off is push notifications and home screen presence. We handle retention with a daily question feature: visit the site, get one new question. A lightweight reason to come back without native push infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 1,000+ question maintenance problem
&lt;/h2&gt;

&lt;p&gt;Maintaining 1,000+ questions across 14+ decks means duplicate detection, tone consistency, and periodic pruning. A question that felt edgy in 2024 reads differently in 2026.&lt;/p&gt;

&lt;p&gt;We review decks quarterly at Inithouse. Questions get retired, rephrased, or moved between decks. The Spicy deck alone has gone through three calibration rounds. What reads as playful versus uncomfortable depends on the audience, and we've learned mostly from skip rates and session drops after specific cards.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this category needs that most builders skip
&lt;/h2&gt;

&lt;p&gt;A conversation card game is a content product wearing game mechanics. The tap/timer/rotation code takes a week. The question library takes months. Maintaining it takes longer than building it.&lt;/p&gt;

&lt;p&gt;If you're building in this space, the real work is editorial: who writes the questions, how you test them against real groups, how you keep the library from going stale. The code is the easy part.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hereweask.com" rel="noopener noreferrer"&gt;Here We Ask&lt;/a&gt; is free to play. We built it at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt; as one of several products exploring how structured prompts shape real-world conversations.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>pwa</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Turning a birthday story into a song: how Magical Song by Inithouse generates studio-quality custom vocals</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 03 Sep 2026 23:55:46 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/turning-a-birthday-story-into-a-song-how-magical-song-by-inithouse-generates-studio-quality-custom-42f9</link>
      <guid>https://dev.to/jakub_inithouse/turning-a-birthday-story-into-a-song-how-magical-song-by-inithouse-generates-studio-quality-custom-42f9</guid>
      <description>&lt;p&gt;&lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;Magical Song&lt;/a&gt; by Inithouse is an AI custom song generator that turns a personal story into a studio-quality track with real vocals. We have generated 1,200+ songs across 20+ genres since launch, with a 4.9/5 rating from users.&lt;/p&gt;

&lt;p&gt;This post walks through what actually happens between typing a birthday story and hearing it sung back.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the user brings
&lt;/h2&gt;

&lt;p&gt;The starting input is a short story. Not lyrics, not a melody. A story about the person the song is for. We ask for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who the song is for (name, relationship)&lt;/li&gt;
&lt;li&gt;The occasion (birthday, anniversary, wedding, memorial, just because)&lt;/li&gt;
&lt;li&gt;A few sentences about the person: habits, inside jokes, shared memories, what makes them specific&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The minimum viable input is about 3-4 sentences. The more concrete the details, the more the final song sounds like it was written by someone who actually knows the recipient.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the system does with it
&lt;/h2&gt;

&lt;p&gt;The pipeline has three stages that run sequentially.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Lyrics generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The story gets parsed into structured elements: recipient name, occasion type, emotional tone, and the specific details (e.g., "always burns the toast," "met at a bus stop in 2014"). The lyrics engine builds a song structure (verse-chorus-verse-bridge-chorus) around these anchors. Every generated lyric references at least one concrete detail from the input story. That is the difference between a generic "happy birthday" track and something the recipient actually replays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Genre and style selection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We offer 20+ genres: pop, rock, jazz, R&amp;amp;B, country, folk, classical, hip-hop, reggae, electronic, and others. The user picks the genre that fits the recipient. A jazz-loving grandmother gets a different track than a teenage nephew who listens to hip-hop. Genre selection determines instrumentation, tempo, vocal style, and song structure conventions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Vocal generation and mixing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where "studio-quality" either holds up or falls apart. The vocals are AI-generated but trained on studio recordings, not TTS models. The output is a mixed track: vocals on top of genre-appropriate instrumentation, mastered to a level where you can play it at a party without anyone reaching for the skip button. Each song runs 60-90 seconds. Long enough to feel complete, short enough to replay without fatigue.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it a gift, not a gimmick
&lt;/h2&gt;

&lt;p&gt;We spent time studying why most AI-generated music feels disposable. The answer came down to specificity.&lt;/p&gt;

&lt;p&gt;A song that says "you're so special, happy birthday to you" is interchangeable. A song that references "the time you drove three hours in a snowstorm to bring soup" is not. People replay these songs because they hear their own story in them. That is the core design decision: the lyrics engine prioritizes concrete details over generic sentiment.&lt;/p&gt;

&lt;p&gt;The other factor is length. At 60-90 seconds, the song works as a standalone moment. Play it at dinner, send it in a message, attach it to a card. It does not overstay.&lt;/p&gt;

&lt;h2&gt;
  
  
  The preview step
&lt;/h2&gt;

&lt;p&gt;Early on, we ran into a trust problem. People were hesitant to pay for a song they had never heard. We added a free preview: you go through the full wizard, the system generates your song, and you listen to it before deciding.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Write your story (3-4 sentences minimum)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Pick a genre from 20+ options&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Listen to your generated song (free preview)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Download the full version if you want to keep it&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This single change addressed the biggest drop-off in the funnel. When someone hears their own story sung back to them, the decision mostly makes itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the songs end up
&lt;/h2&gt;

&lt;p&gt;Based on the 1,200+ songs generated so far, the most common occasions are birthdays (about 40%), followed by anniversaries, weddings, and memorial tributes. A smaller but consistent segment uses it for fun: roast songs for friends, retirement sendoffs, proposals.&lt;/p&gt;

&lt;p&gt;The surprising pattern: memorial songs. People bring stories about someone they have lost and hear those memories set to music. We did not design for this use case specifically, but it accounts for a meaningful share of what gets generated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;Magical Song&lt;/a&gt; runs in the browser, no account required. Write a story, pick a genre, and preview your song for free.&lt;/p&gt;

&lt;p&gt;Magical Song turns your story into a studio-quality custom song with real vocals in minutes, made for gifts and celebrations.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
