<?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: Alit Indrawan </title>
    <description>The latest articles on DEV Community by Alit Indrawan  (@alitindrawan24).</description>
    <link>https://dev.to/alitindrawan24</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%2F741052%2F5cf4076f-e9a7-43bb-af9f-2f63ac5bdb0a.png</url>
      <title>DEV Community: Alit Indrawan </title>
      <link>https://dev.to/alitindrawan24</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alitindrawan24"/>
    <language>en</language>
    <item>
      <title>Horrorscope 👻: I Trapped a 19th-Century Ghost Inside a Web Server</title>
      <dc:creator>Alit Indrawan </dc:creator>
      <pubDate>Sat, 31 Oct 2026 12:01:46 +0000</pubDate>
      <link>https://dev.to/alitindrawan24/horrorscope-i-trapped-a-19th-century-ghost-inside-a-web-server-2l76</link>
      <guid>https://dev.to/alitindrawan24/horrorscope-i-trapped-a-19th-century-ghost-inside-a-web-server-2l76</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Horrorscope is a single-page web app that summons a sarcastic, spooky "digital curse" tailored to your zodiac sign. I took the "Ghost in the Machine" theme about as literally as you can: the AI behind it is an ancient, sarcastic 19th-century ghost trapped inside a web server, channeling horoscopes that mix supernatural dread with everyday tech pain — memory leaks, phantom notifications, haunting backlogs, ghostly posture.&lt;/p&gt;

&lt;p&gt;You enter your name, age, and zodiac sign, pick an output language (English or Bahasa Indonesia), and hit "Summon My Curse." The ghost replies with two short paragraphs that name a specific "digital curse" or "haunting spirit" currently attached to you. You can copy the curse to your clipboard or have it spoken aloud in a deliberately creepy cadence.&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 flex items-center justify-between"&gt;
        &lt;a href="https://horrorscope-nine.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;horrorscope-nine.vercel.app&lt;/span&gt;
          

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


&lt;p&gt;Horrorscope is a standard Next.js app, so it deploys cleanly to Vercel — add the &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; environment variable and it runs. A short screen recording or a pair of screenshots (the summoning form, and the terminal-style result box with a generated curse) goes a long way here, since the aesthetic is half the fun.&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Alitindrawan24" rel="noopener noreferrer"&gt;
        Alitindrawan24
      &lt;/a&gt; / &lt;a href="https://github.com/Alitindrawan24/Horrorscope" rel="noopener noreferrer"&gt;
        Horrorscope
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Horrorscope
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Next.js 14 (App Router), TypeScript, Tailwind CSS, and lucide-react for icons. The model is Google's Gemini Flash, reached through the Google AI Studio REST API — deliberately with a native &lt;code&gt;fetch&lt;/code&gt; instead of an SDK, so there's nothing extra to install and the request payload stays transparent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "ghost in the machine," literally.&lt;/strong&gt; The system instruction casts the model as a 19th-century ghost haunting the server, and that voice carries through the whole app. The loading state reads "Channeling Spirits…", every error is in-character ("The spirit realm is currently disconnected…"), and the result lands in a terminal-style window titled &lt;code&gt;CURSE_TRANSMISSION.txt&lt;/code&gt;. The theme isn't decoration — it's the narrator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resilient model calls.&lt;/strong&gt; Google rotates and retires model versions, so the route doesn't hard-fail when one disappears. If the configured model comes back unavailable, it queries the &lt;code&gt;ListModels&lt;/code&gt; endpoint, filters for text-generation Flash models, and sweeps through candidates until one answers. Transient spikes (429/503) get retried with backoff before that fallback kicks in. The ghost keeps talking even when the model catalog shifts underneath it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bilingual curses + a voice.&lt;/strong&gt; A language toggle rewrites rule 4 of the system instruction so the same ghost speaks English or Bahasa Indonesia. The "Listen" button pipes the curse through the Web Speech API at a slower rate and lower pitch for a deliberately unsettling read-out, with best-effort voice matching for the chosen language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The aesthetic.&lt;/strong&gt; A custom Tailwind theme drives the mood: an &lt;code&gt;ectoplasm&lt;/code&gt; green / &lt;code&gt;banshee&lt;/code&gt; purple / &lt;code&gt;blood&lt;/code&gt; red palette, glowing box-shadows, and &lt;code&gt;flicker&lt;/code&gt; + &lt;code&gt;fade-in-up&lt;/code&gt; keyframes. The body sits on a slate-950 base with three drifting radial "fog" gradients so it never feels flat-black. Zodiac signs are picked from a grid of their actual astrological glyphs (♈♉♊…) rather than a dropdown, which makes the form feel like a séance board.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Error handling.&lt;/strong&gt; The route validates inputs (400), checks for a missing &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; (500), and wraps upstream failures (502) — each with a spooky message instead of a raw stack trace, so even the failure states stay on-theme.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;I wanted the "ghost in the machine" to be more than a theme — I wanted it to be the app's narrator. The ghost isn't a metaphor here; it's the thing answering you. The moment it landed for me was the first time an error path printed "The spirit realm is currently disconnected…" instead of a generic 500, and it actually felt right. The loading spinner says "Channeling Spirits…", the curse arrives in a terminal window labeled &lt;code&gt;CURSE_TRANSMISSION.txt&lt;/code&gt;, and you can make the ghost read its own curse back to you in a low, slow whisper.&lt;/p&gt;

