<?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: Apoorv Gupta</title>
    <description>The latest articles on DEV Community by Apoorv Gupta (@apoorv_dev07).</description>
    <link>https://dev.to/apoorv_dev07</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%2F3303920%2F1c19f46f-2c68-45c8-a812-ee9648c82224.png</url>
      <title>DEV Community: Apoorv Gupta</title>
      <link>https://dev.to/apoorv_dev07</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/apoorv_dev07"/>
    <language>en</language>
    <item>
      <title>🔐🌈Light Chaser: Decoding Lost Memories on the Longest Day of the Year🌞</title>
      <dc:creator>Apoorv Gupta</dc:creator>
      <pubDate>Sun, 21 Jun 2026 18:11:10 +0000</pubDate>
      <link>https://dev.to/apoorv_dev07/light-chaser-decoding-lost-memories-on-the-longest-day-of-the-year-bgp</link>
      <guid>https://dev.to/apoorv_dev07/light-chaser-decoding-lost-memories-on-the-longest-day-of-the-year-bgp</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/june-game-jam-2026-06-03"&gt;June Solstice Game Jam&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Light Chaser is a story-driven endless runner inspired by the June Solstice, Pride Month, and the legacy of Alan Turing.&lt;/p&gt;

&lt;p&gt;In Light Chaser, players explore a world slowly being consumed by darkness. As a Light Chaser, your mission is to collect fragments of lost light and restore color, memory, and hope to the world before the longest day comes to an end.&lt;/p&gt;

&lt;p&gt;The game combines three major June themes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌞 The June Solstice&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The entire game is built around the passage of daylight. Players begin their journey at dawn and progress through morning, noon, golden hour, and eventually sunset. As daylight changes, the world evolves visually and mechanically, creating a constant sense of movement and urgency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌈 Pride Month&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The world initially appears almost completely colorless. By collecting Light Orbs, players gradually restore vibrant colors across the environment. Each restored color unlocks new stories, visual effects, and interactions, representing self-expression, identity, and authenticity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔐 Alan Turing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hidden throughout the world are Turing Fragments, encrypted messages inspired by codebreaking and cryptography. Players solve cipher-based mini-puzzles to reveal pieces of a larger message honoring Alan Turing's contributions to computing and artificial intelligence.&lt;/p&gt;

&lt;p&gt;Along the way, players meet travelers who have lost important memories. By restoring light, players help these characters recover forgotten pieces of themselves and their stories.&lt;/p&gt;

&lt;p&gt;The goal was to create a game that feels hopeful, colorful, and reflective while remaining fun and accessible.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/6yUSi_ZWpP0"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/StephCurry07/Light-Chaser/" rel="noopener noreferrer"&gt;https://github.com/StephCurry07/Light-Chaser/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Play Online
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://light-chaser-june-solstice.vercel.app/" rel="noopener noreferrer"&gt;https://light-chaser-june-solstice.vercel.app/&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Light Chaser was built using Phaser 3 and TypeScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Gameplay&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The game uses an endless-runner architecture where the player automatically advances through a procedurally generated world. The player can jump, slide, and collect Light Orbs while avoiding hazards created by spreading darkness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Solstice System&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most important systems in the game is the Solstice Cycle.&lt;/p&gt;

&lt;p&gt;The environment transitions through multiple daylight phases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dawn&lt;/li&gt;
&lt;li&gt;Morning&lt;/li&gt;
&lt;li&gt;Noon&lt;/li&gt;
&lt;li&gt;Golden Hour&lt;/li&gt;
&lt;li&gt;Sunset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each phase adjusts lighting, colors, obstacle density, and difficulty, helping the player feel the passing of time throughout a single run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Color Restoration System&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The world starts in grayscale.&lt;/p&gt;

&lt;p&gt;As players collect Light Orbs, saturation gradually increases across the environment. Additional particle effects, environmental details, and visual enhancements unlock as more color returns to the world.&lt;/p&gt;

&lt;p&gt;This mechanic became the visual heart of the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Turing Fragment Cipher System&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To honor Alan Turing, I implemented collectible encrypted messages.&lt;/p&gt;

