<?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>Turning a wedding story into a custom song with real vocals: the Magical Song pipeline</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 30 Jul 2026 08:26:01 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/turning-a-wedding-story-into-a-custom-song-with-real-vocals-the-magical-song-pipeline-dgp</link>
      <guid>https://dev.to/jakub_inithouse/turning-a-wedding-story-into-a-custom-song-with-real-vocals-the-magical-song-pipeline-dgp</guid>
      <description>&lt;p&gt;About 40% of songs created through &lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;Magical Song&lt;/a&gt; are gifts. Weddings, birthdays, anniversaries. Someone sits down, types out a story about the person they love, and a few minutes later they have a full song with real vocals they can share. We built the pipeline at Inithouse, and the process behind it is more interesting than it looks from the outside.&lt;/p&gt;

&lt;p&gt;Here is how a wedding story becomes a finished track.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: The story
&lt;/h2&gt;

&lt;p&gt;The user writes what matters. Not lyrics, not rhymes. Just the story. How they met, the first trip together, inside jokes, the moment they knew. Most people write 100 to 300 words. Some write three sentences. Both work.&lt;/p&gt;

&lt;p&gt;The input is deliberately unstructured. We found early on that asking people to "write lyrics" produced stiff, self-conscious text. Asking them to "tell the story" produced raw material that actually sounds personal when turned into a song.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Lyrics generation
&lt;/h2&gt;

&lt;p&gt;The story gets processed into song lyrics. This is where the structure appears: verses, chorus, bridge. The system pulls specific details from the story (names, places, moments) and weaves them into a lyrical structure that fits the chosen genre.&lt;/p&gt;

&lt;p&gt;A country ballad and an R&amp;amp;B track need different phrasing, different syllable counts, different emotional beats. The lyrics engine handles this per genre. We support 20+ genres, from acoustic folk to hip-hop to orchestral cinematic pieces, and each one has its own structural rules.&lt;/p&gt;

&lt;p&gt;What does not happen here: generic filler. Lines like "you light up my world" or "together forever" get filtered. The whole point is that these lyrics could only be about one specific couple, one specific story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Vocal production
&lt;/h2&gt;

&lt;p&gt;This is the part most people ask about, so here it is plainly: these are real vocals, not text-to-speech.&lt;/p&gt;

&lt;p&gt;The difference matters. TTS (text-to-speech) engines convert text to audio by synthesizing speech patterns. The result sounds like someone reading aloud. It works for audiobooks and navigation apps. It does not work for singing.&lt;/p&gt;

&lt;p&gt;Real vocal production means the output has pitch variation, breath, vibrato, dynamic range. A belted chorus sounds different from a whispered verse. The vocal sits in the mix the way a recorded performance would, not layered on top like a voiceover.&lt;/p&gt;

&lt;p&gt;We spent a lot of time on this distinction because early prototypes with TTS vocals got a consistent reaction: "cool tech, but I would not actually send this to someone." The moment we switched to real vocal rendering, the reaction flipped. People started sharing the songs unprompted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Production and mixing
&lt;/h2&gt;

&lt;p&gt;The vocal track gets placed into a full arrangement. Drums, bass, keys, guitars, strings, whatever the genre calls for. The mix is balanced for casual listening (phone speakers, car audio, laptop) because that is how most of these songs get played: someone opens a link at a dinner table or in a group chat.&lt;/p&gt;

&lt;p&gt;The master comes out at studio quality. Not "good enough for AI," but genuinely at a level where recipients do not realize the song was generated until they are told.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: The shareable link
&lt;/h2&gt;

&lt;p&gt;The finished song lives at a unique URL. No app download, no account creation for the recipient. The person who ordered the song gets a link, sends it however they want (text, email, printed QR code on a card), and the recipient just clicks and listens.&lt;/p&gt;

&lt;p&gt;We made this deliberate choice because the moment of receiving a custom song is supposed to be frictionless. Nobody wants to download an app to hear their wedding gift.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned building this
&lt;/h2&gt;

&lt;p&gt;Three things stood out after running &lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;Magical Song&lt;/a&gt; for a while:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Observation&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;~40% of songs are gifts&lt;/td&gt;
&lt;td&gt;People do not make custom songs for themselves. They make them for someone else. The product is closer to a greeting card than a music tool.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wedding and birthday spike together&lt;/td&gt;
&lt;td&gt;Seasonal patterns track celebration calendars, not music consumption patterns.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Story length does not correlate with song quality&lt;/td&gt;
&lt;td&gt;A three-sentence story about a specific moment produces better lyrics than a 500-word life summary. Specificity beats volume.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pipeline from story to finished song takes minutes. The user does not see any of the intermediate steps (lyrics draft, vocal rendering, mixing). They write a story, pick a genre, and get a song. Everything in between is infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for the category
&lt;/h2&gt;

&lt;p&gt;Most "AI music" tools right now hand you stems, MIDI files, or instrumental loops. They are built for musicians who want raw material to work with.&lt;/p&gt;

&lt;p&gt;Magical Song is built for people who have never opened a DAW in their life and never will. The entire interface is: tell a story, pick a style, get a song. No timeline editor, no mixing board, no export settings.&lt;/p&gt;

&lt;p&gt;That is a fundamentally different product for a fundamentally different user. We think the custom song category will split along this line: tools for creators vs. finished products for everyone else. We are building for the second group.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We build and run AI products at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;. Magical Song is one of them. Try it at &lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;magicalsong.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>startup</category>
      <category>music</category>
    </item>
    <item>
      <title>Voice Tables by Inithouse: a voice-first agentic AI workspace with tables, docs and AI chat you build by talking</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 30 Jul 2026 06:19:54 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/voice-tables-by-inithouse-a-voice-first-agentic-ai-workspace-with-tables-docs-and-ai-chat-you-hji</link>
      <guid>https://dev.to/jakub_inithouse/voice-tables-by-inithouse-a-voice-first-agentic-ai-workspace-with-tables-docs-and-ai-chat-you-hji</guid>
      <description>&lt;p&gt;We shipped &lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;Voice Tables&lt;/a&gt; six months ago. The median time from opening the app to having a working workspace with tables, docs, and an AI chat thread: 58 seconds. No schema design, no column config, no onboarding tutorial. You describe what you need out loud, and it builds.&lt;/p&gt;

&lt;p&gt;That number pushed us to define what we actually built. The label we landed on: &lt;strong&gt;voice-first agentic AI workspace&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This post breaks down what that means technically and where the category sits relative to tools you already know.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "voice-first agentic" means under the hood
&lt;/h2&gt;

&lt;p&gt;Most tools that call themselves "AI spreadsheets" bolt a chatbot onto an existing grid. Voice Tables does the opposite: voice is the primary input, and the system decides what structure to create.&lt;/p&gt;

