<?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>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>
