<?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: Mantej Singh</title>
    <description>The latest articles on DEV Community by Mantej Singh (@drago03).</description>
    <link>https://dev.to/drago03</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1957218%2F58418928-48da-4990-b5af-3e2fe53234cf.jpeg</url>
      <title>DEV Community: Mantej Singh</title>
      <link>https://dev.to/drago03</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/drago03"/>
    <language>en</language>
    <item>
      <title>GroqTales: Building an AI‑Native Storytelling Engine on Monad (and Why I Need Your Help)</title>
      <dc:creator>Mantej Singh</dc:creator>
      <pubDate>Sun, 01 Mar 2026 20:16:48 +0000</pubDate>
      <link>https://dev.to/drago03/groqtales-building-an-ai-native-storytelling-engine-on-monad-and-why-i-need-your-help-2kcb</link>
      <guid>https://dev.to/drago03/groqtales-building-an-ai-native-storytelling-engine-on-monad-and-why-i-need-your-help-2kcb</guid>
      <description>&lt;p&gt;You think “Write a noir heist set in a neon Delhi, mint it on‑chain, split royalties with my co‑writer, and don’t make me touch a smart contract.”&lt;br&gt;
That’s the experience we’re trying to build with &lt;strong&gt;GroqTales&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Most NFT projects treated lore as marketing copy. The PFPs got all the liquidity; the writers got a Notion doc and a “thanks fam”.&lt;/p&gt;

&lt;p&gt;So we asked: &lt;em&gt;what if the **story&lt;/em&gt;* was the first‑class asset?*&lt;br&gt;&lt;br&gt;
And what if AI + on‑chain rails made it &lt;strong&gt;fast&lt;/strong&gt; to create, &lt;strong&gt;fair&lt;/strong&gt; to share, and &lt;strong&gt;transparent&lt;/strong&gt; to curate?&lt;/p&gt;

&lt;p&gt;This post is the story of how we’re building that — and where you can plug in as a contributor.&lt;/p&gt;


&lt;h2&gt;
  
  
  TL;DR – What is GroqTales?
&lt;/h2&gt;

&lt;p&gt;GroqTales is an &lt;strong&gt;AI‑powered, on‑chain storytelling platform&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You describe a story (or go full control‑freak with an advanced “Pro Panel” of ~70 knobs).&lt;/li&gt;
&lt;li&gt;Groq models generate a structured screenplay‑like narrative in seconds.&lt;/li&gt;
&lt;li&gt;We pair it with &lt;strong&gt;AI‑generated visuals&lt;/strong&gt; to feel like a comic / graphic novel.&lt;/li&gt;
&lt;li&gt;You mint it as an NFT on &lt;strong&gt;Monad&lt;/strong&gt;, with collaborators and royalty splits encoded in the &lt;strong&gt;CollabStory Protocol&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try the current build here:&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;Live site:&lt;/strong&gt; &lt;a href="https://www.groqtales.xyz/" rel="noopener noreferrer"&gt;groqtales.xyz&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://lnkd.in/gnV4-JEz" rel="noopener noreferrer"&gt;IndieHub25/GroqTales&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;Contributors page:&lt;/strong&gt; &lt;a href="https://www.groqtales.xyz/contributors" rel="noopener noreferrer"&gt;Top contributors&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From here on, I’m going to walk you through the &lt;strong&gt;tech&lt;/strong&gt;, not the hype.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Pro Panel: an AI “Story Engine”, not just a text box
&lt;/h2&gt;

&lt;p&gt;The obvious implementation would be a single prompt field and a “Generate” button.&lt;/p&gt;

&lt;p&gt;We didn’t do that.&lt;/p&gt;