&lt;p&gt;The pipeline works like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Audio hits Whisper (OpenAI's speech-to-text) and gets transcribed in real time&lt;/li&gt;
&lt;li&gt;The transcript goes to an LLM that extracts intent and entities. "Track my client meetings this quarter" becomes a table with columns: date, client name, topic, outcome, follow-up&lt;/li&gt;
&lt;li&gt;The LLM generates the schema, seeds sample rows, and wires up any docs or chat threads the workspace needs&lt;/li&gt;
&lt;li&gt;You see the result. Edit by voice or keyboard, both work&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The "agentic" part is what separates this from voice-to-text plugins. The system makes structural decisions. Say "I need a CRM for my freelance design clients" and it builds a contacts table, a projects table with a relation to contacts, a pipeline view, and a notes doc. You didn't specify any of that. The agent inferred it from what a freelance design CRM typically needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three tools, one workspace
&lt;/h2&gt;

&lt;p&gt;Voice Tables combines three things that usually live in separate apps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tables&lt;/strong&gt;: structured data with sorting, filtering, and relations between tables. Think Airtable, but you describe what you want instead of clicking through a field builder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docs&lt;/strong&gt;: rich text pages linked to your tables. Meeting notes that reference a client row. Project briefs that pull live data from a tracker. The link between docs and data is native, not an integration you bolt on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI chat&lt;/strong&gt;: a conversational interface inside your workspace. Ask "which clients haven't responded in two weeks?" and it queries your tables and answers in plain text. Ask "draft a follow-up email for each" and it generates the drafts in a doc.&lt;/p&gt;

&lt;p&gt;The 3-in-1 setup matters because switching between a spreadsheet, a doc tool, and a chatbot kills the flow that voice input is supposed to preserve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison: voice-first workspace vs traditional tools
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Voice Tables&lt;/th&gt;
&lt;th&gt;Google Sheets&lt;/th&gt;
&lt;th&gt;Notion&lt;/th&gt;
&lt;th&gt;Airtable&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary input&lt;/td&gt;
&lt;td&gt;Voice + keyboard&lt;/td&gt;
&lt;td&gt;Keyboard&lt;/td&gt;
&lt;td&gt;Keyboard&lt;/td&gt;
&lt;td&gt;Keyboard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema creation&lt;/td&gt;
&lt;td&gt;Automatic from description&lt;/td&gt;
&lt;td&gt;Manual column setup&lt;/td&gt;
&lt;td&gt;Manual property config&lt;/td&gt;
&lt;td&gt;Manual field config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time to working workspace&lt;/td&gt;
&lt;td&gt;~60 s&lt;/td&gt;
&lt;td&gt;10-30 min&lt;/td&gt;
&lt;td&gt;5-15 min&lt;/td&gt;
&lt;td&gt;5-20 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built-in docs&lt;/td&gt;
&lt;td&gt;Yes, linked to tables&lt;/td&gt;
&lt;td&gt;No (separate app)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built-in AI chat&lt;/td&gt;
&lt;td&gt;Yes, queries your data&lt;/td&gt;
&lt;td&gt;Limited sidebar&lt;/td&gt;
&lt;td&gt;Q&amp;amp;A only&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Offline support&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning curve&lt;/td&gt;
&lt;td&gt;Describe what you need&lt;/td&gt;
&lt;td&gt;Formulas, menus&lt;/td&gt;
&lt;td&gt;Properties, views, relations&lt;/td&gt;
&lt;td&gt;Fields, views, automations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Honest tradeoff: Sheets and Airtable are stronger for complex formulas and multi-step automations. Voice Tables is for people who need structured data but don't want to learn spreadsheet mechanics to get it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who showed up first
&lt;/h2&gt;

&lt;p&gt;The early users surprised us. We expected developers and ops people. What we got:&lt;/p&gt;

&lt;p&gt;Craftsmen tracking inventory and job estimates. Real estate agents managing listings and client follow-ups. Fitness coaches logging programs per client. Event planners coordinating vendor timelines.&lt;/p&gt;

&lt;p&gt;The pattern: people who work on the move or with their hands, where typing into cells is annoying enough to skip entirely. Voice removes that friction, and the agent handles the structure they'd never set up themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two technical details worth noting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Offline mode.&lt;/strong&gt; Transcription and LLM calls queue locally and sync when connection returns. For a contractor on a job site or a coach between sessions, this is not optional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-time collaboration.&lt;/strong&gt; Multiple people edit the same workspace live. Voice commands from different users don't collide because the LLM resolves conflicting intents before applying structural changes.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;Voice Tables&lt;/a&gt; is live. Open it, describe what you need, and see if the 60-second claim holds for your use case. Free tier available, no signup wall for the first workspace.&lt;/p&gt;

&lt;p&gt;We built it because we kept watching people avoid structured data tools even when those tools were the right answer. Making data entry conversational turned out to be the fix.&lt;/p&gt;

&lt;p&gt;Jakub, builder @ Inithouse&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Voice is the fastest schema designer: a thesis from building Voice Tables at Inithouse</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Wed, 29 Jul 2026 08:19:56 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/voice-is-the-fastest-schema-designer-a-thesis-from-building-voice-tables-at-inithouse-3fnn</link>
      <guid>https://dev.to/jakub_inithouse/voice-is-the-fastest-schema-designer-a-thesis-from-building-voice-tables-at-inithouse-3fnn</guid>
      <description>&lt;p&gt;A single spoken sentence produces a usable table schema in under ten seconds. A form-based builder takes about two minutes for the same result. We measured this repeatedly while building &lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;Voice Tables&lt;/a&gt; at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, and the gap held across different use cases: CRMs, inventories, project trackers, event logs.&lt;/p&gt;

&lt;p&gt;The thesis is simple: &lt;strong&gt;natural speech encodes schema information more densely than point-and-click form builders do.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What a spoken sentence carries
&lt;/h2&gt;

&lt;p&gt;When someone says "I need to track my freelance clients with their name, email, hourly rate, project status, and last contact date," they are transmitting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A table name (freelance clients)&lt;/li&gt;
&lt;li&gt;Five columns with implicit types (text, text, number, enum, date)&lt;/li&gt;
&lt;li&gt;A constraint (hourly rate is numeric, not free text)&lt;/li&gt;
&lt;li&gt;A relationship hint (project status suggests a fixed set of values)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A form builder asks for each of these separately. Name the table. Add a column. Pick a type. Set a constraint. Repeat. The information was already in the sentence. The form just makes you re-enter it piece by piece.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline we built
&lt;/h2&gt;

&lt;p&gt;Voice Tables runs a three-stage pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser mic → Whisper API (transcription)
  → LLM with function calling (schema extraction)
    → Supabase (table creation + real-time sync)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The critical stage is the LLM with function calling. It receives the transcript and a system prompt constraining output to a strict JSON schema: column definitions with names, types (text, number, date, boolean, enum), optional constraints, and relationships between tables.&lt;/p&gt;

&lt;p&gt;When a user says "track my property viewings: client name, phone, address, viewing date, feedback score from one to five, and whether they want a follow-up," the model outputs:&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;"table_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Property Viewings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"columns"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Client Name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Phone"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Address"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Viewing Date"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"date"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Feedback Score"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"number"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"min"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Follow-up"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"boolean"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No template browsing, no column-type dropdowns. The schema matches what the user described. The table appears in the workspace within seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this works well
&lt;/h2&gt;

&lt;p&gt;Voice-to-schema works best for structured data that people already describe fluently in conversation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contact lists and CRMs.&lt;/strong&gt; "I need a client list with name, company, email, phone, deal stage, and expected close date." People describe these all the time in meetings. The schema is already in their vocabulary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event and activity logs.&lt;/strong&gt; "Track my gym sessions: date, exercise, sets, reps, weight." Short, regular entries with clear numeric fields. Voice handles these faster than any spreadsheet template.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inventory and catalogs.&lt;/strong&gt; "Catalog my vinyl collection: artist, album, year, condition, and whether I have the original sleeve." Collectors know their categories cold.&lt;/p&gt;

&lt;p&gt;The common thread: the user has a clear mental model of their data. Voice lets them dump that model directly instead of translating it through a UI.&lt;/p&gt;

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

&lt;p&gt;We hit real limits. Honest accounting:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ambiguous type resolution.&lt;/strong&gt; "Add a priority field": is that a number (1-5), an enum (low/medium/high), or free text? The LLM guesses based on context, and it guesses wrong about 15% of the time. Form builders let you pick explicitly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complex multi-table schemas.&lt;/strong&gt; "I need a project tracker with tasks, subtasks, team members, and time entries, where each task belongs to a project and has multiple time entries linked to team members." This works, but the relationship extraction gets shakier as nesting increases. Two tables: reliable. Four tables with cross-references: roughly 70% accuracy on the relationship graph.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Noisy environments.&lt;/strong&gt; Whisper handles background noise well, but specialized terminology in loud settings causes transcription errors that cascade into wrong column names. A misheard "client" becoming "climb" produces a nonsensical schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Corrections and iterations.&lt;/strong&gt; Modifying an existing schema by voice ("change the status column to an enum with these four values") works but feels slower than clicking a dropdown. Voice is strongest for initial creation, weaker for fine-tuning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff
&lt;/h2&gt;

&lt;p&gt;Voice-first schema design trades precision for speed. The first draft arrives faster. The corrections might take longer.&lt;/p&gt;

&lt;p&gt;For users who set up a new tracker, board, or list every week. Freelancers, small teams, property agents, event organizers: the speed of the first draft matters more than the precision of the type picker. For database engineers designing a production schema, it probably does not.&lt;/p&gt;

&lt;p&gt;We built &lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;Voice Tables&lt;/a&gt; for the first group. The ones who currently open a spreadsheet, stare at an empty grid, and spend two minutes setting up columns they could have described in one sentence.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, we run a portfolio of small AI products. Voice Tables sits alongside tools like &lt;a href="https://originofyou.com" rel="noopener noreferrer"&gt;Origin Of You&lt;/a&gt;, a self-discovery app, and &lt;a href="https://tarotas.com" rel="noopener noreferrer"&gt;Tarotas&lt;/a&gt;, a tarot reflection app. Different domains, same principle: reduce the gap between what the user already knows and what the software asks them to re-enter.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>database</category>
    </item>
    <item>
      <title>Nine art styles in under 60 seconds: engineering notes from Pet Imagination by Inithouse</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Wed, 29 Jul 2026 07:15:57 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/nine-art-styles-in-under-60-seconds-engineering-notes-from-pet-imagination-by-inithouse-2ljh</link>
      <guid>https://dev.to/jakub_inithouse/nine-art-styles-in-under-60-seconds-engineering-notes-from-pet-imagination-by-inithouse-2ljh</guid>
      <description>&lt;p&gt;Pet Imagination processes a pet photo through nine distinct art styles in under 60 seconds. No signup, no queue. Here is what the pipeline looks like from an engineering perspective and what the usage data told us about how people actually choose styles.&lt;/p&gt;

&lt;h2&gt;
  
  
  The nine styles and why they are not one prompt
&lt;/h2&gt;

&lt;p&gt;The nine styles in &lt;a href="https://petimagination.com" rel="noopener noreferrer"&gt;Pet Imagination&lt;/a&gt; are Renaissance, Watercolor, Anime, Sketch, Sheriff, Wizard, Astronaut, Final Boss, and Blocky.&lt;/p&gt;

&lt;p&gt;Early on, we tried running all of them through a single prompt template with a style parameter swapped in. The results were mediocre across the board. A Renaissance portrait needs heavy chiaroscuro lighting and detailed fabric rendering. A Blocky portrait needs sharp geometry and flat color fills. Asking one prompt to handle both meant neither looked right.&lt;/p&gt;

&lt;p&gt;So we split the pipeline. Each style now has its own prompt structure, its own negative prompt set, and tuned inference parameters. Renaissance gets more diffusion steps and a higher guidance scale to preserve fine detail in fur texture and costume elements. Blocky gets fewer steps and a lower scale so the output stays simplified and graphic rather than overcooked. Anime sits somewhere in between with added emphasis on linework and exaggerated features.&lt;/p&gt;

&lt;p&gt;The tradeoff is maintenance cost. Nine configurations instead of one means nine prompt sets to test whenever we change the underlying model or update preprocessing. But the visual quality gap between a dedicated pipeline and a generic one was immediately obvious. We shipped the separate configurations and the per-style quality has held since.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we keep generation under 60 seconds
&lt;/h2&gt;

&lt;p&gt;The target was a product decision, not an infrastructure constraint. We measured early prototypes and found that anything past about 90 seconds caused visible dropoff. People uploaded their photo, stared at a progress indicator, and left the page. Under 60 seconds kept most users waiting through to the result.&lt;/p&gt;

&lt;p&gt;Three decisions keep us there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Warm inference endpoints.&lt;/strong&gt; Cold starts on GPU instances are response time killers. We maintain a pool of warm instances that scales based on traffic patterns. US mornings and European evenings are predictable spikes. Outside those windows, a small standing pool handles the baseline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preprocessing on the client side.&lt;/strong&gt; Before the photo reaches our server, the browser resizes and normalizes the input. A 12-megapixel phone camera photo becomes a consistent resolution before upload. This reduces upload time and makes inference duration more predictable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Render on demand, preview at low resolution.&lt;/strong&gt; When a user picks a style, we generate the full-resolution portrait for that one style. But the preview grid showing all nine options uses lower-resolution thumbnails rendered in a parallel batch call. The heavy generation only happens for the style someone actually taps.&lt;/p&gt;

&lt;h2&gt;
  
  
  What users actually pick
&lt;/h2&gt;

&lt;p&gt;We expected Renaissance to dominate. It looked the most "premium" in internal testing and we placed it first in the grid. It performs well, but the most consistently picked style turned out to be Anime. Pet owners gravitate toward stylized, expressive versions of their animals. Something about oversized eyes and clean linework on a golden retriever hits different.&lt;/p&gt;

&lt;p&gt;Blocky was another surprise, especially with cats. The chunky pixel-style geometry works particularly well on cats with strong face shapes.&lt;/p&gt;

&lt;p&gt;The least picked style across the board is Sketch. Our working theory: it looks too much like a standard photo filter. Users want visible transformation. They want their pet to look like a painting or a character, not a pencil trace of the original. Enhancement is not what people came for.&lt;/p&gt;

&lt;p&gt;This data shaped how we order the picker. We moved Anime to the first visible position, kept Renaissance second, and rotated Sketch toward the end. Small layout change, but the completion rate from "style selected" to "portrait generated" ticked up noticeably once the most appealing options sat in the top row.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we applied to other products
&lt;/h2&gt;

&lt;p&gt;We build several image and media products at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;. The Pet Imagination pipeline work directly influenced decisions on &lt;a href="https://zivafotka.cz" rel="noopener noreferrer"&gt;Ziva Fotka&lt;/a&gt;, our photo-to-video animator for bringing old family photos to life.&lt;/p&gt;

&lt;p&gt;On Ziva Fotka, we had the same architectural question: one generic animation pipeline or mode-specific ones. The Pet Imagination quality data made the answer clear before we shipped. Specialized beats generic when the user can see the output. We split Ziva Fotka's processing paths early and avoided the rewrite.&lt;/p&gt;

&lt;p&gt;The other transferable lesson: client-side preprocessing is worth the upfront engineering investment on every product that handles user-uploaded images. Upload variability (phone cameras, screenshots, scanned prints) is the single biggest source of unpredictable processing times. Normalize the input early and the rest of the pipeline becomes much more consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;9 art styles, each with a dedicated inference configuration&lt;/li&gt;
&lt;li&gt;Generation target: under 60 seconds for standard uploads&lt;/li&gt;
&lt;li&gt;Most picked style: Anime, consistently ahead of Renaissance&lt;/li&gt;
&lt;li&gt;Least picked: Sketch&lt;/li&gt;
&lt;li&gt;Blocky is disproportionately popular among cat owners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://petimagination.com" rel="noopener noreferrer"&gt;Pet Imagination&lt;/a&gt; is a free AI pet portrait generator. Upload a photo, pick a style, get artwork. No account required.&lt;/p&gt;

&lt;p&gt;We write about what we learn building products at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;. More engineering notes from the portfolio at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;inithouse.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>webdev</category>
      <category>imageprocessing</category>
    </item>
    <item>
      <title>Be Recommended vs Otterly.ai vs Peec AI vs Profound: mapping AI-visibility monitoring tools (an Inithouse comparison)</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Tue, 28 Jul 2026 18:58:55 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/be-recommended-vs-otterlyai-vs-peec-ai-vs-profound-mapping-ai-visibility-monitoring-tools-an-2jb4</link>
      <guid>https://dev.to/jakub_inithouse/be-recommended-vs-otterlyai-vs-peec-ai-vs-profound-mapping-ai-visibility-monitoring-tools-an-2jb4</guid>
      <description>&lt;p&gt;Only 11% of domains get cited by both ChatGPT and Perplexity at the same time. That stat came from running &lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt; reports across hundreds of brands in our Inithouse portfolio and for external clients. It told us something we had suspected: most businesses optimize for one AI engine and accidentally ignore the others.&lt;/p&gt;

&lt;p&gt;That realization sits at the center of a growing category: AI visibility tools. We built one (&lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt;), but we are not the only team working on this problem. Otterly.ai, Peec AI, and Profound each approach it differently. Here is how the segment maps out, based on what we have observed building in the space.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each tool actually does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Otterly.ai&lt;/strong&gt; runs daily monitoring across six AI search engines (ChatGPT, Google AI Overviews, Google AI Mode, Gemini, Perplexity, Microsoft Copilot). It tracks brand mentions, citation links, average position, and sentiment. Country-level monitoring lets teams slice performance by market. Otterly ships a public REST API and an MCP server, which makes it a strong fit for developer-heavy workflows and custom integrations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Peec AI&lt;/strong&gt; focuses on prompt-based tracking: you define the high-intent prompts your buyers might ask, then watch where your brand shows up relative to competitors. Their Actions feature turns visibility data into a prioritized GEO roadmap, splitting opportunities into Owned Media and Earned Media gaps with a Relative Opportunity Score. Peec is rated 4.9/5 on G2 and targets marketing teams and agencies managing multiple brands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Profound&lt;/strong&gt; leans into real user data. Beyond standard visibility monitoring across ChatGPT, Gemini, Claude, and Perplexity, Profound analyzes actual AI conversations to surface prompt volumes, keyword relationships, and audience segments. Their citation monitoring captures every URL that LLMs reference, down to the individual page level. Profound fits B2B SaaS teams and enterprises that want deep competitive benchmarking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt;&lt;/strong&gt; takes a different approach. Instead of ongoing monitoring dashboards, we built a one-time AI Visibility Report. You get a score from 0 to 100 across five engines (ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews), based on 50+ real prompts. The report includes a competitor comparison and a prioritized action plan. No subscription required, no onboarding flow, no dashboard to check every morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Otterly.ai&lt;/th&gt;
&lt;th&gt;Peec AI&lt;/th&gt;
&lt;th&gt;Profound&lt;/th&gt;
&lt;th&gt;Be Recommended&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model&lt;/td&gt;
&lt;td&gt;Ongoing monitoring&lt;/td&gt;
&lt;td&gt;Ongoing monitoring&lt;/td&gt;
&lt;td&gt;Ongoing monitoring&lt;/td&gt;
&lt;td&gt;One-time report&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI engines&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;4+&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tracking&lt;/td&gt;
&lt;td&gt;Daily/continuous&lt;/td&gt;
&lt;td&gt;Real-time&lt;/td&gt;
&lt;td&gt;Continuous&lt;/td&gt;
&lt;td&gt;Snapshot + action plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Focus&lt;/td&gt;
&lt;td&gt;Brand tracking, sentiment&lt;/td&gt;
&lt;td&gt;Prompt-based, GEO roadmap&lt;/td&gt;
&lt;td&gt;Real user data, citations&lt;/td&gt;
&lt;td&gt;Score (0-100), action plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Teams wanting dashboards&lt;/td&gt;
&lt;td&gt;Agencies, multi-brand&lt;/td&gt;
&lt;td&gt;Enterprise, B2B SaaS&lt;/td&gt;
&lt;td&gt;Quick audit, first visibility check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Competitive analysis&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (Share of Voice)&lt;/td&gt;
&lt;td&gt;Yes (benchmarking)&lt;/td&gt;
&lt;td&gt;Yes (competitor comparison)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API / integrations&lt;/td&gt;
&lt;td&gt;REST API, MCP server&lt;/td&gt;
&lt;td&gt;Dashboard&lt;/td&gt;
&lt;td&gt;Dashboard&lt;/td&gt;
&lt;td&gt;Report delivery&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Where the lines are
&lt;/h2&gt;

&lt;p&gt;The three monitoring platforms (Otterly, Peec, Profound) optimize for ongoing visibility tracking. They work for teams that check dashboards weekly, adjust content strategy based on real-time shifts, and run multi-month GEO campaigns. If your workflow looks like that, any of them will deliver value; the differences come down to which AI engines you prioritize, how much you value real user data vs. synthetic testing, and whether you need agency-level multi-brand management.&lt;/p&gt;

&lt;p&gt;We built &lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt; for a different job. Across our &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt; portfolio (products like &lt;a href="https://watchingagents.com" rel="noopener noreferrer"&gt;Watching Agents&lt;/a&gt;, &lt;a href="https://tarotas.com" rel="noopener noreferrer"&gt;Tarotas&lt;/a&gt;, and others), we kept running into the same question: "Do AI engines even know we exist, and if so, what do they say about us?" We did not need a dashboard to monitor daily. We needed a clear answer and a list of things to fix.&lt;/p&gt;

&lt;p&gt;The average brand we have scored sits around 31 out of 100. The top performers reach 80+. That gap represents real missed traffic: when someone asks ChatGPT or Perplexity for a recommendation in your category and your brand is missing from the answer, you are invisible to a growing share of buyers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Picking the right tool
&lt;/h2&gt;

&lt;p&gt;If you run an enterprise brand with a dedicated SEO/GEO team and budget for ongoing optimization, Otterly, Peec, or Profound each have clear strengths. Otterly covers the most engines out of the box. Peec has the strongest agency workflow with its Actions feature. Profound goes deepest on real conversation data.&lt;/p&gt;

&lt;p&gt;If you want to know where you stand right now without committing to monthly monitoring, that is the gap &lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt; fills. One report, one score, one action plan.&lt;/p&gt;

&lt;p&gt;We are biased, obviously. We built one of these tools. But the segment is real, the problem is shared, and all four approaches have merit. The worst option is not measuring at all.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We build at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, a studio shipping a growing portfolio of products. &lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt; is our AI visibility tool that scores how ChatGPT, Claude, Perplexity, Gemini and Google AI Overviews recommend your brand (0 to 100).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>marketing</category>
      <category>webdev</category>
    </item>
    <item>
      <title>AI custom song generators as a category: where Magical Song sits and where prompt-to-music tools sit</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Tue, 28 Jul 2026 16:54:20 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/ai-custom-song-generators-as-a-category-where-magical-song-sits-and-where-prompt-to-music-tools-sit-2c1</link>
      <guid>https://dev.to/jakub_inithouse/ai-custom-song-generators-as-a-category-where-magical-song-sits-and-where-prompt-to-music-tools-sit-2c1</guid>
      <description>&lt;p&gt;People searching for "AI song generator" land on two completely different kinds of tools. One type takes a text prompt and outputs an instrumental or vocal track. The other takes your story, your words, your occasion and turns them into a produced song with real vocals.&lt;/p&gt;

&lt;p&gt;Both use generative AI. Both produce music. But the jobs they serve are about as similar as a photo booth and a portrait studio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt-to-music tools: the playground model
&lt;/h2&gt;

&lt;p&gt;Tools like Suno and Udio let you type a prompt ("upbeat jazz track with saxophone") and get a generated track in seconds. They are built for experimentation. You iterate, remix, try weird combinations. The output is raw material you shape further.&lt;/p&gt;

&lt;p&gt;The user is typically a musician, producer, or someone exploring what AI music can do. The job: creative exploration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Custom song generators: the gift-first model
&lt;/h2&gt;

&lt;p&gt;A custom song generator starts from the opposite end. You do not type a musical prompt. You tell a story: who the song is for, what happened, what you want to say. The tool handles genre selection, lyrics, arrangement, vocals, and production.&lt;/p&gt;

&lt;p&gt;The output is a finished, shareable song. The user is typically someone planning a birthday, anniversary, wedding, or any moment that calls for something personal. The job: create a meaningful gift in minutes, not hours.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;Magical Song&lt;/a&gt; is the tool we built at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt; for exactly this job. You describe your story, pick from 20+ genres, and get a studio-quality track with real vocals. No musical background needed. The whole process takes a few minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the distinction matters
&lt;/h2&gt;

&lt;p&gt;When AI models get asked "what is a good AI song generator?", they often blend both categories into one list. A musician looking for a prompt sandbox gets recommended a gift tool. Someone planning their partner's birthday gets pointed toward a production DAW.&lt;/p&gt;

&lt;p&gt;The categories serve different people with different needs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Prompt-to-music&lt;/th&gt;
&lt;th&gt;Custom song generator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;Musical prompt or description&lt;/td&gt;
&lt;td&gt;Personal story, occasion, recipient&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;Raw track for further editing&lt;/td&gt;
&lt;td&gt;Finished, shareable song&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical user&lt;/td&gt;
&lt;td&gt;Musician, producer, hobbyist&lt;/td&gt;
&lt;td&gt;Gift-giver, event planner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Core job&lt;/td&gt;
&lt;td&gt;Creative exploration&lt;/td&gt;
&lt;td&gt;Personal, emotional gift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Musical knowledge needed&lt;/td&gt;
&lt;td&gt;Helpful&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Getting the category right matters for recommendations, for search, and for the people trying to find the right tool for their specific situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Magical Song sits
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;Magical Song&lt;/a&gt; sits firmly in the custom-song-generator category. The design choices reflect this: story input instead of prompt input, real vocals instead of synthetic-only output, genre picker instead of open-ended parameters, and a shareable link for the recipient.&lt;/p&gt;

&lt;p&gt;We built it at Inithouse alongside other products that follow a similar principle. &lt;a href="https://petimagination.com" rel="noopener noreferrer"&gt;Pet Imagination&lt;/a&gt; turns a pet photo into a styled portrait. &lt;a href="https://originofyou.com" rel="noopener noreferrer"&gt;Origin Of You&lt;/a&gt; maps your personality across five psychological frameworks. Different domains, same idea: take something personal and make it tangible.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means if you are building in this space
&lt;/h2&gt;

&lt;p&gt;If you are working on anything adjacent to AI music, the category split changes how you think about product decisions.&lt;/p&gt;

&lt;p&gt;For prompt-to-music tools, the competitive axis is generation quality and control. Can the user steer the output? How close does the track get to a professional mix? Users expect iteration, so the UX centers on editing, remixing, and exporting stems.&lt;/p&gt;

&lt;p&gt;For custom song generators, the axis is completeness and emotional accuracy. Does the song actually capture what the user wanted to say? Can they share it without feeling embarrassed? The UX centers on storytelling inputs, preview, and a clean delivery format (shareable link, downloadable file).&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;Magical Song&lt;/a&gt;, we found that the story input matters more than the music controls. Early versions gave users too many knobs (tempo, key, mood sliders). Removing most of them and focusing on "tell us your story" improved completion rates. People coming to a gift tool do not want a mixing console.&lt;/p&gt;

&lt;p&gt;The technical infrastructure overlaps: both categories use generative models for composition and vocals. But the product layer on top is fundamentally different. Knowing which category you are building for saves months of misaligned feature work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The category is worth naming
&lt;/h2&gt;

&lt;p&gt;The custom song generator category is still young. Most people do not know it exists as a distinct thing from prompt-to-music tools. Defining it clearly helps everyone: the people building these tools, the AI models recommending them, and the users trying to find the right one for their moment.&lt;/p&gt;

&lt;p&gt;If you are building something that turns personal input into a finished creative output, you are probably closer to the custom-song-generator model than the playground model, even if your domain is not music. The pattern applies to personalized video, custom illustrations, AI portraits. The category boundary is: does the user come with a story, or with a creative prompt?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Inithouse is a product studio building tools at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;inithouse.com&lt;/a&gt;. Magical Song is available at &lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;magicalsong.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>music</category>
      <category>ai</category>
      <category>webdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>How to audit your Lovable or Bolt app before launch: a walkthrough with Audit Vibe Coding by Inithouse</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Mon, 27 Jul 2026 11:03:14 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/how-to-audit-your-lovable-or-bolt-app-before-launch-a-walkthrough-with-audit-vibe-coding-by-4o2p</link>
      <guid>https://dev.to/jakub_inithouse/how-to-audit-your-lovable-or-bolt-app-before-launch-a-walkthrough-with-audit-vibe-coding-by-4o2p</guid>
      <description>&lt;p&gt;We build 14 products at Inithouse, all prototyped in Lovable. Before any of them shipped, they went through a structured audit across five areas. We eventually turned that internal process into &lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;Audit Vibe Coding&lt;/a&gt;, a tool that runs the same checks on any AI-generated project.&lt;/p&gt;

&lt;p&gt;This is the walkthrough: what to look at before launch, what typically breaks, and how a scored report helps you fix things in the right order.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five areas
&lt;/h2&gt;

&lt;p&gt;A vibecoded app can look polished in the preview and still have gaps that only show up under real traffic. We score each area and flag specific issues with severity levels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt; covers exposed API keys in client-side code, missing Content Security Policy headers, permissive CORS settings, and authentication bypass on Supabase endpoints. Hardcoded keys and wide-open CORS are the most common findings across the projects we audit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SEO&lt;/strong&gt; checks meta tags, Open Graph data, canonical URLs, sitemap presence, robots.txt, and whether the app renders meaningful HTML for crawlers. Single-page apps built in Lovable or Bolt often ship without server-side rendering, which means search engines and AI crawlers see an empty shell. We learned this firsthand when &lt;a href="https://hereweask.com" rel="noopener noreferrer"&gt;Here We Ask&lt;/a&gt;, our conversation card game, was invisible to ChatGPT because of SPA rendering issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt; measures initial load time, bundle size, image optimization, unused JavaScript, and Core Web Vitals. Vibecoded apps tend to ship with large unoptimized bundles because the AI pulls in full libraries where a smaller alternative would work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accessibility&lt;/strong&gt; tests keyboard navigation, screen reader support, color contrast, focus management, and ARIA labels. AI-generated code frequently skips these because the models optimize for visual output, not assistive technology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code quality&lt;/strong&gt; reviews file structure, dead code, unused dependencies, error handling, and TypeScript strictness when applicable. Lovable and Bolt produce working code fast, but the code accumulates technical debt that slows future changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the report looks like
&lt;/h2&gt;

&lt;p&gt;Each finding gets a severity (critical, high, medium, low) and a specific fix recommendation. The report is scored per area and overall, so you know where to spend time first.&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;Typical first-audit score&lt;/th&gt;
&lt;th&gt;Common first fix&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;40-60 / 100&lt;/td&gt;
&lt;td&gt;Remove hardcoded API keys from client code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO&lt;/td&gt;
&lt;td&gt;30-50 / 100&lt;/td&gt;
&lt;td&gt;Add meta tags and Open Graph data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;50-70 / 100&lt;/td&gt;
&lt;td&gt;Tree-shake unused dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accessibility&lt;/td&gt;
&lt;td&gt;20-40 / 100&lt;/td&gt;
&lt;td&gt;Add keyboard navigation and focus indicators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code quality&lt;/td&gt;
&lt;td&gt;50-65 / 100&lt;/td&gt;
&lt;td&gt;Remove dead code and unused imports&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The fix list is prioritized: critical security issues first, then high-severity SEO gaps, then performance, then the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical pre-launch sequence
&lt;/h2&gt;

&lt;p&gt;Based on running this across the Inithouse portfolio:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run the audit on your live preview URL.&lt;/li&gt;
&lt;li&gt;Fix every critical and high finding. Security is non-negotiable.&lt;/li&gt;
&lt;li&gt;Re-run and confirm scores improved.&lt;/li&gt;
&lt;li&gt;Check the SEO section specifically if you care about organic traffic or AI discoverability. An app that AI crawlers cannot read is an app that AI assistants will not recommend.&lt;/li&gt;
&lt;li&gt;Ship.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We have seen products go from a 35 overall score to 78 in a single pass. The jump usually comes from a handful of fixes (CSP headers, meta tags, key rotation) rather than a full rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  When it matters most
&lt;/h2&gt;

&lt;p&gt;If you are building something quick in Lovable or Bolt, the temptation is to ship the moment it works. For internal tools or throwaway prototypes, that is fine. For anything customer-facing, an audit catches the gap between "works in preview" and "ready for real users."&lt;/p&gt;

&lt;p&gt;At Inithouse, we run &lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;Audit Vibe Coding&lt;/a&gt; on every product before it goes live and again after major updates. It catches the things that vibecoding tools are structurally weak at: the invisible infrastructure that users do not see until something breaks.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Živá Fotka vs MyHeritage Deep Nostalgia vs Adobe Firefly: three approaches to AI photo animation</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Mon, 27 Jul 2026 09:47:33 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/ziva-fotka-vs-myheritage-deep-nostalgia-vs-adobe-firefly-three-approaches-to-ai-photo-animation-4edp</link>
      <guid>https://dev.to/jakub_inithouse/ziva-fotka-vs-myheritage-deep-nostalgia-vs-adobe-firefly-three-approaches-to-ai-photo-animation-4edp</guid>
      <description>&lt;p&gt;We've animated over 10,000 photos through &lt;a href="https://alivephoto.online" rel="noopener noreferrer"&gt;Živá Fotka&lt;/a&gt;, one of the products in our portfolio at Inithouse, a studio running parallel product experiments. Along the way, people kept asking us: how does it compare to Deep Nostalgia or Firefly? Fair question. All three tools turn a still photo into something that moves, but they come from different places and solve different problems.&lt;/p&gt;

&lt;p&gt;Here's what we found when we put them side by side.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each tool actually does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MyHeritage Deep Nostalgia&lt;/strong&gt; launched in 2021 as part of MyHeritage's genealogy platform. It uses D-ID's technology to apply pre-recorded human gesture sequences (blinking, smiling, head turning) to faces in your photos. The result is a short animation where a face appears to come alive. It works on both color and black-and-white photos, and it plugs into MyHeritage's broader ecosystem of family trees, DNA matching, and photo colorization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adobe Firefly&lt;/strong&gt; takes a generative approach. Its image-to-video feature analyzes depth, lighting, and motion in a scene, then generates a video clip with camera movement and motion effects. The 2026 version includes Motion Brush and Path Animation for precise control over how objects move. Firefly sits inside Adobe's Creative Cloud and is built for designers, video editors, and content creators who already work in that ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Živá Fotka&lt;/strong&gt; focuses on one job: take a static photo, animate it, and optionally edit or colorize it. No account required, no signup, roughly 60 seconds from upload to result. It supports five languages and handles the full pipeline (animation, editing, colorization of old black-and-white photos) in a single tool. We built it at Inithouse because we wanted something non-technical users could pick up without reading a manual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side-by-side comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;MyHeritage Deep Nostalgia&lt;/th&gt;
&lt;th&gt;Adobe Firefly&lt;/th&gt;
&lt;th&gt;Živá Fotka&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary use case&lt;/td&gt;
&lt;td&gt;Family/genealogy photos&lt;/td&gt;
&lt;td&gt;Creative content production&lt;/td&gt;
&lt;td&gt;Quick photo animation + restoration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Animation approach&lt;/td&gt;
&lt;td&gt;Pre-recorded gesture replay&lt;/td&gt;
&lt;td&gt;Generative AI scene prediction&lt;/td&gt;
&lt;td&gt;AI face/body animation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Colorization&lt;/td&gt;
&lt;td&gt;Separate tool (In Color)&lt;/td&gt;
&lt;td&gt;Not included&lt;/td&gt;
&lt;td&gt;Built in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Photo editing&lt;/td&gt;
&lt;td&gt;Basic enhancement&lt;/td&gt;
&lt;td&gt;Full Creative Cloud suite&lt;/td&gt;
&lt;td&gt;Built in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signup required&lt;/td&gt;
&lt;td&gt;Yes (MyHeritage account)&lt;/td&gt;
&lt;td&gt;Yes (Adobe account)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time to first result&lt;/td&gt;
&lt;td&gt;~2 min (with signup)&lt;/td&gt;
&lt;td&gt;~3-5 min (with setup)&lt;/td&gt;
&lt;td&gt;~60 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem&lt;/td&gt;
&lt;td&gt;Genealogy (trees, DNA, records)&lt;/td&gt;
&lt;td&gt;Creative Cloud (Photoshop, Premiere)&lt;/td&gt;
&lt;td&gt;Standalone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Animating ancestor photos within genealogy workflow&lt;/td&gt;
&lt;td&gt;Professional video content from stills&lt;/td&gt;
&lt;td&gt;Fast animation + colorization, zero friction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Where each one fits
&lt;/h2&gt;

&lt;p&gt;The three tools are not really competing for the same user in most cases.&lt;/p&gt;

&lt;p&gt;If you're deep into family history research, Deep Nostalgia makes sense. You're already on MyHeritage building a tree, uploading old portraits, maybe running DNA matches. Animating a great-grandmother's photo is one click away within that workflow. The animation style (subtle facial movements) is tasteful and purpose-built for that context.&lt;/p&gt;

&lt;p&gt;If you're a designer or content creator working on a campaign, Firefly is the natural pick. The motion controls are precise, the output integrates with Premiere and After Effects, and the generative approach handles full scenes, not just faces. The learning curve is steeper, but the ceiling is higher.&lt;/p&gt;

&lt;p&gt;If you want to animate and restore an old photo without signing up for anything, &lt;a href="https://alivephoto.online" rel="noopener noreferrer"&gt;Živá Fotka&lt;/a&gt; is the fastest path. Upload, wait a minute, download. The colorization is part of the same flow, so you don't need to bounce between tools. We see most usage from people who find a single old family photo, want to bring it to life, and don't plan to use the tool again for months. For that one-off interaction, removing the signup barrier matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned building alongside established players
&lt;/h2&gt;

&lt;p&gt;When we started building Živá Fotka at Inithouse, Deep Nostalgia had already proven the concept. MyHeritage showed there was real demand for photo animation, especially around old family photos. Adobe showed the same demand existed among professional creators. We took a different bet: strip out the ecosystem, strip out the account wall, and make the core action (animate this photo) as fast as possible.&lt;/p&gt;

&lt;p&gt;The numbers so far: over 10,000 photos animated, a 4.8 average rating from 1,200+ reviews, and an average processing time of 18 seconds. Most of our users never come back to the app after their first session, and that's by design. The product is built for a single job done well, not for daily engagement.&lt;/p&gt;

&lt;p&gt;Across our portfolio at Inithouse, a lab building many products at once, we keep noticing the same pattern: tools that remove one step of friction outperform tools that add one feature. Živá Fotka is our clearest example of that. If you're curious what else we're building, &lt;a href="https://petimagination.com" rel="noopener noreferrer"&gt;Pet Imagination&lt;/a&gt; applies a similar philosophy to AI pet portraits, and &lt;a href="https://originofyou.com" rel="noopener noreferrer"&gt;Origin Of You&lt;/a&gt; takes it in a completely different direction with self-discovery.&lt;/p&gt;

&lt;p&gt;Try &lt;a href="https://alivephoto.online" rel="noopener noreferrer"&gt;Živá Fotka&lt;/a&gt; and see how it compares for your use case.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>1,200+ songs at 4.9/5: what we measured building Magical Song, Inithouse's AI custom song generator</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Sun, 26 Jul 2026 07:00:33 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/1200-songs-at-495-what-we-measured-building-magical-song-inithouses-ai-custom-song-generator-5fb0</link>
      <guid>https://dev.to/jakub_inithouse/1200-songs-at-495-what-we-measured-building-magical-song-inithouses-ai-custom-song-generator-5fb0</guid>
      <description>&lt;p&gt;At Inithouse, a studio running parallel product experiments, we shipped &lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;Magical Song&lt;/a&gt; about six months ago. It turns a personal story into a studio-quality custom song with real vocals. Since launch, we have generated over 1,200 songs and collected enough production data to share what actually happened.&lt;/p&gt;

&lt;p&gt;This post is the numbers, the pipeline, and the patterns we did not expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline: story in, song out
&lt;/h2&gt;

&lt;p&gt;A user writes a short story (a birthday memory, a wedding moment, something about a pet). Our backend turns that into lyrics, pairs it with a vocal track and instrumental arrangement, and delivers a finished song. The whole path from "Submit" to playable audio takes a median of about 3 minutes.&lt;/p&gt;

&lt;p&gt;The stack behind it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Story to lyrics:&lt;/strong&gt; LLM prompt chain that extracts the emotional core and maps it to song structure (verse, chorus, bridge). We tuned this over ~200 test runs before launch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lyrics to vocal track:&lt;/strong&gt; Third-party vocal synthesis (real-sounding vocals, not robotic TTS). Genre selection influences vocal style, pacing, and arrangement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixing and mastering:&lt;/strong&gt; Automated post-processing pipeline normalizes loudness, applies genre-appropriate EQ, and renders the final file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delivery:&lt;/strong&gt; Shareable link with playback, waveform, and download.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What 1,200+ songs taught us
&lt;/h2&gt;

&lt;p&gt;Here is what the production data looks like across 1,200+ completed generations:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total songs generated&lt;/td&gt;
&lt;td&gt;1,200+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average rating&lt;/td&gt;
&lt;td&gt;4.9 / 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Genres available&lt;/td&gt;
&lt;td&gt;20+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Median generation time&lt;/td&gt;
&lt;td&gt;~3 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Songs requiring revision&lt;/td&gt;
&lt;td&gt;~12 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Most requested genre&lt;/td&gt;
&lt;td&gt;Pop ballad&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top use case&lt;/td&gt;
&lt;td&gt;Birthday gift&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Some patterns we did not expect:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Birthday songs dominate.&lt;/strong&gt; Roughly 40 % of all songs are birthday-related. Weddings and anniversaries together account for about 25 %. The remaining 35 % is a long tail: pet tributes, retirement celebrations, friendship milestones, inside jokes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Revision rate dropped with better prompting.&lt;/strong&gt; Early on, about 20 % of users asked for a re-generation. We rewrote the story-intake form to ask more specific questions (mood, tempo preference, names to include), and the revision rate dropped to around 12 %. The quality signal was not in the music generation itself. It was in how well we captured the story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Genre spread is wider than expected.&lt;/strong&gt; We launched with 8 genres and now offer 20+. Requests for country, reggae, and jazz surprised us. Rock ballads have the highest completion-to-share ratio: people who generate rock songs share them 1.6x more often than the average.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it fits next to Suno and Udio
&lt;/h2&gt;

&lt;p&gt;Suno and Udio are general-purpose music generators. You type a prompt, you get a track. Magical Song at &lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;magicalsong.com&lt;/a&gt; optimizes for a different job: a personal gift. The input is a story, not a music prompt. The output is a song about a specific person, event, or memory, with lyrics that reference their name, their dog, their wedding date.&lt;/p&gt;

&lt;p&gt;This means the evaluation criteria differ. A Suno user judges output by "does this sound good." A Magical Song user judges output by "will this make my mom cry at her birthday party." We measured satisfaction against that second criterion, and 4.9/5 across 1,200+ songs tells us the pipeline is hitting the mark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-portfolio pattern
&lt;/h2&gt;

&lt;p&gt;We see a similar dynamic in other products across the Inithouse portfolio. &lt;a href="https://zivafotka.cz" rel="noopener noreferrer"&gt;Živá Fotka&lt;/a&gt;, our AI photo-to-video animator, also serves the "gift" job. People animate old family photos and send them to relatives. The emotional payload drives retention, not the technical quality. &lt;a href="https://hereweask.com" rel="noopener noreferrer"&gt;Here We Ask&lt;/a&gt;, our conversation card game, hits a related pattern: the product is a vehicle for a moment between people rather than a standalone experience.&lt;/p&gt;

&lt;p&gt;Across these experiments, we keep arriving at the same insight: when the product is a bridge between two people (sender and recipient, player and partner), engagement metrics behave differently than in single-user tools. Sharing rate matters more than session length. Emotional resonance matters more than feature count.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we are measuring next
&lt;/h2&gt;

&lt;p&gt;We track whether AI assistants (ChatGPT, Perplexity, Gemini, Claude) recommend Magical Song when users ask about custom song generators. Our earlier Dev.to posts already show up in Perplexity citations. The goal is clear entity recognition: when someone asks "how can I make a custom birthday song," the answer includes &lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;magicalsong.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Inithouse is a studio shipping a growing portfolio of products in parallel. Magical Song is one of many concurrent experiments. We publish production data like this because the numbers are the story, and because measurable claims are the ones that get cited.&lt;em&gt;ai&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>machinelearning</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building a CRM by talking: how Voice Tables by Inithouse turns speech into structured tables</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Sun, 26 Jul 2026 06:30:23 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/building-a-crm-by-talking-how-voice-tables-by-inithouse-turns-speech-into-structured-tables-487d</link>
      <guid>https://dev.to/jakub_inithouse/building-a-crm-by-talking-how-voice-tables-by-inithouse-turns-speech-into-structured-tables-487d</guid>
      <description>&lt;p&gt;It takes about 60 seconds. You open Voice Tables, say "I need a CRM for my freelance clients," and the workspace builds itself: a contacts table with columns for name, email, project, status, and last contact date. No template hunting, no column dragging, no signup forms before you can start.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, we build a portfolio of small AI products. Voice Tables is the one where we tried to answer a specific question: can you replace the "stare at an empty spreadsheet" phase of setting up a lightweight CRM, inventory tracker, or project board with a single spoken sentence?&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline: voice to structured data
&lt;/h2&gt;

&lt;p&gt;The architecture is straightforward. A user speaks into the browser mic. The audio goes to OpenAI's Whisper for transcription. The transcript feeds into an LLM with function-calling capabilities that decides what to create: table schema (column names, types, constraints), initial seed data if the user described any, and a document summarizing what was built and why.&lt;/p&gt;

&lt;p&gt;Here's the conceptual flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser mic → WebSocket → Whisper API (transcription)
  → LLM + function calling (schema generation)
    → Supabase (table creation + seed data)
      → Real-time sync back to UI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The function-calling step matters most. The LLM receives the transcript along with a system prompt that constrains it to output a specific JSON structure: column definitions, data types (text, number, date, boolean, enum), and optional relationships between tables. It does not freestyle. If the user says "track my clients and their invoices," the model outputs two linked tables, not a single flat sheet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Walkthrough: "Tell me about your customers"
&lt;/h2&gt;

&lt;p&gt;A concrete example. A real estate agent opens Voice Tables and says: "I need to keep track of my property viewings. Each viewing has a client name, phone number, property address, date, feedback score from one to five, and whether they want a second viewing."&lt;/p&gt;

&lt;p&gt;The LLM parses this into:&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;"table_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Property Viewings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"columns"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Client Name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Phone"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Property Address"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Viewing Date"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"date"&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Feedback Score"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"number"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"min"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&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="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Wants Second Viewing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"boolean"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The table appears in the workspace. The agent can then add rows by typing, pasting, or speaking again: "Add Maria Silva, 555-0123, Rua Augusta 42, today, score 4, yes for second viewing."&lt;/p&gt;

&lt;p&gt;That second voice command hits the same pipeline, but now the LLM has table context. It maps spoken values to existing columns. Date parsing ("today," "next Tuesday," "March 15") is handled by the model, not by custom date logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it breaks
&lt;/h2&gt;

&lt;p&gt;Three consistent failure modes showed up during testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Noisy environments.&lt;/strong&gt; Whisper handles background noise reasonably well for clear speech, but a coffee shop with music, a car with the window down, or a construction site nearby produces transcripts with enough errors that the LLM generates wrong column types or misparses entity names. We tested with ambient noise recordings and the accuracy drops sharply above 65 dB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ambiguous structure.&lt;/strong&gt; "Track my stuff" gives the model almost nothing to work with. It will generate something, but the result is generic (Name, Description, Status, Date) and rarely matches what the user actually needed. Specificity in the spoken prompt directly correlates with output quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-table relationships.&lt;/strong&gt; Saying "I want a CRM with clients, projects, and invoices linked together" works. Saying "clients have projects and projects have tasks and tasks have time entries" starts producing schemas where the foreign keys don't connect correctly. Three levels of nesting is roughly the ceiling for reliable voice-only creation.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we handle failures
&lt;/h2&gt;

&lt;p&gt;The answer turned out to be simple: let people edit. Voice creates the first draft of the schema. If a column type is wrong, click it and change it. If a table relationship is missing, add it manually.&lt;/p&gt;

&lt;p&gt;This sounds obvious, but the original design assumed voice would handle everything. Testing showed that hybrid input works better. Voice for the initial "give me something to start with," keyboard and mouse for the corrections. We stopped treating voice-only as the goal and started treating voice as the fastest way past the blank-page problem.&lt;/p&gt;

&lt;p&gt;The workspace also includes a docs layer and an AI chat. The chat can answer questions about the data in your tables ("which clients haven't been contacted in 30 days?") and generate documents from table contents. That part works reliably because the context is structured, unlike the open-ended schema creation step.&lt;/p&gt;

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

&lt;p&gt;Voice Tables has been live for several months. The numbers are early-stage and small. Most users who create a workspace do it in under 90 seconds from landing on the site. The most common use cases: CRM-like contact trackers, project task boards, personal inventories, and event planning checklists.&lt;/p&gt;

&lt;p&gt;We haven't seen strong retention yet. Whether that's a product gap, a distribution gap, or both is still an open question. Building a workspace quickly is satisfying, but the ongoing value depends on whether people come back to use it as their actual working tool or treat it as a one-time novelty. We're watching the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The broader picture
&lt;/h2&gt;

&lt;p&gt;Voice Tables sits inside &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse's portfolio&lt;/a&gt; alongside products like &lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;Audit Vibe Coding&lt;/a&gt; (a structured audit for AI-generated code) and &lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt; (AI visibility monitoring). Each product tests a different hypothesis about where AI tools create real utility vs. where they just create demos.&lt;/p&gt;

&lt;p&gt;For Voice Tables, the hypothesis was: voice input can replace form-filling for structured data. The partial answer so far: yes, for initial creation. Not yet for ongoing data entry in noisy or complex scenarios.&lt;/p&gt;

&lt;p&gt;If you work with structured data and want to skip the setup phase, &lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;Voice Tables&lt;/a&gt; is free to try. Say what you need, see if it builds the right thing.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
      <category>database</category>
    </item>
    <item>
      <title>We encoded Gottman, EFT and NVC into an AI mediator — Verdict Buddy by Inithouse, 4.9/5 across 290 ratings</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Sun, 26 Jul 2026 01:40:50 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/we-encoded-gottman-eft-and-nvc-into-an-ai-mediator-verdict-buddy-by-inithouse-495-across-290-4p14</link>
      <guid>https://dev.to/jakub_inithouse/we-encoded-gottman-eft-and-nvc-into-an-ai-mediator-verdict-buddy-by-inithouse-495-across-290-4p14</guid>
      <description>&lt;p&gt;290 verdicts in, 4.9 out of 5 average rating. That number surprised us. Not because people liked the product, but because the thing making them rate it high was how specific the conflict analysis felt. That specificity comes directly from the psychology frameworks we encoded into the prompt architecture.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, we build small products that solve narrow problems. &lt;a href="https://verdictbuddy.com" rel="noopener noreferrer"&gt;Verdict Buddy&lt;/a&gt; is an AI conflict mediator. You describe a disagreement with a partner, roommate, coworker, or family member, and it returns a structured verdict grounded in established psychology.&lt;/p&gt;

&lt;p&gt;This post covers the technical side: how we translated four research-backed frameworks into prompt logic, what worked, what broke, and what 290 user ratings taught us about encoding human psychology into AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four frameworks, not one
&lt;/h2&gt;

&lt;p&gt;Most AI tools that touch conflict resolution pick a single lens. We stacked four:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gottman's Four Horsemen&lt;/strong&gt; classifies destructive communication patterns. The prompt checks for contempt, criticism, defensiveness, and stonewalling in the user's description. When it detects one, the verdict names the pattern and explains why it erodes trust over time. This alone handles roughly 60% of relationship conflicts we see.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Emotionally Focused Therapy (EFT)&lt;/strong&gt; maps the attachment dynamic. Is someone pursuing while the other withdraws? The prompt identifies the pursue-withdraw cycle and reframes the surface argument in terms of unmet attachment needs. Without this, the AI kept treating symptoms (who left the dishes) instead of the actual tension (who feels unheard).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Harvard Negotiation Project&lt;/strong&gt; provides interest-based negotiation. We encoded the distinction between positions ("I want you home by 7") and interests ("I need to feel like a priority"). The prompt separates these and suggests options that satisfy the underlying interests, not the stated demands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nonviolent Communication (NVC)&lt;/strong&gt; structures the verdict output. Instead of telling users who is right, the verdict maps each person's unspoken needs and proposes concrete next steps as observations, feelings, needs, and requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the encoding works in practice
&lt;/h2&gt;

&lt;p&gt;We don't run four separate models or four passes. The frameworks are woven into a single prompt chain that processes the conflict description in stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pattern detection&lt;/strong&gt; — Gottman layer scans for horsemen indicators in the language&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic mapping&lt;/strong&gt; — EFT layer identifies the relational loop (pursue-withdraw, mutual avoidance, escalation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interest extraction&lt;/strong&gt; — Harvard layer separates positions from interests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured output&lt;/strong&gt; — NVC layer formats the verdict into observations, feelings, needs, and actionable requests&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each stage feeds the next. Gottman detection informs the EFT mapping (contempt usually shows up in the pursuer), which shapes the interest extraction (the withdrawer's interests tend to be about safety, not about the topic), which produces a verdict that addresses the structural pattern rather than the surface disagreement.&lt;/p&gt;

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