&lt;p&gt;Players discover fragments hidden throughout the world and solve simple cryptography puzzles inspired by historical codebreaking techniques. Successfully solving puzzles reveals pieces of a larger hidden message that can only be assembled at the end of the game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-Powered NPCs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Travelers encountered during gameplay are generated using Google's Gemini API.&lt;/p&gt;

&lt;p&gt;Each NPC has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A unique name&lt;/li&gt;
&lt;li&gt;A personal story&lt;/li&gt;
&lt;li&gt;A lost memory&lt;/li&gt;
&lt;li&gt;Dialogue before and after memory restoration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than using AI as a novelty feature, I wanted it to reinforce the game's themes of identity, memory, and self-discovery.&lt;/p&gt;

&lt;p&gt;Generated content is cached before gameplay begins to ensure smooth performance and avoid interruptions during a run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Best Google AI Usage&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Light Chaser uses Gemini to generate unique travelers and memory recovery stories.&lt;/p&gt;

&lt;p&gt;Every generated character represents someone who has lost a meaningful part of themselves to the spreading darkness. Players help restore those memories through gameplay, creating personalized stories that connect directly to the game's themes.&lt;/p&gt;

&lt;p&gt;Rather than generating content for the sake of using AI, Gemini serves as a narrative system that helps make each playthrough feel unique and personal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Best Ode to Alan Turing&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alan Turing's work in codebreaking and computing inspired the Turing Fragment system.&lt;/p&gt;

&lt;p&gt;Players collect encrypted messages throughout the world and solve cipher-based challenges to uncover a hidden tribute. The puzzles draw inspiration from historical cryptography while remaining accessible to players unfamiliar with encryption.&lt;/p&gt;

&lt;p&gt;By combining codebreaking mechanics with themes of memory and discovery, the game aims to celebrate both Turing's technical achievements and his lasting impact on modern computing.&lt;/p&gt;

&lt;p&gt;Thank you for playing Light Chaser.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;May your path always lead toward the light.&lt;/em&gt; ☀️&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>From a Broken GogoAnime Hack to a Universal Streaming Remote</title>
      <dc:creator>Apoorv Gupta</dc:creator>
      <pubDate>Sun, 07 Jun 2026 18:27:38 +0000</pubDate>
      <link>https://dev.to/apoorv_dev07/from-a-broken-gogoanime-hack-to-a-universal-streaming-remote-21no</link>
      <guid>https://dev.to/apoorv_dev07/from-a-broken-gogoanime-hack-to-a-universal-streaming-remote-21no</guid>
      <description>&lt;h2&gt;
  
  
  Reviving AniRemote(Now LazyRoll)
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;AniRemote is a phone-as-remote system that lets you control video playback on your laptop directly from your phone.&lt;/p&gt;

&lt;p&gt;Open a video on your laptop, scan a QR code, and your phone instantly becomes a remote control.&lt;/p&gt;

&lt;p&gt;The current version supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crunchyroll&lt;/li&gt;
&lt;li&gt;Netflix&lt;/li&gt;
&lt;li&gt;YouTube&lt;/li&gt;
&lt;li&gt;Generic HTML5 video players&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Play/Pause videos&lt;/li&gt;
&lt;li&gt;Seek forward and backward&lt;/li&gt;
&lt;li&gt;Adjust playback speed&lt;/li&gt;
&lt;li&gt;Control volume&lt;/li&gt;
&lt;li&gt;Toggle subtitles&lt;/li&gt;
&lt;li&gt;Skip intros and credits&lt;/li&gt;
&lt;li&gt;Navigate episodes&lt;/li&gt;
&lt;li&gt;View live playback state from their phone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under the hood, AniRemote consists of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A FastAPI backend that manages rooms and WebSocket communication&lt;/li&gt;
&lt;li&gt;A React mobile-first remote interface&lt;/li&gt;
&lt;li&gt;A browser userscript that interacts directly with streaming websites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What makes this project special to me isn't the technology.&lt;/p&gt;

&lt;p&gt;It's the fact that this project has followed me through multiple stages of my growth as a developer.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/StephCurry07/LazyRoll" rel="noopener noreferrer"&gt;GitHub Repository Link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Live Demo
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/JAkmjVw_w3A"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;h4&gt;
  
  
  QR pairing and room connection