&lt;p&gt;Instead, we built a &lt;strong&gt;Pro Panel&lt;/strong&gt; UI that turns story generation into a structured system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;9 logical categories (Story Structure, Characters, World, Tone &amp;amp; Style, Theme, Model Settings, Visual, Length, Advanced).&lt;/li&gt;
&lt;li&gt;~70 parameters persisted in a &lt;strong&gt;Zustand&lt;/strong&gt; store with localStorage.&lt;/li&gt;
&lt;li&gt;A grid of &lt;strong&gt;genre cards&lt;/strong&gt; (Fantasy, Noir, Cyberpunk, Romance, etc.) that act more like &lt;em&gt;story presets&lt;/em&gt; than mere labels.&lt;/li&gt;
&lt;li&gt;A dossier‑style layout with animated “page turns” so power‑users don’t drown in sliders.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rough shape of the state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/store/proPanelStore.ts&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ProParameters&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;storyStructure&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* plot arcs, pacing, act structure, resolution… */&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nl"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* archetypes, POV, ensemble vs solo… */&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nl"&gt;world&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* era, tech level, magic system toggles, location presets… */&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nl"&gt;toneStyle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* humor vs grim, sentence cadence, narrative voice… */&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nl"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* core moral questions, genre blends… */&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nl"&gt;modelSettings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;modelSelection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;maxTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;topP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;topK&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;frequencyPenalty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;presencePenalty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;repetitionPenalty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;stopSequences&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nl"&gt;visual&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* prompts for panels, camera angles, mood boards… */&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nl"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* reading time, beats per act, chapter count… */&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nl"&gt;advanced&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* safety rails, structural constraints, output schema… */&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On top of this we built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Presets&lt;/strong&gt; (built‑in and user‑defined) that snapshot the entire parameter tree.&lt;/li&gt;
&lt;li&gt;Import / export flows using JSON (so you can share a “Cyberpunk Heist” config in Discord).&lt;/li&gt;
&lt;li&gt;Validation using &lt;strong&gt;Zod schemas&lt;/strong&gt; to keep the Groq API calls sane.&lt;/li&gt;
&lt;li&gt;Accessible controls (labels, keyboard nav, aria semantics) so this isn’t just “pretty sliders”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Pro Panel isn’t “UX sugar” — it’s our contract for generating &lt;strong&gt;consistent, remixable stories&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The AI Stack: talking to Groq like an engine, not a toy
&lt;/h2&gt;

&lt;p&gt;Under the hood, the Pro Panel drives a backend service that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Receives &lt;code&gt;{ prompt, title, proConfig }&lt;/code&gt; at &lt;code&gt;/api/groq&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Validates &lt;code&gt;proConfig&lt;/code&gt; against strict Zod schemas.&lt;/li&gt;
&lt;li&gt;Compiles a &lt;strong&gt;system prompt&lt;/strong&gt; that encodes:

&lt;ul&gt;
&lt;li&gt;The genre &amp;amp; tone.&lt;/li&gt;
&lt;li&gt;Scene structure and beats.&lt;/li&gt;
&lt;li&gt;Character arcs and constraints.&lt;/li&gt;
&lt;li&gt;Safety requirements (no jailbreaking your way into garbage).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Calls the &lt;strong&gt;Groq chat completions&lt;/strong&gt; endpoint with hardened settings.&lt;/li&gt;
&lt;li&gt;Runs &lt;strong&gt;output checks&lt;/strong&gt; before we accept the story.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// lib/groq-service.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateStoryWithProConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;proConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ProParameters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;title&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;sanitizedPrompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sanitizeAndValidate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;systemPrompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;buildProPanelSystemPrompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;proConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userPrompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;buildUserPrompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sanitizedPrompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;proConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;requestBody&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;proConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;modelSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;modelSelection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;systemPrompt&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userPrompt&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;proConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;modelSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;proConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;modelSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maxTokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// top_p, top_k, etc…&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.groq.com/openai/v1/chat/completions&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GROQ_API_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AbortSignal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// don’t hang forever&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;requestBody&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;story&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;extractAndValidateStory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;story&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The frontend never deals with raw “AI spaghetti”. It gets back &lt;strong&gt;structured story data&lt;/strong&gt; that downstream components (comic renderer, NFT minter, etc.) can rely on.&lt;/p&gt;




&lt;h2&gt;
  
  
  On‑chain: Monad + CollabStory Protocol