&lt;p&gt;It's a small app, but the idea — that the machine itself is haunted, and the haunting is the feature — is what I wanted people to feel in the first few seconds.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>LazyLore: The Zero Effort AI Bedtime Storyteller 💤</title>
      <dc:creator>Alit Indrawan </dc:creator>
      <pubDate>Sun, 25 Oct 2026 15:25:59 +0000</pubDate>
      <link>https://dev.to/alitindrawan24/lazylore-the-zero-effort-ai-bedtime-storyteller-2hdb</link>
      <guid>https://dev.to/alitindrawan24/lazylore-the-zero-effort-ai-bedtime-storyteller-2hdb</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;LazyLore is a zero-effort, AI-powered bedtime story generator that reads stories aloud — all from a single browser tab.&lt;/p&gt;

&lt;p&gt;Type a prompt like "A sleepy bear drifting down a quiet river", tap Create Story, and a custom 3-paragraph bedtime story is generated by Groq and immediately read aloud through your browser using the Web Speech API — in a slow, deep, calming voice tuned for sleep.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;p&gt;🌙 One-tap story generation via Groq (open-weight LLM)&lt;br&gt;
🔊 Instant text-to-speech playback (pitch 0.8, rate 0.85 — engineered for drowsiness)&lt;br&gt;
🇬🇧 / 🇮🇩 English and Indonesian language support&lt;br&gt;
📚 Local story history — replay favorites without re-generating&lt;br&gt;
🎨 Deep dark UI designed to not blind you at midnight&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 flex items-center justify-between"&gt;
        &lt;a href="https://lazy-lore.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;lazy-lore.vercel.app&lt;/span&gt;
          

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


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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Alitindrawan24" rel="noopener noreferrer"&gt;
        Alitindrawan24
      &lt;/a&gt; / &lt;a href="https://github.com/Alitindrawan24/LazyLore" rel="noopener noreferrer"&gt;
        LazyLore
      &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;p&gt;This is a &lt;a href="https://nextjs.org" rel="nofollow noopener noreferrer"&gt;Next.js&lt;/a&gt; project bootstrapped with &lt;a href="https://nextjs.org/docs/app/api-reference/cli/create-next-app" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;create-next-app&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;First, run the development server:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm run dev
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or&lt;/span&gt;
yarn dev
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or&lt;/span&gt;
pnpm dev
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or&lt;/span&gt;
bun dev&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open &lt;a href="http://localhost:3000" rel="nofollow noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; with your browser to see the result.&lt;/p&gt;
&lt;p&gt;You can start editing the page by modifying &lt;code&gt;app/page.tsx&lt;/code&gt;. The page auto-updates as you edit the file.&lt;/p&gt;
&lt;p&gt;This project uses &lt;a href="https://nextjs.org/docs/app/building-your-application/optimizing/fonts" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;next/font&lt;/code&gt;&lt;/a&gt; to automatically optimize and load &lt;a href="https://vercel.com/font" rel="nofollow noopener noreferrer"&gt;Geist&lt;/a&gt;, a new font family for Vercel.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Learn More&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;To learn more about Next.js, take a look at the following resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/docs" rel="nofollow noopener noreferrer"&gt;Next.js Documentation&lt;/a&gt; - learn about Next.js features and API.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/learn" rel="nofollow noopener noreferrer"&gt;Learn Next.js&lt;/a&gt; - an interactive Next.js tutorial.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can check out &lt;a href="https://github.com/vercel/next.js" rel="noopener noreferrer"&gt;the Next.js GitHub repository&lt;/a&gt; - your feedback and contributions are welcome!&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Deploy on Vercel&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The easiest way to deploy your Next.js app is to use the &lt;a href="https://vercel.com/new?utm_medium=default-template&amp;amp;filter=next.js&amp;amp;utm_source=create-next-app&amp;amp;utm_campaign=create-next-app-readme" rel="nofollow noopener noreferrer"&gt;Vercel Platform&lt;/a&gt; from the creators of Next.js.&lt;/p&gt;
&lt;p&gt;Check out our &lt;a href="https://nextjs.org/docs/app/building-your-application/deploying" rel="nofollow noopener noreferrer"&gt;Next.js deployment documentation&lt;/a&gt; for more…&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/Alitindrawan24/LazyLore" 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;LazyLore is built with Next.js 14 (App Router), Tailwind CSS, and TypeScript.&lt;/p&gt;