&lt;/h4&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%2Fptt9he9wj6aafieqiv6z.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%2Fptt9he9wj6aafieqiv6z.png" alt="Popup on crunchyroll" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Mobile remote interface
&lt;/h4&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%2Fplssp3jbvp767uxh5c6g.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%2Fplssp3jbvp767uxh5c6g.png" alt="Remote Interface" width="640" height="847"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3 Simple steps to setup
&lt;/h4&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%2Fd7wok0nyly5z1odrfweo.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%2Fd7wok0nyly5z1odrfweo.png" alt="Home Page" width="800" height="348"&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.amazonaws.com%2Fuploads%2Farticles%2Fzm542ap7o0v32p2si4b9.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%2Fzm542ap7o0v32p2si4b9.png" alt="Setup" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;This project started as a very small experiment and without a name.&lt;/p&gt;
&lt;h3&gt;
  
  
  Version 1: The idea: Python backends
&lt;/h3&gt;

&lt;p&gt;Over a year ago, I wanted a simple way to control video playback without constantly reaching for my laptop. &lt;br&gt;
I was watching anime and wanted basic controls from my phone. Had to wake up if needed to move forward or backward or pause. &lt;br&gt;
I thought this might be a common problem for people who don't have a proper setup(TV or something), i.e., just graduated from college bachelors.&lt;br&gt;
So I thought it might scale as well. Not only anime, but to webseries on various platforms which this generation watches. Although I don't have such major interests apart from anime, and rarely some movies.&lt;/p&gt;

&lt;p&gt;Websockets were not working for some reason. Enough debugging but couldn't get through... So had a mini version without websockets which had limited capability. Then this project was put to rest.&lt;/p&gt;
&lt;h3&gt;
  
  
  Version 2: The PyAutoGUI Era
&lt;/h3&gt;

&lt;p&gt;Due to sudden urge and so much news regarding new seasons for my favourite animes, I again gained interest in watching those, and thought let's do something interesting. Started that project again, and this was a major break from my rest of not coding or doing anything productive on my personal laptop. I genuinely liked it... So many agents were part of this haha.&lt;/p&gt;

&lt;p&gt;At the time, my solution looked something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phone
 ↓
FastAPI
 ↓
PyAutoGUI
 ↓
Keyboard Shortcut
 ↓
Browser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When I pressed pause on my phone, the backend would trigger keyboard shortcuts on my Windows machine using PyAutoGUI. Again, for some reason I wanted to do my projects in WSL itself. It just was an extra layer of difficulty. There was no use of WSL as such as I needed to run a script on my machine only... So I was just sending commands from WSL to a script on my machine and then proceeded. Even GPT denied this idea.&lt;/p&gt;

&lt;p&gt;It worked.&lt;/p&gt;

&lt;p&gt;Kind of.&lt;/p&gt;

&lt;p&gt;The architecture was extremely simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI backend&lt;/li&gt;
&lt;li&gt;Phone sends HTTP requests&lt;/li&gt;
&lt;li&gt;PyAutoGUI simulates key presses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No real-time communication&lt;/li&gt;
&lt;li&gt;No synchronization&lt;/li&gt;
&lt;li&gt;No room management&lt;/li&gt;
&lt;li&gt;No browser integration&lt;/li&gt;
&lt;li&gt;No support for multiple websites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But this version taught me a lot.&lt;/p&gt;

&lt;p&gt;I learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI fundamentals&lt;/li&gt;
&lt;li&gt;Cross-device communication&lt;/li&gt;
&lt;li&gt;WSL networking&lt;/li&gt;
&lt;li&gt;Running services accessible from a phone&lt;/li&gt;
&lt;li&gt;Communication between Windows and WSL environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Had a better looking UI slowly, added some features, that's it.. Enough of what I would use. Although using pyautogui you have some limitations... you have to be active on that tab... Full screen won't work sometimes... But when I actually made it work, it was a Eureka moment. *** It would only work on my machineeee *** though. haha.&lt;/p&gt;

&lt;p&gt;GogoAnime played a major role in this experimentation. I wanted to watch Mob Psycho. Writing very bad scripts only just for going to next episode... exploring the gogoanime links... a lot&lt;br&gt;
I got to understand that this won't scale to other apps, but as long as I had implemented that and my work is being done, I was happy.&lt;/p&gt;

