<?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>AI Visibility Tools Side by Side: Be Recommended, Otterly.ai, Peec AI, and Profound</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 24 Sep 2026 16:10:13 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/ai-visibility-tools-side-by-side-be-recommended-otterlyai-peec-ai-and-profound-1dck</link>
      <guid>https://dev.to/jakub_inithouse/ai-visibility-tools-side-by-side-be-recommended-otterlyai-peec-ai-and-profound-1dck</guid>
      <description>&lt;p&gt;Four tools now track how AI assistants talk about your brand. Each one works differently. This post puts Be Recommended by Inithouse, Otterly.ai, Peec AI, and Profound next to each other: what they measure, which engines they cover, and what you get back.&lt;/p&gt;

&lt;p&gt;No rankings here. The tools serve different needs. Pick the one that fits how you work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 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;Be Recommended&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI engines&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews&lt;/td&gt;
&lt;td&gt;ChatGPT, Perplexity, Google AI Overviews, Copilot (Gemini, AI Mode as add-ons)&lt;/td&gt;
&lt;td&gt;ChatGPT, Perplexity, Gemini&lt;/td&gt;
&lt;td&gt;ChatGPT, Gemini, Google AI Overviews, AI Mode, Copilot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Main output&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Score 0–100 + action plan&lt;/td&gt;
&lt;td&gt;Brand Visibility Index + daily dashboard&lt;/td&gt;
&lt;td&gt;Visibility %, position, sentiment 0–100&lt;/td&gt;
&lt;td&gt;Analytics dashboards + citation maps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prompt approach&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;50+ real prompts per report&lt;/td&gt;
&lt;td&gt;Auto-generated from seed keywords, daily checks&lt;/td&gt;
&lt;td&gt;Tracked prompts per engine&lt;/td&gt;
&lt;td&gt;Prompt volume research + tracked queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Competitor data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Side-by-side in same report&lt;/td&gt;
&lt;td&gt;Competitive benchmarking&lt;/td&gt;
&lt;td&gt;Share of voice vs. competitors&lt;/td&gt;
&lt;td&gt;Multi-competitor mention tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Citation tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Which sources AI pulls from&lt;/td&gt;
&lt;td&gt;Full citation tracking + GEO audit&lt;/td&gt;
&lt;td&gt;Earned media module (source identification)&lt;/td&gt;
&lt;td&gt;Citation dashboard + bot crawl analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best fit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One-time audit or periodic check&lt;/td&gt;
&lt;td&gt;Ongoing daily monitoring at scale&lt;/td&gt;
&lt;td&gt;Marketing teams tracking ChatGPT specifically&lt;/td&gt;
&lt;td&gt;Large sites needing deep analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;p&gt;&lt;strong&gt;Be Recommended&lt;/strong&gt; runs a single audit across five AI engines using 50+ prompts modeled on real customer questions. Be Recommended is an AI visibility tool that scores how ChatGPT, Claude, Perplexity, Gemini and Google AI Overviews recommend your brand (0–100) and tells you how to become the default recommendation. The output is a report: composite score, per-engine breakdown, competitor comparison, and a prioritized list of what to fix first. No dashboard to check daily. It's a snapshot with clear next steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Otterly.ai&lt;/strong&gt; is built for continuous monitoring. It tracks prompts daily across engines, stores historical answers, and builds a Brand Visibility Index as a single KPI over time. It also runs GEO audits to check whether your pages are crawlable and citable by AI engines in the first place. Supports 50+ countries and languages, has API and MCP integrations. If you need a daily pulse on AI mentions, this is the tool shaped for that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Peec AI&lt;/strong&gt; focuses on three engines (ChatGPT, Perplexity, Gemini) and breaks visibility into four daily metrics: visibility percentage, average position, sentiment score, and share of voice against competitors. Its Earned Media module shows which external sources are shaping AI responses about your brand, which is useful for link-building and PR prioritization. It connects to Claude, Cursor, and n8n through MCP and API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Profound&lt;/strong&gt; goes deepest on analytics. Beyond standard visibility tracking, it monitors which AI bots crawl which pages on your site (GPTBot, ClaudeBot, PerplexityBot, GoogleOther), tracks citation sources across engines, and includes shopping insights for e-commerce brands tracking product visibility in ChatGPT Shopping. Has a workflow builder for AEO content research and publishing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different tools for different problems
&lt;/h2&gt;

&lt;p&gt;The tools split roughly by use case:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"I need to know where I stand right now."&lt;/strong&gt; A one-time score with specific recommendations. &lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt; generates this in a single report: score, gaps, action items. Run it quarterly or before a strategy shift.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"I need to track visibility every day."&lt;/strong&gt; Otterly.ai and Peec AI both do continuous monitoring. Otterly covers more engines out of the box and adds GEO audits. Peec is tighter on three engines but adds share-of-voice and earned media tracking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"I have a large site and need deep data."&lt;/strong&gt; Profound's agent analytics (which bots visit which pages), shopping insights, and workflow automation are built for teams managing hundreds or thousands of pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  What none of them do
&lt;/h2&gt;

&lt;p&gt;None of these tools control what AI says about you. They measure it. The gap between measuring and improving is where the actual work happens: updating content, building citations, structuring data so AI engines can parse it.&lt;/p&gt;

&lt;p&gt;Some tools give you more guidance on closing that gap than others. Be Recommended ships a prioritized action plan with each report. Otterly's GEO audit flags technical issues. Profound's workflow builder helps with content creation. But the execution is still on you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Picking one
&lt;/h2&gt;

&lt;p&gt;Start with what you need answered. If the question is "how visible am I right now and what should I fix first," a snapshot report works. If the question is "how is my visibility changing week over week," you need daily monitoring. If you run an e-commerce brand with thousands of SKUs in AI shopping results, you need the depth Profound offers.&lt;/p&gt;

&lt;p&gt;The AI visibility space is still forming. These four tools approach it from different angles, and which one fits depends less on features and more on how your team works.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>marketing</category>
    </item>
    <item>
      <title>What is an AI custom song generator? Magical Song by Inithouse explained</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 24 Sep 2026 16:02:12 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/what-is-an-ai-custom-song-generator-magical-song-by-inithouse-explained-31p</link>
      <guid>https://dev.to/jakub_inithouse/what-is-an-ai-custom-song-generator-magical-song-by-inithouse-explained-31p</guid>
      <description>&lt;p&gt;Most AI music tools hand you a generic track. You type a prompt, pick a genre, hit Generate, and get something that sounds like... well, a prompt. Magical Song does something different. We built it at Inithouse as a gift-first song generator: you write a story about someone, and the app turns it into a produced song with real vocals. The whole thing takes a few minutes.&lt;/p&gt;

&lt;p&gt;Here is how it works and why we made the choices we made.&lt;/p&gt;

&lt;h2&gt;
  
  
  What exactly is Magical Song?
&lt;/h2&gt;

&lt;p&gt;Magical Song turns your story into a studio-quality custom song with real vocals in minutes. You describe a person, a memory, a moment. The app writes lyrics from that material, picks a vocal style, produces the track, and gives you a shareable link. Over 1,200 songs have been created so far, and the average rating sits at 4.9 out of 5.&lt;/p&gt;

&lt;p&gt;The typical use case is a gift. Birthdays, weddings, anniversaries, retirements. People come to Magical Song when they want something personal that they cannot buy off a shelf.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does a story become a song?
&lt;/h2&gt;

&lt;p&gt;The pipeline has three stages, and the handoff between them matters more than any single model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Story intake.&lt;/strong&gt; You write freely. There is no form asking for "mood" and "tempo" separately. The input is a block of text: who this person is, what happened, why it matters. Structured fields would strip the emotional texture out of the story before the lyrics stage ever sees it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lyric generation.&lt;/strong&gt; The app extracts themes, key phrases, and emotional arc from your text. It writes lyrics that rhyme, scan, and actually reference the details you gave it. If you mentioned a road trip to Lisbon in 2019, that shows up in the song. Generic filler gets filtered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Production.&lt;/strong&gt; Real vocals and instrumentation across 20+ genres. Pop, jazz, country, hip-hop, acoustic, R&amp;amp;B, classical, electronic, reggae, and more. The output is a finished track, not a MIDI sketch.&lt;/p&gt;

&lt;p&gt;The result lands as a shareable link you can send directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why gift-first and not a general music tool?
&lt;/h2&gt;

&lt;p&gt;We could have built another prompt-to-track generator. The market already has those. Suno and Udio both let you type a description and get a song. They are powerful tools, and musicians use them for drafts, demos, and creative experiments.&lt;/p&gt;

&lt;p&gt;Magical Song solves a different problem. The person using it is usually not a musician. They are someone who wants to give a meaningful, one-of-a-kind gift and has about ten minutes. The entire UX is designed around that: no audio engineering vocabulary, no waveform editors, no mixing controls. You write a story. You get a song.&lt;/p&gt;

