<?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>Forem: greeny bignose</title>
    <description>The latest articles on Forem by greeny bignose (@greeny).</description>
    <link>https://forem.com/greeny</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3392017%2Fac0b1954-74c2-4ff9-bed6-71bd94f4d800.jpeg</url>
      <title>Forem: greeny bignose</title>
      <link>https://forem.com/greeny</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/greeny"/>
    <language>en</language>
    <item>
      <title>Fleet Analytics Agent</title>
      <dc:creator>greeny bignose</dc:creator>
      <pubDate>Wed, 31 Dec 2025 09:20:55 +0000</pubDate>
      <link>https://forem.com/greeny/fleet-analytics-agent-2gpj</link>
      <guid>https://forem.com/greeny/fleet-analytics-agent-2gpj</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mux-2025-12-03"&gt;DEV's Worldwide Show and Tell Challenge Presented by Mux&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Mobile Ads Car Analytics is a fleet analytics platform designed to monitor, simulate, and analyze vehicles in real time.&lt;/p&gt;

&lt;p&gt;Originally built for mobile billboard cars, the system is fleet-agnostic by design and can be easily adapted to any operation that relies on vehicles — including delivery fleets, food trucks, service vehicles, and logistics operations.&lt;/p&gt;

&lt;p&gt;The platform tracks vehicle movement on maps, verifies activity or media playback per vehicle, simulates realistic driving routes, and performs cost, trip, and performance analytics using an LLM-powered backend.&lt;/p&gt;

&lt;p&gt;The goal is simple, turn vehicle movement into measurable, auditable, and optimizable business intelligence — replacing blind spending, guesswork, and delayed reporting with real-time operational insight.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎥 My Pitch Video
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://player.mux.com/P5do8601g8OqhFDZTrWWCeTBw93Xwtbk5PXd3hcOyWBA" rel="noopener noreferrer"&gt;https://player.mux.com/P5do8601g8OqhFDZTrWWCeTBw93Xwtbk5PXd3hcOyWBA&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Live services (all containerized and deployed):
&lt;/h3&gt;

&lt;p&gt;Devpost link:&lt;br&gt;
&lt;a href="https://run.devpost.com/submissions/search?utf8=%E2%9C%93&amp;amp;terms=mobile+ads+car+analytics&amp;amp;sort=" rel="noopener noreferrer"&gt;https://run.devpost.com/submissions/search?utf8=%E2%9C%93&amp;amp;terms=mobile+ads+car+analytics&amp;amp;sort=&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Frontend Dashboard&lt;br&gt;
&lt;a href="https://frontendcar-120772862253.us-east4.run.app" rel="noopener noreferrer"&gt;https://frontendcar-120772862253.us-east4.run.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Backend (Node.js + FastAPI)&lt;br&gt;
&lt;a href="https://backendcar-120772862253.us-east4.run.app" rel="noopener noreferrer"&gt;https://backendcar-120772862253.us-east4.run.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mobile Car Simulator (Phone-friendly)&lt;br&gt;
&lt;a href="https://mobilecar-120772862253.us-east4.run.app" rel="noopener noreferrer"&gt;https://mobilecar-120772862253.us-east4.run.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ADK + Gradio Analytics Interface&lt;br&gt;
&lt;a href="https://gradio-120772862253.us-east4.run.app" rel="noopener noreferrer"&gt;https://gradio-120772862253.us-east4.run.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ADK Service&lt;br&gt;
&lt;a href="https://adk-120772862253.us-east4.run.app" rel="noopener noreferrer"&gt;https://adk-120772862253.us-east4.run.app&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Repositories
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/hendram/mobile_ads_analytics" rel="noopener noreferrer"&gt;https://github.com/hendram/mobile_ads_analytics&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hendram/backendcar" rel="noopener noreferrer"&gt;https://github.com/hendram/backendcar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hendram/mobilecar" rel="noopener noreferrer"&gt;https://github.com/hendram/mobilecar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hendram/gradio" rel="noopener noreferrer"&gt;https://github.com/hendram/gradio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hendram/frontendcar" rel="noopener noreferrer"&gt;https://github.com/hendram/frontendcar&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Complete Footage of the Apps:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=3HO-tBAzMrk" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=3HO-tBAzMrk&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📖 The Story Behind It
&lt;/h2&gt;

&lt;p&gt;Years ago, while stuck in traffic, I noticed mobile billboard cars trapped in congestion.&lt;/p&gt;