&lt;p&gt;Three unrelated things collided at exactly the same time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I wanted to watch Mob Psycho 100.&lt;/li&gt;
&lt;li&gt;Crunchyroll didn't have it available for me.&lt;/li&gt;
&lt;li&gt;GogoAnime exposed a playground where I could experiment with browser automation.
It went down only after my experimentation was done... saving my sense of satisfaction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So now, coding problem isn't the issue, design problem is.&lt;/p&gt;


&lt;h3&gt;
  
  
  The Shift That Changed Everything -- Final Version
&lt;/h3&gt;

&lt;p&gt;The biggest change wasn't a feature.&lt;/p&gt;

&lt;p&gt;It was how I thought about the project.&lt;/p&gt;

&lt;p&gt;Originally, my goal was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make it work.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now my goal became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make it extensible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Netflix, Crunchyroll, YouTube, and many other sites all expose controls differently.&lt;/p&gt;

&lt;p&gt;But from the user's perspective, the actions are always the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Play/Pause&lt;/li&gt;
&lt;li&gt;Seek&lt;/li&gt;
&lt;li&gt;Next Episode&lt;/li&gt;
&lt;li&gt;Skip Intro&lt;/li&gt;
&lt;li&gt;Toggle Subtitles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That realization pushed me toward implementing a site adapter architecture.&lt;/p&gt;

&lt;p&gt;Instead of scattering platform-specific logic throughout the codebase, each streaming service now implements a common interface.&lt;/p&gt;

&lt;p&gt;Adding support for a new platform became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Adapter
      ↓
Implement Commands
      ↓
Done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead of rewriting large portions of the application.&lt;/p&gt;

&lt;p&gt;Looking back, this was probably the first time I consciously applied a system design principle to one of my personal projects.&lt;/p&gt;




&lt;h3&gt;
  
  
  Finish-Up-A-Thon: Building AniRemote
&lt;/h3&gt;

&lt;p&gt;For this challenge, I decided to finally finish the project properly.&lt;/p&gt;

&lt;p&gt;The result became AniRemote.&lt;/p&gt;

&lt;p&gt;The architecture now looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phone Browser (React Remote)
            │
            ▼
      WebSocket
            │
            ▼
FastAPI Backend Relay
            │
            ▼
      WebSocket
            │
            ▼
 Browser Userscript
            │
            ▼
Streaming Website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The backend handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Room creation&lt;/li&gt;
&lt;li&gt;Host/controller pairing&lt;/li&gt;
&lt;li&gt;Real-time message routing&lt;/li&gt;
&lt;li&gt;Connection management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frontend provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mobile-first remote controls&lt;/li&gt;
&lt;li&gt;Live playback status&lt;/li&gt;
&lt;li&gt;Connection monitoring&lt;/li&gt;
&lt;li&gt;Responsive touch-friendly controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The userscript provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site detection&lt;/li&gt;
&lt;li&gt;Adapter execution&lt;/li&gt;
&lt;li&gt;State synchronization&lt;/li&gt;
&lt;li&gt;QR code pairing&lt;/li&gt;
&lt;li&gt;Streaming platform integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of my biggest milestones was finally embracing WebSockets.&lt;/p&gt;

&lt;p&gt;A year ago, I avoided them because I wasn't comfortable with connection lifecycle management, reconnection logic, and state synchronization.&lt;/p&gt;

&lt;p&gt;Now WebSockets sit at the center of the entire architecture.&lt;/p&gt;

&lt;p&gt;Commands flow instantly from phone to browser, while playback state flows back to the phone in real time.&lt;/p&gt;

&lt;p&gt;The project that once relied on HTTP requests and simulated keyboard presses became a real-time synchronized system.&lt;/p&gt;

&lt;p&gt;Again, many agents led to this. Copilot was one of those, which understands the codebase the best among other agents, and we have that GitHub integration as well...iykyk.&lt;/p&gt;




