<?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: Jaron</title>
    <description>The latest articles on DEV Community by Jaron (@jaron_79b2943d7acc9e3c74e).</description>
    <link>https://dev.to/jaron_79b2943d7acc9e3c74e</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%2F3237745%2F38ba9c25-c519-423b-8aad-decbec457f69.png</url>
      <title>DEV Community: Jaron</title>
      <link>https://dev.to/jaron_79b2943d7acc9e3c74e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jaron_79b2943d7acc9e3c74e"/>
    <language>en</language>
    <item>
      <title>From Local App to Web App in less than 10 Prompts with MeDO</title>
      <dc:creator>Jaron</dc:creator>
      <pubDate>Mon, 11 May 2026 10:21:09 +0000</pubDate>
      <link>https://dev.to/jaron_79b2943d7acc9e3c74e/from-local-app-to-web-app-in-less-than-10-prompts-with-medo-3lhf</link>
      <guid>https://dev.to/jaron_79b2943d7acc9e3c74e/from-local-app-to-web-app-in-less-than-10-prompts-with-medo-3lhf</guid>
      <description>&lt;h1&gt;
  
  
  BuiltWithMeDo
&lt;/h1&gt;

&lt;p&gt;I had a Python app that generated game sprites using Gemini. It worked great. The problem was it only ran on my machine. No web UI, no shareable link, nothing I could hand to someone else or demo without screen sharing.&lt;/p&gt;

&lt;p&gt;The Build with MeDo hackathon gave me a reason to fix that. Here is how it went.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt 1: Write the requirements first&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before touching any code I asked MeDo to produce a requirements document. I described what I wanted: a chat panel for talking to the AI agent, a style references gallery, a jobs board, a settings panel for the API URL. MeDo wrote out a full spec with acceptance criteria, edge cases, and an API contract table.&lt;/p&gt;

&lt;p&gt;That step mattered more than I expected. It forced me to think clearly about the API before the frontend existed, which meant fewer mismatches to fix later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt 2: Build it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the requirements looked right I said "build this application from the spec above." MeDo generated the full four-panel React frontend in one pass. Dark theme, sidebar navigation, all four panels wired up to the API endpoints from the requirements doc.&lt;/p&gt;

&lt;p&gt;That was it for the initial build. Two prompts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I built on the backend&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The AI pipeline already existed. I just needed a server layer in front of it. I wrote a FastAPI bridge that exposes the pipeline over HTTP: a chat endpoint, a polling endpoint for streaming agent events back to the browser, static file serving for the generated sprites, and a session management layer. Around 550 lines of Python. ngrok tunnels it to the public internet so the MeDo app can reach it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The follow-up prompts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A few things needed fixing after the first build. The style references gallery was crashing because image URLs were absolute Windows paths, not web URLs. The chat responses were not showing up because the WebSocket was using ws:// instead of wss:// over the HTTPS tunnel. The base URL in settings had a trailing slash that was producing double-slash paths like //config.&lt;/p&gt;

&lt;p&gt;Each fix was one prompt. None of them required a redesign, just targeted corrections. By prompt 8 or 9 the app was working end to end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the final app actually does&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You open the app, type a description in the chat panel like "a glowing health potion for a dark fantasy RPG," and the agent generates the sprite. Images appear in the chat in real time as they come back from Gemini. The style references gallery shows every saved art style with image previews so you can keep your assets visually consistent across a whole project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What surprised me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The chat panel was the part I expected to be painful. It renders multiple event types live: agent responses, tool calls, thinking blocks, error messages, generated images. MeDo got the structure right on the first pass. I have built streaming UIs manually before and it usually takes a full day to get the edge cases right. MeDo had a working version in one prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The stack&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MeDo frontend: React app built from a requirements doc&lt;/li&gt;
&lt;li&gt;FastAPI backend: wraps the existing Gemini pipeline&lt;/li&gt;
&lt;li&gt;Gemini on Vertex AI: image generation and agent reasoning&lt;/li&gt;
&lt;li&gt;ngrok: tunnels the local server to the web&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have a working local tool and you want a web interface for it, MeDo is genuinely fast. The hard part is describing what you want clearly. The building part takes care of itself.&lt;/p&gt;