&lt;p&gt;The backend is a single API route that sends the user's prompt to Groq (open-weight LLM) and returns a plain-text bedtime story. The system prompt explicitly bans Markdown — because hearing "asterisk" read aloud at midnight is not relaxing.&lt;/p&gt;

&lt;p&gt;On the frontend, the story is immediately passed to the browser's built-in Web Speech API with pitch: 0.8 and rate: 0.85 for a slow, deep delivery. No third-party TTS service needed.&lt;/p&gt;

&lt;p&gt;Stories are saved to localStorage so you can replay favorites — no database, no account, no data leaving your device.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>QuestLog AI: Gamified Habit Tracker</title>
      <dc:creator>Alit Indrawan </dc:creator>
      <pubDate>Sun, 18 Oct 2026 17:05:00 +0000</pubDate>
      <link>https://dev.to/alitindrawan24/questlog-ai-gamified-habit-tracker-ic5</link>
      <guid>https://dev.to/alitindrawan24/questlog-ai-gamified-habit-tracker-ic5</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;QuestLog AI is an RPG-gamified habit tracker that demands proof of effort. Standard habit trackers fail because checking an empty box is too easy. QuestLog AI requires the user to write a micro-journal entry (a "Log") about their experience to mark a habit as complete.&lt;/p&gt;