&lt;h3&gt;
  
  
  Before vs After
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Before
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;HTTP requests only&lt;/li&gt;
&lt;li&gt;PyAutoGUI keyboard simulation&lt;/li&gt;
&lt;li&gt;Single-device experiment&lt;/li&gt;
&lt;li&gt;No real-time communication&lt;/li&gt;
&lt;li&gt;No browser integration&lt;/li&gt;
&lt;li&gt;No room system&lt;/li&gt;
&lt;li&gt;No QR pairing&lt;/li&gt;
&lt;li&gt;GogoAnime-focused prototype&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  After
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI WebSocket backend&lt;/li&gt;
&lt;li&gt;Real-time bidirectional communication&lt;/li&gt;
&lt;li&gt;Mobile-first React remote&lt;/li&gt;
&lt;li&gt;QR-based pairing&lt;/li&gt;
&lt;li&gt;Room management&lt;/li&gt;
&lt;li&gt;Site adapter architecture&lt;/li&gt;
&lt;li&gt;Netflix support&lt;/li&gt;
&lt;li&gt;Crunchyroll support&lt;/li&gt;
&lt;li&gt;YouTube support(in debugging mode)&lt;/li&gt;
&lt;li&gt;Live playback synchronization&lt;/li&gt;
&lt;li&gt;Extensible platform support&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot played an important role while reviving AniRemote.&lt;/p&gt;

&lt;p&gt;Rather than generating entire features, it helped remove friction throughout the project.&lt;/p&gt;

&lt;p&gt;Some of the ways I used Copilot included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refactoring message handling logic&lt;/li&gt;
&lt;li&gt;Building adapter scaffolding for new platforms&lt;/li&gt;
&lt;li&gt;Debugging asynchronous communication issues&lt;/li&gt;
&lt;li&gt;Improving React component structure&lt;/li&gt;
&lt;li&gt;Creating repetitive TypeScript and JavaScript patterns&lt;/li&gt;
&lt;li&gt;Improving error handling and reconnection flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One area where Copilot was especially helpful was iteration speed.&lt;/p&gt;

&lt;p&gt;Because AniRemote involves multiple moving parts (frontend, backend, userscript, and streaming-site integrations), I spent a lot of time experimenting with architecture and communication flows.&lt;/p&gt;

&lt;p&gt;Copilot helped me spend less time writing repetitive code and more time focusing on the actual design decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'm Most Proud Of
&lt;/h2&gt;

&lt;p&gt;The most satisfying part of this project isn't that it supports multiple streaming services.&lt;/p&gt;

&lt;p&gt;It's that I finally finished it.&lt;/p&gt;

&lt;p&gt;This project started as a simple idea to make anime watching more comfortable.&lt;/p&gt;

&lt;p&gt;Over time it became a learning vehicle for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;li&gt;WSL networking&lt;/li&gt;
&lt;li&gt;Browser automation&lt;/li&gt;
&lt;li&gt;WebSockets&lt;/li&gt;
&lt;li&gt;Real-time communication&lt;/li&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Adapter architectures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AniRemote(LazyRoll) is the result of revisiting an old idea with new skills.&lt;/p&gt;

&lt;p&gt;And that's exactly why the Finish-Up-A-Thon felt like the perfect excuse to finally bring it across the finish line.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>githubcopilot</category>
      <category>python</category>
    </item>
    <item>
      <title>Laptop/PC Device Anomaly Analyzer: Self-Healing System Powered by Agentic Postgres</title>
      <dc:creator>Apoorv Gupta</dc:creator>
      <pubDate>Mon, 10 Nov 2025 07:31:10 +0000</pubDate>
      <link>https://dev.to/apoorv_dev07/laptoppc-device-anomaly-analyzer-self-healing-system-powered-by-agentic-postgres-2n7m</link>
      <guid>https://dev.to/apoorv_dev07/laptoppc-device-anomaly-analyzer-self-healing-system-powered-by-agentic-postgres-2n7m</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/tigerdata-2025-10-15"&gt;Agentic Postgres Challenge with Tiger Data&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;Laptop Anomaly Analyzer&lt;/strong&gt; is an autonomous, AI-powered monitoring system built on &lt;strong&gt;Agentic Postgres + Tiger MCP + Gemini&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
It continuously collects local system metrics (CPU, RAM, Disk, Network I/O), detects performance anomalies in real time, and automatically explains &lt;em&gt;why&lt;/em&gt; they happened — all from within Postgres itself.  &lt;/p&gt;