&lt;p&gt;That’s when the problem became obvious:&lt;/p&gt;

&lt;p&gt;Ads don’t reach planned locations on time&lt;/p&gt;

&lt;p&gt;Traffic jams and broken roads kill campaign efficiency&lt;/p&gt;

&lt;p&gt;Video playback issues go unnoticed&lt;/p&gt;

&lt;p&gt;Costs keep rising without clear ROI&lt;/p&gt;

&lt;p&gt;Traditional outdoor ads have dashboards.&lt;br&gt;
Mobile ads cars don’t.&lt;/p&gt;

&lt;p&gt;This project exists to close that gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧩 What It Does
&lt;/h2&gt;

&lt;p&gt;Core Features&lt;/p&gt;

&lt;h3&gt;
  
  
  🚘 Car Monitoring
&lt;/h3&gt;

&lt;p&gt;Real-time car movement visualized on a map&lt;/p&gt;

&lt;p&gt;Location data streamed from Firestore&lt;/p&gt;

&lt;p&gt;Each car tracked independently&lt;/p&gt;

&lt;h3&gt;
  
  
  🎥 Video Monitoring
&lt;/h3&gt;

&lt;p&gt;Live video frame per car&lt;/p&gt;

&lt;p&gt;Label overlay shows which car is being monitored&lt;/p&gt;

&lt;p&gt;Videos served from backend as files&lt;/p&gt;

&lt;h3&gt;
  
  
  ➕ Add / Remove Cars
&lt;/h3&gt;

&lt;p&gt;Car label can be auto generated or user inputted &lt;/p&gt;

&lt;p&gt;Backend persistence only triggered when:&lt;/p&gt;

&lt;p&gt;Cars are added &lt;/p&gt;

&lt;p&gt;Places are added&lt;/p&gt;

&lt;p&gt;Videos are assigned&lt;/p&gt;

&lt;p&gt;Safe removal logic&lt;/p&gt;

&lt;p&gt;Backend cleanup if data already stored&lt;/p&gt;

&lt;h3&gt;
  
  
  🧭 Route Simulation
&lt;/h3&gt;

&lt;p&gt;Uses Google Directions API&lt;/p&gt;

&lt;p&gt;Converts user-defined places into real driving paths&lt;/p&gt;

&lt;p&gt;Simulated mobile car:&lt;/p&gt;

&lt;p&gt;Runs on desktop web or mobile web (portrait &amp;amp; landscape)&lt;/p&gt;

&lt;p&gt;Sends live coordinates back to backend&lt;/p&gt;

&lt;p&gt;Stored in Tidb for analytics and firebased for realtime monitoring dashboard&lt;/p&gt;

&lt;h2&gt;
  
  
  📊 Analytics &amp;amp; Intelligence (ADK + Gradio)
&lt;/h2&gt;

&lt;p&gt;Powered by Google ADK as an agent backend, exposed through Gradio.&lt;/p&gt;

&lt;p&gt;Supported Analytics&lt;/p&gt;

&lt;p&gt;Total cost per trip (fuel, driver, maintenance — configurable)&lt;/p&gt;

&lt;p&gt;Cost per leg&lt;/p&gt;

&lt;p&gt;Driver time on the road (per trip &amp;amp; comparison)&lt;/p&gt;

&lt;p&gt;Number of trips per car&lt;/p&gt;

&lt;p&gt;Cross-car cost comparison&lt;/p&gt;

&lt;p&gt;Tabular reports (copy-ready)&lt;/p&gt;

&lt;p&gt;Charts for trend &amp;amp; anomaly analysis&lt;/p&gt;

&lt;p&gt;Example Prompts You Can Run&lt;/p&gt;

&lt;p&gt;Driver cost comparison between cars with different pricing models&lt;/p&gt;

&lt;p&gt;Fuel cost per leg with tables or graphs&lt;/p&gt;

&lt;p&gt;Trip count per car&lt;/p&gt;

&lt;p&gt;Time-on-road comparison between cars&lt;/p&gt;

&lt;p&gt;Anomaly detection using non-cumulative cost graphs&lt;/p&gt;

&lt;p&gt;This is not hard-coded analytics — it’s LLM-driven analysis over real route data.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ How We Built It
&lt;/h2&gt;

&lt;p&gt;Tech Stack&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;p&gt;React&lt;/p&gt;

&lt;p&gt;Vite&lt;/p&gt;

&lt;p&gt;Google Maps API&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;p&gt;Node.js (Express)&lt;/p&gt;