&lt;/h2&gt;

&lt;p&gt;The second pillar: &lt;em&gt;a story is an NFT, not a random JSON blob on some server&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;We’re integrating &lt;strong&gt;Monad&lt;/strong&gt; as the base chain for story minting. Design goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 story = 1 NFT.&lt;/li&gt;
&lt;li&gt;Each NFT references:

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;story content hash&lt;/strong&gt; (text + metadata).&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;visual bundle hash&lt;/strong&gt; (art panels).&lt;/li&gt;
&lt;li&gt;A list of &lt;strong&gt;contributors&lt;/strong&gt; with weights (writer, editor, artist, prompt engineer…).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Royalties are &lt;strong&gt;split automatically&lt;/strong&gt; based on those weights.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;At a high level, the &lt;strong&gt;CollabStory Protocol&lt;/strong&gt; spec looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Pseudocode-ish
struct ContributorShare {
  address contributor;
  uint96 bps; // basis points, sum must = 10_000
}

struct StoryMetadata {
  bytes32 storyHash;   // keccak256 of canonical story JSON
  bytes32 artHash;     // keccak256 of panel assets bundle
  string  genre;
  string  title;
}

function mintStory(
  StoryMetadata metadata,
  ContributorShare[] memory shares
) external returns (uint256 tokenId);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the AI side, we’re responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Producing a &lt;strong&gt;canonical JSON&lt;/strong&gt; representation of the story (no “oops we changed a field, hash doesn’t match”).&lt;/li&gt;
&lt;li&gt;Verifying that the set of contributors and shares is valid &lt;em&gt;before&lt;/em&gt; hitting the chain.&lt;/li&gt;
&lt;li&gt;Exposing a UX where non‑crypto‑native writers don’t have to think about any of this.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re into &lt;strong&gt;smart contracts, royalty standards, or Monad tooling&lt;/strong&gt;, there’s a lot of low‑level surface here to help design and implement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Curation: AIgent Curators instead of black‑box feeds
&lt;/h2&gt;

&lt;p&gt;Ranking content is where most creator platforms quietly betray their users.&lt;/p&gt;

&lt;p&gt;We want to experiment with &lt;strong&gt;AI‑powered curators&lt;/strong&gt; whose decisions are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transparent (inputs + scoring dimensions are inspectable).&lt;/li&gt;
&lt;li&gt;Logged on‑chain (or at least hash‑committed).&lt;/li&gt;
&lt;li&gt;Tunable per community (e.g., “give me weird experimental horror” vs “keep it PG‑13 fantasy”).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Early idea for a curator agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ingest story metadata + text + engagement stats.&lt;/li&gt;
&lt;li&gt;Compute scores along dimensions:

&lt;ul&gt;
&lt;li&gt;Originality (novelty vs training‑corpus‑like).&lt;/li&gt;
&lt;li&gt;Genre fit (does this actually feel like “Noir Heist” or just generic copypasta?).&lt;/li&gt;
&lt;li&gt;Structural coherence (beats, arcs, resolution).&lt;/li&gt;
&lt;li&gt;Community signals (likes, completions, forks/remixes).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Emit a ranking + explanation.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This is still mostly design + plumbing territory — perfect for contributors who enjoy &lt;strong&gt;ML evaluation, ranking systems, or on‑chain indexing&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Developer Experience: how it all fits together
&lt;/h2&gt;