&lt;p&gt;No external ML service, no Python inference engine — just &lt;strong&gt;Agentic Postgres acting as its own AI brain&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;The project began as a simple TimescaleDB-based logger for my laptop performance, but evolved into an &lt;strong&gt;agentic database experiment&lt;/strong&gt; where the DB doesn’t just store telemetry, it &lt;em&gt;understands, reasons, and reacts&lt;/em&gt;.  &lt;/p&gt;




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

&lt;p&gt;🔗 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/StephCurry07/Device-Anomaly-Detector" rel="noopener noreferrer"&gt;github.com/StephCurry07/laptop-anomaly-analyzer&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;(Repo includes collector script, MCP config, and dashboard setup)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outputs:&lt;/strong&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%2F26wvmkjt9zl0rmizbwn9.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%2F26wvmkjt9zl0rmizbwn9.png" alt="Starting off with Gemini CLI" width="800" height="286"&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.amazonaws.com%2Fuploads%2Farticles%2Fk8pcj8fkubqo7wtrfc1k.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%2Fk8pcj8fkubqo7wtrfc1k.png" alt="A basic ask to connect to TimescaleDB" width="800" height="280"&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.amazonaws.com%2Fuploads%2Farticles%2Fltdd166to3jsi75qtmrb.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%2Fltdd166to3jsi75qtmrb.png" alt="Query returned" width="800" height="272"&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.amazonaws.com%2Fuploads%2Farticles%2Fd3ay5ata1tnwlacz6uzb.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%2Fd3ay5ata1tnwlacz6uzb.png" alt="Uncovering the project's base" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboard Preview:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
![Grafana Dashboard]&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.amazonaws.com%2Fuploads%2Farticles%2Fm9nhv0phiwfbtk2iyvo4.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%2Fm9nhv0phiwfbtk2iyvo4.png" alt=" " width="799" height="257"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Used Agentic Postgres
&lt;/h2&gt;

&lt;p&gt;This project combines several of &lt;strong&gt;Agentic Postgres’ most advanced features&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ &lt;strong&gt;Tiger MCP (Model Context Protocol)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Runs three autonomous database agents:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;anomaly_detector&lt;/code&gt; → runs every 10 minutes to detect CPU/RAM anomalies.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;root_cause_agent&lt;/code&gt; → triggers on new anomalies, uses vector search to find similar incidents.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;daily_summary&lt;/code&gt; → summarizes system performance once a day using Gemini reasoning.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;All logic executes &lt;em&gt;inside the database&lt;/em&gt;, orchestrated through MCP — no external scripts required.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💬 &lt;strong&gt;Tiger CLI&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Provides a natural-language interface:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="s2"&gt;"Summarize anomalies in the last 24 hours"&lt;/span&gt;
 &lt;span class="s2"&gt;"Find similar CPU spikes from past week"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Overall Experience
&lt;/h2&gt;

&lt;p&gt;It was my first time using postgres for a project. Building with Agentic Postgres completely changed how I think about data systems. Instead of pushing data to an external model or pipeline, the database itself became the reasoning layer, thanks to MCP and TigerData.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack Used
&lt;/h2&gt;

&lt;p&gt;Postgres + TimescaleDB&lt;br&gt;
Tiger MCP&lt;br&gt;
TigerData&lt;br&gt;
Gemini CLI&lt;br&gt;
Grafana (for visualization)&lt;br&gt;
Python (for metric collection)&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>agenticpostgreschallenge</category>
      <category>ai</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Beyond the Cache: AI-Driven Incident Management with Redis</title>
      <dc:creator>Apoorv Gupta</dc:creator>
      <pubDate>Mon, 11 Aug 2025 06:58:01 +0000</pubDate>
      <link>https://dev.to/apoorv_dev07/beyond-the-cache-ai-driven-incident-management-with-redis-2l18</link>
      <guid>https://dev.to/apoorv_dev07/beyond-the-cache-ai-driven-incident-management-with-redis-2l18</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/redis-2025-07-23"&gt;Redis AI Challenge&lt;/a&gt;: Beyond the Cache.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built an &lt;strong&gt;AI-powered incident management platform&lt;/strong&gt; that doesn’t just track incidents—it actively &lt;strong&gt;tries to fix them automatically&lt;/strong&gt; in real-time.&lt;br&gt;&lt;br&gt;
