<?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: Ariba  Sayed</title>
    <description>The latest articles on DEV Community by Ariba  Sayed (@aribaimp).</description>
    <link>https://dev.to/aribaimp</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%2F4154304%2F85e4d577-711f-460b-90db-43dcc05171df.jpeg</url>
      <title>DEV Community: Ariba  Sayed</title>
      <link>https://dev.to/aribaimp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aribaimp"/>
    <language>en</language>
    <item>
      <title>OutThere: An AI That Gets You Off Your Screen and Outside</title>
      <dc:creator>Ariba  Sayed</dc:creator>
      <pubDate>Wed, 07 Oct 2026 20:45:08 +0000</pubDate>
      <link>https://dev.to/aribaimp/an-ai-that-gets-you-off-your-screen-and-outside-a4d</link>
      <guid>https://dev.to/aribaimp/an-ai-that-gets-you-off-your-screen-and-outside-a4d</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;OutThere is a minimalist web application designed to be the "anti-app." Its primary goal is to give users a compelling, AI-powered reason to put their phones down and reconnect with the physical world. &lt;br&gt;
It serves as a bridge between digital convenience and physical exploration. For anyone feeling "screen-locked," OutThere provides real-time, context-aware triggers to go outside—whether it's a personalized "OutThere Moment" based on the time of day, an AI-curated list of nearby parks and gardens tailored to the current weather, or a custom-generated "Outdoor Mission" that turns a simple walk into a small adventure.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://drive.google.com/file/d/1KjTG0jOmI0f5KJBKszzFC_C-cpVWJgG6/view?usp=sharing" rel="noopener noreferrer" class="c-link"&gt;
            demo.mp4 - Google Drive
          &lt;/a&gt;
        &lt;/h2&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fssl.gstatic.com%2Fdocs%2Fdoclist%2Fimages%2Fdrive_favicon_2026_32dp.png" width="32" height="32"&gt;
          drive.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;&lt;a href="https://dev.toGithub%20repo"&gt;&lt;/a&gt;&lt;/p&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/ariba-sayed" rel="noopener noreferrer"&gt;
        ariba-sayed
      &lt;/a&gt; / &lt;a href="https://github.com/ariba-sayed/OutThere" rel="noopener noreferrer"&gt;
        OutThere
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;🌿 OutThere&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;OutThere&lt;/strong&gt; is a minimalist web application designed to encourage people to disconnect from their screens and reconnect with the physical world. It uses real-time weather data and AI-powered recommendations to give users a reason to "touch grass."&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Home Experience&lt;/strong&gt;: A personalized greeting and "OutThere Moment" card that changes based on the time of day (Sunrise, Morning, Afternoon, Sunset, Evening, Stargazing).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Weather Integration&lt;/strong&gt;: Fetches current temperature, wind speed, and celestial events (sunrise/sunset) via the Open-Meteo API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-Powered Explore&lt;/strong&gt;: Uses Gemma AI to suggest the best nearby places to visit based on current weather conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event Discovery&lt;/strong&gt;: Integrates with Google Search (via SerpApi) to find real-world events happening today, tomorrow, and over the weekend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outdoor Missions&lt;/strong&gt;: A "Mission Builder" that generates a custom outdoor adventure based on the user's available time and desired mood.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct Navigation&lt;/strong&gt;: One-click "Get Directions" buttons…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ariba-sayed/OutThere" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;I built OutThere using a modern full-stack architecture focused on real-time data and open-weight AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI Core: I used Gemma (google/gemma-4-26B-A4B-it) via the Hugging Face Inference API. Gemma powers two critical features:

&lt;ul&gt;
&lt;li&gt;The Recommendation Engine: It analyzes a list of nearby outdoor locations (fetched via SerpApi) alongside real-time weather data to rank the top 3 best places to visit right now.&lt;/li&gt;
&lt;li&gt;The Mission Builder: It generates structured, JSON-based "Outdoor Missions" based on the user's available time, budget, and desired mood, ensuring the activities are realistic and encourage physical movement.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Backend: A Python/Flask server that orchestrates data between the frontend and multiple APIs.&lt;/li&gt;
&lt;li&gt;Frontend: A responsive React application using Lucide-React for a clean, nature-inspired aesthetic.&lt;/li&gt;
&lt;li&gt;External Data:

&lt;ul&gt;
&lt;li&gt;Open-Meteo API for hyper-local weather and celestial events (sunrise/sunset).&lt;/li&gt;
&lt;li&gt;SerpApi (Google Maps) for discovering actual parks, gardens, and outdoor spaces in the user's vicinity.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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%2F2d4safs3dp2e79icbbp4.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%2F2d4safs3dp2e79icbbp4.png" alt=" " width="799" height="461"&gt;&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%2F8x8mt89ta0pk16jdptje.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%2F8x8mt89ta0pk16jdptje.png" alt=" " width="799" height="461"&gt;&lt;/a&gt;&lt;br&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%2Fh2585nw850nojn1c86j3.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%2Fh2585nw850nojn1c86j3.png" alt=" " width="799" height="461"&gt;&lt;/a&gt;&lt;br&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%2Foarg5hovei4yc56i9vxl.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%2Foarg5hovei4yc56i9vxl.png" alt=" " width="799" height="461"&gt;&lt;/a&gt;&lt;br&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%2F3of06pw0z81tjgajjrd1.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%2F3of06pw0z81tjgajjrd1.png" alt=" " width="799" height="461"&gt;&lt;/a&gt;&lt;br&gt;
Key User Journeys:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The OutThere Moment: Instead of a static dashboard, the home screen changes based on the celestial clock. Whether it's "Golden Hour" or "Stargazing" mode, the app tells you exactly why right now is the best time to be outside.&lt;/li&gt;
&lt;li&gt;AI-Curated Exploration: Using a combination of local geospatial data and LLM reasoning, the app suggests the top 3 best places to visit based on current weather (e.g., "It's cloudy, so Ulsoor Lake is a strong sunset candidate").&lt;/li&gt;
&lt;li&gt;Outdoor Missions: To gamify the experience, I built a "Mission Generator" that creates structured, low-budget, time-bound adventures (e.g., "The Urban Explorer") to turn a boring walk into a mindful mission.
&lt;strong&gt;Hyper-Local Discovery via SerpApi&lt;/strong&gt;
To avoid the "&lt;em&gt;generic list&lt;/em&gt;" problem, I integrated SerpApi's Google Maps engine. 
Most apps just search for a city. OutThere uses the user's exact latitude and longitude with a specific 14z zoom level to query for "parks, gardens, and outdoor places." This ensures the results are not just "in the city," but within walking or short-driving distance. 
The Pipeline:
User Location -&amp;gt; SerpApi (google_maps engine) -&amp;gt; Filtered Local Results (Titles, Ratings, Hours, Images) -&amp;gt; Backend Processing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Gemma AI Reasoning&lt;/strong&gt;&lt;br&gt;
Raw data from SerpApi is just a list. To make it "smart," I piped this data into Gemma (google/gemma-4-26B-A4B-it).&lt;br&gt;
I implemented a two-stage AI pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The Recommendation Engine: I pass Gemma the current weather (temp, wind, precipitation) and the list of places. Gemma then acts as a local guide, ranking the places and writing a concise, persuasive reason why that place fits the current weather.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Mission Builder: A separate prompt architecture that takes user constraints (Time, Budget, Mood) and generates a valid JSON object containing a title and a step-by-step itinerary.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The core magic happens in the interaction between the explore route (fetching raw data) and the recommendations route (AI reasoning).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Validating that Gemma didn't invent a fake place
&lt;/span&gt;&lt;span class="n"&gt;valid_names&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;place&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;place&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;simplified_places&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;validated&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;recommendation&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;gemma_recommendations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;recommendation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;place&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;valid_names&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;continue&lt;/span&gt;  &lt;span class="c1"&gt;# Reject hallucinated places
&lt;/span&gt;
    &lt;span class="n"&gt;validated&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;place&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rank&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validated&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;recommendation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A good nearby outdoor option.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;LLMs are prone to hallucinations. To ensure the app never sends a user to a non-existent park, I implemented a Strict Validation Layer. The AI provides the reasoning, but the system cross-references every suggestion against the ground-truth data fetched from SerpApi. If the AI 'invents' a place, the system silently filters it out, ensuring 100% reliability.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;places_params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;engine&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;google_maps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parks gardens outdoor places&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ll&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;@&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;latitude&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;longitude&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;,14z&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# Hyper-local zoom
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api_key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;SERPAPI_KEY&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To achieve true hyper-locality, I leveraged SerpApi's ll (latitude/longitude) parameter with a 14z zoom level. This transforms a generic search into a precise geospatial query, ensuring that the suggested 'touch grass' locations are within the user's immediate physical neighborhood, removing the friction of long-distance travel.&lt;/p&gt;

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