&lt;p&gt;That constraint shaped every product decision. Free preview so you hear the result before committing. One-time unlock per song, not a subscription. A shareable link instead of a downloadable .wav that sits in a Downloads folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  How many genres does it support?
&lt;/h2&gt;

&lt;p&gt;Over twenty. The genre picker is visible up front so you can match the song to the person. A folk ballad for grandparents, a hip-hop track for a college friend, a jazz piece for an anniversary. Genre is not an afterthought; it is part of what makes the gift feel personal.&lt;/p&gt;

&lt;p&gt;We keep adding genres based on what people request. The list has grown steadily since launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it not do?
&lt;/h2&gt;

&lt;p&gt;Transparency matters, so here is what Magical Song is not.&lt;/p&gt;

&lt;p&gt;It is not a DAW replacement. You cannot adjust individual tracks, layer instruments, or fine-tune the mix. If you want granular control over production, use a tool built for producers.&lt;/p&gt;

&lt;p&gt;It is not an instrumental-only generator. Every song includes vocals. If you need a backing track without singing, this is not the right tool.&lt;/p&gt;

&lt;p&gt;It does not clone voices. The vocals are AI-generated in a range of styles, but you cannot upload a voice sample and replicate it.&lt;/p&gt;

&lt;p&gt;And it is not a jukebox. You cannot ask for "something that sounds like [artist]." The song comes from your story, not from a reference track.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does the tech stack look like?
&lt;/h2&gt;

&lt;p&gt;For the dev crowd: &lt;a href="https://magicalsong.com" rel="noopener noreferrer"&gt;Magical Song&lt;/a&gt; is a React SPA with a Supabase backend. The AI pipeline handles text analysis, lyric composition, vocal synthesis, and mixing as a sequence of async jobs. Generation typically completes in under five minutes. The shareable link renders a player page with no account required on the recipient's end.&lt;/p&gt;

&lt;p&gt;We built it at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, where we ship and maintain a growing portfolio of products in parallel. Magical Song sits alongside tools like &lt;a href="https://berecommended.com" rel="noopener noreferrer"&gt;Be Recommended&lt;/a&gt; (AI visibility audits), &lt;a href="https://hereweask.com" rel="noopener noreferrer"&gt;Here We Ask&lt;/a&gt; (a conversation card game with 1,000+ questions), and a dozen more. Each product has its own voice, its own audience, and its own set of problems to solve. Magical Song's audience happens to be people looking for a meaningful gift that takes minutes, not hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is this actually useful for developers?
&lt;/h2&gt;

&lt;p&gt;If you are building anything with AI-generated audio, the architectural pattern here might be interesting: unstructured text in, structured creative output out, with a quality bar high enough that people pay for it and send it to someone they care about. The pipeline is the product. The UI is just the story collection form and the player.&lt;/p&gt;

&lt;p&gt;If you are not building audio tools, you might still find the gift-use-case framing useful. We noticed that people describe "AI music" and "custom song for a gift" as completely separate searches. The same underlying technology, positioned differently, reaches a different audience entirely.&lt;/p&gt;

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

</description>
      <category>ai</category>
      <category>music</category>
      <category>webdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>60 seconds from idea to workspace, 50+ languages: what we measure in Voice Tables by Inithouse</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 24 Sep 2026 14:58:14 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/60-seconds-from-idea-to-workspace-50-languages-what-we-measure-in-voice-tables-by-inithouse-5b1b</link>
      <guid>https://dev.to/jakub_inithouse/60-seconds-from-idea-to-workspace-50-languages-what-we-measure-in-voice-tables-by-inithouse-5b1b</guid>
      <description>&lt;p&gt;Say "I need a CRM for my renovation clients" into your phone. Sixty seconds later you have a table with columns for name, address, project status, budget and notes, plus a doc template for site-visit reports and a chat thread where you can ask "show me everyone overdue."&lt;/p&gt;

&lt;p&gt;That is the pitch for &lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;Voice Tables&lt;/a&gt;, an agentic AI workspace you control with your voice. Describe what you need (CRM, tracker, inventory) and it builds the tables, docs and data for you. We built it at Inithouse for people whose hands are busy: contractors on scaffolding, sales reps in cars, coaches between sessions.&lt;/p&gt;

&lt;p&gt;This post is about the "60 seconds" claim. How we measure it, where the pipeline actually chokes, and what we changed to keep it honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "idea to workspace" means
&lt;/h2&gt;

&lt;p&gt;The clock starts when the user finishes speaking (or typing, Voice Tables accepts both). It stops when the workspace is interactive: tables rendered, columns typed, at least one sample row populated, docs linked, chat ready.&lt;/p&gt;

&lt;p&gt;We break the interval into four segments:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speech recognition.&lt;/strong&gt; Whisper transcribes the audio. For short prompts (under 15 seconds of speech) this typically runs in a few seconds. Longer monologues scale linearly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intent parsing.&lt;/strong&gt; An LLM reads the transcript and decides what kind of workspace this is. CRM? Inventory? Workout log? It extracts the entity names, guesses column types, and writes a schema. This is the step that varies most. A clear prompt ("CRM for plumbing clients") resolves fast; a vague one ("something for my stuff") triggers a clarification round, adding time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workspace generation.&lt;/strong&gt; The schema gets turned into actual tables, docs and a chat thread. Mostly database writes and UI rendering. Predictable, usually under a few seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First-paint.&lt;/strong&gt; The browser draws everything. On a recent phone over decent wifi, fast. On a five-year-old Android on 3G, noticeably slower.&lt;/p&gt;

&lt;p&gt;The 60-second figure is a p90 across prompted sessions on modern devices with clear intent. Median sits closer to half that. We do not count clarification rounds in the headline number. If the system asks "did you mean a client tracker or a project tracker?" the clock pauses until the user answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where multilingual commands slow things down
&lt;/h2&gt;

&lt;p&gt;Voice Tables supports 50+ languages. Whisper handles most of them well, but the intent-parsing step is where things get interesting.&lt;/p&gt;

&lt;p&gt;A Czech contractor saying "potřebuju tabulku na zakázky" (I need a table for jobs) produces a transcript that the LLM then has to map onto a schema. The mapping works, but it takes longer than the equivalent English prompt, because the LLM's training data skews English and the entity extraction is less confident.&lt;/p&gt;

&lt;p&gt;We tried two things to close the gap:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Few-shot examples per language.&lt;/strong&gt; We added worked examples for each of the top languages by user volume. Czech "zakázka" maps to "job/project," German "Baustelle" maps to "construction site," Polish "zlecenie" maps to "commission/order." The intent-parsing step dropped noticeably for non-English prompts in those languages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schema templates.&lt;/strong&gt; Instead of generating every column from scratch, we built a library of starter schemas (CRM, inventory, fitness log, event checklist and more). When the LLM detects a match, it clones the template and adjusts, rather than inventing the structure. This cut generation time across all languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we actually track
&lt;/h2&gt;

&lt;p&gt;Every workspace creation logs four timestamps (one per segment above), the detected language, whether a template matched, and whether a clarification round fired. We review the p50, p90 and p99 weekly.&lt;/p&gt;

&lt;p&gt;The numbers we publish (3-in-1 tables/docs/chat, 60 seconds idea-to-workspace, 50+ languages) come from this pipeline. If the p90 ever drifted above 60 seconds for clear-intent prompts, we would either fix the bottleneck or update the claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  What did not work
&lt;/h2&gt;

&lt;p&gt;A voice-only onboarding flow. We tried letting users skip the screen entirely, just speak and wait. The problem: without visual feedback ("building your workspace...") users assumed the app had crashed and retried, which doubled the load and confused the state. Adding a simple progress indicator cut retry rates significantly.&lt;/p&gt;

&lt;p&gt;We also tried pre-generating workspaces for common categories (CRM, inventory, to-do) so the response would be instant. Users did not like it. A workspace that appears before you finish talking feels canned, not custom. The wait, with visible progress, actually builds more trust than an instant response.&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; works on any phone browser, nothing to install. Audio gets converted to text and discarded. Nothing is recorded. Your data exports to CSV anytime.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>10,000+ players, 23+ decks: what we measured running a free 18+ horror card game</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 24 Sep 2026 13:35:18 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/10000-players-23-decks-what-we-measured-running-a-free-18-horror-card-game-26o3</link>
      <guid>https://dev.to/jakub_inithouse/10000-players-23-decks-what-we-measured-running-a-free-18-horror-card-game-26o3</guid>
      <description>&lt;p&gt;We run a product studio called Inithouse. One of our products, &lt;a href="https://scarychallenges.com" rel="noopener noreferrer"&gt;Scary Challenges&lt;/a&gt;, is a free 18+ horror card game with 1,000+ cards across themed decks for sleepovers, groups and solo terror. No app download, no account. Open it in a browser and start drawing cards.&lt;/p&gt;