Instead of being a passive dashboard, the system reacts instantly to new issues by triggering an &lt;strong&gt;autofix workflow&lt;/strong&gt; backed by Redis Streams and JSON storage.  &lt;/p&gt;

&lt;p&gt;When an incident is detected, Redis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stores it as the &lt;strong&gt;primary database&lt;/strong&gt; in JSON format.&lt;/li&gt;
&lt;li&gt;Pushes it into a &lt;strong&gt;Redis Stream&lt;/strong&gt; for processing.&lt;/li&gt;
&lt;li&gt;Supports &lt;strong&gt;real-time WebSocket updates&lt;/strong&gt; to all connected clients so the UI reflects changes instantly.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detect&lt;/strong&gt;: New incidents are pushed into Redis JSON.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix&lt;/strong&gt;: A service attempts context-specific fixes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update&lt;/strong&gt;: The dashboard is refreshed via WebSocket with status changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes the platform not just a monitoring tool—but a self-healing system.&lt;/p&gt;




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

&lt;p&gt;Github Link: &lt;a href="https://github.com/StephCurry07/Redis-IncidentResponseDashboard" rel="noopener noreferrer"&gt;https://github.com/StephCurry07/Redis-IncidentResponseDashboard&lt;/a&gt;&lt;br&gt;&lt;br&gt;
📹 &lt;strong&gt;Video Walkthrough&lt;/strong&gt;: &lt;a href="https://youtu.be/00vPkSHT3Ac" rel="noopener noreferrer"&gt;YouTube Link&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshots:&lt;/strong&gt;&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2F709fwv8eowjji3zpla3d.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%2F709fwv8eowjji3zpla3d.png" alt="Incident Dashboard" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Used Redis 8
&lt;/h2&gt;