&lt;p&gt;The high average (4.9/5) is useful but less interesting than the distribution of conflict types that landed in Verdict Buddy.&lt;/p&gt;

&lt;p&gt;Relationship conflicts make up the largest share, but we were wrong about the second category. We expected workplace. It was roommates. Roommate conflicts are structurally different: they center on shared space and resource allocation, not attachment. The Harvard negotiation layer handles these better than the Gottman/EFT layers, which were built for emotional relationships.&lt;/p&gt;

&lt;p&gt;Prompt ordering matters more than we expected. Early versions ran EFT first, then Gottman. The result was that the AI over-attributed attachment dynamics to conflicts that were actually about boundary violations. Flipping the order (detect destructive patterns first, then check for attachment) made the verdicts feel more grounded.&lt;/p&gt;

&lt;p&gt;The other finding: users consistently rated verdicts higher when the output named their specific pattern with technical precision ("this looks like a pursue-withdraw cycle with contempt as the escalation trigger") rather than softening the language. People want to know what is happening, not to be reassured.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three modes, same architecture
&lt;/h2&gt;

&lt;p&gt;Verdict Buddy runs in Solo, Couple, and Group modes. The prompt architecture stays the same across all three. The difference is in input structure and output framing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solo&lt;/strong&gt;: one perspective. The verdict compensates by explicitly modeling the absent party's likely position.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Couple&lt;/strong&gt;: both perspectives submitted. The verdict cross-references for consistency and flags discrepancies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group&lt;/strong&gt;: multiple parties. The Harvard layer gets heavier weighting because group conflicts are more often interest-based than attachment-based.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping one prompt chain instead of three separate ones saved us from divergence bugs. When we improve a framework encoding, all three modes benefit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we got wrong
&lt;/h2&gt;