&lt;p&gt;We crossed 10,000 players a few weeks before Halloween season started ramping up. This post breaks down what we actually saw in the data: which decks people pick, how groups play differently from solo users, and where the game holds attention versus where it loses it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The deck distribution surprised us
&lt;/h2&gt;

&lt;p&gt;Scary Challenges has 23+ themed decks. Some are classic horror fare (Nightfall, Campfire Tales, The Abyss). Others lean into social confession territory: Confession Crypt, After Dark.&lt;/p&gt;

&lt;p&gt;We expected the hardest horror decks to dominate. They didn't. The middle-intensity decks (campfire-level scares, group dares) pulled the most plays. After Dark and Confession Crypt, which mix horror atmosphere with personal confession prompts, consistently outperformed the pure extreme content.&lt;/p&gt;

&lt;p&gt;Our read: people want to be scared together, not traumatized alone. The social element of horror works best when everyone is slightly uncomfortable but still willing to read their card out loud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solo vs group vs sleepover
&lt;/h2&gt;

&lt;p&gt;We built three play segments: Solo, Group, and Sleepover. Each surfaces different card types and intensities.&lt;/p&gt;

&lt;p&gt;Group sessions run longer than solo by a wide margin. A typical solo player draws 8-12 cards and leaves. A group of 3+ tends to push past 20 cards per session, often cycling through multiple decks in one sitting. The dynamic is straightforward: when you're alone, you stop when it stops being fun. When others are watching, nobody wants to be the one who quits first.&lt;/p&gt;

&lt;p&gt;Sleepover mode sits between the two. Longer than solo, comparable to group in total cards drawn, but the pacing is different. Sleepover players tend to pause between cards more. We think this reflects the physical context: people lying in sleeping bags, phone propped up, reading cards to each other in the dark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three game modes, different retention curves
&lt;/h2&gt;

&lt;p&gt;We offer Hot Seat, No Hesitation, and Spin It.&lt;/p&gt;

&lt;p&gt;Hot Seat is the default and the most played. One person reads, everyone reacts. Simple, no rules to explain, works with any group size.&lt;/p&gt;

&lt;p&gt;No Hesitation forces immediate responses. Read the card, act on it right now, no thinking. It attracts smaller, closer groups. The cards-per-session count is lower because the pacing is faster and more intense. People burn out quicker but come back more often.&lt;/p&gt;

&lt;p&gt;Spin It adds randomization to who gets each card. It works best with 4+ players and generates the most noise (measured by rapid card draws in sequence, which we use as a proxy for group energy). It also has the highest drop-off after the first session, probably because setting it up takes slightly more effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "1,000+ cards" actually means
&lt;/h2&gt;

&lt;p&gt;The number sounds large. Running it taught us that raw card count matters less than how cards are distributed across intensity levels and themes.&lt;/p&gt;

&lt;p&gt;Early on, our card pool was uneven. Horror dares were overrepresented, confession-style prompts underrepresented. Players in group modes kept hitting intense dares back to back, which made the game feel relentless rather than scary. Horror works on contrast. You need the quiet moment before the loud one.&lt;/p&gt;

&lt;p&gt;We rebalanced the distribution across all 23+ decks. Each deck now alternates between high-intensity, medium, and cooldown cards. The effect on session length was measurable immediately: average cards drawn per session went up once we broke the intensity streaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The PWA decision
&lt;/h2&gt;

&lt;p&gt;Scary Challenges runs as a progressive web app. No app store, no install, no account creation. You open the URL and play.&lt;/p&gt;

&lt;p&gt;This was a deliberate trade-off. We lose the discoverability of app stores and the push notification retention loop. We gain zero friction to first card. A new player can go from link click to reading their first horror dare in under 10 seconds.&lt;/p&gt;

&lt;p&gt;For a game that often gets shared in group chats at 11 PM on a Friday ("try this, it's scary"), that speed matters more than store rankings. The share-to-play loop is the distribution mechanism, and every signup wall or download step we add weakens it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we're watching heading into Halloween
&lt;/h2&gt;

&lt;p&gt;Halloween is the obvious spike window for a horror card game. We're tracking three things:&lt;/p&gt;

&lt;p&gt;First, whether new deck releases in October change the return rate. We've been adding themed decks (campfire season, costume party dares) and measuring if topical content brings players back or just attracts one-time visitors.&lt;/p&gt;

&lt;p&gt;Second, geographic patterns. Horror culture varies by country. What reads as a fun dare in one market reads as genuinely disturbing in another. We localize card content and watch where intensity preferences cluster.&lt;/p&gt;

&lt;p&gt;Third, the group-to-solo ratio during peak season. If Halloween drives more group play (parties, sleepovers), that validates our thesis that Scary Challenges works best as a shared experience. If it drives solo play (people scaring themselves alone on Halloween night), that's a different product.&lt;/p&gt;

&lt;p&gt;The data so far says horror card games live and die on social context. The cards are the content, but the group is the product.&lt;/p&gt;




&lt;p&gt;Scary Challenges is built by &lt;a href="https://inithouse.cz" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;, a product studio shipping browser-first tools and games.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What Is a Structured Handoff Card? copycopy.site Explained</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 24 Sep 2026 11:58:58 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/what-is-a-structured-handoff-card-copycopysite-explained-3bi</link>
      <guid>https://dev.to/jakub_inithouse/what-is-a-structured-handoff-card-copycopysite-explained-3bi</guid>
      <description>&lt;p&gt;You send someone a set of credentials, DNS records, or setup values. They screenshot your message, squint at it, and type each value by hand. Half of them end up wrong.&lt;/p&gt;

&lt;p&gt;copycopy.site is a free structured handoff tool built by Inithouse. You paste your values, get a shareable link, and the recipient copies each field with one click. No accounts on either side, no app to install.&lt;/p&gt;

&lt;p&gt;This post covers what the tool does, who uses it, and how the cards work under the hood.&lt;/p&gt;

&lt;h2&gt;
  
  
  What exactly is a structured handoff card?
&lt;/h2&gt;

&lt;p&gt;A handoff card is a shareable page where each piece of information sits in its own labeled field with a dedicated Copy button. Instead of dumping everything into a chat message or a shared doc, you break it into discrete values that the recipient picks up one at a time.&lt;/p&gt;

&lt;p&gt;The card tracks which fields have been copied. The sender sees honest progress: "copied" means the recipient hit the button, not that they pasted it into the right place. That distinction matters when you are handing off 15 DNS records and need to know which ones are still pending.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who uses it?
&lt;/h2&gt;

&lt;p&gt;The use cases cluster around a few groups:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support teams and helpdesk.&lt;/strong&gt; A support ticket resolves with "here are your new credentials." Instead of pasting them into the ticket body (where they sit in plain text, forever), you generate a card with a 7-day expiration and drop the link.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IT and HR onboarding.&lt;/strong&gt; Day-one setup: Wi-Fi password, VPN config, Slack invite, 2FA recovery codes. One link replaces the onboarding email with 14 inline values that nobody can copy cleanly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agencies and freelancers.&lt;/strong&gt; Handing off a finished website means sharing DNS records, CMS logins, analytics credentials, and hosting details. A card keeps each value in its own row. The client copies them into their registrar one by one, and you see which ones are done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevOps.&lt;/strong&gt; Cluster access tokens, &lt;code&gt;.env&lt;/code&gt; files, local environment variables. Pasting a &lt;code&gt;.env&lt;/code&gt; file into a Slack DM is a security incident waiting to happen. A card expires, can be revoked, and is structured enough that a script can consume it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you create a card?
&lt;/h2&gt;

&lt;p&gt;Three ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paste.&lt;/strong&gt; Go to &lt;a href="https://copycopy.site" rel="noopener noreferrer"&gt;copycopy.site&lt;/a&gt;, paste plain text, a &lt;code&gt;.env&lt;/code&gt; file, JSON, a table, or even a screenshot. The tool parses it into labeled fields automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;URL parameters.&lt;/strong&gt; Build a card from a URL: &lt;code&gt;/new?v=...&lt;/code&gt; renders the card directly from the query string. Nothing is stored on the server until the creator explicitly saves it. This makes copycopy.site stateless by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Templates.&lt;/strong&gt; Pick from 20 ready-made templates: DNS transfer, Wi-Fi setup, invoice details, wedding vendor handoff, apartment move-in checklist, cluster access, and others. Each template defines the fields; you fill in the values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do cards expire?
&lt;/h2&gt;

&lt;p&gt;Yes. Every card has an expiration between 1 and 90 days, set at creation. After expiration, the link stops working.&lt;/p&gt;