&lt;p&gt;At the end of the week, an open-weight AI steps in as the "Game Master." It reads the user's weekly logs, analyzes their hidden patterns or struggles, and generates an RPG-style Weekly Assessment. The AI awards them an epic Title (e.g., The Exhausted Scholar), gives a motivational breakdown, and assigns a specific micro-quest for the following week.&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 flex items-center justify-between"&gt;
        &lt;a href="https://questlog-ai-zeta.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;questlog-ai-zeta.vercel.app&lt;/span&gt;
          

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


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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Alitindrawan24" rel="noopener noreferrer"&gt;
        Alitindrawan24
      &lt;/a&gt; / &lt;a href="https://github.com/Alitindrawan24/Questlog-AI" rel="noopener noreferrer"&gt;
        Questlog-AI
      &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;p&gt;This is a &lt;a href="https://nextjs.org" rel="nofollow noopener noreferrer"&gt;Next.js&lt;/a&gt; project bootstrapped with &lt;a href="https://nextjs.org/docs/app/api-reference/cli/create-next-app" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;create-next-app&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;First, run the development server:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm run dev
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or&lt;/span&gt;
yarn dev
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or&lt;/span&gt;
pnpm dev
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or&lt;/span&gt;
bun dev&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open &lt;a href="http://localhost:3000" rel="nofollow noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; with your browser to see the result.&lt;/p&gt;
&lt;p&gt;You can start editing the page by modifying &lt;code&gt;app/page.tsx&lt;/code&gt;. The page auto-updates as you edit the file.&lt;/p&gt;
&lt;p&gt;This project uses &lt;a href="https://nextjs.org/docs/app/building-your-application/optimizing/fonts" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;next/font&lt;/code&gt;&lt;/a&gt; to automatically optimize and load &lt;a href="https://vercel.com/font" rel="nofollow noopener noreferrer"&gt;Geist&lt;/a&gt;, a new font family for Vercel.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Learn More&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;To learn more about Next.js, take a look at the following resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/docs" rel="nofollow noopener noreferrer"&gt;Next.js Documentation&lt;/a&gt; - learn about Next.js features and API.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/learn" rel="nofollow noopener noreferrer"&gt;Learn Next.js&lt;/a&gt; - an interactive Next.js tutorial.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can check out &lt;a href="https://github.com/vercel/next.js" rel="noopener noreferrer"&gt;the Next.js GitHub repository&lt;/a&gt; - your feedback and contributions are welcome!&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Deploy on Vercel&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The easiest way to deploy your Next.js app is to use the &lt;a href="https://vercel.com/new?utm_medium=default-template&amp;amp;filter=next.js&amp;amp;utm_source=create-next-app&amp;amp;utm_campaign=create-next-app-readme" rel="nofollow noopener noreferrer"&gt;Vercel Platform&lt;/a&gt; from the creators of Next.js.&lt;/p&gt;
&lt;p&gt;Check out our &lt;a href="https://nextjs.org/docs/app/building-your-application/deploying" rel="nofollow noopener noreferrer"&gt;Next.js deployment documentation&lt;/a&gt; for more…&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/Alitindrawan24/Questlog-AI" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Fauna-Dex: Touch Grass and Catch 'Em All</title>
      <dc:creator>Alit Indrawan </dc:creator>
      <pubDate>Sun, 11 Oct 2026 17:52:40 +0000</pubDate>
      <link>https://dev.to/alitindrawan24/fauna-dex-touch-grass-and-catch-em-all-4h6h</link>
      <guid>https://dev.to/alitindrawan24/fauna-dex-touch-grass-and-catch-em-all-4h6h</guid>
      <description>&lt;p&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;Fauna-Dex is an offline-first Progressive Web App (PWA) that turns your smartphone camera into a Pokédex for real wildlife. Point your phone at a bird, insect, plant, or any creature you find outside — and Fauna-Dex generates a collectible "Monster Card" powered by an open-weight vision model.&lt;/p&gt;

&lt;p&gt;The core loop is designed to get people outside first and connected later: you capture photos with no internet required, they queue in your browser's IndexedDB via localforage, and you sync the whole batch to the AI once you're back on a signal. Every synced photo comes back as a styled card with a creative monster name, the real species, a type badge (Grass / Water / Fire / Bug / Poison / Normal / Flying), HP, a skill derived from the animal's actual behavior, and a one-sentence Pokémon-style lore entry.&lt;/p&gt;

&lt;p&gt;Who's it for: hikers, birders, naturalists, curious kids, or anyone who wants a reason to look up from their screen and actually notice the living world around them.&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 flex items-center justify-between"&gt;
        &lt;a href="https://fauna-dex.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;fauna-dex.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&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%2F45r46hs49dip8e2t9ja3.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%2F45r46hs49dip8e2t9ja3.png" alt=" " width="427" height="1236"&gt;&lt;/a&gt;&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Alitindrawan24" rel="noopener noreferrer"&gt;
        Alitindrawan24
      &lt;/a&gt; / &lt;a href="https://github.com/Alitindrawan24/Fauna-Dex" rel="noopener noreferrer"&gt;
        Fauna-Dex
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;Stack: Next.js 14 (App Router) · Tailwind CSS · localforage (IndexedDB) · next-pwa · TypeScript&lt;/p&gt;