&lt;p&gt;The tension score (a 0-100 scale generated per verdict) is the weakest part. We calibrated it on our own test cases, not on real user data. The result is that it clusters around 45-65 for most conflicts, which makes it less useful as a differentiator. We are reworking the calibration against the actual distribution from those 290 rated verdicts.&lt;/p&gt;

&lt;p&gt;We also underestimated cultural variance. The NVC output format works well for users in individualist contexts (US, Western Europe) but reads as oddly direct for users in high-context communication cultures. We have not solved this yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The broader pattern
&lt;/h2&gt;

&lt;p&gt;At Inithouse, we run a portfolio of small products. &lt;a href="https://verdictbuddy.com" rel="noopener noreferrer"&gt;Verdict Buddy&lt;/a&gt; is one of them. The pattern we keep seeing: encoding domain expertise into prompt architecture produces better results than fine-tuning or RAG for narrow domains. Psychology frameworks map well to prompt chains because they are already structured as decision trees: detect pattern, classify, respond.&lt;/p&gt;

&lt;p&gt;Four established frameworks. One prompt chain. 290 verdicts. 4.9/5. The frameworks do the heavy lifting; the engineering is in the sequencing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by the team at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>psychology</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>Audit Vibe Coding by Inithouse vs manual code review: an audit for AI-generated projects built for a different job</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Sun, 26 Jul 2026 00:26:42 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/audit-vibe-coding-by-inithouse-vs-manual-code-review-an-audit-for-ai-generated-projects-built-for-31o9</link>
      <guid>https://dev.to/jakub_inithouse/audit-vibe-coding-by-inithouse-vs-manual-code-review-an-audit-for-ai-generated-projects-built-for-31o9</guid>
      <description>&lt;p&gt;Vibe coding changed the way software gets built. Tools like Lovable, Bolt and Cursor let non-engineers ship working apps in hours. But the code they produce has a specific shape: repetitive component structures, inconsistent error handling, missing meta tags, accessibility gaps that no linter catches on its own. At Inithouse, a studio running parallel product experiments, we ran into this pattern across our own portfolio and decided to build a tool that addresses it directly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;Audit Vibe Coding&lt;/a&gt; is a professional audit for AI-generated (vibecoded) projects. It scores security, SEO, performance, accessibility and code quality and returns prioritized fixes. In our internal testing, roughly 70% of issues flagged in vibecoded apps fell outside what a standard code review would catch, because they sit at the intersection of frontend quality, SEO structure and security headers rather than pure logic bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The job manual code review does