&lt;p&gt;FastAPI (Python)&lt;/p&gt;

&lt;p&gt;SQLite (operational data)&lt;/p&gt;

&lt;h3&gt;
  
  
  Analytics
&lt;/h3&gt;

&lt;p&gt;Google ADK (agent-based reasoning)&lt;/p&gt;

&lt;p&gt;Gradio (interactive analytics UI)&lt;/p&gt;

&lt;p&gt;Gemini models&lt;/p&gt;

&lt;h3&gt;
  
  
  Data &amp;amp; Infra
&lt;/h3&gt;

&lt;p&gt;Firestore (real-time tracking)&lt;/p&gt;

&lt;p&gt;Google Directions &amp;amp; Geolocation APIs&lt;/p&gt;

&lt;p&gt;Docker (everything containerized)&lt;/p&gt;

&lt;p&gt;Cloud Run&lt;/p&gt;

&lt;p&gt;Artifact Registry&lt;/p&gt;

&lt;p&gt;Workload Identity&lt;/p&gt;

&lt;p&gt;Everything runs in containers&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Challenges We Ran Into
&lt;/h2&gt;

&lt;p&gt;ADK agent behavior&lt;/p&gt;

&lt;p&gt;LLM responses can be inconsistent&lt;/p&gt;

&lt;p&gt;Sometimes partial, sometimes lazy&lt;/p&gt;

&lt;p&gt;Required careful agent architecture design&lt;/p&gt;

&lt;p&gt;Agent I/O with Gradio&lt;/p&gt;

&lt;p&gt;Avoiding swallowed inputs&lt;/p&gt;

&lt;p&gt;Ensuring structured outputs for tables &amp;amp; charts&lt;/p&gt;

&lt;p&gt;Google Maps Reality Check&lt;/p&gt;

&lt;p&gt;Same places ≠ same route&lt;/p&gt;

&lt;p&gt;Directions API ≠ Geolocation API&lt;/p&gt;

&lt;p&gt;Path variability impacts analytics accuracy&lt;/p&gt;

&lt;p&gt;This was mostly trial-and-error — documentation is still thin.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏆 Accomplishments We’re Proud Of
&lt;/h2&gt;

&lt;p&gt;Generating real analytical reports (tables &amp;amp; charts) from ADK&lt;/p&gt;

&lt;p&gt;End-to-end pipeline:&lt;/p&gt;

&lt;p&gt;Route simulation → Firestore → LLM analysis → visual report&lt;/p&gt;

&lt;p&gt;Turning a “cool demo” into something that actually has business value&lt;/p&gt;

&lt;p&gt;This goes beyond hackathon eye-candy.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎓 What We Learned
&lt;/h2&gt;

&lt;p&gt;When to stop polishing and switch approaches&lt;/p&gt;

&lt;p&gt;How LLM behavior directly affects system design&lt;/p&gt;

&lt;p&gt;Real-world mapping data is messy and non-deterministic&lt;/p&gt;

&lt;p&gt;Making analytics usable matters more than making them clever&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 What’s Next
&lt;/h2&gt;

&lt;p&gt;Upgrade into a Mobile Ads Optimizer Platform, not just analytics:&lt;/p&gt;

&lt;p&gt;Campaign optimization recommendations&lt;/p&gt;

&lt;p&gt;Traffic-aware route planning&lt;/p&gt;

&lt;p&gt;Cost vs exposure modeling&lt;/p&gt;

&lt;p&gt;Automated anomaly alerts&lt;/p&gt;

&lt;p&gt;ROI-driven scheduling&lt;/p&gt;

&lt;p&gt;From tracking ads → optimizing ads.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>muxchallenge</category>
      <category>showandtell</category>
      <category>video</category>
    </item>
    <item>
      <title>Migrating Tenant Management System From Mongodb To Redis Backend</title>
      <dc:creator>greeny bignose</dc:creator>
      <pubDate>Fri, 08 Aug 2025 21:23:06 +0000</pubDate>
      <link>https://forem.com/greeny/migrating-tenant-management-system-from-mongodb-to-redis-backend-29il</link>
      <guid>https://forem.com/greeny/migrating-tenant-management-system-from-mongodb-to-redis-backend-29il</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;p&gt;cover_image: &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%2Fx38i29liixmxzgsf0oua.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%2Fx38i29liixmxzgsf0oua.png" alt="Redis Challenge with Grafana" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;I built a &lt;strong&gt;Tenant Management System&lt;/strong&gt;, a small but practical intranet application used to keep track of tenants in an apartment complex. It allows the community head to search for tenants and check their status quickly.&lt;/p&gt;