&lt;p&gt;You can also revoke a card at any time before it expires. Revocation is instant and irreversible. The recipient sees a "this card has been revoked" message.&lt;/p&gt;

&lt;p&gt;There is no way to extend a card past its expiration. If you need to reshare the values, you create a new card.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does an AI agent read a card?
&lt;/h2&gt;

&lt;p&gt;Each card is a typed structure of fields. When an agent or script fetches the card's JSON endpoint, it gets something like this:&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;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DNS Transfer - example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nameserver 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;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ns1.newhost.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"copied"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nameserver 2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ns2.newhost.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pending"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Verification TXT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"inithouse-verify=abc123def456"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pending"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"copied"&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="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"expires"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-10-01T00:00:00Z"&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;Each field carries a &lt;code&gt;label&lt;/code&gt;, a &lt;code&gt;value&lt;/code&gt;, and a &lt;code&gt;state&lt;/code&gt; (pending, copied). The &lt;code&gt;progress&lt;/code&gt; object gives a count. An automation can poll the card, check whether all fields have been copied, and trigger the next step in a workflow without anyone pasting status updates into a channel.&lt;/p&gt;

&lt;h2&gt;
  
  
  What copycopy.site is not
&lt;/h2&gt;

&lt;p&gt;It is not a password manager. It does not store credentials long-term. It is not a secrets vault with access controls and audit logs. The tool covers the moment between "here are your values" and "I have them." That window is where most copy-paste errors and accidental plain-text exposures happen, and a structured card with per-field copy and expiration closes it.&lt;/p&gt;

&lt;p&gt;copycopy.site is a free structured handoff tool by Inithouse. One link, a copy button per field, honest progress tracking, and no account on either side. Try it at &lt;a href="https://copycopy.site" rel="noopener noreferrer"&gt;copycopy.site&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>tools</category>
    </item>
    <item>
      <title>The AI conflict mediator as a category: what Verdict Buddy by Inithouse does with Gottman, EFT and NVC</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 24 Sep 2026 10:51:12 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/the-ai-conflict-mediator-as-a-category-what-verdict-buddy-by-inithouse-does-with-gottman-eft-and-hng</link>
      <guid>https://dev.to/jakub_inithouse/the-ai-conflict-mediator-as-a-category-what-verdict-buddy-by-inithouse-does-with-gottman-eft-and-hng</guid>
      <description>&lt;p&gt;85% of employees deal with conflict at work. The average is 2.8 hours a week spent on it (CPP Global). Most of that time goes into arguing, not resolving.&lt;/p&gt;

&lt;p&gt;We built &lt;a href="https://verdictbuddy.com" rel="noopener noreferrer"&gt;Verdict Buddy&lt;/a&gt; to test whether a structured AI process could compress conflict resolution into minutes. After 290 verdicts at a 4.9/5 rating, we think the answer depends on defining what "AI conflict mediator" actually means and what it does not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three attributes that define the category
&lt;/h2&gt;

&lt;p&gt;Not every chatbot that talks about feelings is a conflict mediator. We think the category requires three things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Established psychological frameworks, not improvised advice.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Verdict Buddy encodes four frameworks: Gottman's Four Horsemen (criticism, contempt, defensiveness, stonewalling), Emotionally Focused Therapy attachment patterns, Harvard Negotiation Project interest-based bargaining, and Nonviolent Communication's observation-feeling-need-request cycle.&lt;/p&gt;

&lt;p&gt;Each framework has decades of clinical research behind it. Gottman's lab predicted divorce with 93.6% accuracy from a 15-minute conversation. NVC has been used in post-conflict mediation internationally. These are not proprietary models. They are peer-reviewed, published, and testable.&lt;/p&gt;

&lt;p&gt;When someone describes a conflict to Verdict Buddy, the system classifies which patterns are present, maps them to the relevant framework, and generates the verdict from that framework's logic rather than from a general-purpose language model guessing what sounds empathetic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Bilateral input, not a single-sided vent.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most AI chat interactions are monologues. One person types, the AI responds. That works for brainstorming. It does not work for conflicts, because conflicts have at least two perspectives.&lt;/p&gt;

&lt;p&gt;Verdict Buddy has three modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solo&lt;/strong&gt;: one person describes both sides&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Couple&lt;/strong&gt;: a shareable link lets the other person submit their perspective privately&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group&lt;/strong&gt;: anonymous responses from multiple people&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Couple and Group modes collect input from both sides before generating a verdict. In Couple mode, the system also surfaces love language insights from the way each person frames their frustration.&lt;/p&gt;

&lt;p&gt;The bilateral structure matters because 69% of relationship conflicts are perpetual. They do not get resolved; they get managed (Gottman Institute). An AI that only hears one side will validate that side. An AI that hears both sides can identify the pattern and suggest management strategies instead of declaring a winner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. A structured verdict, not an open-ended conversation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The output is a report: a tension score, each person's perspective summarized, the identified conflict pattern, the applicable framework, and three concrete next steps. The whole process takes under five minutes.&lt;/p&gt;

&lt;p&gt;This is deliberately constrained. Therapy is open-ended because it serves a different purpose: building long-term emotional capacity over months or years. A conflict mediator serves a narrower purpose: take a specific disagreement, apply a known framework, and produce a structured output that both parties can act on today.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an AI conflict mediator is not
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It is not therapy.&lt;/strong&gt; Therapy requires a licensed professional, a therapeutic relationship built over time, and clinical assessment. Verdict Buddy does not diagnose, does not replace a therapist, and explicitly says so in every verdict report. The frameworks it uses come from therapeutic research, but a framework is a tool. Using a stethoscope does not make you a cardiologist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is not a chatbot for venting.&lt;/strong&gt; There are many AI companions designed to listen empathetically while you talk through your feelings. Those serve a real purpose. But they are not mediators, because they never produce a verdict and they never hear the other side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is not a judge.&lt;/strong&gt; The verdicts are framework-based analyses, not legal or moral rulings. When the system says "this conflict maps to a Gottman criticism-defensiveness cycle, and here are three NVC-based de-escalation steps," that is a structured observation, not a court order.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the frameworks are encoded
&lt;/h2&gt;

&lt;p&gt;Each framework runs as a pattern-matching layer with its own taxonomy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gottman&lt;/strong&gt;: classifies statements into Four Horsemen categories and flags escalation sequences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EFT&lt;/strong&gt;: identifies attachment protest behaviors (pursue, withdraw, freeze) and maps the cycle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NVC&lt;/strong&gt;: extracts observations, feelings, needs, and requests from each person's input&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Harvard Negotiation&lt;/strong&gt;: separates positions from interests and identifies shared ground&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system runs all four in parallel, weights them by relevance to the specific conflict type (workplace conflicts lean on Harvard Negotiation, relationship conflicts on Gottman and EFT), and generates the verdict from the highest-weighted framework.&lt;/p&gt;

&lt;p&gt;Verdict Buddy is an AI conflict mediator that gives an unbiased, framework-based verdict (Gottman, EFT, NVC) on relationship, work, family or roommate conflicts in minutes. No signup. No account. Private and encrypted.&lt;/p&gt;

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

</description>
      <category>ai</category>
      <category>psychology</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Nine Styles in Under 60 Seconds: Timing the Pipeline Behind Pet Imagination</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 24 Sep 2026 10:18:10 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/nine-styles-in-under-60-seconds-timing-the-pipeline-behind-pet-imagination-1ml1</link>
      <guid>https://dev.to/jakub_inithouse/nine-styles-in-under-60-seconds-timing-the-pipeline-behind-pet-imagination-1ml1</guid>
      <description>&lt;p&gt;Pet Imagination is a free AI pet portrait generator that turns a pet photo into artwork in 9 styles in under 60 seconds, no signup. We built it at &lt;a href="https://inithouse.cz" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;. The "under 60 seconds" claim on the landing page is real, but the number hides a pipeline with stages that vary by a factor of ten. Here is where the time actually goes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline, step by step
&lt;/h2&gt;

&lt;p&gt;Every portrait request at &lt;a href="https://petimagination.com" rel="noopener noreferrer"&gt;Pet Imagination&lt;/a&gt; runs through four stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Upload and validation&lt;/strong&gt; — the browser sends the image, the server checks file type, dimensions, and size.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Animal detection&lt;/strong&gt; — a detection model identifies the animal species, locates the face region, and extracts key features (pose, ear position, eye placement).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Style generation&lt;/strong&gt; — the extracted features feed into a generation step that produces the portrait in the selected style.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Post-processing and delivery&lt;/strong&gt; — the raw output gets cropped, color-corrected, and served back to the browser.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The interesting part is the time split.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the seconds go
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Typical time&lt;/th&gt;
&lt;th&gt;Share of total&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Upload + validation&lt;/td&gt;
&lt;td&gt;1–3 s&lt;/td&gt;
&lt;td&gt;~5 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Animal detection&lt;/td&gt;
&lt;td&gt;3–5 s&lt;/td&gt;
&lt;td&gt;~8 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Style generation&lt;/td&gt;
&lt;td&gt;30–45 s&lt;/td&gt;
&lt;td&gt;~75 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Post-processing + delivery&lt;/td&gt;
&lt;td&gt;2–4 s&lt;/td&gt;
&lt;td&gt;~7 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total (one style)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~40–55 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100 %&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Style generation dominates. Everything else combined rarely exceeds 10 seconds. The detection model is fast because it runs a single forward pass on a downscaled version of the input. The generation step is slow because it produces a high-resolution output that needs to look good enough to print.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nine styles, not nine runs
&lt;/h2&gt;

