1<!DOCTYPE html><html lang="en" data-astro-cid-37fxchfa> <head><meta charset="UTF-8"><meta name="description" content="Browse hundreds of short stories for kids, bedtime stories, and fairy tales created by families. Get inspired and create your own personalized storybook with Dreamcraft Tale."><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" type="image/png" href="/favicon.png"><meta name="generator" content="Astro v5.13.7"><title>Story Library | Explore Bedtime Stories & Fairy Tales for Kids</title><!-- Canonical URL --><link rel="canonical" href="https://dreamcrafttale.com/story-library/"><!-- Block indexing on non-production environments --><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://dreamcrafttale.com/story-library/"><meta property="og:title" content="Story Library | Explore Bedtime Stories & Fairy Tales for Kids"><meta property="og:description" content="Browse hundreds of short stories for kids, bedtime stories, and fairy tales created by families. Get inspired and create your own personalized storybook with Dreamcraft Tale."><meta property="og:image" content="https://dreamcrafttale.com/assets/images/feature.webp"><meta property="og:image:alt" content="Dreamcraft Tale - Magical storytelling app for kids"><meta property="og:site_name" content="Dreamcraft Tale"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:url" content="https://dreamcrafttale.com/story-library/"><meta name="twitter:title" content="Story Library | Explore Bedtime Stories & Fairy Tales for Kids"><meta name="twitter:description" content="Browse hundreds of short stories for kids, bedtime stories, and fairy tales created by families. Get inspired and create your own personalized storybook with Dreamcraft Tale."><meta name="twitter:image" content="https://dreamcrafttale.com/assets/images/feature.webp"><meta name="twitter:image:alt" content="Dreamcraft Tale - Magical storytelling app for kids"><!-- Fonts - Non-blocking loading --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><!-- Async CSS with preload --><link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" onload="this.onload=null;this.rel='stylesheet';this.removeAttribute('as')" as="style"><!-- No-JS fallback --><noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"></noscript><!-- External Resources --><link rel="preconnect" href="https://www.buzzsprout.com" crossorigin><link rel="preconnect" href="https://pixel-config.reddit.com" crossorigin><link rel="preconnect" href="https://alb.reddit.com" crossorigin><!-- Global Styles imported above --><!-- Styles --><!-- Google Tag Manager -->
1<script>
vendor: 338 bytes, lines 1-6
1 2 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 3 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 4 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 5 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 6 })(window,document,'script','dataLayer','
6GTM-PBDXXGC2
vendor: 6 bytes, lines 6-7
6'); 7
7</script>
7<!-- End Google Tag Manager --><link rel="stylesheet" href="/_astro/about-acceptance.DCom7teV.css"> 8<style>.line-clamp-2[data-astro-cid-ndhobcjl]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.line-clamp-3[data-astro-cid-ndhobcjl]{display:-webkit-box!important;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}.aspect-square[data-astro-cid-ndhobcjl]{aspect-ratio:1 / 1} 9</style></head> <body data-astro-cid-37fxchfa> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PBDXXGC2" height="0" width="0" style="display:none;visibility:hidden" data-astro-cid-37fxchfa></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <header class="bg-white shadow-sm border-b border-gray-200" data-astro-cid-3ef6ksr2> <div class="container mx-auto px-4 py-4" data-astro-cid-3ef6ksr2> <div class="flex items-center justify-between" data-astro-cid-3ef6ksr2> <!-- Logo --> <a href="/" class="flex items-center space-x-2" data-astro-cid-3ef6ksr2> <img src="/assets/images/icon_small.webp" alt="Dreamcraft Tale" class="w-8 h-8 rounded-lg" data-astro-cid-3ef6ksr2> <span class="text-xl font-bold text-gray-900" data-astro-cid-3ef6ksr2>Dreamcraft Tale</span> </a> <!-- Navigation --> <nav class="hidden xl:flex items-center space-x-8" data-astro-cid-3ef6ksr2> <a href="/" class="text-gray-600 hover:text-indigo-600 transition-colors" data-astro-cid-3ef6ksr2>Home</a> <a href="/story-library" class="text-gray-600 hover:text-indigo-600 transition-colors" data-astro-cid-3ef6ksr2>Story Library</a> <a href="/our-story" class="text-gray-600 hover:text-indigo-600 transition-colors" data-astro-cid-3ef6ksr2>Our Story</a> <a href="/quality-and-safety" class="text-gray-600 hover:text-indigo-600 transition-colors" data-astro-cid-3ef6ksr2>Safety</a> <a href="/for-educators" class="text-gray-600 hover:text-indigo-600 transition-colors" data-astro-cid-3ef6ksr2>For Educators</a> <a href="/blog" class="text-gray-600 hover:text-indigo-600 transition-colors" data-astro-cid-3ef6ksr2>Blog</a> <a href="/contact" class="text-gray-600 hover:text-indigo-600 transition-colors" data-astro-cid-3ef6ksr2>Contact</a> </nav> <!-- CTA Buttons --> <div class="flex items-center space-x-3" data-astro-cid-3ef6ksr2> <a href="https://apps.apple.com/app/id6752249916?utm_source=website&utm_medium=header&utm_campaign=story-library" target="_blank" rel="noopener noreferrer" class="btn-primary text-sm px-4 py-2 hidden xl:inline-block" data-download-cta data-platform="app_store" data-medium="header" data-campaign="story-library" data-ios-url="https://apps.apple.com/app/id6752249916?utm_source=website&utm_medium=header&utm_campaign=story-library" data-android-url="https://play.google.com/store/apps/details?id=com.piimobile.ai.story&utm_source=website&utm_medium=header&utm_campaign=story-library" data-astro-cid-3ef6ksr2> 10Download App 11</a> <!-- Mobile menu button --> <button id="mobile-menu-button" class="xl:hidden p-2 rounded-md text-gray-600 hover:text-gray-900 hover:bg-gray-100" data-astro-cid-3ef6ksr2> <svg id="menu-open-icon" class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-3ef6ksr2> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" data-astro-cid-3ef6ksr2></path> </svg> <svg id="menu-close-icon" class="w-6 h-6 hidden" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-astro-cid-3ef6ksr2> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" data-astro-cid-3ef6ksr2></path> </svg> </button> </div> </div> <!-- Mobile menu --> <div id="mobile-menu" class="hidden xl:hidden mt-4 pb-4" data-astro-cid-3ef6ksr2> <nav class="flex flex-col space-y-4" data-astro-cid-3ef6ksr2> <a href="/" class="text-gray-600 hover:text-indigo-600 transition-colors px-4 py-2 hover:bg-gray-50 rounded-md" data-astro-cid-3ef6ksr2>Home</a> <a href="/story-library" class="text-gray-600 hover:text-indigo-600 transition-colors px-4 py-2 hover:bg-gray-50 rounded-md" data-astro-cid-3ef6ksr2>Story Library</a> <a href="/our-story" class="text-gray-600 hover:text-indigo-600 transition-colors px-4 py-2 hover:bg-gray-50 rounded-md" data-astro-cid-3ef6ksr2>Our Story</a> <a href="/quality-and-safety" class="text-gray-600 hover:text-indigo-600 transition-colors px-4 py-2 hover:bg-gray-50 rounded-md" data-astro-cid-3ef6ksr2>Safety</a> <a href="/for-educators" class="text-gray-600 hover:text-indigo-600 transition-colors px-4 py-2 hover:bg-gray-50 rounded-md" data-astro-cid-3ef6ksr2>For Educators</a> <a href="/blog" class="text-gray-600 hover:text-indigo-600 transition-colors px-4 py-2 hover:bg-gray-50 rounded-md" data-astro-cid-3ef6ksr2>Blog</a> <a href="/contact" class="text-gray-600 hover:text-indigo-600 transition-colors px-4 py-2 hover:bg-gray-50 rounded-md" data-astro-cid-3ef6ksr2>Contact</a> <div class="border-t border-gray-200 pt-4 mt-2 flex gap-3 px-4" data-astro-cid-3ef6ksr2> <a href="https://apps.apple.com/app/id6752249916?utm_source=website&utm_medium=header&utm_campaign=story-library" target="_blank" rel="noopener noreferrer" data-download-cta data-platform="app_store" data-medium="mobile_menu" data-campaign="story-library" data-astro-cid-3ef6ksr2> <img src="/assets/images/app_store_dark.svg" alt="Download on the App Store" class="h-11 w-auto" data-astro-cid-3ef6ksr2> </a> <a href="https://play.google.com/store/apps/details?id=com.piimobile.ai.story&utm_source=website&utm_medium=header&utm_campaign=story-library" target="_blank" rel="noopener noreferrer" data-download-cta data-platform="google_play" data-medium="mobile_menu" data-campaign="story-library" data-astro-cid-3ef6ksr2> <img src="/assets/images/google_play_dark.svg" alt="Get it on Google Play" class="h-11 w-auto" data-astro-cid-3ef6ksr2> </a> </div> </nav> </div> </div> </header>
11<script type="module">const i=document.getElementById("mobile-menu-button"),e=document.getElementById("mobile-menu"),n=document.getElementById("menu-open-icon"),d=document.getElementById("menu-close-icon");i&&e&&n&&d&&(i.addEventListener("click",()=>{e.classList.contains("hidden")?(e.classList.remove("hidden"),n.classList.add("hidden"),d.classList.remove("hidden")):(e.classList.add("hidden"),n.classList.remove("hidden"),d.classList.add("hidden"))}),e.querySelectorAll("a").forEach(s=>{s.addEventListener("click",()=>{e.classList.add("hidden"),n.classList.remove("hidden"),d.classList.add("hidden")})}));</script>
11 <main data-astro-cid-37fxchfa> <section class="bg-gradient-to-br from-indigo-50 via-white to-purple-50 py-16" data-astro-cid-ndhobcjl> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8" data-astro-cid-ndhobcjl> <div class="text-center mb-8" data-astro-cid-ndhobcjl> <h1 class="text-4xl md:text-5xl font-bold text-gray-900 mb-6" data-astro-cid-ndhobcjl> 12Explore a Universe of Stories 13</h1> <p class="text-xl text-gray-600 max-w-3xl mx-auto" data-astro-cid-ndhobcjl> 14Discover magical bedtime stories, fairy tales, and short stories for kids created by families just like yours. 15 Get inspired and then create your own personalized storybook! 16</p> </div> </div> </section> <section class="py-12 bg-white border-b" data-astro-cid-ndhobcjl> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8" data-astro-cid-ndhobcjl> <h2 class="text-2xl font-bold text-gray-900 mb-6" data-astro-cid-ndhobcjl>Browse by Category</h2> <div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-4 mb-8" data-astro-cid-ndhobcjl> <a href="/bedtime-stories/learning-adventures" class="flex flex-col items-center p-4 bg-gradient-to-br from-indigo-50 to-purple-50 rounded-xl hover:shadow-md transition-all duration-200 hover:-translate-y-0.5" data-astro-cid-ndhobcjl> <span class="text-3xl mb-2" data-astro-cid-ndhobcjl>ð</span> <span class="font-semibold text-gray-900 text-sm text-center" data-astro-cid-ndhobcjl>Learning Adventures</span> <span class="text-xs text-gray-500" data-astro-cid-ndhobcjl>368 stories</span> </a><a href="/bedtime-stories/animal-friends" class="flex flex-col items-center p-4 bg-gradient-to-br from-indigo-50 to-purple-50 rounded-xl hover:shadow-md transition-all duration-200 hover:-translate-y-0.5" data-astro-cid-ndhobcjl> <span class="text-3xl mb-2" data-astro-cid-ndhobcjl>ð¾</span> <span class="font-semibold text-gray-900 text-sm text-center" data-astro-cid-ndhobcjl>Animal Friends</span> <span class="text-xs text-gray-500" data-astro-cid-ndhobcjl>319 stories</span> </a><a href="/bedtime-stories/magical-worlds" class="flex flex-col items-center p-4 bg-gradient-to-br from-indigo-50 to-purple-50 rounded-xl hover:shadow-md transition-all duration-200 hover:-translate-y-0.5" data-astro-cid-ndhobcjl> <span class="text-3xl mb-2" data-astro-cid-ndhobcjl>â¨</span> <span class="font-semibold text-gray-900 text-sm text-center" data-astro-cid-ndhobcjl>Magical Worlds</span> <span class="text-xs text-gray-500" data-astro-cid-ndhobcjl>249 stories</span> </a><a href="/bedtime-stories/everyday-heroes" class="flex flex-col items-center p-4 bg-gradient-to-br from-indigo-50 to-purple-50 rounded-xl hover:shadow-md transition-all duration-200 hover:-translate-y-0.5" data-astro-cid-ndhobcjl> <span class="text-3xl mb-2" data-astro-cid-ndhobcjl>ð¦¸</span> <span class="font-semibold text-gray-900 text-sm text-center" data-astro-cid-ndhobcjl>Everyday Heroes</span> <span class="text-xs text-gray-500" data-astro-cid-ndhobcjl>149 stories</span> </a><a href="/bedtime-stories/silly-fun" class="flex flex-col items-center p-4 bg-gradient-to-br from-indigo-50 to-purple-50 rounded-xl hover:shadow-md transition-all duration-200 hover:-translate-y-0.5" data-astro-cid-ndhobcjl> <span class="text-3xl mb-2" data-astro-cid-ndhobcjl>ð</span> <span class="font-semibold text-gray-900 text-sm text-center" data-astro-cid-ndhobcjl>Silly & Fun</span> <span class="text-xs text-gray-500" data-astro-cid-ndhobcjl>113 stories</span> </a><a href="/bedtime-stories/bedtime-stories" class="flex flex-col items-center p-4 bg-gradient-to-br from-indigo-50 to-purple-50 rounded-xl hover:shadow-md transition-all duration-200 hover:-translate-y-0.5" data-astro-cid-ndhobcjl> <span class="text-3xl mb-2" data-astro-cid-ndhobcjl>ð</span> <span class="font-semibold text-gray-900 text-sm text-center" data-astro-cid-ndhobcjl>Bedtime Stories</span> <span class="text-xs text-gray-500" data-astro-cid-ndhobcjl>72 stories</span> </a> </div> <h3 class="text-lg font-semibold text-gray-900 mb-3" data-astro-cid-ndhobcjl>By Age Group</h3> <div class="flex flex-wrap gap-2 mb-6" data-astro-cid-ndhobcjl> <a href="/bedtime-stories/for-toddlers-age-2-3" class="px-4 py-2 bg-white border border-gray-200 rounded-full text-sm text-gray-700 hover:bg-indigo-50 hover:border-indigo-300 transition" data-astro-cid-ndhobcjl> Toddlers (2-3) </a><a href="/bedtime-stories/for-preschool-age-3-4" class="px-4 py-2 bg-white border border-gray-200 rounded-full text-sm text-gray-700 hover:bg-indigo-50 hover:border-indigo-300 transition" data-astro-cid-ndhobcjl> Preschool (3-4) </a><a href="/bedtime-stories/for-pre-k-age-4-5" class="px-4 py-2 bg-white border border-gray-200 rounded-full text-sm text-gray-700 hover:bg-indigo-50 hover:border-indigo-300 transition" data-astro-cid-ndhobcjl>
16 Pre-K (4-5) </a><a href="/bedtime-stories/for-kindergarten-age-5-6" class="px-4 py-2 bg-white border border-gray-200 rounded-full text-sm text-gray-700 hover:bg-indigo-50 hover:border-indigo-300 transition" data-astro-cid-ndhobcjl> Kindergarten (5-6) </a><a href="/bedtime-stories/for-grade-1-age-6-7" class="px-4 py-2 bg-white border border-gray-200 rounded-full text-sm text-gray-700 hover:bg-indigo-50 hover:border-indigo-300 transition" data-astro-cid-ndhobcjl> Grade 1 (6-7) </a><a href="/bedtime-stories/for-grade-2-age-7-8" class="px-4 py-2 bg-white border border-gray-200 rounded-full text-sm text-gray-700 hover:bg-indigo-50 hover:border-indigo-300 transition" data-astro-cid-ndhobcjl> Grade 2 (7-8) </a><a href="/bedtime-stories/for-grade-3-age-8-9" class="px-4 py-2 bg-white border border-gray-200 rounded-full text-sm text-gray-700 hover:bg-indigo-50 hover:border-indigo-300 transition" data-astro-cid-ndhobcjl> Grade 3 (8-9) </a> </div> <h3 class="text-lg font-semibold text-gray-900 mb-3" data-astro-cid-ndhobcjl>Popular Themes</h3> <div class="flex flex-wrap gap-2" data-astro-cid-ndhobcjl> <a href="/bedtime-stories/about-friendship" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> friendship </a><a href="/bedtime-stories/about-adventure" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> adventure </a><a href="/bedtime-stories/about-magic" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> magic </a><a href="/bedtime-stories/about-nature" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> nature </a><a href="/bedtime-stories/about-kindness" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> kindness </a><a href="/bedtime-stories/about-family" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> family </a><a href="/bedtime-stories/about-courage" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> courage </a><a href="/bedtime-stories/about-animals" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> animals </a><a href="/bedtime-stories/about-imagination" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> imagination </a><a href="/bedtime-stories/about-teamwork" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> teamwork </a><a href="/bedtime-stories/about-dragons" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> dragons </a><a href="/bedtime-stories/about-ocean" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> ocean </a><a href="/bedtime-stories/about-space" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> space </a><a href="/bedtime-stories/about-dinosaurs" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> dinosaurs </a><a href="/bedtime-stories/about-music" class="px-3 py-1.5 bg-indigo-50 text-indigo-700 rounded-full text-sm hover:bg-indigo-100 transition" data-astro-cid-ndhobcjl> music </a> </div> </div> </section> <section class="py-12 bg-white" data-astro-cid-ndhobcjl> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8" data-astro-cid-ndhobcjl> <!-- Stories Grid - Server-rendered initial stories for SEO --> <h2 class="text-2xl font-bold text-gray-900 mb-6" data-astro-cid-ndhobcjl>All Stories</h2> <div id="stories-grid" class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6" data-astro-cid-ndhobcjl> <a href="/stories/penelopes-sky-dream" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/01904a2a-4ea4-4279-84a7-c3c2008f6744/cover.webp" alt="Penelope's Sky Dream" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Penelope's Sky Dream </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A determined ladybug named Penelope, unsatisfied with the ordinary, defies expectations and constructs her own wings to soar beyond the garden, proving that with perseverance, even the smallest dreams can reach the highest skies. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 17Created by Little Dreamer </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 roun
17ded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 18Read Story 19</span> </div> </a><a href="/stories/the-mouse-and-the-mechanical-mutt" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/64f3536d-0660-41b4-99b3-9f747cebe437/cover.webp" alt="The Mouse and the Mechanical Mutt" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> The Mouse and the Mechanical Mutt </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A tiny, adventurous mouse living in a clock tower discovers a hidden room and accidentally awakens a playful robot dog, leading to a thrilling chase that ultimately blossoms into an unexpected friendship. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 20Created by Little Dreamer </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 21Read Story 22</span> </div> </a><a href="/stories/barnabys-sweet-song" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/0c4cdade-3c87-49ef-a278-9b4a6987e991/cover.webp" alt="Barnaby's Sweet Song" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Barnaby's Sweet Song </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A shy badger named Barnaby, who loves playing his flute in secret, must overcome his stage fright with the help of his friends to share his beautiful music at the Woodland Talent Show. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 23Created by Little Dreamer </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 24Read Story 25</span> </div> </a><a href="/stories/the-crystal-planet-adventure" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/0d163e77-3586-4d32-b328-b4f3d6560655/cover.webp" alt="The Crystal Planet Adventure" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> The Crystal Planet Adventure </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A brilliant scientist and her helpful robot discover a breathtaking crystal planet, only to accidentally shatter its radiant core, forcing them to use science and teamwork to restore its vibrant light. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 26Created by Little Dreamer </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 roun
26ded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 27Read Story 28</span> </div> </a><a href="/stories/the-case-of-the-sixty-seven-things" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/a5661af4-ea5a-4a08-b281-c1044b423285/cover.webp" alt="The Case of the Sixty-Seven 'Things'" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> The Case of the Sixty-Seven 'Things' </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A meticulous girl and her boisterous friend embark on a comical quest to collect "67 things" for an eccentric inventor, leading to a series of hilarious misunderstandings before a simple revelation clears up the confusion. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 29Created by ABIGAIL </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 30Read Story 31</span> </div> </a><a href="/stories/the-sparkle-in-the-dark" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/67613f96-4b99-4981-8ddc-e9ec4bdffec1/cover.webp" alt="The Sparkle in the Dark" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> The Sparkle in the Dark </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> Barnaby Badger and Penelope Porcupine embark on a thrilling adventure into a mysterious, gem-filled cave, only to discover that the true treasure isn't what they expected, but the joy of exploration and their unwavering friendship. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 32Created by Little Dreamer </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 33Read Story 34</span> </div> </a><a href="/stories/the-sparkle-trail-of-mandila" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/7c573303-8ba3-4445-b91f-df710263ba7a/cover.webp" alt="The Sparkle Trail of Mandila" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> The Sparkle Trail of Mandila </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> When Charlie and her adventurous friends visit the enchanting Magical Fields of Mandila, a
34whimsical search for their daydreaming friend Chansey leads them on a sparkling trail of discovery and unexpected joy. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 35Created by Elsie Mockliy </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 36Read Story 37</span> </div> </a><a href="/stories/the-whisperwind-secret" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/3f47b060-b63e-464a-bed9-1f2b90107ab4/cover.webp" alt="The Whisperwind Secret" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> The Whisperwind Secret </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> An imaginative girl and her logical older brother uncover a captivating family mystery hidden within their grandmother's old Victorian house, leading them to a precious legacy that strengthens their bond and connects them to their ancestors. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 38Created by Ashley Cadaon </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 39Read Story 40</span> </div> </a><a href="/stories/pigs-great-garden-adventure" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/43a68c52-8129-493f-8501-b72203770d18/cover.webp" alt="Pig's Great Garden Adventure" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Pig's Great Garden Adventure </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A curious piglet embarks on a delicious adventure in his family's garden, discovering the surprising and tasty parts of plants that grow both above and below the ground. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 41Created by Eleonor Jamig </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 42Read Story 43</span> </div> </a><a href="/stories/oliver-and-the-nights-sparkle" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/f7ff6a1b-bb3c-4839-bcd8-a70bd43464a6/cover.webp" alt="Oliver and the Night's Sparkle" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Oliver and the Night's Sparkle </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A timid owl named Oliver, who fears the dark, discovers the hidden magic and sparkling beauty of the night forest with the help of a brave and glowing firefly named Flicker. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 44Created by Little Dreamer </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 roun
44ded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 45Read Story 46</span> </div> </a><a href="/stories/rosies-chester-adventure" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/5f9b9814-31fa-4ca2-9267-c8b89755c59c/cover.webp" alt="Rosie's Chester Adventure" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Rosie's Chester Adventure </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A beloved ragdoll named Rosie, seeing her owner's sadness over a lost drawing, bravely ventures into the world with the help of a friendly robin to retrieve the missing treasure and restore her friend's happiness. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 47Created by ruby diamond </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 48Read Story 49</span> </div> </a><a href="/stories/lili-and-the-starfish-song" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/12e76c32-ced6-473f-91dc-d8daaf304bff/cover.webp" alt="Lili and the Starfish Song" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Lili and the Starfish Song </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A gentle young girl named Lili embarks on a quest to find the Starfish Singer, Stella, whose fading song has quieted her vibrant underwater home, ultimately restoring joy and music to Coral Cove. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 50Created by Little Dreamer </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 51Read Story 52</span> </div> </a><a href="/stories/leos-flight-discovery" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/876915f8-8593-4ee5-8904-1062f451e494/cover.webp" alt="Leo's Flight Discovery" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Leo's Flight Discovery </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A curious young boy named Leo embarks on his first airplane journey, where a kind pilot helps him unravel the scientific wonders of flight, transforming his initial awe into a deeper understanding of how planes soar. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 53Created by Mitch </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 roun
53ded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 54Read Story 55</span> </div> </a><a href="/stories/the-sunpetal-bloom-sisters" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/eb00dbab-8473-483f-aa13-f355b2dcd796/cover.webp" alt="The Sunpetal Bloom Sisters" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> The Sunpetal Bloom Sisters </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> Two pampered royal sisters, obsessed with material possessions, are forced on a perilous quest into the Whispering Wilds to find the legendary Sunpetal Bloom, a journey that transforms their hearts and teaches them the true meaning of kindness and gratitude. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 56Created by rea </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 57Read Story 58</span> </div> </a><a href="/stories/the-star-in-sophies-heart" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/409b9135-ebab-4255-8252-0cc333e55ba1/cover.webp" alt="The Star in Sophie's Heart" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> The Star in Sophie's Heart </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A little girl named Sophie, who dreams of grand adventures, follows a magical stardust path to a celestial kingdom, overcoming challenges to discover that her true star is the brave, curious spirit within her own heart. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 59Created by Evelyn </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 60Read Story 61</span> </div> </a><a href="/stories/evas-dancing-hands" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/b6c6891c-b6cf-43de-9dab-100ccbb30e17/cover.webp" alt="Eva's Dancing Hands" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Eva's Dancing Hands </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> When a new girl who communicates with her hands struggles to connect in a new school, a curious classmate learns her silent language, inspiring the entire class to embrace a beautiful new way to be friends. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 62Created by Little Dreamer </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 roun
62ded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 63Read Story 64</span> </div> </a><a href="/stories/iggy-and-the-islands-secret-journal" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/ab7ab618-f94e-423f-bcb0-29066f0fce51/cover.webp" alt="Iggy and the Island's Secret Journal" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Iggy and the Island's Secret Journal </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> A curious young iguana named Iggy discovers an ancient journal filled with drawings of rare island wonders, leading him on an adventurous quest to find and understand them, ultimately realizing his role as their quiet guardian. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 65Created by Little Dreamer </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 66Read Story 67</span> </div> </a><a href="/stories/pips-great-quest-for-a-forever-home" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/9214fe3f-bd67-4d7c-8497-7021b8dcc89d/cover.webp" alt="Pip's Great Quest for a Forever Home" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Pip's Great Quest for a Forever Home </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> When three pig siblings set out to build their new homes, the smallest and most determined, Pip, must convince her brothers of the importance of strength and foresight to protect them all from the lurking Big Bad Wolf. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 68Created by Eleonor Jamig </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 69Read Story 70</span> </div> </a><a href="/stories/isabella-and-the-silent-song" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/bc9e6db4-e92f-43d7-a5dd-68acb6f8aa78/cover.webp" alt="Isabella and the Silent Song" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> Isabella and the Silent Song </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> When a reclusive witch steals the music from her vibrant village, a young woman with an enchanting voice embarks on a journey not to fight, but to understand the witch's hidden sorrow and restore harmony. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 71Created by Lady mel </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 roun
71ded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 72Read Story 73</span> </div> </a><a href="/stories/ones-grand-beginning" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group" data-astro-cid-ndhobcjl> <!-- Cover Image --> <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden" data-astro-cid-ndhobcjl> <img src="https://storyai-content-prod.s3.amazonaws.com/stories/69135f75-a47c-4b85-82a6-dadada9928b8/cover.webp" alt="One's Grand Beginning" class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" loading="lazy" onerror="this.src='/assets/images/icon_medium.webp'" data-astro-cid-ndhobcjl> </div> <!-- Content --> <div class="p-4 flex-1 flex flex-col" data-astro-cid-ndhobcjl> <!-- Title --> <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]" data-astro-cid-ndhobcjl> One's Grand Beginning </h3> <!-- Description --> <div class="text-gray-600 text-sm mb-4 flex-1" data-astro-cid-ndhobcjl> <p class="line-clamp-3" data-astro-cid-ndhobcjl> In a pristine, empty world, a lone red block awakens as 'One', embarking on a journey of discovery that reveals her unique identity and inspires her to become the beginning of something much greater. </p> </div> <!-- Author --> <p class="text-xs text-gray-500 mb-3" data-astro-cid-ndhobcjl> 74Created by Beatrice Kessie </p> <!-- Read Story Button --> <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm" data-astro-cid-ndhobcjl> 75Read Story 76</span> </div> </a> </div> <!-- Loading Indicator --> <div id="loading-indicator" class="hidden text-center py-8" data-astro-cid-ndhobcjl> <div class="inline-block animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-indigo-600" data-astro-cid-ndhobcjl></div> <p class="text-gray-600 mt-4" data-astro-cid-ndhobcjl>Loading more stories...</p> </div> <!-- End of Stories Message --> <div id="end-message" class="hidden text-center py-8" data-astro-cid-ndhobcjl> <p class="text-gray-600 text-lg" data-astro-cid-ndhobcjl>Loading more stories...</p> </div> </div> </section> <section class="py-16 bg-gradient-to-r from-indigo-600 to-purple-600" data-astro-cid-ndhobcjl> <div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center text-white" data-astro-cid-ndhobcjl> <h2 class="text-3xl md:text-4xl font-bold mb-6" data-astro-cid-ndhobcjl> 77Explore Thousands More Stories 78</h2> <p class="text-xl text-indigo-100 mb-8" data-astro-cid-ndhobcjl> 79Download the app to discover unlimited personalized bedtime stories, fairy tales, and create your own magical adventures! 80</p> <div class="flex flex-col sm:flex-row gap-4 justify-center" data-astro-cid-ndhobcjl> <a href="https://apps.apple.com/app/id6752249916?utm_source=website&utm_medium=cta&utm_campaign=story_library" target="_blank" rel="noopener noreferrer" class="transition-all duration-200 hover:opacity-80 transform hover:-translate-y-0.5" onclick="window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'download_app', 'platform': 'app_store', 'source': 'website', 'medium': 'cta', 'campaign': 'story_library' });" data-astro-cid-ndhobcjl> <img src="/assets/images/app_store_dark.svg" alt="Download on the App Store" class="h-14 w-auto" data-astro-cid-ndhobcjl> </a> <a href="https://play.google.com/store/apps/details?id=com.piimobile.ai.story&utm_source=website&utm_medium=cta&utm_campaign=story_library" target="_blank" rel="noopener noreferrer" class="transition-all duration-200 hover:opacity-80 transform hover:-translate-y-0.5" onclick="window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'download_app', 'platform': 'google_play', 'source': 'website', 'medium': 'cta', 'campaign': 'story_library' });" data-astro-cid-ndhobcjl> <img src="/assets/images/google_play_dark.svg" alt="Get it on Google Play" class="h-14 w-auto" data-astro-cid-ndhobcjl> </a> </div> </div> </section> </main> <footer class="bg-gray-50 border-t border-gray-200"> <div class="container mx-auto px-4 py-12"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8"> <!-- Company Info --> <div class="col-span-1 md:col-span-2"> <div class="flex items-center space-x-2 mb-4"> <img src="/assets/images/icon_small.webp" alt="Dreamcraft Tale" class="w-8 h-8 rounded-lg"> <span class="text-xl font-bold text-gray-900">Dreamcraft Tale</span> </div> <p class="text-gray-600 mb-4 max-w-md"> 81The magical app that turns your child's ideas into beautifully illustrated stories. Join our community, create unforgettable adventures, and explore thousands of stories shared by families worldwide. 82</p> <div class="flex space-x-4"> <a href="https://www.youtube.com/@dreamcrafttale" target="_blank" rel="noopener noreferrer" class="text-gray-400 hover:text-indigo-600 transition-colors" aria-label="YouTube"> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"> <path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"></path> </svg> </a> <a href="#" class="text-gray-400 hover:text-indigo-600 transition-colors" aria-label="TikTok"> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"> <path d="M19.59 6.69a4.83 4.83 0 0 1-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 0 1-5.2 1.74 2.89 2.89 0 0 1 2.31-4.64 2.93 2.93 0 0 1 .88.13V9.4a6.84 6.84 0 0 0-1-.05A6.33 6.33 0 0 0 5 20.1a6.34
826.34 0 0 0 10.86-4.43v-7a8.16 8.16 0 0 0 4.77 1.52v-3.4a4.85 4.85 0 0 1-1-.1z"></path> </svg> </a> </div> </div> <!-- Quick Links --> <div> <h3 class="text-sm font-semibold text-gray-900 uppercase tracking-wider mb-4">Product</h3> <ul class="space-y-2"> <li><a href="/#features" class="text-gray-600 hover:text-indigo-600 transition-colors">Features</a></li> <li><a href="/#how-it-works" class="text-gray-600 hover:text-indigo-600 transition-colors">How It Works</a></li> <li><a href="/our-story" class="text-gray-600 hover:text-indigo-600 transition-colors">Our Story</a></li> <li><a href="/quality-and-safety" class="text-gray-600 hover:text-indigo-600 transition-colors">Quality & Safety</a></li> <li><a href="/for-educators" class="text-gray-600 hover:text-indigo-600 transition-colors">For Educators</a></li> <li><a href="/blog" class="text-gray-600 hover:text-indigo-600 transition-colors">Blog</a></li> <li><a href="/download" class="text-gray-600 hover:text-indigo-600 transition-colors">Download</a></li> </ul> </div> <!-- Legal & Support --> <div> <h3 class="text-sm font-semibold text-gray-900 uppercase tracking-wider mb-4">Support</h3> <ul class="space-y-2"> <li><a href="/contact" class="text-gray-600 hover:text-indigo-600 transition-colors">Contact Us</a></li> <li><a href="/privacy-policy" class="text-gray-600 hover:text-indigo-600 transition-colors">Privacy Policy</a></li> <li><a href="/terms-of-service" class="text-gray-600 hover:text-indigo-600 transition-colors">Terms of Service</a></li> </ul> </div> </div> <!-- Bottom Bar --> <div class="border-t border-gray-200 mt-8 pt-8"> <div class="flex flex-col md:flex-row justify-between items-center"> <p class="text-gray-600 text-sm"> 83© 2025 Dreamcraft Tale team (Pii Mobile Limited). All rights reserved. 84</p> <div class="flex space-x-6 mt-4 md:mt-0"> <a href="/privacy-policy" class="text-gray-600 hover:text-indigo-600 text-sm transition-colors">Privacy</a> <a href="/terms-of-service" class="text-gray-600 hover:text-indigo-600 text-sm transition-colors">Terms</a> <a href="/contact" class="text-gray-600 hover:text-indigo-600 text-sm transition-colors">Contact</a> </div> </div> </div> </div> </footer> <div id="sticky-download-bar" class="fixed bottom-0 left-0 right-0 z-40 md:hidden hidden bg-white border-t border-gray-200 shadow-[0_-2px_12px_rgba(0,0,0,0.08)]"><div class="flex items-center gap-3 px-4 py-3"><img src="/assets/images/icon_small.webp" alt="" class="w-10 h-10 rounded-lg flex-shrink-0"><div class="min-w-0 flex-1"><p class="text-sm font-semibold text-gray-900 leading-tight truncate">Read the full story</p><p class="text-xs text-gray-500 leading-tight truncate">Illustrations & narration</p></div><a href="https://apps.apple.com/app/id6752249916?utm_source=website&utm_medium=sticky_bar&utm_campaign=story-library" target="_blank" rel="noopener noreferrer" class="flex-shrink-0 rounded-lg px-3 py-2 text-sm font-semibold text-white whitespace-nowrap" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);" data-download-cta data-platform="app_store" data-medium="sticky_bar" data-campaign="story-library" data-ios-url="https://apps.apple.com/app/id6752249916?utm_source=website&utm_medium=sticky_bar&utm_campaign=story-library" data-android-url="https://play.google.com/store/apps/details?id=com.piimobile.ai.story&utm_source=website&utm_medium=sticky_bar&utm_campaign=story-library"> 85Get the App 86</a><button id="sticky-download-dismiss" type="button" aria-label="Dismiss" class="flex-shrink-0 p-1 -mr-1 text-gray-400 hover:text-gray-600"><svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg></button></div></div>
86<script type="module">const s=document.getElementById("sticky-download-bar"),t=document.getElementById("sticky-download-dismiss"),d="dc_sticky_download_dismissed";s&&sessionStorage.getItem(d)!=="1"&&(s.classList.remove("hidden"),document.body.classList.add("has-sticky-download-bar"));t?.addEventListener("click",()=>{s?.classList.add("hidden"),document.body.classList.remove("has-sticky-download-bar");try{sessionStorage.setItem(d,"1")}catch{}});</script>
86
86<script> 87 // One handler for every store link on the site. Elements opt in with 88 // data-download-cta and describe themselves with data-* attributes, so a 89 // CTA can never silently ship without tracking. 90 (function () { 91 function isIOS() { 92 var ua = navigator.userAgent || ''; 93 // iPadOS 13+ reports as Macintosh, so check for touch too. 94 return /iPad|iPhone|iPod/.test(ua) || (/Macintosh/.test(ua) && navigator.maxTouchPoints > 1); 95 } 96 97 // Point device-aware buttons at the store the visitor can actually use. 98 document.querySelectorAll('[data-download-cta][data-ios-url][data-android-url]').forEach(function (el) { 99 var ios = isIOS(); 100 el.setAttribute('href', ios ? el.dataset.iosUrl : el.dataset.androidUrl); 101 el.dataset.platform = ios ? 'app_store' : 'google_play'; 102 }); 103 104 document.addEventListener('click', function (event) { 105 var el = event.target.closest && event.target.closest('[data-download-cta]'); 106 if (!el) return; 107 window.dataLayer = window.dataLayer || []; 108 window.dataLayer.push({ 109 event: 'download_app', 110 platform: el.dataset.platform || 'unknown', 111 source: 'website', 112 medium: el.dataset.medium || 'unknown', 113 campaign: el.dataset.campaign || 'unknown', 114 }); 115 }); 116 })(); 117 </script>
117 </body> </html>
117<script>(function(){const serverNextToken = null; 118 119 // API Configuration 120 const API_BASE_URL = 'https://storyai.piimobile.com'; 121 const API_ENDPOINT = '/story/preview'; 122 123 // State - Initialize with server-provided nextToken 124 let nextToken = serverNextToken; 125 let isLoading = false; 126 let hasMoreStories = nextToken !== null && nextToken !== ''; 127 128 // DOM Elements 129 const storiesGrid = document.getElementById('stories-grid'); 130 const loadingIndicator = document.getElementById('loading-indicator'); 131 const endMessage = document.getElementById('end-message'); 132 133 // Slugify function (must match server-side logic in seo-cli.py) 134 function slugify(text) { 135 return text.toLowerCase().trim() 136 .replace(/[^\w\s-]/g, '') 137 .replace(/[\s_]+/g, '-') 138 .replace(/-+/g, '-') 139 .replace(/^-|-$/g, '') 140 .slice(0, 80); 141 } 142 143 // Create a story card HTML 144 function createStoryCard(story) { 145 const storySlug = slugify(story.title); 146 return ` 147 <a href="/stories/${storySlug}" class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden hover:shadow-lg transition-shadow duration-200 flex flex-col group"> 148 <!-- Cover Image --> 149 <div class="aspect-square bg-gradient-to-br from-indigo-100 to-purple-100 relative overflow-hidden"> 150 <img 151 src="${story.coverImageUrl}" 152 alt="${story.title}" 153 class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" 154 loading="lazy" 155 onerror="this.src='/assets/images/icon_medium.webp'" 156 /> 157 </div> 158 159 <!-- Content --> 160 <div class="p-4 flex-1 flex flex-col"> 161 <!-- Title --> 162 <h3 class="text-lg font-bold text-gray-900 mb-2 line-clamp-2 min-h-[3.5rem]"> 163 ${story.title} 164 </h3> 165 166 <!-- Description --> 167 <div class="text-gray-600 text-sm mb-4 flex-1"> 168 <p class="line-clamp-3"> 169 ${story.shortDescription} 170 </p> 171 </div> 172 173 <!-- Author --> 174 ${story.authorName ? ` 175 <p class="text-xs text-gray-500 mb-3"> 176 Created by ${story.authorName} 177 </p> 178 ` : ''} 179 180 <!-- Read Story Button --> 181 <span class="block w-full text-center bg-gradient-to-r from-indigo-600 to-purple-600 text-white py-2 px-4 rounded-lg font-semibold group-hover:from-indigo-700 group-hover:to-purple-700 transition-all duration-200 text-sm"> 182 Read Story 183 </span> 184 </div> 185 </a> 186 `; 187 } 188 189 // Fetch stories from API 190 async function fetchStories(token = null) { 191 if (isLoading || !hasMoreStories) return; 192 193 isLoading = true; 194 loadingIndicator.classList.remove('hidden'); 195 196 try { 197 const url = new URL(API_ENDPOINT, API_BASE_URL); 198 if (token) { 199 url.searchParams.append('nextToken', token); 200 } 201 202 const response = await fetch(url.toString()); 203 204 if (!response.ok) { 205 throw new Error('Failed to fetch stories'); 206 } 207 208 const data = await response.json(); 209 210 // Add stories to grid 211 if (data.items && data.items.length > 0) { 212 data.items.forEach(story => { 213 const cardHTML = createStoryCard(story); 214 storiesGrid.insertAdjacentHTML('beforeend', cardHTML); 215 }); 216 217 // Update pagination token 218 nextToken = data.nextToken || null; 219 hasMoreStories = nextToken !== null; 220 } else { 221 hasMoreStories = false; 222 } 223 224 // Hide end message when done loading 225 if (!hasMoreStories) { 226 endMessage.classList.add('hidden'); 227 } 228 229 } catch (error) { 230 console.error('Error fetching stories:', error); 231 // Show error message to user 232 storiesGrid.insertAdjacentHTML('beforeend', ` 233 <div class="col-span-full text-center py-8"> 234 <p class="text-red-600">Failed to load stories. Please try again later.</p> 235 </div> 236 `); 237 hasMoreStories = false; 238 } finally { 239 isLoading = false; 240 loadingIndicator.classList.add('hidden'); 241 } 242 } 243 244 // Infinite scroll implementation 245 function setupInfiniteScroll() { 246 const observer = new IntersectionObserver( 247 (entries) => { 248 entries.forEach(entry => { 249 if (entry.isIntersecting && hasMoreStories && !isLoading) { 250 fetchStories(nextToken); 251 } 252 }); 253 }, 254 { 255 root: null, 256 rootMargin: '200px', // Start loading 200px before reaching the bottom 257 threshold: 0 258 } 259 ); 260 261 observer.observe(loadingIndicator); 262 } 263 264 // Initialize on page load 265 document.addEventListener('DOMContentLoaded', () => { 266 if (hasMoreStories && nextToken) { 267 setupInfiniteScroll(); 268 } 269 }); 270})();</script>
270
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.