&lt;p&gt;Building this with open-weight models like Gemma was a conscious choice. Closed APIs often force you into a "one-size-fits-all" response style. By using an open model, I could:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Control the Output: I implemented strict JSON formatting to ensure the AI-generated missions didn't "hallucinate" and instead integrated perfectly with the React frontend.&lt;/li&gt;
&lt;li&gt;Contextual Flexibility: I could tune the temperature and prompts to ensure the "guide" persona felt encouraging and minimalist, not corporate.
Open innovation allows us to build tools that encourage us to leave technology, without being beholden to the very ecosystems that try to keep us engaged for as long as possible.
Open innovation was central to the "Touch Grass" philosophy of this project. 
Open innovation allows developers to build specialized, lightweight agents that can be fine-tuned or swapped as better models emerge, ensuring that tools designed to "liberate" users from screens aren't themselves built on proprietary "black boxes."&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemma&lt;/strong&gt; — Used Gemma 4 26B as the open-weight AI reasoning layer for recommendations and personalized outdoor missions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SerpApi&lt;/strong&gt; — Used SerpApi to discover real nearby outdoor places and events instead of relying on static or manually entered data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs&lt;/strong&gt; — Used ElevenLabs to generate the voiceover narration for the OutThere demo video.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
    </item>
    <item>
      <title>I built a bedtime-story generator for my sister and her new baby</title>
      <dc:creator>Ariba  Sayed</dc:creator>
      <pubDate>Sun, 04 Oct 2026 10:46:03 +0000</pubDate>
      <link>https://dev.to/aribaimp/i-built-a-bedtime-story-generator-for-my-sister-and-her-new-baby-396d</link>
      <guid>https://dev.to/aribaimp/i-built-a-bedtime-story-generator-for-my-sister-and-her-new-baby-396d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;My sister is also my best friend. Back when we were both in college and working, we'd get home exhausted and spend hours on the phone, complaining about everything that went wrong that day.&lt;br&gt;
Then she got married and had a BABYYYYY. &lt;br&gt;
Now, most nights, she falls asleep while tucking the baby in. I don't blame her at all, but I'll be honest: I miss those calls.&lt;br&gt;
So when this challenge said "build for a friend," I knew who it was for. That's how DreamTales happened.&lt;br&gt;
You tell it a few things about your child: their name, age, favourite animal and character, where the story should take place, the mood, and how long you want it. Out comes a bedtime story made just for them. You can pick the language, and you can change the details to get a different story every night. And on the nights you're too tired to read it yourself, an ElevenLabs voice does it for you.&lt;br&gt;
Parents shouldn't have to invent a brand-new story every single night. And maybe a little story can help us stay connected on the nights we can't talk.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Live Demo :&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://bedtime-ai.onrender.com/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;bedtime-ai.onrender.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;GitHub repo: &lt;/p&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/ariba-sayed" rel="noopener noreferrer"&gt;
        ariba-sayed
      &lt;/a&gt; / &lt;a href="https://github.com/ariba-sayed/bedtime-ai" rel="noopener noreferrer"&gt;
        bedtime-ai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      DreamTales turns a child's preferences into a personalized bedtime story using Gemma and brings it to life with ElevenLabs narration.
    &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;🌙 DreamTales&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;DreamTales is a personalized AI bedtime-story companion that creates gentle, imaginative stories based on a child's preferences.&lt;/p&gt;