&lt;p&gt;Open-source AI: The backend route supports two open-weight vision model providers with automatic fallback:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Gemini (gemini-2.0-flash by default) via the GEMINI_API_KEY env var — the fastest path.&lt;/li&gt;
&lt;li&gt;OpenRouter routing to meta-llama/llama-3.2-11b-vision-instruct via OPENROUTER_API_KEY — the original spec model, running on open infrastructure.&lt;/li&gt;
&lt;li&gt;A mock fallback (no keys needed) for local dev and demos.
The route strips the data-URI prefix, sends the raw base64 image plus a strict JSON schema prompt to whichever provider is configured, validates the response against the schema at runtime, and returns a clean MonsterCard payload. No SDK — just fetch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The UI is a Pokédex device shell — a rounded dark-red chassis, a "screen" with a scanline CSS overlay, a big round capture button, and holographic-shimmer cards — built entirely with Tailwind utility classes and a few inline SVGs.&lt;/p&gt;

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

&lt;p&gt;A closed, proprietary vision API would have made this fragile in a specific way: the entire loop capture offline, sync later only makes sense if you trust the analysis endpoint will still exist and be affordable next month. Open-weight models hosted on open infrastructure (OpenRouter, Together AI, or self-hosted) let the sync target be swappable. The model itself is the key artifact, not a vendor's SaaS contract.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>PreMate AI</title>
      <dc:creator>Alit Indrawan </dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:59:49 +0000</pubDate>
      <link>https://dev.to/alitindrawan24/premate-ai-1k7</link>
      <guid>https://dev.to/alitindrawan24/premate-ai-1k7</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;I built PrepMate AI for my friend. We regularly meal prep our weekly lunches, and our fridge is almost always stocked with the exact same high-protein staples: chicken breast, eggs, tempeh, lettuce, corn, and tomatoes.&lt;/p&gt;

&lt;p&gt;While healthy, eating the same variations of salads and grilled chicken every day leads to massive decision fatigue and flavor boredom. I built this lightweight web app to solve that. She simply checks off the ingredients we currently have left in the fridge, and the AI instantly acts as a creative chef, generating a unique recipe, a new flavor twist, or a fresh dressing idea using only what we have on hand.&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 flex items-center justify-between"&gt;
        &lt;a href="https://prep-mate-ai-chi.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;prep-mate-ai-chi.vercel.app&lt;/span&gt;
          

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


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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Alitindrawan24" rel="noopener noreferrer"&gt;
        Alitindrawan24
      &lt;/a&gt; / &lt;a href="https://github.com/Alitindrawan24/PrepMate-AI" rel="noopener noreferrer"&gt;
        PrepMate-AI
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;The project is built as a highly responsive Single Page Application using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: Next.js (App Router) and Tailwind CSS for a clean, mobile-first UI.&lt;/li&gt;
&lt;li&gt;AI Core (Open-Source): I utilized Gemini open-weight model. To keep the app lightning-fast for a quick weekend build, I routed the inference through the Gemini API.&lt;/li&gt;
&lt;li&gt;Integration: A Next.js API route securely handles the prompt construction. The system prompt forces Gemini to respect the selected ingredients and format its output into a beautifully structured Markdown recipe (Catchy Name, Why It Works, and Step-by-Step Instructions).&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Creating a Telegram Bot with N8N</title>
      <dc:creator>Alit Indrawan </dc:creator>
      <pubDate>Sat, 16 Aug 2025 16:50:41 +0000</pubDate>
      <link>https://dev.to/alitindrawan24/creating-a-telegram-bot-with-n8n-17bg</link>
      <guid>https://dev.to/alitindrawan24/creating-a-telegram-bot-with-n8n-17bg</guid>
      <description>&lt;p&gt;&lt;strong&gt;N8N&lt;/strong&gt; has been gaining popularity lately due to its high flexibility. This platform can be installed on your own server (self-hosted) and is free to use, although there is a paid version with additional features.&lt;/p&gt;