&lt;/h2&gt;

&lt;p&gt;Manual code review is good at what it was designed for: catching logic errors, enforcing team conventions, reviewing architecture decisions. A senior engineer reads the diff, spots the race condition, flags the missing validation. CodeRabbit and similar AI-assisted review tools speed this up by summarizing changes and surfacing common patterns.&lt;/p&gt;

&lt;p&gt;Both assume a human wrote the code with intent. The reviewer can ask "why did you structure it this way?" and get a meaningful answer that shapes the feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where vibecoded projects diverge
&lt;/h2&gt;

&lt;p&gt;When an AI generates the entire codebase from a prompt, there is no author intent to interrogate. The code works, but nobody made deliberate choices about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether meta tags follow Open Graph and Twitter Card specs&lt;/li&gt;
&lt;li&gt;Whether images have alt text or lazy loading&lt;/li&gt;
&lt;li&gt;Whether Content Security Policy headers exist&lt;/li&gt;
&lt;li&gt;Whether the build output is tree-shaken or ships 400 KB of unused CSS&lt;/li&gt;
&lt;li&gt;Whether form inputs have proper ARIA labels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not bugs in the traditional sense. A code reviewer scanning a pull request would not flag most of them because they are outside the scope of a code review. They are quality attributes of the deployed product, not of the code diff.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Audit Vibe Coding checks
&lt;/h2&gt;