&lt;p&gt;Built for the Hacktoberfest Weekend Challenge: Build for a Friend.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Personalized bedtime stories&lt;/li&gt;
&lt;li&gt;Custom child name, favorite animal, character, setting, mood, and story length&lt;/li&gt;
&lt;li&gt;AI-generated stories&lt;/li&gt;
&lt;li&gt;Optional AI voice narration&lt;/li&gt;
&lt;li&gt;Simple, child-friendly interface&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🧠 How It Works&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;The user provides the child's story preferences.&lt;/li&gt;
&lt;li&gt;DreamTales creates a personalized prompt.&lt;/li&gt;
&lt;li&gt;Gemma generates the bedtime story.&lt;/li&gt;
&lt;li&gt;ElevenLabs converts the story into natural-sounding narration.&lt;/li&gt;
&lt;li&gt;Render hosts the application.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;🌐 LIVE DEMO
&lt;a href="https://bedtime-ai.onrender.com/" rel="nofollow noopener noreferrer"&gt;Try DreamTales Live&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ Tech Stack&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma&lt;/strong&gt; — Story generation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs&lt;/strong&gt; — Voice narration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render&lt;/strong&gt; — Deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Run Locally&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Clone the repository
git clone YOUR_GITHUB_REPO_URL
cd DreamTales&lt;/li&gt;
&lt;li&gt;Create a virtual environment
python3 -m venv .venv
source .venv/bin/activate&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On Windows:&lt;/p&gt;
&lt;p&gt;.venv\Scripts\activate
3. Install dependencies
pip install -r requirements.txt
4. Add environment variables&lt;/p&gt;
&lt;p&gt;Create a .env file:&lt;/p&gt;
&lt;p&gt;ELEVENLABS_API_KEY=your_api_key_here
GEMMA_MODEL=google/gemma-3-1b-it&lt;/p&gt;
&lt;p&gt;Never commit your…&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/ariba-sayed/bedtime-ai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;DreamTales runs on Gemma, which writes each story from the child's details and whatever the parent picks.&lt;/p&gt;

&lt;p&gt;I didn't want to just hand the model a blank text box. The app asks only for the details that matter and turns them into a careful prompt behind the scenes. That prompt keeps the child and their companions as separate characters with the same names all the way through, writes the entire story in the chosen language, keeps everything gentle with no scary scenes, and ends with a short four-line rhyme so the story finishes on a calm note.&lt;/p&gt;

&lt;p&gt;For the voice, I added ElevenLabs, so the story can be listened to in different voices. After a long day, a parent shouldn't have to read one more thing out loud.&lt;/p&gt;

&lt;p&gt;It's a Streamlit app hosted on Render. I wanted my sister to be able to open a link and use it, with nothing to install.&lt;/p&gt;

&lt;p&gt;Most of my effort went into keeping it simple. A tired parent doesn't need to know anything about prompts or AI settings. Fill in a few boxes, choose the kind of story, and that's it.&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%2Fj7y8npmw4rcsh6wznp2m.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%2Fj7y8npmw4rcsh6wznp2m.png" alt=" " width="800" height="723"&gt;&lt;/a&gt;&lt;br&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%2F9l0byeoohxzuork5mq75.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%2F9l0byeoohxzuork5mq75.png" alt=" " width="800" height="723"&gt;&lt;/a&gt;&lt;br&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%2Fk63b5ma0zk89y18fhxma.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%2Fk63b5ma0zk89y18fhxma.png" alt=" " width="800" height="723"&gt;&lt;/a&gt;&lt;br&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%2Fk5tjnks6smnwmsdlxn86.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%2Fk5tjnks6smnwmsdlxn86.png" alt=" " width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I started out with a small Gemma model, but none of the providers I had access to were hosting it. Since Gemma is open-weight, I could switch to a bigger Gemma model on a different provider without redesigning the app or rewriting my prompts.&lt;/p&gt;

&lt;p&gt;That freedom matters here. With a children's story app, the hard part isn't getting text out of a model. It's controlling the characters, the tone and what's safe for a kid to hear. An open model let me build around that, instead of bending my idea to fit one company's API.&lt;/p&gt;

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

&lt;p&gt;Gemma: Gemma powers the personalized bedtime-story generation, turning a few details about a child into an original story designed specifically for their bedtime experience.&lt;/p&gt;

&lt;p&gt;ElevenLabs: ElevenLabs brings the generated stories to life through AI narration and different voices, giving parents the option to listen to the story instead of narrating it themselves.&lt;/p&gt;

&lt;p&gt;Render: Render hosts the live DreamTales app.&lt;/p&gt;

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