</description>
      <category>builtwithmedo</category>
    </item>
    <item>
      <title>NOTGPT.NET - Premium AI for Everyone</title>
      <dc:creator>Jaron</dc:creator>
      <pubDate>Sat, 09 Aug 2025 03:04:53 +0000</pubDate>
      <link>https://dev.to/jaron_79b2943d7acc9e3c74e/notgptnet-premium-ai-for-everyone-1ge1</link>
      <guid>https://dev.to/jaron_79b2943d7acc9e3c74e/notgptnet-premium-ai-for-everyone-1ge1</guid>
      <description>&lt;p&gt;What I Built&lt;br&gt;
NotGPT - A Premium AI Service with Specialized Personas that are fine-tuned for specific domains. Our platform features intelligent AI personas with semantic memory, real-time response comparison, and advanced conversation management powered by Redis 8's AI-focused capabilities.&lt;/p&gt;

&lt;p&gt;Demo&lt;br&gt;
&lt;strong&gt;NOTGPT.net&lt;/strong&gt; - Experience our AI personas with real-time semantic memory and intelligent response caching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I Used Redis 8&lt;/strong&gt;&lt;br&gt;
We leveraged Redis 8 as our intelligent real-time data layer with several AI-focused implementations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distributed Rate Limiting with AI Workload Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-tier rate limiting for free, premium, and admin users with Redis-backed sliding windows&lt;/li&gt;
&lt;li&gt;Intelligent fallback system that gracefully degrades to in-memory caching when Redis is unavailable&lt;/li&gt;
&lt;li&gt;Production-grade circuit breaker pattern for handling high AI workload spikes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Semantic Memory Caching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time persona memory injection with Redis caching for frequently accessed semantic memories&lt;/li&gt;
&lt;li&gt;Context-aware caching that reduces LLM API calls by storing semantically similar conversation contexts&lt;/li&gt;
&lt;li&gt;Dynamic memory invalidation when personas learn new information or receive corrections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Response Comparison Optimization&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intelligent caching for our ResponseComparisonWidget that compares multiple AI model responses&lt;/li&gt;
&lt;li&gt;Session-based comparison state shared across multiple server instances&lt;/li&gt;
&lt;li&gt;Real-time performance metrics cached in Redis for instant comparison analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Multi-Instance Session Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distributed conversation state allowing users to seamlessly continue conversations across different server instances&lt;/li&gt;
&lt;li&gt;Real-time persona selection and configuration sharing&lt;/li&gt;
&lt;li&gt;Session persistence that survives server restarts and deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advanced Fallback Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hybrid caching strategy using Redis as primary with intelligent memory-based fallbacks&lt;/li&gt;
&lt;li&gt;Health monitoring with automatic Redis reconnection and failure detection&lt;/li&gt;
&lt;li&gt;Zero-downtime deployments with graceful degradation patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Production Deployment&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vercel KV integration for serverless Redis deployment&lt;/li&gt;
&lt;li&gt;Environment-based configuration supporting multiple Redis providers&lt;/li&gt;
&lt;li&gt;Comprehensive error handling with detailed logging and monitoring&lt;/li&gt;
&lt;li&gt;Redis 8 enables our AI personas to maintain context, learn from interactions, and provide intelligent responses while ensuring scalability and reliability across our distributed architecture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Technical Implementation&lt;/strong&gt;:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
// Multi-tier rate limiting with Redis
class RateLimiter {
  async checkLimit(userId: string, tier: 'free' | 'premium' | 'admin') {
    const key = `rate_limit:${userId}:${tier}`
    const current = await redis.incr(key)
    if (current === 1) await redis.expire(key, 3600)
    return current &amp;lt;= this.limits[tier]
  }
}

// Semantic memory caching
const memoryKey = `formatted_memories:${personaId}:${userId}`
await redis.setex(memoryKey, 1800, JSON.stringify(formattedMemories))`

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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