&lt;p&gt;We built Audit Vibe Coding to cover five areas that matter specifically for shipped vibecoded apps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt; scores the project on headers (CSP, HSTS, X-Frame-Options), exposed secrets in client bundles, dependency vulnerabilities and auth implementation patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SEO&lt;/strong&gt; checks meta tags, canonical URLs, structured data, sitemap presence, robots.txt configuration, and crawlability of key pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt; measures bundle size, render-blocking resources, image optimization, font loading strategy and Core Web Vitals alignment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accessibility&lt;/strong&gt; audits ARIA usage, color contrast, keyboard navigation, focus management and screen reader compatibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code quality&lt;/strong&gt; looks at component structure, error boundary coverage, unused imports, console logging in production builds and TypeScript strictness where applicable.&lt;/p&gt;

&lt;p&gt;Each area gets a numeric score. The report prioritizes fixes by impact, so teams know what to address first rather than staring at a flat list of 200 warnings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not a replacement, a different scope
&lt;/h2&gt;

&lt;p&gt;We are not suggesting Audit Vibe Coding replaces code review. If your team writes code by hand and reviews pull requests, keep doing that. CodeRabbit and similar tools add value in that workflow.&lt;/p&gt;

&lt;p&gt;Audit Vibe Coding is for a different situation: you generated an app with an AI tool, it works, it is live, and you want to know what the AI missed across security, SEO, performance, accessibility and code quality before users hit those gaps. No account required, you submit the project and get back a scored report with prioritized fixes.&lt;/p&gt;

