<?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: gocenghuntu-boop</title>
    <description>The latest articles on DEV Community by gocenghuntu-boop (@gocenghuntuboop).</description>
    <link>https://dev.to/gocenghuntuboop</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%2F4199033%2F9b9a287a-57bb-468a-aac2-d34707c3691c.png</url>
      <title>DEV Community: gocenghuntu-boop</title>
      <link>https://dev.to/gocenghuntuboop</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gocenghuntuboop"/>
    <language>en</language>
    <item>
      <title>Rimba Tales: a bedtime storyteller that writes and reads, so tired parents can be lazy</title>
      <dc:creator>gocenghuntu-boop</dc:creator>
      <pubDate>Wed, 21 Oct 2026 19:23:44 +0000</pubDate>
      <link>https://dev.to/gocenghuntuboop/rimba-tales-a-bedtime-storyteller-that-writes-and-reads-so-tired-parents-can-be-lazy-3c92</link>
      <guid>https://dev.to/gocenghuntuboop/rimba-tales-a-bedtime-storyteller-that-writes-and-reads-so-tired-parents-can-be-lazy-3c92</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Rimba Tales&lt;/strong&gt; is a wind-down companion for the most universal lazy moment in parenting: it is late, your voice is tired, and a small person asks for &lt;em&gt;one more story&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Pick an animal hero and one gentle lesson (kindness, courage, friendship, gratitude, patience), optionally add the child's name, and Rimba Tales:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Writes&lt;/strong&gt; a fresh, calming bedtime story of about 300 to 400 words,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reads it aloud&lt;/strong&gt; in a warm studio voice,&lt;/li&gt;
&lt;li&gt;Ends every story with a slow breathing exercise, so the story itself puts the child to sleep.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The heroes are the &lt;em&gt;Sahabat Rimba&lt;/em&gt; ("Friends of the Forest") from my Indonesian children's video series: Nara the Elephant, Raka the Lion Cub, Luma the Owl, Kiki the Mousedeer and Sasa the Turtle. Stories work in &lt;strong&gt;English and Bahasa Indonesia&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Who gets to be lazier? Parents at bedtime, obviously. But also me: for my video series I used to write every script by hand and record narration in take after take. Now the first draft &lt;em&gt;and&lt;/em&gt; the narration exist in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Live demo: &lt;a href="https://rimba-tales.onrender.com" rel="noopener noreferrer"&gt;https://rimba-tales.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe19jhsqts63ji0mtff4u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe19jhsqts63ji0mtff4u.jpg" alt="The Rimba friends — Nara, Raka, Luma, Kiki and Sasa — gathered under a smiling moon" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: the demo runs on a Starter instance paid from the Hacktoberfest Render credit, so it stays awake around the clock. No cold starts, even at judging time.&lt;/p&gt;