&lt;p&gt;So what is &lt;strong&gt;N8N&lt;/strong&gt;? &lt;strong&gt;N8N&lt;/strong&gt; is an open-source workflow automation platform that allows you to connect various applications and services without the need for heavy coding. Simply drag and drop the available nodes, then connect them like a puzzle.&lt;/p&gt;

&lt;p&gt;What makes &lt;strong&gt;N8N&lt;/strong&gt; even more popular is its ability to easily connect to various AI models such as &lt;strong&gt;OpenAI&lt;/strong&gt;, &lt;strong&gt;Gemini&lt;/strong&gt;, &lt;strong&gt;Claude&lt;/strong&gt;, and even open-source models like &lt;strong&gt;Llama 2&lt;/strong&gt; and &lt;strong&gt;Mistral&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;Previously, we discussed how to create a Telegram Bot using coding (Node.js and Go). This time, we will try an easier approach — creating a Bot without any coding at all!&lt;/p&gt;

&lt;p&gt;Yep, with &lt;strong&gt;N8N&lt;/strong&gt;, we can create a functional and interactive Bot simply by dragging and dropping. It's perfect for those who want to create a Bot but don't want to deal with programming syntax.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fun Fact Bot&lt;/strong&gt;&lt;br&gt;
The bot we are going to create this time is the Fun Fact Bot. The concept is simple but fun — just give the bot any topic, and it will immediately provide interesting and unique facts!&lt;/p&gt;

&lt;p&gt;For example, if we chat &lt;strong&gt;N8N&lt;/strong&gt; to the bot, it will respond with interesting facts about &lt;strong&gt;N8N&lt;/strong&gt;, as shown in the image below:&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.amazonaws.com%2Fuploads%2Farticles%2Fr9bk9sboyd3a5k7bp0ln.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.amazonaws.com%2Fuploads%2Farticles%2Fr9bk9sboyd3a5k7bp0ln.png" alt="Fun Fact Bot" width="800" height="113"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is a &lt;a href="//t.me/fun_fact_24_en_bot"&gt;Fun Fact Bot&lt;/a&gt; in Telegram App that you can try out.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;&lt;strong&gt;Preparation&lt;/strong&gt;&lt;br&gt;
Before starting to create a Telegram Bot with &lt;strong&gt;N8N&lt;/strong&gt;, there are several things we need to prepare.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bot Token&lt;/strong&gt;&lt;br&gt;
We need a Bot Token, which can be obtained from &lt;a href="https://telegram.me/BotFather" rel="noopener noreferrer"&gt;@BotFather&lt;/a&gt; on Telegram. This token functions as an &lt;code&gt;access key&lt;/code&gt; so that the Bot can operate properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;N8N&lt;/strong&gt;&lt;br&gt;
Ensure that &lt;strong&gt;N8N&lt;/strong&gt; is installed, either in a local or production environment. If using a local environment, ensure that you also use Ngrok or similar tools so that the &lt;strong&gt;N8N&lt;/strong&gt; URL can be accessed using the HTTPS protocol (this is mandatory for Telegram webhooks).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gemini API Key&lt;/strong&gt;&lt;br&gt;
We will use Google Gemini to generate fun facts based on the given topic. The API key can be created for free on Google AI Studio — this will be the ‘brain’ of the Bot in generating interesting content.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;Step 1: Telegram Trigger Node&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, we will create a Telegram Trigger Node that will receive a response when users send messages through the Bot we created.&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.amazonaws.com%2Fuploads%2Farticles%2F6ehapema89rlkrk21hoz.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.amazonaws.com%2Fuploads%2Farticles%2F6ehapema89rlkrk21hoz.png" alt="Telegram Trigger Node" width="790" height="1074"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensure that Credential is set using the token obtained from BotFather.&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.amazonaws.com%2Fuploads%2Farticles%2Fkxbu0mf8dotb88n41zhh.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.amazonaws.com%2Fuploads%2Farticles%2Fkxbu0mf8dotb88n41zhh.png" alt="Credential" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have configured your credentials, we will then set up the Bot webhook in Telegram by accessing this page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.telegram.org/bot&amp;lt;TOKEN_BOT_ANDA&amp;gt;/setWebhook?url=&amp;lt;URL_WEBHOOK_N8N&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ensure that  is replaced with the token obtained from BotFather and  from &lt;code&gt;Webhook Urls&lt;/code&gt; in &lt;strong&gt;N8N&lt;/strong&gt;, and also ensure that you are using the HTTPS protocol.&lt;/p&gt;