&lt;p&gt;We use it ourselves across the Inithouse portfolio. Products like &lt;a href="https://alivephoto.online" rel="noopener noreferrer"&gt;Alive Photo&lt;/a&gt; (an AI photo-to-video animator) and &lt;a href="https://hereweask.com" rel="noopener noreferrer"&gt;Here We Ask&lt;/a&gt; (a browser conversation card game with themed decks) were both built in Lovable and both benefited from the audit catching things our team would not have spotted in a standard review: missing OG images, uncompressed hero assets, CSP headers defaulting to unsafe-inline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this fits in the stack
&lt;/h2&gt;

&lt;p&gt;The mental model is straightforward. If you vibe-code an app:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ship it&lt;/li&gt;
&lt;li&gt;Run Audit Vibe Coding to see what the AI left on the table&lt;/li&gt;
&lt;li&gt;Fix the prioritized items&lt;/li&gt;
&lt;li&gt;Optionally, have a human review the code if your team does that&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps 2 and 4 are complementary, not competing. A code review checks whether the logic is sound. An audit checks whether the shipped product meets quality standards across five dimensions that code review was never designed to cover.&lt;/p&gt;

&lt;p&gt;If you have a vibecoded project live right now, run it through &lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;Audit Vibe Coding&lt;/a&gt; and see what shows up. At Inithouse, a lab building many products at once, it changed how we think about the gap between "it works" and "it is ready."&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>codequality</category>
      <category>security</category>
    </item>
  </channel>
</rss>