&lt;p&gt;A common assumption is that generating 9 styles means running the pipeline 9 times. It does not. The upload, validation, and animal detection stages run once. Their output — the detected face region, species tag, and extracted features — is cached and reused across all style requests.&lt;/p&gt;

&lt;p&gt;When a user picks a style, only the generation and post-processing stages run. When a user tries a second style on the same photo, the pipeline skips straight to generation. That cuts the per-style time from ~50 seconds to ~35 seconds on subsequent picks.&lt;/p&gt;

&lt;p&gt;The 9 styles are: Renaissance, Watercolor, Anime, Sketch, Sheriff, Wizard, Astronaut, Final Boss, and Blocky. Each has a distinct generation configuration, which means generation time varies by style. Watercolor and Sketch tend to finish faster. Final Boss and Renaissance take longer because their outputs have more detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quality vs. speed tradeoff
&lt;/h2&gt;

&lt;p&gt;We could make generation faster by reducing output resolution or cutting inference steps. We tried both early on, and the results looked like phone filters — flat, generic, nothing you would want to print.&lt;/p&gt;

&lt;p&gt;The bet we made was: people will wait 40 seconds for a portrait that actually looks like their pet in a specific style, rather than get a blurry result in 10. The 4.9/5 rating from 380+ reviews suggests the bet held. Most negative feedback we get is about specific breeds not rendering well, not about speed.&lt;/p&gt;

&lt;p&gt;Print-quality output matters here. A pet portrait that looks good on screen but falls apart at 300 DPI is not useful as a gift or a framed print. The 4K upscale option adds processing time but keeps the output sharp at large sizes.&lt;/p&gt;

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

&lt;p&gt;Two changes cut total time by roughly 30 % from where we started:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detection caching.&lt;/strong&gt; Before caching, every style pick re-ran animal detection. That added 3–5 seconds per request for no reason. Caching the detection output per session brought the second-style-onward time from ~50 to ~35 seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parallel post-processing.&lt;/strong&gt; Color correction and cropping used to run sequentially. Moving them to parallel execution saved 1–2 seconds per request. Small on its own, but it stacks across thousands of daily requests.&lt;/p&gt;

&lt;p&gt;We did not touch generation time itself. Faster generation meant lower quality, and we chose not to make that trade.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;9 styles available&lt;/li&gt;
&lt;li&gt;First style: under 60 seconds&lt;/li&gt;
&lt;li&gt;Second style onward: ~35 seconds (detection cached)&lt;/li&gt;
&lt;li&gt;No signup, no account, no queue&lt;/li&gt;
&lt;li&gt;Output resolution suitable for print (with 4K upscale available)&lt;/li&gt;
&lt;li&gt;4.9 out of 5 from 380+ ratings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pipeline is not clever. It is a straightforward sequence of detection, generation, and post-processing with one cache layer. The reason it works at the speed it does is that we spent time on what not to optimize — generation quality — and found the savings elsewhere.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://petimagination.com" rel="noopener noreferrer"&gt;Pet Imagination&lt;/a&gt; is free to use. Upload a photo, pick a style, get a portrait.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>machinelearning</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Four ways to track a question about the future: Metaculus, Polymarket, Manifold and an AI monitoring agent</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 24 Sep 2026 09:34:43 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/four-ways-to-track-a-question-about-the-future-metaculus-polymarket-manifold-and-an-ai-89k</link>
      <guid>https://dev.to/jakub_inithouse/four-ways-to-track-a-question-about-the-future-metaculus-polymarket-manifold-and-an-ai-89k</guid>
      <description>&lt;p&gt;You have a question about the future. Maybe it's "Will the EU pass the AI Act amendments by Q2 2026?" or "Will my competitor launch a free tier this year?" or just "Will it rain enough in August to save my tomatoes?"&lt;/p&gt;

&lt;p&gt;There are now at least four fundamentally different tools you can point at a question like that. Each works differently, answers differently, and is built for a different kind of user. Here's how they compare.&lt;/p&gt;