&lt;p&gt;A 30 second tour, exactly as a tired parent would use it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pick &lt;strong&gt;Luma the Owl&lt;/strong&gt; and &lt;strong&gt;Patience&lt;/strong&gt;, switch the language to &lt;strong&gt;Bahasa Indonesia&lt;/strong&gt;, add a child's name if you like.&lt;/li&gt;
&lt;li&gt;Press &lt;strong&gt;Make tonight's story&lt;/strong&gt;. The badges at the top tell you honestly which engine wrote it (on the live demo: an open-weight model via Groq).&lt;/li&gt;
&lt;li&gt;Press &lt;strong&gt;Read it to us&lt;/strong&gt; and wait a few seconds while the voice is prepared. The story is read aloud by ElevenLabs, and it ends, as every Rimba story ends, with slow breathing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Or watch it first:&lt;/strong&gt; a &lt;a href="https://github.com/gocenghuntu-boop/rimba-tales/blob/main/demo.mp4" rel="noopener noreferrer"&gt;42-second animated telling&lt;/a&gt; of a real story the live app wrote for a child named Aira, read aloud by Ibu Rimba, the app's own narrator, over the project's cover art brought to life frame by frame in code: fireflies drift, the moon glows, the animals breathe, and Luma blinks. The story and the voice are the live product's real output; the screenshot below is the app itself, exactly as you will find it at the link.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmfrj4temumjigysnb52r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmfrj4temumjigysnb52r.png" alt="The app right after generating a story: the source line names the model, the narrator picker is set to Ibu Rimba, and the story is ready to be read aloud" width="800" height="1734"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/gocenghuntu-boop" rel="noopener noreferrer"&gt;
        gocenghuntu-boop
      &lt;/a&gt; / &lt;a href="https://github.com/gocenghuntu-boop/rimba-tales" rel="noopener noreferrer"&gt;
        rimba-tales
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A bedtime storyteller that writes and reads aloud: open-weight AI stories via Groq, ElevenLabs narration, deployed on Render. Built for the Hacktoberfest Open-Source AI Challenge, Week 3.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Rimba Tales 🌙&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/gocenghuntu-boop/rimba-tales/cover.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgocenghuntu-boop%2Frimba-tales%2FHEAD%2Fcover.jpg" alt="The Rimba friends gathered under a smiling moon"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bedtime stories from the rainforest, written and read aloud for you.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;▶ Live demo: &lt;a href="https://rimba-tales.onrender.com" rel="nofollow noopener noreferrer"&gt;rimba-tales.onrender.com&lt;/a&gt;&lt;/strong&gt;
&lt;em&gt;(Starter instance funded by Hacktoberfest Render credit: always awake, no cold starts)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;▶ Watch: &lt;a href="https://github.com/gocenghuntu-boop/rimba-tales/demo.mp4" rel="noopener noreferrer"&gt;demo.mp4&lt;/a&gt;&lt;/strong&gt; — 42 seconds: an animated telling of a real
story written live by the open-weight model, read aloud by Ibu Rimba
(ElevenLabs), over the cover art brought to life. Screenshots
&lt;a href="https://github.com/gocenghuntu-boop/rimba-tales/screenshot-home.png" rel="noopener noreferrer"&gt;home&lt;/a&gt; · &lt;a href="https://github.com/gocenghuntu-boop/rimba-tales/screenshot-story.png" rel="noopener noreferrer"&gt;story&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rimba Tales is a tiny wind-down companion for the most universal lazy moment in
parenting: it is late, your voice is tired, and a small person asks for
&lt;em&gt;one more story&lt;/em&gt;. Pick an animal hero and one gentle lesson, and Rimba Tales
writes a fresh, calming story, then reads it aloud while you put your feet up.&lt;/p&gt;
&lt;p&gt;Heroes come from the Indonesian rainforest (the &lt;em&gt;Sahabat Rimba&lt;/em&gt;, "Friends of
the Forest"): Nara the Elephant, Raka the Lion Cub, Luma the Owl, Kiki the…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/gocenghuntu-boop/rimba-tales" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Repository: &lt;a href="https://github.com/gocenghuntu-boop/rimba-tales" rel="noopener noreferrer"&gt;https://github.com/gocenghuntu-boop/rimba-tales&lt;/a&gt; (MIT licensed)&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Rimba Tales is a single small Python service with &lt;strong&gt;zero third-party dependencies&lt;/strong&gt; (it runs on the standard library alone, so there is nothing to install and nothing to break), and it is deliberately built in layers, so no single API can ruin bedtime:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Story generation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First choice: an &lt;strong&gt;open-weight model served by Groq&lt;/strong&gt;. The app does not hardcode a model name; it asks Groq which models the API key can access and auto-selects the best open-weight chat model. On the live deployment that is OpenAI's open-weight &lt;strong&gt;gpt-oss-120b&lt;/strong&gt;. This design decision was earned the hard way during this very week: my first hardcoded model name turned out to have been retired by the host, the API answered &lt;code&gt;model_not_found&lt;/code&gt;, and the app silently fell back. Now, if a model is ever retired again, the app heals itself on the next request. The system prompt turns the model into a bedtime storyteller with hard constraints: simple warm language, short paragraphs, nothing scary, a small kind lesson, and a breathing exercise to close.&lt;/li&gt;
&lt;li&gt;Guaranteed fallback: a &lt;strong&gt;local offline story engine&lt;/strong&gt; (&lt;code&gt;stories.py&lt;/code&gt;) that composes stories from hand-written scenes — one animal, one problem tied to the theme, one kind action, one lesson from the moon, one sleepy closing ritual. It needs no key, no network and no money, in both languages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Narration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First choice: &lt;strong&gt;ElevenLabs&lt;/strong&gt; text-to-speech (&lt;code&gt;eleven_multilingual_v2&lt;/code&gt;), because an Indonesian story should sound Indonesian. Parents also choose who tells it: &lt;strong&gt;Ibu Rimba&lt;/strong&gt;, a warm mother's voice, or &lt;strong&gt;Bapak Rimba&lt;/strong&gt;, a warm father's voice, because some kids only settle for one of them. I claimed the Hacktoberfest ElevenLabs credit for this, and the Creator month is more than enough narration for a lot of bedtimes.&lt;/li&gt;
&lt;li&gt;Fallback: the browser's own &lt;strong&gt;Web Speech API&lt;/strong&gt; voice, free and entirely on-device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hosting&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployed on &lt;strong&gt;Render&lt;/strong&gt; as a Web Service from a &lt;code&gt;render.yaml&lt;/code&gt; Blueprint, in the workspace funded by the $50 Hacktoberfest Render credit. The badges on the page always show which story engine and which narrator are actually live, so the demo is honest about its own stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;A bedtime app that depends on one closed API fails on the worst possible night: the night the key runs out of balance.&lt;/p&gt;

&lt;p&gt;Because the writer is an open-weight model, anyone can point this app at the same weights through a different host, or run them locally, and the stories keep coming. Because the fallback composer is plain open-source Python in the repo, anyone can clone Rimba Tales and have a complete, working storyteller for free, forever, even offline, even in a village with shaky internet, which is exactly where a lot of Indonesian bedtime stories get told.&lt;/p&gt;

&lt;p&gt;The commercial voice (ElevenLabs) is an enhancement layered on top, never a single point of failure. That layering is only possible because the core of the project is open.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;Measured on my own evenings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing one &lt;em&gt;Sahabat Rimba&lt;/em&gt; script by hand: about 45 minutes. Rimba Tales first draft: about 2 seconds.&lt;/li&gt;
&lt;li&gt;Recording one narration cleanly: several takes, about 20 minutes, plus assembly. Rimba Tales narration: one tap.&lt;/li&gt;
&lt;li&gt;For a parent who only uses it at bedtime: roughly &lt;strong&gt;12 minutes of inventing, performing and negotiating saved, every single night&lt;/strong&gt;, and the story still ends with the child breathing slowly and falling asleep.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Slow and steady, like the sloth intended: the parent does less, the child sleeps the same, the forest keeps its stories.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt; (the app is deployed on Render via Blueprint, running on a Starter instance funded by the Hacktoberfest Render credit, so the demo never sleeps)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt; (studio narration for every generated story, multilingual, so Indonesian stories are read in Indonesian, with two selectable narrator voices: a mother's and a father's)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;Full honesty, because this challenge has a section for it: I directed this build and my AI assistant implemented it with me, late into the night before the deadline week closed. I made the calls a product person makes: which characters, which languages, which sponsor tools are worth claiming, when to stop polishing. The agent wrote the service, then debugged it live at 1 a.m. when the first deploy quietly fell back to the offline engine, and found the two culprits I would never have guessed: a cloud firewall rejecting Python's default user agent, and a model name the host had retired. The fix it shipped, runtime model auto-discovery, is the part of this project I am proudest of, and it exists because the agent refused to guess and instead added a diagnostics endpoint to see the real error. The lazy theme held up at every level: even the debugging was delegated.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