&lt;p&gt;This is a live app already being used by real users. For this challenge, I &lt;strong&gt;refactored the backend&lt;/strong&gt;, originally based on MongoDB, and &lt;strong&gt;migrated it to Redis Cloud&lt;/strong&gt; as the &lt;strong&gt;primary database&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I also updated some of the application code to better take advantage of Redis’ capabilities.&lt;/p&gt;




&lt;h2&gt;
  
  
  Application flow
&lt;/h2&gt;

&lt;p&gt;First admin need to login first using his own account on sign in page, and generate token to add operator guy who will be fill, update and search for tenant data in apartment complex. This token will be use by operator to sign up on sign up page and login inside the apps.&lt;/p&gt;

&lt;p&gt;Next time operator wants to do their job, just sign in using his/her name and password. Operator can add tenant data, update, search based on name or tower+unit and delete it too. Admin cannot do this directly.&lt;/p&gt;

&lt;p&gt;Every time they want to logout just refresh the browser to back to sign in page.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;🔗 &lt;strong&gt;Live App&lt;/strong&gt;: &lt;a href="https://appsrwredis.vercel.app/" rel="noopener noreferrer"&gt;Tenant Management System live on vercel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 &lt;strong&gt;Frontend GitHub Repo&lt;/strong&gt;: &lt;a href="https://github.com/hendram/appsrwredis" rel="noopener noreferrer"&gt;Frontend github source code&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;Backend GitHub Repo&lt;/strong&gt;: &lt;a href="https://github.com/hendram/appsrwbackredis" rel="noopener noreferrer"&gt;Backend github source code&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;▶️ &lt;strong&gt;Demo Video&lt;/strong&gt;: &lt;a href="https://youtu.be/1EOcjdAILKM" rel="noopener noreferrer"&gt;Tutorial how to use demo apps on youtube&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Grafana Dashboard&lt;/strong&gt;:
&lt;a href="https://hendramulyanto.grafana.net/public-dashboards/96264835006547138bb3e458282704a0?from=2025-08-06T03:06:36.007Z&amp;amp;to=2025-08-06T03:52:16.348Z&amp;amp;timezone=browser" rel="noopener noreferrer"&gt;Grafana dashboard depicting Redis Timeseries log data&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Default password for admin is &lt;strong&gt;admin&lt;/strong&gt; with password &lt;strong&gt;123456&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;There are one operator for test with username &lt;strong&gt;aa&lt;/strong&gt; and password &lt;strong&gt;123456&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Data Used
&lt;/h2&gt;

&lt;p&gt;For this project, I leveraged several real-world and simulated datasets hosted on GitHub to demonstrate and test Redis functionalities effectively:&lt;/p&gt;

&lt;p&gt;Operator Name List:&lt;br&gt;
&lt;a href="https://github.com/hendram/appsrwbackredis/blob/master/operator-name-list.txt" rel="noopener noreferrer"&gt;https://github.com/hendram/appsrwbackredis/blob/master/operator-name-list.txt&lt;/a&gt;&lt;br&gt;
Contains a list of operator names for testing Redis queries related to operators.&lt;/p&gt;

&lt;p&gt;Resident Name List:&lt;br&gt;
&lt;a href="https://github.com/hendram/appsrwbackredis/blob/master/residents-name-list.txt" rel="noopener noreferrer"&gt;https://github.com/hendram/appsrwbackredis/blob/master/residents-name-list.txt&lt;/a&gt;&lt;br&gt;
Provides resident names to simulate tenant-related Redis queries.&lt;/p&gt;

&lt;p&gt;Timeseries Log for Name Search:&lt;br&gt;
&lt;a href="https://github.com/hendram/appsrwbackredis/blob/master/timeseries-log-namesearch.txt" rel="noopener noreferrer"&gt;https://github.com/hendram/appsrwbackredis/blob/master/timeseries-log-namesearch.txt&lt;/a&gt;&lt;br&gt;
A fake dataset used to demo RedisTimeSeries search queries based on tenant names.&lt;/p&gt;