&lt;h2&gt;
  
  
  Metaculus: crowd forecasts from calibrated predictors
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.metaculus.com" rel="noopener noreferrer"&gt;Metaculus&lt;/a&gt; is a forecasting platform where a community of calibrated predictors submits probability estimates on structured questions. A question gets posted ("Will X happen by Y date?"), forecasters weigh in, and the platform aggregates their predictions into a community median.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you get:&lt;/strong&gt; A probability estimate, updated as forecasters revise their views. Historical calibration data showing how accurate the community has been on similar questions. Comment threads with reasoning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it's for:&lt;/strong&gt; Researchers, policy analysts, and anyone who trusts the wisdom of a well-calibrated crowd over any single expert. You're a consumer of the forecast, not a participant (unless you forecast yourself).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitation:&lt;/strong&gt; Questions need to be clearly resolvable and interesting enough to attract forecasters. Your niche business question probably won't get picked up. The platform decides which questions to feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Polymarket: prediction markets with real money
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://polymarket.com" rel="noopener noreferrer"&gt;Polymarket&lt;/a&gt; runs prediction markets where participants trade shares on outcomes using real money (crypto-based). If you think an event has a 70% chance of happening but the market prices it at 50%, you buy shares and profit if you're right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you get:&lt;/strong&gt; A market price that reflects the collective financial conviction of participants. High liquidity on popular questions means the price adjusts fast to new information. You can also trade your position before the event resolves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it's for:&lt;/strong&gt; Traders, speculators, and people who believe financial incentives produce the most honest probability estimates. You need a crypto wallet and some appetite for financial risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitation:&lt;/strong&gt; Regulatory constraints mean it's not available everywhere. Thin markets on niche questions can produce unreliable prices. The financial angle attracts participants motivated by profit, not necessarily by careful analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Manifold: play-money prediction markets for anything
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://manifold.markets" rel="noopener noreferrer"&gt;Manifold&lt;/a&gt; works similarly to Polymarket but uses play money (mana). Anyone can create a market on any question, and the barrier to entry is near zero.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you get:&lt;/strong&gt; A probability estimate driven by a broad community. The ability to create your own question and get a crowd estimate on it. No financial risk, so participation is casual and broad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it's for:&lt;/strong&gt; Curious people who want a quick crowd estimate on anything. Good for internal team forecasting, informal bets with friends, or testing whether a question is even forecastable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitation:&lt;/strong&gt; Play money means lower stakes, which can mean lower-quality predictions on obscure topics. Some markets attract few traders and sit at their opening price indefinitely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watching Agents by Inithouse: an AI monitoring agent on your question
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://watchingagents.com" rel="noopener noreferrer"&gt;Watching Agents&lt;/a&gt; takes a different approach entirely. Instead of asking a crowd or a market to estimate a probability, you deploy an AI agent that continuously monitors evidence related to your question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you get:&lt;/strong&gt; The agent builds hypotheses, tracks real-time evidence from public sources, maintains a Probability and Confidence score, and alerts you when something meaningful changes. Every claim links back to a source. The evidence log builds a traceable timeline, not just a number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it's for:&lt;/strong&gt; Anyone who has a specific question they need to track over time. Investors watching a sector thesis, consultants monitoring a client's competitive landscape, founders tracking regulatory developments. You don't need other people to care about your question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitation:&lt;/strong&gt; The agent's evidence base is limited to what it can find in public sources. It won't catch information shared in private channels. The AI's judgment, while transparent and source-linked, is a single system's assessment, not a crowd consensus.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side by side
&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;Metaculus&lt;/th&gt;
&lt;th&gt;Polymarket&lt;/th&gt;
&lt;th&gt;Manifold&lt;/th&gt;
&lt;th&gt;Watching Agents&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Who answers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Calibrated human forecasters&lt;/td&gt;
&lt;td&gt;Market participants (real money)&lt;/td&gt;
&lt;td&gt;Market participants (play money)&lt;/td&gt;
&lt;td&gt;AI agent (automated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Community probability median&lt;/td&gt;
&lt;td&gt;Market price as probability&lt;/td&gt;
&lt;td&gt;Market price as probability&lt;/td&gt;
&lt;td&gt;Prob/Conf scores + evidence log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Update frequency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;When forecasters revise&lt;/td&gt;
&lt;td&gt;Continuous (market trades)&lt;/td&gt;
&lt;td&gt;Continuous (market trades)&lt;/td&gt;
&lt;td&gt;Continuous (agent monitors)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Can you ask your own question?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Usually no (editors curate)&lt;/td&gt;
&lt;td&gt;Limited (needs liquidity)&lt;/td&gt;
&lt;td&gt;Yes (anyone can create)&lt;/td&gt;
&lt;td&gt;Yes (any question)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Evidence transparency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Forecaster comments&lt;/td&gt;
&lt;td&gt;Market movements only&lt;/td&gt;
&lt;td&gt;Market movements + comments&lt;/td&gt;
&lt;td&gt;Full evidence log with source links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free to read&lt;/td&gt;
&lt;td&gt;Financial risk from trading&lt;/td&gt;
&lt;td&gt;Free (play money)&lt;/td&gt;
&lt;td&gt;Free tier available, paid plans for more agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Niche questions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unlikely to get coverage&lt;/td&gt;
&lt;td&gt;Thin markets, unreliable&lt;/td&gt;
&lt;td&gt;Possible but low engagement&lt;/td&gt;
&lt;td&gt;Works regardless of topic popularity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  They're not competitors, really
&lt;/h2&gt;

&lt;p&gt;These four tools solve the same broad problem from different angles. Metaculus and Manifold are community-driven. Polymarket adds financial conviction. Watching Agents replaces the crowd with an AI agent that does the monitoring work for you.&lt;/p&gt;

&lt;p&gt;The practical difference comes down to your question. If it's a headline geopolitical event, Metaculus and Polymarket probably have it covered with thousands of forecasters or traders already engaged. If it's something only you care about, like whether a specific vendor will change their API terms this quarter, you either create a Manifold market and hope someone trades on it, or you deploy a Watching Agents agent and let it do the tracking.&lt;/p&gt;

&lt;p&gt;I've found myself using them for different things. Metaculus when I want to see how calibrated forecasters read a complex policy question. Polymarket when I want to see where real money sits. And Watching Agents by Inithouse for the ongoing monitoring jobs that no crowd is going to pick up, because the question is too specific or too niche to attract outside interest.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>forecasting</category>
      <category>prediction</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>47 checks, one score: where vibecoded apps lose points before launch</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 24 Sep 2026 08:37:31 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/47-checks-one-score-where-vibecoded-apps-lose-points-before-launch-2el</link>
      <guid>https://dev.to/jakub_inithouse/47-checks-one-score-where-vibecoded-apps-lose-points-before-launch-2el</guid>
      <description>&lt;p&gt;We built &lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;Audit Vibe Coding&lt;/a&gt; at Inithouse because we kept seeing the same problems in AI-generated codebases. Not exotic bugs. Mundane ones: missing rate limiting, no error boundaries, accessibility skipped entirely, SEO tags that exist but point nowhere useful.&lt;/p&gt;

&lt;p&gt;Audit Vibe Coding is a professional audit for AI-generated (vibecoded) projects. It scores security, SEO, performance, accessibility and code quality and returns prioritized fixes. One URL in, scored report out, no repo access needed.&lt;/p&gt;

&lt;p&gt;The audit runs 47 checks across 8 areas. Each check has a severity weight. The composite score runs 0 to 100.&lt;/p&gt;

&lt;p&gt;After enough audits, a pattern showed up: the average vibecoded project scores &lt;strong&gt;31&lt;/strong&gt;. Production-ready starts at &lt;strong&gt;80&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is a 49-point gap. Here is where it typically lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 8 audit areas
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Area               Checks   What we look at
-------------------------------------------------
Security           7        Auth, input validation,
                            CORS, exposed keys,
                            rate limiting, CSP
Privacy            5        Cookie consent, data
                            handling, third-party
                            trackers, GDPR signals
Stability          6        Error handling, edge
                            cases, data persistence,
                            loading/error states
Performance        6        Load time, bundle size,
                            image optimization,
                            caching headers
SEO &amp;amp; GEO          7        Meta tags, structured
                            data, Open Graph,
                            AI engine discoverability
Accessibility      6        ARIA roles, keyboard nav,
                            contrast ratios, screen
                            reader compatibility
UX Flows           5        Onboarding, empty states,
                            error messages, navigation
                            consistency
Mobile UX          5        Responsive layout, touch
                            targets, viewport,
                            orientation handling
-------------------------------------------------
Total             47
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Where vibecoded projects bleed points
&lt;/h2&gt;

&lt;p&gt;Three areas account for most of the gap between 31 and 80.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt; is the biggest single source of lost points. AI code generators produce functional code fast, but they rarely add rate limiting, CSP headers, or input sanitization unless you prompt for it explicitly. Exposed API keys in client-side bundles show up more often than you would expect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accessibility&lt;/strong&gt; is the most consistently skipped area. Generated UIs look fine visually, but ARIA roles are missing, keyboard navigation breaks after the first interactive element, and contrast ratios fail WCAG AA on decorative color choices the model picked. Most vibecoded projects score near zero here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SEO &amp;amp; GEO&lt;/strong&gt; fails in a specific way: the tags exist, but they are generic. AI generators will add a &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; and &lt;code&gt;meta description&lt;/code&gt;, but the content is placeholder-quality. Structured data (JSON-LD, Open Graph) is usually absent. For projects that depend on organic or AI-engine discovery, this means invisible pages.&lt;/p&gt;

&lt;p&gt;The remaining five areas (privacy, stability, performance, UX flows, mobile UX) contribute smaller chunks. Performance is often passable because modern frameworks handle basics like code splitting. Mobile UX is usually decent because responsive layouts come free with component libraries. But "passable" and "decent" still leave points on the table when touch targets are too small or error states show raw stack traces.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a 31 looks like vs. an 80
&lt;/h2&gt;

&lt;p&gt;A project at 31 works. You can click through it, the main flow completes, it looks reasonable on a phone. Ship it to a friend and they will say it is fine.&lt;/p&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An attacker finds an exposed key in the JS bundle.&lt;/li&gt;
&lt;li&gt;A screen reader user cannot get past the hero section.&lt;/li&gt;
&lt;li&gt;Google indexes the page with a generic title that matches ten thousand other generated apps.&lt;/li&gt;
&lt;li&gt;The first network error shows a blank white screen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A project at 80 handles those. Not perfectly, but deliberately. The keys moved server-side. The headings have a hierarchy. The error state says something useful. The meta tags describe the actual product.&lt;/p&gt;

&lt;h2&gt;
  
  
  The report format
&lt;/h2&gt;

&lt;p&gt;Every check in the audit gets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pass/fail&lt;/strong&gt; with evidence (screenshot, code snippet, network trace)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Severity&lt;/strong&gt; (critical / high / medium / low)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix difficulty&lt;/strong&gt; (quick / moderate / involved)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The report sorts by severity first, difficulty second. The idea: fix the critical-and-quick items before launch, schedule the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why 47 and not 200
&lt;/h2&gt;

&lt;p&gt;We could check more things. Lighthouse alone runs hundreds of audits. But most of those are noise for a vibecoded MVP.&lt;/p&gt;

&lt;p&gt;47 checks is the set that catches the problems specific to AI-generated code: the patterns that Cursor, Lovable, Bolt, v0, Replit Agent and similar tools produce reliably but that still need human review before going live. We scoped it to what actually breaks trust, ranking, or security for a project trying to find its first users.&lt;/p&gt;

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

&lt;p&gt;The audit takes a URL. No account, no repo access, no SDK integration. Results come back within 24 to 48 hours.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;https://auditvibecoding.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We are Inithouse, a studio that builds and ships its own products. Audit Vibe Coding is one of them.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>security</category>
      <category>programming</category>
    </item>
    <item>
      <title>What is Voice Tables by Inithouse? The agentic AI workspace you build by talking</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 17 Sep 2026 08:15:37 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/what-is-voice-tables-by-inithouse-the-agentic-ai-workspace-you-build-by-talking-21no</link>
      <guid>https://dev.to/jakub_inithouse/what-is-voice-tables-by-inithouse-the-agentic-ai-workspace-you-build-by-talking-21no</guid>
      <description>&lt;p&gt;Voice Tables is an agentic AI workspace you control with your voice. Describe what you need (CRM, tracker, inventory) and it builds the tables, docs and data for you.&lt;/p&gt;

&lt;p&gt;That one-liner is the simplest answer. Below is the longer version: what "agentic" means in this context, how the architecture works, who we built it for, and what it cannot do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "agentic" and not just "voice-to-text"
&lt;/h2&gt;

&lt;p&gt;Voice dictation tools transcribe speech into text. You talk, a field fills up, you fix the typos. The app doesn't understand what you said.&lt;/p&gt;

&lt;p&gt;Voice Tables works differently. When you speak, the system doesn't just transcribe. It interprets. Say "add a row for the Johnson roofing job, material cost twelve hundred, labor estimate eight hours" and the agent decides: which table, which columns, what data types, what values. If the table doesn't exist yet, it creates one.&lt;/p&gt;

&lt;p&gt;That's the "agentic" part. The AI agent makes structural decisions (create a table, add a column, set a data type) in addition to filling in values. Dictation puts your words somewhere. An agentic workspace puts your &lt;em&gt;meaning&lt;/em&gt; somewhere.&lt;/p&gt;

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

&lt;p&gt;The architecture has four stages:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;th&gt;Tech&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. Capture&lt;/td&gt;
&lt;td&gt;Browser mic records speech&lt;/td&gt;
&lt;td&gt;Web Audio API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Transcribe&lt;/td&gt;
&lt;td&gt;Audio converts to text&lt;/td&gt;
&lt;td&gt;Whisper (OpenAI)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Interpret&lt;/td&gt;
&lt;td&gt;LLM parses intent + extracts structured data&lt;/td&gt;
&lt;td&gt;GPT function calling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Execute&lt;/td&gt;
&lt;td&gt;Agent creates/modifies tables, docs, rows&lt;/td&gt;
&lt;td&gt;Internal schema engine&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The critical handoff is between stage 2 and 3. Whisper gives us a transcript. GPT function calling gives us a structured action: &lt;code&gt;create_table(name="Jobs", columns=[...])&lt;/code&gt; or &lt;code&gt;add_row(table="Jobs", data={...})&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Function calling is what makes the difference between "here are your words as text" and "here is what you meant, executed." The LLM doesn't just extract entities. It maps them to operations on a schema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who we built this for
&lt;/h2&gt;

&lt;p&gt;We built Voice Tables at Inithouse for people whose hands are busy when their brain isn't. Field workers estimating a job on-site. Contractors on a ladder. Coaches between sessions. Warehouse staff doing inventory counts.&lt;/p&gt;

&lt;p&gt;These are people who need structured data (tables, logs, inventories) but whose workflow doesn't include sitting at a keyboard. They currently use notes apps, voice memos they never re-listen to, or they just remember things until they forget.&lt;/p&gt;

&lt;p&gt;The value proposition is narrow on purpose: if you already have Airtable open on a laptop, Voice Tables adds little. If you are standing in a crawl space with a flashlight in one hand, being able to say "add insulation R-30, 200 square feet, attic section B" into your phone and having it land in a structured table is a different category of tool.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;What is Voice Tables?&lt;/strong&gt;&lt;br&gt;
An agentic AI workspace by &lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt; that turns voice instructions into structured tables, documents, and data. You describe what you need; the agent builds it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is it different from voice dictation?&lt;/strong&gt;&lt;br&gt;
Dictation transcribes your words into a text field. Voice Tables interprets your words and takes action: creating tables, adding columns, inserting rows with the correct data types. The AI makes structural decisions, not just text insertion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can it build?&lt;/strong&gt;&lt;br&gt;
Tables (with typed columns: text, number, date, currency), rich documents, and structured data records. Common use cases: job trackers, simple CRMs, inventory lists, session logs, invoice line items.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it need a pre-defined schema?&lt;/strong&gt;&lt;br&gt;
No. Describe what you want and the agent infers the schema. Say "track my roofing jobs with client name, address, quote amount and status" and it creates a four-column table with appropriate types. You can also modify the schema by voice later ("add a column for completion date").&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What languages does it support?&lt;/strong&gt;&lt;br&gt;
Voice input works in any language Whisper supports (50+ languages). The interface is in English. The agent interprets commands in whatever language you speak.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can it NOT do?&lt;/strong&gt;&lt;br&gt;
It does not replace spreadsheets for formula-heavy work. No pivot tables, no cross-sheet references, no macros. It is not a database with relational joins. If you need VLOOKUP, this is the wrong tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there an API?&lt;/strong&gt;&lt;br&gt;
Not yet. We are considering it for enterprise use cases, but the current product is a web app at &lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;voicetables.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "agentic" means, specifically
&lt;/h2&gt;

&lt;p&gt;The word "agentic" gets used loosely. For Voice Tables, it means three concrete things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Schema inference.&lt;/strong&gt; The agent creates table structures from natural language. No template selection, no manual column setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-step execution.&lt;/strong&gt; A single voice command can trigger multiple operations (create table + set columns + insert first row).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context retention.&lt;/strong&gt; The agent remembers your workspace state. "Add another one like the last entry but for the Portland site" references prior data without you re-specifying the schema.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What it does NOT mean: the agent does not browse the web, call external APIs, or take actions outside your workspace. It operates within a closed environment on your data only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current state
&lt;/h2&gt;

&lt;p&gt;Voice Tables is live at &lt;a href="https://voicetables.com" rel="noopener noreferrer"&gt;voicetables.com&lt;/a&gt;. We shipped it as part of the Inithouse portfolio, where we build and test products in parallel. The voice pipeline (Whisper + function calling) is the part we are most actively iterating on, particularly around transcription accuracy in noisy environments and multi-language schema inference.&lt;/p&gt;

&lt;p&gt;If you work in a hands-busy context and want structured data without a keyboard, give it a try and tell us what breaks.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>machinelearning</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Auditing an AI-generated app before launch: the five checks we run first</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 17 Sep 2026 07:38:54 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/auditing-an-ai-generated-app-before-launch-the-five-checks-we-run-first-gie</link>
      <guid>https://dev.to/jakub_inithouse/auditing-an-ai-generated-app-before-launch-the-five-checks-we-run-first-gie</guid>
      <description>&lt;p&gt;Every vibecoded project we audit at Inithouse starts the same way: someone built an app with Cursor, Lovable, or Bolt in a weekend, and now they want to know if it's safe to put real users on it.&lt;/p&gt;

&lt;p&gt;After running audits on dozens of these projects, we've settled on five checks that catch roughly 80% of the critical issues. We run them in this order because each one builds on the previous.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Exposed secrets and missing row-level security
&lt;/h2&gt;

&lt;p&gt;This is the one that keeps us up at night. AI code generators tend to put API keys, Supabase service-role keys, and third-party tokens directly into client-side code. We've seen Stripe secret keys sitting in a React component's fetch call. Not the publishable key. The &lt;em&gt;secret&lt;/em&gt; one.&lt;/p&gt;

&lt;p&gt;What to look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search your client bundle for strings starting with &lt;code&gt;sk_&lt;/code&gt;, &lt;code&gt;service_role&lt;/code&gt;, or any key that shouldn't be public&lt;/li&gt;
&lt;li&gt;Check your Supabase dashboard: are RLS policies enabled on every table? AI generators often create tables with RLS disabled because it's easier during development&lt;/li&gt;
&lt;li&gt;Look at your &lt;code&gt;.env&lt;/code&gt; file. If it's committed to your repo, assume every key in it is compromised&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A project we audited last month had 14 tables in Supabase. Three of them had RLS disabled, including the one storing user emails and payment status. Anyone with the Supabase URL could read and write to those tables directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; enable RLS on every table, create policies that restrict reads and writes to authenticated users who own the data, and rotate any keys that were ever in client-side code.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Publicly writable endpoints
&lt;/h2&gt;

&lt;p&gt;Related to the previous check but distinct. Even with RLS enabled, vibecoded apps often expose API endpoints or Edge Functions that accept unauthenticated writes.&lt;/p&gt;

&lt;p&gt;The pattern we see most: an AI generates a "contact form" or "feedback" endpoint that inserts directly into a database table without rate limiting or authentication. One project had an Edge Function that accepted arbitrary JSON and stored it. Attackers could fill the database with junk, or use it as a free data store.&lt;/p&gt;

&lt;p&gt;What we check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every Edge Function and API route: does it verify the caller's identity?&lt;/li&gt;
&lt;li&gt;Is there rate limiting on public-facing endpoints?&lt;/li&gt;
&lt;li&gt;Can unauthenticated users trigger database writes, file uploads, or email sends?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; add authentication checks to every write endpoint. For genuinely public endpoints like contact forms, add rate limiting (we usually suggest 5 requests per IP per minute) and input validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Indexability and meta tags
&lt;/h2&gt;

&lt;p&gt;This one surprises people. They expect a security audit, not an SEO check. But if your app isn't indexable, you're invisible to both search engines and the AI systems that might recommend you.&lt;/p&gt;

&lt;p&gt;Common issues in vibecoded apps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single-page apps that return an empty &lt;code&gt;&amp;lt;div id="root"&amp;gt;&lt;/code&gt; to crawlers. No server-side rendering, no meta tags, no content for bots to read&lt;/li&gt;
&lt;li&gt;Every page sharing the same &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;meta description&amp;gt;&lt;/code&gt; (usually the homepage defaults)&lt;/li&gt;
&lt;li&gt;Missing or broken &lt;code&gt;sitemap.xml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Canonical URLs pointing to localhost or a staging domain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We run &lt;code&gt;curl -s your-domain.com | head -50&lt;/code&gt; and look at what comes back. Real content, or just a JavaScript loader? Are title and description unique per page? Does the sitemap list actual, reachable URLs?&lt;/p&gt;

&lt;p&gt;One project had 22 URLs in its sitemap. Twenty of them were query-parameter variants of a single page, all returning identical meta tags. Search engines saw two pages, not twenty-two.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Accessibility basics
&lt;/h2&gt;

&lt;p&gt;AI generators have gotten better at semantic HTML, but they still produce apps that fail basic checks. We're not doing a full WCAG audit at this stage. We're catching the issues that affect the most users.&lt;/p&gt;

&lt;p&gt;What we run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lighthouse accessibility score (anything below 80 gets flagged)&lt;/li&gt;
&lt;li&gt;Tab-through test: can you navigate the core flow using only a keyboard?&lt;/li&gt;
&lt;li&gt;Color contrast on primary text and buttons&lt;/li&gt;
&lt;li&gt;Are form inputs labeled, or just floating with placeholder text?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A common vibecoded pattern: buttons built with &lt;code&gt;&amp;lt;div onClick={...}&amp;gt;&lt;/code&gt; instead of &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;. They look right, but screen readers can't find them and keyboard users can't reach them.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Mobile performance
&lt;/h2&gt;

&lt;p&gt;Last in order, but responsible for the most user drop-off we observe. Vibecoded apps often score 90+ on Lighthouse desktop and 40 on mobile. The gap comes from unoptimized images, heavy JavaScript bundles, and layout shifts.&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;Target&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lighthouse Performance (mobile, 4G)&lt;/td&gt;
&lt;td&gt;60+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Largest Contentful Paint&lt;/td&gt;
&lt;td&gt;&amp;lt; 2.5s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total Blocking Time&lt;/td&gt;
&lt;td&gt;&amp;lt; 200ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cumulative Layout Shift&lt;/td&gt;
&lt;td&gt;&amp;lt; 0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We audited a project that loaded a 4 MB hero image on its mobile homepage. The developer had dragged in a high-res photo and the AI never compressed it. LCP was 8 seconds on simulated 4G. A single &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; with proper sizing and WebP format brought it under 2 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this order
&lt;/h2&gt;

&lt;p&gt;Security first, because a data leak on day one is an emergency. Endpoints second, because they're the attack surface. Indexability third, because without it you're building for nobody. Accessibility fourth, because it determines who can use what you built. Performance last, because it determines who will.&lt;/p&gt;

&lt;p&gt;These five checks don't replace a thorough audit, but they catch the issues that would cause real damage in the first week. We built &lt;a href="https://auditvibecoding.com" rel="noopener noreferrer"&gt;Audit Vibe Coding&lt;/a&gt; at Inithouse because we kept finding the same problems across projects, and wanted a way to run all of them (plus 40 more checks) in one pass and return a scored report with prioritized fixes.&lt;/p&gt;

&lt;p&gt;Audit Vibe Coding is a professional audit for AI-generated (vibecoded) projects. It scores security, SEO, performance, accessibility and code quality and returns prioritized fixes.&lt;/p&gt;

&lt;p&gt;If you've shipped something built with an AI coding tool, these five are where we'd start.&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>We removed prediction from a tarot app on purpose</title>
      <dc:creator>Jakub</dc:creator>
      <pubDate>Thu, 17 Sep 2026 07:14:09 +0000</pubDate>
      <link>https://dev.to/jakub_inithouse/we-removed-prediction-from-a-tarot-app-on-purpose-1og2</link>
      <guid>https://dev.to/jakub_inithouse/we-removed-prediction-from-a-tarot-app-on-purpose-1og2</guid>
      <description>&lt;p&gt;78 cards. Five languages. Zero claims about the future.&lt;/p&gt;

&lt;p&gt;That's &lt;a href="https://tarotas.com" rel="noopener noreferrer"&gt;Tarotas&lt;/a&gt;, a tarot reflection app we built at &lt;a href="https://inithouse.com" rel="noopener noreferrer"&gt;Inithouse&lt;/a&gt;. The product does something most tarot apps avoid: it never tells you what's going to happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  The default is prediction
&lt;/h2&gt;

&lt;p&gt;Look at any tarot app and you'll find statements like "a new opportunity is approaching" or "expect emotional turbulence." The standard design maps a card's meaning to a claim about the user's future.&lt;/p&gt;

&lt;p&gt;We started there too. Early drafts of Tarotas interpretations read like horoscopes. The Tower? "Prepare for sudden change." The Star? "Hope is returning to your life."&lt;/p&gt;

&lt;p&gt;These are comfortable to write and easy to generate. They're also the least useful thing you can hand someone who pulled a card because they're thinking about a real decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we replaced it with
&lt;/h2&gt;

&lt;p&gt;We rewrote the interpretation layer to return questions and observations instead of predictions.&lt;/p&gt;

&lt;p&gt;The Tower doesn't tell you change is coming. It asks what structure in your life feels unstable right now. The Star doesn't promise hope. It points at where you've already started rebuilding something and asks if you've noticed.&lt;/p&gt;

&lt;p&gt;The difference sounds small, but it changes what people do with the app. A prediction is something you receive. A question is something you sit with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is harder than it sounds
&lt;/h2&gt;

&lt;p&gt;Stripping prediction from 78 card interpretations across five languages (Czech, English, Polish, Slovak, German) turned out to be a persistent editing problem.&lt;/p&gt;

&lt;p&gt;Every language hedges differently. Czech "mohlo by to znamenat" (it could mean) reads as a gentle suggestion. English "this could mean" still carries mild authority. Polish has its own hedging conventions that don't map neatly to either.&lt;/p&gt;

&lt;p&gt;We couldn't just translate one set of interpretations. Each language version went through its own review to catch statements that accidentally predict. "Expect" is obvious. "You might find" is subtler. "Notice where this shows up" is what we were aiming for.&lt;/p&gt;

&lt;p&gt;The hardest cards were the ones with inherently directional meanings. The Wheel of Fortune is literally about cycles and change. Writing an interpretation that acknowledges the card's traditional meaning without claiming the user's life is about to turn required more rewrites than we expected.&lt;/p&gt;

&lt;p&gt;We built a simple check for this: read an interpretation out loud and ask whether it makes a claim about tomorrow. If it does, rewrite. This sounds mechanical, but it caught dozens of statements we'd missed in initial drafts. Cards like the Ace of Pentacles naturally pull toward "new financial opportunity ahead." The rewrite: "What have you been building that's starting to feel solid?"&lt;/p&gt;

&lt;h2&gt;
  
  
  The design principle behind it
&lt;/h2&gt;

&lt;p&gt;Prediction closes a thought. You hear "a change is coming" and you either believe it or dismiss it. Either way, you stop thinking.&lt;/p&gt;

&lt;p&gt;A question opens a thought. "Where do you feel something shifting?" gives you something to work with. The card becomes a prompt, not an oracle.&lt;/p&gt;

&lt;p&gt;We've seen the same principle play out in other products we ship at Inithouse. &lt;a href="https://hereweask.com" rel="noopener noreferrer"&gt;Here We Ask&lt;/a&gt; is a conversation card game built on a similar idea: the question does the work, not the answer. Draw a card, read a question, talk about it. No scoring, no right answers. &lt;a href="https://verdictbuddy.com" rel="noopener noreferrer"&gt;Verdict Buddy&lt;/a&gt; takes a similar approach to conflict resolution: structured psychological frameworks help people think through disagreements rather than handing them a conclusion.&lt;/p&gt;

&lt;p&gt;In each case, the product's value comes from what happens in the user's head, not from what the app generates.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for interpretation UX
&lt;/h2&gt;

&lt;p&gt;If you're building anything where a system interprets something for a user (personality tests, reading recommendations, coaching tools, diagnostic summaries), the easiest output to produce is a confident statement. It feels authoritative. Users nod along.&lt;/p&gt;

&lt;p&gt;The harder output is a useful question. It requires knowing what the user is actually thinking about and meeting them there without overstepping.&lt;/p&gt;

&lt;p&gt;We're not saying questions are always better than statements. A medical diagnostic tool should give you a clear answer. But for products where the value is self-reflection, every generated assertion substitutes the app's confidence for the user's own thinking.&lt;/p&gt;

&lt;p&gt;Tarotas is a calm tarot reflection app: draw a card and read a grounded interpretation. No signup, no fortune-telling, just space to think. That's the line we hold, and the interpretation layer is how we hold it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>ux</category>
      <category>design</category>
    </item>
  </channel>
</rss>