&lt;p&gt;I used &lt;strong&gt;Redis 8&lt;/strong&gt; well beyond simple caching:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Primary Database (RedisJSON)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incidents are stored directly in RedisJSON with rich metadata (&lt;code&gt;severity&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;tags&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Updates are instant and atomic—ideal for high-frequency changes from multiple services.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Real-time Streams for Autofix Pipeline&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every new incident is appended to a Redis Stream (&lt;code&gt;incident_stream&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;A background AI service consumes from this stream to attempt automated fixes, logging results back to Redis.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pub/Sub for UI Live Updates&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On every update (fix, status change), a message is published to &lt;code&gt;incident_updates&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;The frontend listens over WebSockets for instant UI refreshes without polling.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Full-Text Search (RediSearch)&lt;/strong&gt; &lt;em&gt;(optional enhancement)&lt;/em&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allows users to quickly filter incidents by description, tags, or owner with sub-millisecond search results.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Why It’s Beyond the Cache
&lt;/h2&gt;

&lt;p&gt;Redis is the &lt;strong&gt;operational core&lt;/strong&gt; of this system—without it, real-time reaction, distributed event processing, and instant updates wouldn’t be possible.&lt;br&gt;&lt;br&gt;
It’s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;primary DB&lt;/strong&gt; (RedisJSON)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;data pipeline&lt;/strong&gt; (Streams)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;search engine&lt;/strong&gt; (RediSearch)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;... all in one.  &lt;/p&gt;

&lt;p&gt;Instead of just serving cached reads, Redis orchestrates the entire lifecycle from &lt;strong&gt;incident detection → AI fix → live UI updates&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Implement AI autofix logic to handle different infrastructure types.
&lt;/li&gt;
&lt;li&gt;Integrate with CI/CD pipelines for proactive rollback.
&lt;/li&gt;
&lt;li&gt;Add historical analytics using RedisTimeSeries.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>redischallenge</category>
      <category>devchallenge</category>
      <category>database</category>
      <category>ai</category>
    </item>
    <item>
      <title>Stock Search and Insights Using Algolia and n8n</title>
      <dc:creator>Apoorv Gupta</dc:creator>
      <pubDate>Mon, 28 Jul 2025 01:08:01 +0000</pubDate>
      <link>https://dev.to/apoorv_dev07/stock-search-and-insights-using-algolia-and-n8n-569m</link>
      <guid>https://dev.to/apoorv_dev07/stock-search-and-insights-using-algolia-and-n8n-569m</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/algolia-2025-07-09"&gt;Algolia MCP Server Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Stock Search &amp;amp; Insights Platform
&lt;/h1&gt;

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

&lt;p&gt;I built a &lt;strong&gt;Stock Search &amp;amp; Insights Platform&lt;/strong&gt; powered by the &lt;strong&gt;Algolia MCP Server&lt;/strong&gt; for blazing-fast symbol and company name lookups.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Algolia&lt;/strong&gt; provides instant search across an index of stock names and symbols.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bun&lt;/strong&gt; serves as the lightweight backend to fetch data and interact with external APIs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n&lt;/strong&gt; acts as an &lt;strong&gt;orchestration backend&lt;/strong&gt;, managing workflows for technical analysis, AI-driven insights, and data enrichment.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TwelveData APIs&lt;/strong&gt; are used for fetching real-time prices, technical analysis, and SMA calculations.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chart-IMG API&lt;/strong&gt; generates &lt;strong&gt;advanced charts&lt;/strong&gt; with &lt;strong&gt;Bollinger Bands, RSI, and Volume&lt;/strong&gt; indicators.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT‑4o‑mini&lt;/strong&gt; analyzes the data and produces quick, AI-driven insights for each stock.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result: A &lt;strong&gt;single interface&lt;/strong&gt; where users can &lt;strong&gt;search for a stock&lt;/strong&gt;, instantly view &lt;strong&gt;real-time price data&lt;/strong&gt;, &lt;strong&gt;AI-powered analysis&lt;/strong&gt;, and &lt;strong&gt;technical charts&lt;/strong&gt; — all in one place.  &lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repo:&lt;/strong&gt; &lt;a href="https://github.com/StephCurry07/Algolia-StockSearch" rel="noopener noreferrer"&gt;https://github.com/StephCurry07/Algolia-StockSearch&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video Walkthrough:&lt;/strong&gt; &lt;a href="https://youtu.be/BVtRHilMbRo" rel="noopener noreferrer"&gt;https://youtu.be/BVtRHilMbRo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How I Utilized the Algolia MCP Server
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Built an &lt;strong&gt;Algolia MCP Server&lt;/strong&gt; to manage and query a &lt;strong&gt;custom stock index&lt;/strong&gt; containing symbols, company names, and exchanges.
&lt;/li&gt;
&lt;li&gt;Exposed &lt;strong&gt;MCP-like endpoints&lt;/strong&gt; (&lt;code&gt;/mcp/searchStocks&lt;/code&gt;, &lt;code&gt;/mcp/analyzeStock&lt;/code&gt;) that act as a single entry point for the frontend, abstracting away multiple API calls and complex workflows.
&lt;/li&gt;
&lt;li&gt;Integrated &lt;strong&gt;Algolia InstantSearch&lt;/strong&gt; with my React frontend for &lt;strong&gt;fast, typo-tolerant, and responsive search&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Used the MCP server as a &lt;strong&gt;broker&lt;/strong&gt; between Algolia, &lt;strong&gt;n8n workflows&lt;/strong&gt; (for chart generation, technical analysis, and AI insights), and &lt;strong&gt;external APIs&lt;/strong&gt; (TwelveData &amp;amp; Chart-IMG).
&lt;/li&gt;
&lt;li&gt;This architecture &lt;strong&gt;decouples the frontend from multiple data sources&lt;/strong&gt; — the MCP server handles enrichment, error handling, and data aggregation before sending a unified response back to the UI.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance is key:&lt;/strong&gt; Algolia MCP made stock searching instantaneous, which is crucial for a financial data app.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow automation saves time:&lt;/strong&gt; n8n helped me orchestrate data fetching (real-time quotes, SMA, technical indicators) and combine them into a single response for the frontend.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI adds value:&lt;/strong&gt; Using GPT‑4o‑mini, I transformed raw numbers into actionable insights for end-users.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Charting matters:&lt;/strong&gt; Integrating Chart-IMG allowed me to display &lt;strong&gt;professional-grade charts with key indicators&lt;/strong&gt; effortlessly.&lt;/li&gt;
&lt;li&gt;Learned how to combine Algolia + MCP + Bun + n8n + React + AI into a cohesive product pipeline.&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>algoliachallenge</category>
      <category>ai</category>
      <category>bunjs</category>
      <category>n8n</category>
    </item>
  </channel>
</rss>