&lt;p&gt;If we access the URL, it should return a success message indicating that the webhook has been successfully set.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "ok": true,
  "result": true,
  "description": "Webhook was set"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we can press the &lt;code&gt;Execute Step&lt;/code&gt; button to run the Node, and when the message &lt;code&gt;Listening for test event&lt;/code&gt; appears, we can send a message to the Bot via the Telegram application.&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.amazonaws.com%2Fuploads%2Farticles%2Fjv7uju2rgatp3anhniys.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.amazonaws.com%2Fuploads%2Farticles%2Fjv7uju2rgatp3anhniys.png" alt="Telegram Trigger Node" width="688" height="840"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After sending a message to the Bot via the Telegram app, the message information will appear in the Output panel as follows:&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.amazonaws.com%2Fuploads%2Farticles%2Fz1aojky3pnh287khha1q.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.amazonaws.com%2Fuploads%2Farticles%2Fz1aojky3pnh287khha1q.png" alt="Fun Fact Bot" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After successfully receiving the message, Step 1 has been completed, and the following is the &lt;strong&gt;N8N&lt;/strong&gt; workflow display after Step 1.&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.amazonaws.com%2Fuploads%2Farticles%2Felu5hvduh2k7nsplimth.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.amazonaws.com%2Fuploads%2Farticles%2Felu5hvduh2k7nsplimth.png" alt="Fun Fact Bot" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: LLM Basic Chain Node&lt;/strong&gt;&lt;br&gt;