&lt;p&gt;Timeseries Log for Tower &amp;amp; Unit Search:&lt;br&gt;
&lt;a href="https://github.com/hendram/appsrwbackredis/blob/master/timeseries-log-towerunitsearch.txt" rel="noopener noreferrer"&gt;https://github.com/hendram/appsrwbackredis/blob/master/timeseries-log-towerunitsearch.txt&lt;/a&gt;&lt;br&gt;
Demo dataset used to showcase timeseries search queries filtered by tower and unit attributes.&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%2Fz68ora0n0nxtjkrjea16.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%2Fz68ora0n0nxtjkrjea16.png" alt="Redis database" width="800" height="450"&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%2Flazkv6bvxc8wgrthfkdy.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%2Flazkv6bvxc8wgrthfkdy.png" alt="Redis memory usage" width="800" height="450"&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%2Fgoa44p29un5jvdcs35zg.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%2Fgoa44p29un5jvdcs35zg.png" alt="RedisJson and RedisSearch Index" width="800" height="450"&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%2Fijxyox7w75eocawybmm7.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%2Fijxyox7w75eocawybmm7.png" alt="RedisSearch" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Redis Cloud
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;True Distributed RediSearch&lt;/strong&gt;&lt;br&gt;
Fully supports distributed full-text search and secondary indexing across all cluster nodes, enabling seamless search on large, sharded datasets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automated High Availability and Failover&lt;/strong&gt;&lt;br&gt;
Built-in automatic failover with multi-availability zone support ensures minimal downtime without manual intervention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automatic Horizontal Scaling&lt;/strong&gt;&lt;br&gt;
Scales elastically with automatic sharding and re-sharding to handle growing workloads smoothly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Managed Persistence and Backups&lt;/strong&gt;&lt;br&gt;
Provides automated backups and point-in-time recovery, protecting data with minimal effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enterprise-Grade Security&lt;/strong&gt;&lt;br&gt;
Features encryption at rest and in transit, role-based access control, and secure network connectivity options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comprehensive Monitoring and Alerting&lt;/strong&gt;&lt;br&gt;
Integrated dashboards and alerts give real-time insight into performance and system health.&lt;/p&gt;

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

&lt;p&gt;In this project, I used &lt;strong&gt;Redis Cloud&lt;/strong&gt; as my &lt;strong&gt;primary database&lt;/strong&gt;, not just for caching, but for real-time data storage, querying, and monitoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  Redis Features Used:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🧠 &lt;strong&gt;RedisJSON&lt;/strong&gt;: Used to store structured data about each tenant — including fields like &lt;code&gt;nama&lt;/code&gt;, &lt;code&gt;tower&lt;/code&gt;, &lt;code&gt;unit&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔍 &lt;strong&gt;RediSearch&lt;/strong&gt;: Enabled fast, full-text search capabilities for fields like tenant name (&lt;code&gt;nama&lt;/code&gt;) and apartment unit (&lt;code&gt;towerunit&lt;/code&gt;). This allows operators to search quickly even as the dataset grows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📊 &lt;strong&gt;RedisTimeSeries&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
I use this module to log &lt;strong&gt;how many records are returned&lt;/strong&gt; by each search query (e.g., on &lt;code&gt;nama&lt;/code&gt; or &lt;code&gt;towerunit&lt;/code&gt;).&lt;br&gt;&lt;br&gt;
Each operator’s search count result is pushed to a time series key so we can monitor activity over time.&lt;br&gt;&lt;br&gt;
This gives visibility into tenant search behavior — not for performance metrics, but for tracking usage patterns.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📈 &lt;strong&gt;Grafana Cloud Integration&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
I integrated Redis Cloud with &lt;strong&gt;Grafana Cloud&lt;/strong&gt; using the Redis Data Source Plugin. This allowed me to build a &lt;strong&gt;live dashboard&lt;/strong&gt; that queries RedisTimeSeries directly to show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search query volumes over time
&lt;/li&gt;
&lt;li&gt;Which operators are most active
&lt;/li&gt;
&lt;li&gt;What kind of search patterns are emerging&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;☁️ &lt;strong&gt;Redis Cloud&lt;/strong&gt;: As a managed platform, Redis Cloud made it easy to deploy without worrying about infrastructure. It includes Redis modules like RedisJSON and RediSearch out of the box, which helped me replace my previous MongoDB backend completely.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;p&gt;This setup proves Redis Cloud can be used as a complete real-time application backend, not just a cache — and even supports advanced observability when combined with tools like Grafana.&lt;/p&gt;

</description>
      <category>redischallenge</category>
      <category>devchallenge</category>
      <category>database</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