&lt;p&gt;High‑level architecture as it stands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js App Router.&lt;/li&gt;
&lt;li&gt;Shadcn UI + a custom noir/comic theme.&lt;/li&gt;
&lt;li&gt;Pro Panel + Story Input as client components backed by &lt;strong&gt;Zustand&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Accessibility passes (labels, aria, focus states) guided by automated review.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route handlers under &lt;code&gt;/app/api/*&lt;/code&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/api/groq&lt;/code&gt; for story generation with Pro Panel config.&lt;/li&gt;
&lt;li&gt;(Planned) &lt;code&gt;/api/story&lt;/code&gt; endpoints for persistence, remixing, and publishing.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lib/groq-service.ts&lt;/code&gt; acting as the AI “engine” layer.&lt;/li&gt;
&lt;li&gt;Supabase client for user/session‑adjacent data.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Infra / Tooling&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type‑safe schemas with &lt;strong&gt;Zod&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Tailwind config extended for noir/comic visuals.&lt;/li&gt;
&lt;li&gt;CodeRabbit driving automated review suggestions (a11y, security, timeouts).&lt;/li&gt;
&lt;li&gt;Open‑source friendly defaults (no secrets in repo, env‑driven config).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;You can browse the code and open issues here:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://lnkd.in/gnV4-JEz" rel="noopener noreferrer"&gt;GroqTales GitHub repo&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Where I need help (a.k.a. why I’m posting this on DEV)
&lt;/h2&gt;

&lt;p&gt;This is open source by design. I don’t want this to become “yet another closed AI content farm”.&lt;/p&gt;

&lt;p&gt;If any of these sound like your thing, you can make a real dent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI / Prompt Engineering&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Help evolve the Pro Panel schemas.&lt;/li&gt;
&lt;li&gt;Design better system prompts for genre‑specific outputs.&lt;/li&gt;
&lt;li&gt;Build evaluators to detect low‑quality or derivative stories.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Smart Contracts / Monad&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formalize and implement the CollabStory Protocol.&lt;/li&gt;
&lt;li&gt;Explore meta‑transactions / gasless flows for non‑crypto writers.&lt;/li&gt;
&lt;li&gt;Help design NFT metadata for richly linked stories + panels.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend / UX&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Polish the Pro Panel (performance, keyboard flow, mobile layout).&lt;/li&gt;
&lt;li&gt;Build a reader experience that feels like &lt;strong&gt;turning comic pages&lt;/strong&gt;, not scrolling a blog.&lt;/li&gt;
&lt;li&gt;Improve accessibility beyond “bare minimum passes”.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DevEx / Tooling&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CI pipelines, linting, and automated tests for the AI and contract layers.&lt;/li&gt;
&lt;li&gt;Better presets import/export flows.&lt;/li&gt;
&lt;li&gt;Docs and examples (e.g., “build your own curator agent on top of GroqTales data”).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  How to get involved
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explore the platform&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Open &lt;a href="https://www.groqtales.xyz/" rel="noopener noreferrer"&gt;groqtales.xyz&lt;/a&gt; and poke around the Pro Panel. Break it. See where it feels clunky or magical.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Star &amp;amp; watch the repo&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Stars genuinely help surface the project to other builders:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://lnkd.in/gnV4-JEz" rel="noopener noreferrer"&gt;Star IndieHub25/GroqTales&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pick an issue and ship a PR&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check the issues board in the repo (we’re tagging good first issues, UI/UX, AI, and Web3 tasks).&lt;/li&gt;
&lt;li&gt;Comment that you’re taking something so we don’t collide.&lt;/li&gt;
&lt;li&gt;Open a focused PR with a clear description and testing notes — we’re using templates and automated review to keep quality high.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Propose experiments&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Want to try a new model, a different chain, or a wild curator idea? Open a discussion or issue. This is meant to be a &lt;strong&gt;playground&lt;/strong&gt;, not a walled garden.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;If you’ve ever looked at an NFT drop and thought, &lt;em&gt;“the art is cool but the story deserved better”&lt;/em&gt; — GroqTales is my attempt to fix that.&lt;/p&gt;

&lt;p&gt;Writers, prompt‑engineers, and devs shouldn’t be NPCs in the creator economy.&lt;br&gt;&lt;br&gt;
They should be &lt;strong&gt;main characters&lt;/strong&gt; with on‑chain receipts.&lt;/p&gt;

&lt;p&gt;If that resonates, come build with us. 🔧📚&lt;/p&gt;

</description>
      <category>ai</category>
      <category>web3</category>
      <category>opensource</category>
      <category>diversity</category>
    </item>
  </channel>
</rss>