The next step is to process the message received from the user into a fun fact with the help of the LLM Basic Chain Node.&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.amazonaws.com%2Fuploads%2Farticles%2Fbrcb91ql46hwrm7wfvk1.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.amazonaws.com%2Fuploads%2Farticles%2Fbrcb91ql46hwrm7wfvk1.png" alt="LLM Basic Chain Node" width="798" height="1342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;Source for Prompt&lt;/code&gt; section, we will use the &lt;code&gt;Define Below&lt;/code&gt; option and fill in the prompt with the following text:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I want a Fun Fact with the topic `{{ $json.message.text }}`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then connect the previous Telegram Trigger Node to the Basic LLM Chain Node&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.amazonaws.com%2Fuploads%2Farticles%2Fw3bp4lnnrkdw6bcxvaa0.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.amazonaws.com%2Fuploads%2Farticles%2Fw3bp4lnnrkdw6bcxvaa0.png" alt="LLM Basic Chain Node" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once connected, an Input Panel containing data from the Telegram Trigger Node will appear on the Basic LLM Chain Node.&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.amazonaws.com%2Fuploads%2Farticles%2F7wggab6zsx8avxrq9qac.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.amazonaws.com%2Fuploads%2Farticles%2F7wggab6zsx8avxrq9qac.png" alt="LLM Basic Chain Node" width="784" height="1480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we will create a &lt;code&gt;Chat Message&lt;/code&gt; with the System type and contain the following &lt;code&gt;Message&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a Fun Fact generator. Create a Fun Fact with the given topic in a format that is to the point, clear, concise, and written in an interesting style. Always start your answer with ‘Did you know?’.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, create a Google Gemini Chat Model Node and fill in the credentials with the Gemini API Key obtained from AI Studio. You can use the model as needed.&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.amazonaws.com%2Fuploads%2Farticles%2Fa5ve1gswq27zswaegmk1.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.amazonaws.com%2Fuploads%2Farticles%2Fa5ve1gswq27zswaegmk1.png" alt="Google Gemini Chat Model Node" width="780" height="848"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Connect the Basic LLM Chain Node with the Google Gemini Chat Model Node as shown in the following image:&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.amazonaws.com%2Fuploads%2Farticles%2F05rlkor1yx6w5epjq66j.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.amazonaws.com%2Fuploads%2Farticles%2F05rlkor1yx6w5epjq66j.png" alt="Google Gemini Chat Model Node" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once all nodes are connected, it is time to run the Basic LLM Chain Node by pressing the &lt;code&gt;Execute Step&lt;/code&gt; button. If successful, the fun fact results from Gemini AI will appear on the Output panel as follows.&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.amazonaws.com%2Fuploads%2Farticles%2Ff016b3dgja45uebmza5p.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.amazonaws.com%2Fuploads%2Farticles%2Ff016b3dgja45uebmza5p.png" alt="Google Gemini Chat Model Node" width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Telegram Node&lt;/strong&gt;&lt;br&gt;
The final step is to send the fun fact results from Gemini AI to users via Telegram. Create a new Telegram Node to send the message &lt;code&gt;Send a text message&lt;/code&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.amazonaws.com%2Fuploads%2Farticles%2Flb790swxi69r0ag75otu.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.amazonaws.com%2Fuploads%2Farticles%2Flb790swxi69r0ag75otu.png" alt="Telegram Node" width="772" height="1344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then connect it to the Basic LLM Chain Node. In the &lt;code&gt;Chat ID&lt;/code&gt; section, use the data from the Telegram Trigger Node and for &lt;code&gt;Text&lt;/code&gt; use the data from the Basic LLM Chain Node.&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.amazonaws.com%2Fuploads%2Farticles%2F0819h933hksgrlifd9in.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.amazonaws.com%2Fuploads%2Farticles%2F0819h933hksgrlifd9in.png" alt="Telegram Node" width="800" height="656"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then run Node by pressing the &lt;code&gt;Execute Step&lt;/code&gt; button. If successful, information will appear in the Output Panel and a message will be sent to the user via Bot as follows:&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.amazonaws.com%2Fuploads%2Farticles%2F8511np4wtrlbpppbsohw.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.amazonaws.com%2Fuploads%2Farticles%2F8511np4wtrlbpppbsohw.png" alt="Telegram Node" width="800" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The final result of the &lt;strong&gt;N8N&lt;/strong&gt; workflow will be as follows&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.amazonaws.com%2Fuploads%2Farticles%2Fzdb609plbnklbwywfb06.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.amazonaws.com%2Fuploads%2Farticles%2Fzdb609plbnklbwywfb06.png" alt="N8N workflow" width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Creating a Telegram Bot with &lt;strong&gt;N8N&lt;/strong&gt; is surprisingly easy! With just three nodes (Telegram Trigger, LLM Basic Chain, and Telegram), you can create an interactive and useful Bot without the hassle of coding.&lt;/p&gt;

&lt;p&gt;Why is &lt;strong&gt;N8N&lt;/strong&gt; a great choice?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drag and drop — simply connect the nodes like a puzzle&lt;/li&gt;
&lt;li&gt;Flexible — easily connect to various AI platforms (&lt;strong&gt;Gemini&lt;/strong&gt;, &lt;strong&gt;OpenAI&lt;/strong&gt;, &lt;strong&gt;Claude&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Fast — workflows are ready to go, no need for complicated coding environment setup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fun Fact This bot is just the beginning. You can further develop it by adding features like a database to store chat history, an inline keyboard for cooler interactions, or even scheduling the bot to automatically send fun facts every day.&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>bot</category>
      <category>telegram</category>
      <category>automaton</category>
    </item>
  </channel>
</rss>
