<?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: Sanjay Kumar Sah</title>
    <description>The latest articles on Forem by Sanjay Kumar Sah (@sanjaysah).</description>
    <link>https://forem.com/sanjaysah</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%2F1656931%2F92645e0c-3291-4e97-aa16-b1904ecae286.jpg</url>
      <title>Forem: Sanjay Kumar Sah</title>
      <link>https://forem.com/sanjaysah</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sanjaysah"/>
    <language>en</language>
    <item>
      <title>BrewOps: A Production-Grade HTCPCP Dashboard</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Thu, 02 Apr 2026 11:40:36 +0000</pubDate>
      <link>https://forem.com/sanjaysah/brewops-a-production-grade-htcpcp-dashboard-l35</link>
      <guid>https://forem.com/sanjaysah/brewops-a-production-grade-htcpcp-dashboard-l35</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;BrewOps&lt;/strong&gt;, a highly serious, production-grade DevOps dashboard for a delightfully useless protocol: the Hyper Text Coffee Pot Control Protocol (HTCPCP, RFC 2324). &lt;/p&gt;

&lt;p&gt;Tired of walking to the breakroom only to find the coffee pot empty? BrewOps brings 1998's best internet joke into the modern era. It's a sleek control center that lets you monitor your network of coffee pots and teapots. You can issue &lt;code&gt;BREW&lt;/code&gt; and &lt;code&gt;PROPFIND&lt;/code&gt; requests, select your &lt;code&gt;Accept-Additions&lt;/code&gt; (like Milk, Syrup, or Alcohol), and watch the live terminal logs. &lt;/p&gt;

&lt;p&gt;And yes, if you try to brew coffee using the "Earl Grey Teapot" appliance, the server will correctly reject your request with a &lt;code&gt;418 I'm a teapot&lt;/code&gt; status code, complete with a panic animation.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live App:&lt;/strong&gt; &lt;a href="https://brewops-htcpcp-dashboard-775853986076.us-west1.run.app" rel="noopener noreferrer"&gt;BrewOps HTCPCP Dashboard&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://brewops-htcpcp-dashboard-775853986076.us-west1.run.app"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


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

&lt;p&gt;&lt;strong&gt;Source Code:&lt;/strong&gt; &lt;a href="https://ai.studio/apps/1e2bc60e-2228-47dc-9b84-4da88097bbf4" rel="noopener noreferrer"&gt;Google AI Studio Project&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I built this using &lt;strong&gt;Next.js&lt;/strong&gt; and &lt;strong&gt;Tailwind CSS&lt;/strong&gt; to give it that authentic, dark-mode "serious developer tool" aesthetic. The icons are from &lt;code&gt;lucide-react&lt;/code&gt;, and I used &lt;code&gt;motion/react&lt;/code&gt; (Framer Motion) to create the smooth terminal log entries and the bouncing teapot animation when a 418 error is triggered. &lt;/p&gt;

&lt;p&gt;The entire project was generated, iterated on, and deployed using &lt;strong&gt;Google AI Studio&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;I am submitting this for two categories:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Best Ode to Larry Masinter:&lt;/strong&gt; &lt;br&gt;
This project is a literal, playable implementation of Larry Masinter's legendary RFC 2324. It faithfully recreates the HTCPCP headers (&lt;code&gt;Accept-Additions&lt;/code&gt;, &lt;code&gt;message/coffeepot&lt;/code&gt; content types) and intentionally triggers the famous &lt;code&gt;418 I'm a teapot&lt;/code&gt; error when you target the wrong appliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Best Google AI Usage:&lt;/strong&gt; &lt;br&gt;
I built this entire application from scratch using &lt;strong&gt;Google AI Studio&lt;/strong&gt; (powered by Gemini 3.1 Pro). The AI agent helped me scaffold the Next.js app, design the Tailwind UI, write the simulated terminal logic, and instantly deploy the final build to &lt;strong&gt;Google Cloud Run&lt;/strong&gt; (which is where it is currently hosted!).&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Serenity: A Personal AI Wellbeing Companion Built with Google Gemini</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Tue, 03 Mar 2026 11:51:28 +0000</pubDate>
      <link>https://forem.com/sanjaysah/serenity-a-personal-ai-wellbeing-companion-built-with-google-gemini-2epk</link>
      <guid>https://forem.com/sanjaysah/serenity-a-personal-ai-wellbeing-companion-built-with-google-gemini-2epk</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mlh-built-with-google-gemini-02-25-26"&gt;Built with Google Gemini: Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built with Google Gemini
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Serenity&lt;/strong&gt;, a comprehensive, privacy-first mental health and wellbeing application designed to act as your personal caretaker, health coach, and daily companion. &lt;/p&gt;

&lt;p&gt;Mental health tools are often fragmented—you use one app for habit tracking, another for journaling, and yet another for meditation. Serenity solves this by combining all these tools into one cohesive, beautifully designed platform. It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mood Check-ins &amp;amp; Insights:&lt;/strong&gt; Track daily emotional trends.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily Journal:&lt;/strong&gt; A safe space for reflection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Habit &amp;amp; Goal Tracker:&lt;/strong&gt; Build positive routines and set long-term targets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wellness Hub:&lt;/strong&gt; Interactive exercises including Box Breathing, 5-4-3-2-1 Grounding, Body Scan meditations, and Eye Strain Relief.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Role of Google Gemini:&lt;/strong&gt;&lt;br&gt;
Google Gemini (&lt;code&gt;gemini-3-flash-preview&lt;/code&gt;) acts as the core "brain" and empathetic heart of the app. Instead of just a generic chatbot, Serenity uses the &lt;code&gt;@google/genai&lt;/code&gt; SDK to read your recent moods, incomplete habits, journal entries, and long-term goals as context. &lt;/p&gt;

&lt;p&gt;Gemini provides highly tailored advice, health tips, and emotional support. For example, if you set a goal to "Run a 5K", you can click "Ask Serenity for a Plan", and Gemini will instantly generate a personalized diet, exercise, and lifestyle plan based on your current habits and mood history. It also proactively generates warm, encouraging reminders if you forget to complete your daily habits!&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&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%2Fycb2zbe8esjihxrrd8xz.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%2Fycb2zbe8esjihxrrd8xz.png" alt="Serenity Home page" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can try out the live version of Serenity here:&lt;br&gt;
🔗 &lt;strong&gt;&lt;a href="https://serenity-xi-eight.vercel.app/" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
🔗 &lt;strong&gt;&lt;a href="https://github.com/sanjaysah101/serenity" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Note: The app is designed with a "Warm Organic" aesthetic using Tailwind CSS and Framer Motion to create a calming user experience.)&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Building Serenity was an incredible learning experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Contextual AI Engineering:&lt;/strong&gt; I learned how to effectively pass structured JSON data (user moods, habits, journals) into Gemini's system prompt to create an AI that truly "remembers" and understands the user's current state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI/UX for Mental Health:&lt;/strong&gt; I learned the importance of color psychology and micro-interactions. Using glassmorphism, soft sage/earth tones, and smooth Framer Motion animations helped create a UI that actually lowers stress rather than adding to it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Component Design:&lt;/strong&gt; Building the Wellness Hub taught me how to manage complex state and timers in React, especially for the Body Scan and Eye Strain Relief exercises.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Google Gemini Feedback
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What worked well:&lt;/strong&gt;&lt;br&gt;
The new &lt;code&gt;@google/genai&lt;/code&gt; SDK is incredibly intuitive. The speed of the &lt;code&gt;gemini-3-flash-preview&lt;/code&gt; model is phenomenal—it makes the conversational assistant feel truly real-time. I was also deeply impressed by how well Gemini understood the structured context I passed to it. It seamlessly connected the dots between a user feeling "anxious" in their mood log and suggesting the built-in grounding exercises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where I ran into friction:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The main challenge was prompt engineering to get the &lt;em&gt;tone&lt;/em&gt; exactly right. Initially, the AI sounded a bit too clinical or robotic. I had to refine the system instructions heavily to ensure it consistently spoke with the warmth, empathy, and brevity of a "personal caretaker." Additionally, handling the multimodal inputs (allowing users to upload images to the chat) required some careful base64 encoding logic to pass to the API correctly, but once set up, it worked flawlessly.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ for the Hack for &lt;a href="https://hackformental.com/2026" rel="noopener noreferrer"&gt;Mental Health 2026&lt;/a&gt; &amp;amp; DEV Challenge.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>geminireflections</category>
      <category>gemini</category>
    </item>
    <item>
      <title>From Zero Rust to DevOps: Building a System Monitor with GitHub Copilot CLI</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Sun, 15 Feb 2026 06:34:12 +0000</pubDate>
      <link>https://forem.com/sanjaysah/from-zero-rust-to-devops-building-a-system-monitor-with-github-copilot-cli-3mf5</link>
      <guid>https://forem.com/sanjaysah/from-zero-rust-to-devops-building-a-system-monitor-with-github-copilot-cli-3mf5</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;&lt;code&gt;rust-tui-dashboard&lt;/code&gt;&lt;/strong&gt;, a terminal-based system monitor (similar to &lt;code&gt;htop&lt;/code&gt; or &lt;code&gt;btop&lt;/code&gt;) written entirely in &lt;strong&gt;Rust&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As a Full-Stack developer primarily experienced with JavaScript and the MERN stack, I have always wanted to learn Rust. However, the steep learning curve—specifically the borrow checker and strict type system—was intimidating. For this challenge, I decided to use the &lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt; as my "Senior Rust Engineer" to guide me through building a production-ready application from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visual Gauges:&lt;/strong&gt; Real-time CPU &amp;amp; Memory usage visualized with colorful progress bars (Cyan &amp;amp; Yellow).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disk Alerts:&lt;/strong&gt; Tracks partition usage (which hilariously warned me that my own drive is &lt;strong&gt;97.5% full&lt;/strong&gt;!).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Stats:&lt;/strong&gt; Live upload/download speed tracking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Platform:&lt;/strong&gt; Runs on Linux, macOS, and Windows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Builds:&lt;/strong&gt; A CI/CD pipeline set up via GitHub Actions.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Here is the final result running in my terminal:&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%2Frl1yqezg62q7mn0uq98b.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%2Frl1yqezg62q7mn0uq98b.png" alt="Rust TUI Dashboard" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/sanjaysah101/rust-tui-dashboard" rel="noopener noreferrer"&gt;rust-tui-dashboard&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Building this project was a journey of &lt;strong&gt;"Prompt -&amp;gt; Error -&amp;gt; Explanation -&amp;gt; Fix."&lt;/strong&gt; The Copilot CLI didn't just write code for me; it taught me &lt;em&gt;why&lt;/em&gt; the code worked (or didn't).&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The "Hello World" Moment
&lt;/h3&gt;

&lt;p&gt;I started with an empty folder and didn't even know the command to initialize a Rust project.&lt;br&gt;
&lt;strong&gt;Prompt:&lt;/strong&gt; &lt;code&gt;how to initialize a new rust project named dev-dashboard&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Result:&lt;/strong&gt; It gave me &lt;code&gt;cargo new dev-dashboard&lt;/code&gt; immediately. I was up and running in seconds.&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%2Fad8rzy8dan56jixx6eci.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%2Fad8rzy8dan56jixx6eci.png" alt="how to initialize a new rust project named dev-dashboard" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Overcoming the "Generic" Hallucination
&lt;/h3&gt;

&lt;p&gt;This was the most valuable interaction. I used the &lt;code&gt;ratatui&lt;/code&gt; library for the UI, but the code Copilot initially suggested threw a complex compilation error:&lt;br&gt;
&lt;code&gt;error[E0107]: struct takes 0 generic arguments but 1 generic argument was supplied&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsre88tljcnnr8153k0f4.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%2Fsre88tljcnnr8153k0f4.png" alt="struct takes 0 generic arguments but 1 generic argument was supplied" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of pasting this into Google, I asked the CLI:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; &lt;code&gt;struct takes 0 generic arguments but 1 generic argument was supplied&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; Copilot correctly identified that the library version I installed had a breaking API change (&lt;code&gt;Frame&amp;lt;B&amp;gt;&lt;/code&gt; became just &lt;code&gt;Frame&lt;/code&gt;). It explained the difference, and while its initial code fix was slightly aggressive (it removed generics from &lt;em&gt;everything&lt;/em&gt;), the explanation gave me enough context to manually fix the &lt;code&gt;Terminal&lt;/code&gt; struct generics while simplifying the &lt;code&gt;Frame&lt;/code&gt; struct. It turned a potential 2-hour debugging session into a 5-minute fix.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. From Text to "Eye Candy"
&lt;/h3&gt;

&lt;p&gt;Initially, my dashboard was just text blocks. I wanted it to look professional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; &lt;code&gt;"Update the ui function. Instead of displaying CPU Usage as simple text, use the ratatui::widgets::Gauge widget. Set the percent to app.cpu_usage and color it Cyan."&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It instantly scaffolded the &lt;code&gt;Gauge&lt;/code&gt; widget code, giving me professional-looking progress bars without me needing to read the entire documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The DevOps Bonus
&lt;/h3&gt;

&lt;p&gt;I didn't want users to have to compile the code themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; &lt;code&gt;"Create a GitHub Actions workflow file named .github/workflows/release.yml to build the project on push."&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Copilot generated a perfect YAML file. Now, every time I push code, GitHub Actions automatically compiles my Rust binary and uploads it as an artifact.&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%2Fycw42nmaptpprfp4vp5z.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%2Fycw42nmaptpprfp4vp5z.png" alt="Copilot generated a perfect Github Action workflow" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt; bridged the gap between my JavaScript knowledge and Rust's strict environment. It allowed me to build a tool that I actually use now—if only to remind me to clean up my hard drive (seriously, only 7GB left!).&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>How I Improved Email Rendering Performance 15x Using Rust + WebAssembly (Next.js 16 Devlog)</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Fri, 13 Feb 2026 10:41:57 +0000</pubDate>
      <link>https://forem.com/sanjaysah/how-i-improved-email-rendering-performance-15x-using-rust-webassembly-nextjs-16-devlog-2hml</link>
      <guid>https://forem.com/sanjaysah/how-i-improved-email-rendering-performance-15x-using-rust-webassembly-nextjs-16-devlog-2hml</guid>
      <description>&lt;p&gt;I decided to do something scary: Build a SaaS product in public, from scratch, sharing every win and every embarrassing error log along the way.&lt;/p&gt;

&lt;p&gt;The product is &lt;strong&gt;Ansomail&lt;/strong&gt;—an AI-powered drag-and-drop email editor.&lt;br&gt;
The goal? To build a tool where Developers set the rules (Design System) and Marketers just drag-and-drop blocks, without ever breaking the layout.&lt;/p&gt;

&lt;p&gt;Here is the unvarnished truth of my first week: battling the "bleeding edge" tax of Next.js 16, crashing my database, and eventually rewriting my engine in Rust for a 15x speed boost.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;The Stack: Betting on Speed&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I didn't want a legacy stack. I wanted speed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Runtime:&lt;/strong&gt; Bun (for instant startup)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework:&lt;/strong&gt; Next.js 16 (Turbopack)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monorepo:&lt;/strong&gt; Turborepo (preparing for the &lt;code&gt;Ansospace&lt;/code&gt; ecosystem)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; Postgres + Drizzle ORM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linting:&lt;/strong&gt; Biome (Farewell, ESLint)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It looked perfect on paper. Then I started coding.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Days 1-2: The Architecture &amp;amp; The "AI Architect"&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The first challenge wasn't code; it was philosophy. How do you stop an AI from generating broken HTML?&lt;/p&gt;

&lt;p&gt;Most AI builders treat LLMs like creative writers. I decided to treat them like &lt;strong&gt;Strict Architects&lt;/strong&gt;. I set up a system where the AI's output is validated against a rigid &lt;strong&gt;JSON Schema&lt;/strong&gt;. If the AI hallucinates a CSS class that doesn't exist in my system, the update is rejected before it ever hits the UI.&lt;/p&gt;

&lt;p&gt;I also set up the "Hello World" of modern SaaS: An empty repo configured with Biome and Bun. It was clean, fast, and satisfying.&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%2Fi0f0cf4mpr9jes3gcjth.jpg" 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%2Fi0f0cf4mpr9jes3gcjth.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Days 3-4: The "Bleeding Edge" Tax&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Then came the pain.&lt;/p&gt;

&lt;p&gt;I hit what I call the "Bleeding Edge Tax." Next.js 16 and Bun are incredible, but they don't always play nice together. My dev server started crashing on hot reloads.&lt;/p&gt;

&lt;p&gt;And then, I killed my database. 💀&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%2Fm5c00nyvihmxodxf5edd.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%2Fm5c00nyvihmxodxf5edd.png" alt="FATAL: sorry, too many clients already"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I started getting the dreaded error:&lt;br&gt;
&lt;code&gt;FATAL: sorry, too many clients already&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Because I'm using a serverless environment, every hot reload was opening a new connection to Postgres without closing the old one. My database choked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; I had to implement strict &lt;strong&gt;Connection Pooling&lt;/strong&gt;. It was a harsh reminder that "Serverless" doesn't mean "Ops-less." Once I capped the active connections, the backend stabilized, and I shipped the "My Templates" dashboard.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Days 5-6: Chasing the "Google Docs" Feel&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;With the backend stable, I moved to UX. I wanted a "Rename Template" feature that felt like Google Docs—instant.&lt;/p&gt;

&lt;p&gt;I implemented &lt;strong&gt;Optimistic UI&lt;/strong&gt;. When a user types, the UI updates immediately. The server validates it in the background. If it fails, we revert. If it works, the user never notices the lag.&lt;/p&gt;

&lt;p&gt;

&lt;iframe class="tweet-embed" id="tweet-2021209854837158185-500" src="https://platform.twitter.com/embed/Tweet.html?id=2021209854837158185"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2021209854837158185-500');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2021209854837158185&amp;amp;theme=dark"
  }





&lt;/p&gt;

&lt;p&gt;I also built the first version of the &lt;strong&gt;Rendering Engine&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;DB stores JSON.&lt;/li&gt;
&lt;li&gt;Parser converts JSON → MJML.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mjml-browser&lt;/code&gt; converts MJML → HTML.&lt;/li&gt;
&lt;li&gt;Result renders in an iframe.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It worked. But it was slow. &lt;strong&gt;~18ms&lt;/strong&gt; per render. For a drag-and-drop tool, that felt sluggish.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Day 7: The Rust Rewrite (15x Speed Boost)&lt;/strong&gt; 🚀
&lt;/h2&gt;

&lt;p&gt;I couldn't settle for 18ms. I knew &lt;code&gt;mjml-browser&lt;/code&gt; (Pure JS) was the bottleneck.&lt;/p&gt;

&lt;p&gt;So, I did something drastic for a one-week-old project: &lt;strong&gt;I swapped the engine to Rust.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Engine&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ToHtmlResult&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mrml&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;convertMJMLToHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mjmlString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Engine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toHtml&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mjmlString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I integrated &lt;strong&gt;MRML&lt;/strong&gt; (a Rust port of MJML) via WebAssembly.&lt;br&gt;
The integration was tricky—Rust is strict. It refused to compile my "sloppy" JSON that JS had been happily ignoring. It forced me to fix my data structure.&lt;/p&gt;

&lt;p&gt;But once it worked? The results were insane.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JS Engine:&lt;/strong&gt; ~18ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rust (WASM):&lt;/strong&gt; ~1.1ms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;That is a 15x speed increase.&lt;/strong&gt; The preview is now effectively real-time, running at 60fps.&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%2Fsd1tfpcpmqtzs44u3tn5.jpg" 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%2Fsd1tfpcpmqtzs44u3tn5.jpg" alt="That is a 15x speed increase."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What's Next?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Week 1 was about the Foundation. Week 2 is about the &lt;strong&gt;Interaction&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now that I have a 1ms rendering engine, I'm building the actual Drag-and-Drop layer.&lt;/p&gt;

&lt;p&gt;I'm documenting this entire journey daily on X (Twitter). If you're into Next.js, Rust, or just want to see a developer struggle and succeed in real-time, come say hi!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow the journey:&lt;/strong&gt; &lt;a href="https://x.com/hashtag/ansomail?src=hashtag_click" rel="noopener noreferrer"&gt;#ansomail / @ansomail&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Connect with me:&lt;/strong&gt; &lt;a href="https://x.com/sanjaysah101" rel="noopener noreferrer"&gt;x.com/sanjaysah101&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>rust</category>
      <category>webdev</category>
      <category>saas</category>
    </item>
    <item>
      <title>Ansomail Devlog #1: Replacing JavaScript with Rust for 15x Faster Email Rendering (Next.js + WASM)</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Fri, 13 Feb 2026 05:46:06 +0000</pubDate>
      <link>https://forem.com/sanjaysah/ansomail-devlog-1-replacing-javascript-with-rust-for-15x-faster-email-rendering-nextjs-wasm-3h82</link>
      <guid>https://forem.com/sanjaysah/ansomail-devlog-1-replacing-javascript-with-rust-for-15x-faster-email-rendering-nextjs-wasm-3h82</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Ansomail is an AI-powered drag-and-drop email builder I’m building in public. This week, I replaced its JavaScript rendering engine with Rust — and made it 15x faster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I decided to do something scary: build a SaaS product in public, from scratch, sharing every win and every embarrassing error log along the way.&lt;/p&gt;

&lt;p&gt;By Day 4, I had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crashed my database
&lt;/li&gt;
&lt;li&gt;Broken hot reload
&lt;/li&gt;
&lt;li&gt;Built an engine that felt painfully slow
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By Day 7, I had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rewritten the rendering engine in Rust
&lt;/li&gt;
&lt;li&gt;Reduced render time from &lt;strong&gt;~18ms → ~1.1ms&lt;/strong&gt; (~15x faster)
&lt;/li&gt;
&lt;li&gt;Learned that “bleeding edge” stacks come with hidden costs
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is my Week 1 retrospective building &lt;strong&gt;Ansomail&lt;/strong&gt;, an AI-powered drag-and-drop email editor.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Goal: Building a High-Performance AI Email Builder
&lt;/h2&gt;

&lt;p&gt;I’m building an email editor where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers define the &lt;strong&gt;design system&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Marketers drag-and-drop blocks&lt;/li&gt;
&lt;li&gt;AI generates content — but never breaks layout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The constraint: The preview must feel like &lt;strong&gt;Google Docs&lt;/strong&gt;. Instant.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tech Stack: Next.js 16, Bun, Postgres &amp;amp; MJML
&lt;/h2&gt;

&lt;p&gt;I deliberately chose a modern stack optimized for speed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Runtime:&lt;/strong&gt; Bun
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework:&lt;/strong&gt; Next.js 16 (Turbopack)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monorepo:&lt;/strong&gt; Turborepo
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; Postgres + Drizzle ORM
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linting/Formatting:&lt;/strong&gt; Biome
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Initial Rendering Engine:&lt;/strong&gt; &lt;code&gt;mjml-browser&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It looked perfect on paper.&lt;/p&gt;

&lt;p&gt;Then reality happened.&lt;/p&gt;




&lt;h2&gt;
  
  
  Days 1–2: Enforcing AI Output with JSON Schema Validation
&lt;/h2&gt;

&lt;p&gt;The first architectural decision wasn’t about performance.&lt;/p&gt;

&lt;p&gt;It was about control.&lt;/p&gt;

&lt;p&gt;Instead of letting the LLM freely generate HTML, I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forced output into a strict &lt;strong&gt;JSON Schema&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Validated structure before rendering&lt;/li&gt;
&lt;li&gt;Rejected hallucinated classes or invalid styles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the AI generates something outside the system, the update is rejected before it ever touches the UI.&lt;/p&gt;

&lt;p&gt;That constraint will save me months later.&lt;/p&gt;




&lt;h2&gt;
  
  
  Days 3–4: The “Bleeding Edge” Tax (Next.js + Bun Issues)
&lt;/h2&gt;

&lt;p&gt;Using Bun with Next.js 16 is fast — but not always stable.&lt;/p&gt;

&lt;p&gt;Hot reload started &lt;a href="https://github.com/oven-sh/bun/issues/25639" rel="noopener noreferrer"&gt;crashing with cache component errors&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Next.js cannot guarantee that Cache Components will run as expected due to the current runtime&lt;span class="s1"&gt;'s implementation of setTimeout().
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I hit this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;FATAL: sorry, too many clients already
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a serverless dev environment, every hot reload opened a new Postgres connection.&lt;/p&gt;

&lt;p&gt;They weren’t being closed. My database choked.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fixing “Too Many Clients Already” with Proper Connection Pooling
&lt;/h2&gt;

&lt;p&gt;“Serverless” does NOT mean “Ops-less.”&lt;/p&gt;

&lt;p&gt;I implemented strict pooling and ensured a singleton pattern during development:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;drizzle&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drizzle-orm/node-postgres&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Pool&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;schema&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./schema&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;connectionString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;connectionString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DATABASE_URL is missing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;globalForDb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;globalThis&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Pool&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="nx"&gt;globalForDb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pool&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt;
  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Pool&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;connectionString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_MAX_CONNECTIONS&lt;/span&gt;
      &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_MAX_CONNECTIONS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;idleTimeoutMillis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;connectionTimeoutMillis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODE_ENV&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;production&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;globalForDb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;connect&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`🔌 Database: New client connected to the pool; client: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`❌ Database: Unexpected error on idle client; client: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;remove&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`🗑️ Database: Client removed from pool; client: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;drizzle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;schema&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once I capped connections, everything stabilized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Dev hot reload + serverless Postgres can quietly DOS your own app.&lt;/p&gt;




&lt;h2&gt;
  
  
  Days 5–6: Implementing Optimistic UI for Instant Feedback
&lt;/h2&gt;

&lt;p&gt;I implemented &lt;strong&gt;Optimistic UI&lt;/strong&gt; for renaming templates.&lt;br&gt;


&lt;iframe class="tweet-embed" id="tweet-2021209854837158185-995" src="https://platform.twitter.com/embed/Tweet.html?id=2021209854837158185"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2021209854837158185-995');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2021209854837158185&amp;amp;theme=dark"
  }





&lt;/p&gt;

&lt;p&gt;User types → UI updates immediately.&lt;br&gt;
Server validates in the background.&lt;br&gt;
Failure → rollback.&lt;br&gt;
Success → seamless.&lt;/p&gt;

&lt;p&gt;That part worked beautifully.&lt;/p&gt;

&lt;p&gt;But the real bottleneck was rendering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Initial Rendering Pipeline (JavaScript + MJML)
&lt;/h2&gt;

&lt;p&gt;The original rendering pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;JSON stored in DB&lt;/li&gt;
&lt;li&gt;JSON → MJML&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mjml-browser&lt;/code&gt; converts MJML → HTML&lt;/li&gt;
&lt;li&gt;HTML rendered inside an iframe&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;But it averaged &lt;strong&gt;~18ms per render&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For a drag-and-drop email builder, that felt sluggish.&lt;/p&gt;




&lt;h2&gt;
  
  
  Day 7: Replacing JavaScript with Rust + WebAssembly
&lt;/h2&gt;

&lt;p&gt;The bottleneck was &lt;code&gt;mjml-browser&lt;/code&gt; (pure JavaScript).&lt;/p&gt;

&lt;p&gt;So I replaced it.&lt;/p&gt;

&lt;p&gt;I integrated &lt;strong&gt;&lt;a href="https://www.npmjs.com/package/mrml" rel="noopener noreferrer"&gt;MRML&lt;/a&gt;&lt;/strong&gt; (a Rust port of MJML) compiled to &lt;strong&gt;WebAssembly (WASM)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rust → predictable performance&lt;/li&gt;
&lt;li&gt;MRML → faster MJML parsing&lt;/li&gt;
&lt;li&gt;WASM → near-native speed in the browser&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Rust Integration Challenges
&lt;/h2&gt;

&lt;p&gt;Rust does not tolerate “almost correct.”&lt;/p&gt;

&lt;p&gt;It refused to compile my “sloppy” JSON that JavaScript had been happily ignoring.&lt;/p&gt;

&lt;p&gt;It forced me to fix my data structures.&lt;/p&gt;

&lt;p&gt;That strictness improved my architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  Performance Results: 15x Faster Email Rendering
&lt;/h2&gt;

&lt;p&gt;After integrating MRML via WASM:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript Engine:&lt;/strong&gt; ~18ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rust (WASM) Engine:&lt;/strong&gt; ~1.1ms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s roughly a &lt;strong&gt;15x performance improvement&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The preview now runs comfortably within a 16ms frame budget — effectively real-time at 60fps.&lt;/p&gt;




&lt;h2&gt;
  
  
  Unexpected Benefits of Moving to Rust
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Cleaner schema enforcement&lt;/li&gt;
&lt;li&gt;Deterministic parsing&lt;/li&gt;
&lt;li&gt;Smaller rendering bottleneck surface&lt;/li&gt;
&lt;li&gt;Future-proof performance foundation&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Lessons Learned Building a SaaS in Public (Week 1)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Bleeding-edge stacks save time — until they don’t.&lt;/li&gt;
&lt;li&gt;Serverless still requires backend discipline.&lt;/li&gt;
&lt;li&gt;Rust’s strictness is a feature, not friction.&lt;/li&gt;
&lt;li&gt;Early performance decisions compound.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What’s Next for Ansomail?
&lt;/h2&gt;

&lt;p&gt;Week 1 was about the foundation.&lt;/p&gt;

&lt;p&gt;Week 2 is about interaction.&lt;/p&gt;

&lt;p&gt;Now that I have a ~1ms rendering engine, I’m building the actual drag-and-drop layer on top of it.&lt;/p&gt;

&lt;p&gt;I’m documenting this entire journey publicly.&lt;/p&gt;

&lt;p&gt;If you're building with Next.js, Rust, WebAssembly, or experimenting with high-performance SaaS architecture — I’d love to connect.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ansomail is currently in development. If you're a developer or marketer who struggles with email design systems, I’d love to talk.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>nextjs</category>
      <category>rust</category>
      <category>webdev</category>
      <category>saas</category>
    </item>
    <item>
      <title>SanjayOS: I Built an AI-Powered Operating System for My Portfolio 🚀</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Thu, 29 Jan 2026 10:08:32 +0000</pubDate>
      <link>https://forem.com/sanjaysah/sanjayos-i-built-an-ai-powered-operating-system-for-my-portfolio-3bih</link>
      <guid>https://forem.com/sanjaysah/sanjayos-i-built-an-ai-powered-operating-system-for-my-portfolio-3bih</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/new-year-new-you-google-ai-2025-12-31"&gt;New Year, New You Portfolio Challenge Presented by Google AI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;Hi there! 👋 I'm Sanjay Sah, a Software Engineer based in India (originally from Nepal) with over two years of experience building high-performance web applications. I currently work at Zuru Tech, where I focus on the MERN stack, Next.js, and crafting smooth user experiences.&lt;/p&gt;

&lt;p&gt;I've always felt that standard portfolio websites are... well, a bit static. They tell you about a developer, but they don't show you how they think.&lt;/p&gt;

&lt;p&gt;For this challenge, I wanted to break that mold. I wanted to express my love for complex systems, retro aesthetics, and cutting-edge AI. My goal was to build a portfolio that isn't just a document you read, but a system you explore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;Welcome to SanjayOS v1.0 — an AI-native Developer Operating System.&lt;/p&gt;

&lt;p&gt;Instead of navigating a menu, you boot into a desktop environment. You can drag windows, run terminal commands, and interact with an intelligent system core.&lt;/p&gt;

&lt;p&gt;Go ahead, give it a spin! The entire OS is running serverless on Google Cloud Run.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://sanjay-os-46103652818.us-central1.run.app/"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;p&gt;&lt;em&gt;(If the interactive embed above doesn't load fully, you can &lt;a href="https://sanjay-os-46103652818.us-central1.run.app/" rel="noopener noreferrer"&gt;launch SanjayOS in a new tab here&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Building an "Operating System" in the browser is no small feat. Here is the architecture that powers SanjayOS:&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ The Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framework:&lt;/strong&gt; &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 16&lt;/a&gt; (App Router) for the core structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime:&lt;/strong&gt; &lt;a href="https://bun.sh/" rel="noopener noreferrer"&gt;Bun&lt;/a&gt; for ultra-fast builds and package management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling:&lt;/strong&gt; &lt;strong&gt;Tailwind CSS&lt;/strong&gt; + &lt;strong&gt;Shadcn/ui&lt;/strong&gt; (heavily customized for that "Glassmorphism" OS look).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Management:&lt;/strong&gt; &lt;strong&gt;Zustand&lt;/strong&gt; to handle the complex window manager logic (z-indexing, minimizing, focusing apps).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Dockerized and hosted on &lt;strong&gt;Google Cloud Run&lt;/strong&gt; to handle Server-Side Rendering (SSR) while scaling to zero when idle.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧠 The Google AI &amp;amp; Antigravity Workflow
&lt;/h3&gt;

&lt;p&gt;The heart of SanjayOS is &lt;strong&gt;Google Gemini 2.5 Flash&lt;/strong&gt;, integrated via the &lt;strong&gt;Vercel AI SDK&lt;/strong&gt;. But the &lt;em&gt;construction&lt;/em&gt; of this complex system was accelerated by &lt;strong&gt;Google Antigravity&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built with Antigravity:&lt;/strong&gt; I used Google's &lt;strong&gt;Antigravity&lt;/strong&gt; (AI-first IDE) to scaffold the complex window management logic and rapidly prototype the Generative UI components. It acted as my "pair programmer," helping me integrate the Gemini API correctly and ensuring my prompt engineering was optimized for tool calling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System Instructions:&lt;/strong&gt; I fed the AI a structured JSON context of my entire career (resume, projects, skills). This means no RAG vector database was needed—Gemini's massive context window handles it all in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool Calling:&lt;/strong&gt; The AI has permission to "control" the OS. If you ask, &lt;em&gt;"Show me Sanjay's projects,"&lt;/em&gt; Gemini doesn't just write a list; it executes a function to &lt;strong&gt;launch the Project Viewer app&lt;/strong&gt; automatically.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;There are three specific achievements I'm thrilled with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The "Alive" Feeling:&lt;/strong&gt; The moment you realize the AI isn't just a text box—it's the &lt;strong&gt;OS Kernel&lt;/strong&gt;. Seeing the AI open windows and highlight UI elements based on a conversation feels like the future of web interfaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Window Manager:&lt;/strong&gt; Building a performant, draggable, resizable window system in React was a complex challenge. Solving the "z-index stacking" (ensuring the clicked window always comes to the front) without causing re-renders was a great engineering puzzle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Cloud Run Deployment:&lt;/strong&gt; Getting a Next.js Docker container to run smoothly on Cloud Run with the correct &lt;code&gt;standalone&lt;/code&gt; output and environment variables was a huge win. It proves that personal portfolios can be both high-tech and cost-effective.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I hope you enjoy exploring &lt;strong&gt;SanjayOS&lt;/strong&gt; as much as I enjoyed building it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy Hacking!&lt;/strong&gt; 💻✨&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
    <item>
      <title>🎉 From Hackathon Idea to Super Contributor — My Hacktoberfest 2025 Journey</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Tue, 14 Oct 2025 06:55:31 +0000</pubDate>
      <link>https://forem.com/sanjaysah/from-hackathon-idea-to-super-contributor-my-hacktoberfest-2025-journey-1g9m</link>
      <guid>https://forem.com/sanjaysah/from-hackathon-idea-to-super-contributor-my-hacktoberfest-2025-journey-1g9m</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest"&gt;2025 Hacktoberfest Writing Challenge&lt;/a&gt;: Open Source Reflections&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hackathons build projects. Open source builds people.” 💡&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hey everyone 👋 I’m &lt;strong&gt;Sanjay Kumar Sah&lt;/strong&gt;, and this Hacktoberfest was more than just a coding challenge — it was a &lt;em&gt;journey of growth, collaboration, and community.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I started with a small idea from a hackathon project, and ended up becoming a &lt;strong&gt;Super Contributor&lt;/strong&gt; with &lt;strong&gt;6 merged PRs&lt;/strong&gt;, &lt;strong&gt;open-source growth&lt;/strong&gt;, and even the official &lt;strong&gt;Hacktoberfest T-shirt! 🎽&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s the story 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  🌱 The Beginning: Humanizing AI Text
&lt;/h2&gt;

&lt;p&gt;It all began with the &lt;a href="https://aihumanizehack.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Humanizing AI Text Hackathon&lt;/strong&gt;&lt;/a&gt;, organized by &lt;a href="https://raptors.dev" rel="noopener noreferrer"&gt;Hackathon Raptors&lt;/a&gt;.&lt;br&gt;
My goal was simple but exciting:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make AI-generated text feel more human — natural, emotional, and contextual.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The result?&lt;br&gt;
My project &lt;strong&gt;&lt;a href="https://github.com/sanjaysah101/humanize-ai" rel="noopener noreferrer"&gt;Humanize-AI&lt;/a&gt;&lt;/strong&gt; was born.&lt;/p&gt;

&lt;p&gt;And guess what — it &lt;strong&gt;ranked 3rd place! 🥉&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%2F5xlqsjzrbguek4ke6ada.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%2F5xlqsjzrbguek4ke6ada.png" alt="Certificate of Appreciation" width="634" height="890"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That recognition gave me the push to take it further — beyond the hackathon and into the &lt;strong&gt;open-source world&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Turning a Hackathon Project into an Open-Source Repo
&lt;/h2&gt;

&lt;p&gt;After the hackathon, I decided to open-source &lt;strong&gt;Humanize-AI&lt;/strong&gt; so others could contribute, improve, and learn from it.&lt;/p&gt;

&lt;p&gt;The response was incredible:&lt;br&gt;
⭐ &lt;strong&gt;26 stars&lt;/strong&gt;&lt;br&gt;
🍴 &lt;strong&gt;19 forks&lt;/strong&gt;&lt;br&gt;
💬 and real collaboration from developers around the world.&lt;/p&gt;

&lt;p&gt;It was the first time I saw how powerful open source can be — how a small idea can grow when shared publicly.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Open source isn’t just about publishing your code — it’s about building a community around your ideas.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🤝 From Contributor → Collaborator
&lt;/h2&gt;

&lt;p&gt;This year, I also became an official &lt;strong&gt;contributor at &lt;a href="https://github.com/NexGenStudioDev" rel="noopener noreferrer"&gt;NexGenStudioDev&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But instead of just submitting PRs, I started doing &lt;strong&gt;code reviews&lt;/strong&gt; — and that changed everything.&lt;/p&gt;

&lt;p&gt;Reviewing others’ code helped me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand new perspectives 👀&lt;/li&gt;
&lt;li&gt;Learn clean coding practices 💡&lt;/li&gt;
&lt;li&gt;Communicate better as a developer 🧠&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Writing code makes you a contributor.&lt;br&gt;
Reviewing code makes you a collaborator.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’ve never reviewed a PR before, I highly recommend it.&lt;br&gt;
It’s the fastest way to level up your technical and communication skills.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏁 The Finish Line: Super Contributor Badge
&lt;/h2&gt;

&lt;p&gt;Completing &lt;strong&gt;6 pull requests&lt;/strong&gt; this Hacktoberfest earned me the &lt;strong&gt;Super Contributor Badge 🏅&lt;/strong&gt; — and the classic &lt;strong&gt;Hacktoberfest T-shirt 🎽&lt;/strong&gt; (the best kind of swag 😄).&lt;/p&gt;

&lt;p&gt;But beyond the badge and T-shirt, what I really earned was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confidence to contribute anywhere 💪&lt;/li&gt;
&lt;li&gt;Deeper respect for maintainers 🛠️&lt;/li&gt;
&lt;li&gt;And lifelong connections in the developer community 🌐&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 What I Learned Along the Way
&lt;/h2&gt;

&lt;p&gt;Here are my top takeaways from this journey:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start small.&lt;/strong&gt;&lt;br&gt;
You don’t need a huge project — even a simple idea can inspire others.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open-source early.&lt;/strong&gt;&lt;br&gt;
Don’t wait for perfection. Share your work and invite collaboration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Review more.&lt;/strong&gt;&lt;br&gt;
Reviewing others’ code teaches you more than writing your own.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Engage with the community.&lt;/strong&gt;&lt;br&gt;
Hacktoberfest is about people, not just pull requests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Celebrate progress.&lt;/strong&gt;&lt;br&gt;
Every PR, every merge, every star — it all counts. 🎉&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  💬 What’s Next?
&lt;/h2&gt;

&lt;p&gt;I plan to keep improving &lt;strong&gt;Humanize-AI&lt;/strong&gt; with new features and better humanization techniques for AI-generated text.&lt;br&gt;
If you’re interested in NLP, prompt engineering, or AI communication — I’d love to collaborate!&lt;/p&gt;

&lt;p&gt;👉 Check it out here: &lt;a href="https://github.com/sanjaysah101/humanize-ai" rel="noopener noreferrer"&gt;github.com/sanjaysah101/humanize-ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you’re preparing for &lt;strong&gt;Hacktoberfest 2026&lt;/strong&gt;, here’s my advice:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don’t just aim to complete PRs — aim to connect, learn, and give back.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🫶 Thanks to the Community
&lt;/h2&gt;

&lt;p&gt;A huge shoutout to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/NexGenStudioDev" rel="noopener noreferrer"&gt;@NexGenStudioDev&lt;/a&gt; team&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/company/hackathon-raptors/" rel="noopener noreferrer"&gt;Hackathon Raptors&lt;/a&gt; organizers for Humanizing AI Text&lt;/li&gt;
&lt;li&gt;Every contributor who starred, forked, or opened an issue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You all made this journey memorable.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏆 TL;DR – My Hacktoberfest 2025 in Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Highlights&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hackathon&lt;/td&gt;
&lt;td&gt;Humanizing AI Text (Ranked 3rd 🥉)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repo&lt;/td&gt;
&lt;td&gt;26+⭐ + 19+🍴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contributions&lt;/td&gt;
&lt;td&gt;6+ PRs merged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Roles&lt;/td&gt;
&lt;td&gt;Contributor + Reviewer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rewards&lt;/td&gt;
&lt;td&gt;Super Contributor Badge 🏅 + Official T-shirt 🎽&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  💌 Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Hacktoberfest isn’t just a celebration of code — it’s a celebration of collaboration.&lt;br&gt;
If you’ve ever hesitated to start, remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The best time to contribute to open source was yesterday. The next best time is today.”&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Meet Apicraft – A Zero-Dependency CLI that Replaces Postman, curl, and Mock Servers</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Wed, 01 Oct 2025 12:58:04 +0000</pubDate>
      <link>https://forem.com/sanjaysah/meet-apicraft-a-zero-dependency-cli-that-replaces-postman-curl-and-mock-servers-oic</link>
      <guid>https://forem.com/sanjaysah/meet-apicraft-a-zero-dependency-cli-that-replaces-postman-curl-and-mock-servers-oic</guid>
      <description>&lt;p&gt;🎨 Introducing Apicraft – A Unified CLI for the Complete API Development Lifecycle  &lt;/p&gt;

&lt;p&gt;If you’re a developer who lives in the terminal, chances are you juggle multiple tools:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;curl&lt;/code&gt; for quick requests
&lt;/li&gt;
&lt;li&gt;Postman or Insomnia for testing and environments
&lt;/li&gt;
&lt;li&gt;Mock servers for frontend dev
&lt;/li&gt;
&lt;li&gt;And maybe code snippets for fetch/axios
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wouldn’t it be great if you could do &lt;strong&gt;all of that in one CLI tool&lt;/strong&gt; — with &lt;strong&gt;zero dependencies&lt;/strong&gt;?  &lt;/p&gt;

&lt;p&gt;That’s exactly why I built &lt;strong&gt;&lt;a href="https://www.npmjs.com/package/@ansospace/apicraft" rel="noopener noreferrer"&gt;Apicraft&lt;/a&gt;&lt;/strong&gt; 🚀  &lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ What is Apicraft?
&lt;/h2&gt;

&lt;p&gt;Apicraft is a unified CLI tool for API development. It handles everything from testing to mocking to code generation — all inside your terminal.  &lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;🚀 Send beautifully formatted HTTP requests (GET, POST, PUT, DELETE, PATCH)
&lt;/li&gt;
&lt;li&gt;🔧 Manage environments (dev/prod) and use variable interpolation
&lt;/li&gt;
&lt;li&gt;💾 Save &amp;amp; replay requests (never retype the same curl again!)
&lt;/li&gt;
&lt;li&gt;📜 Track request history and replay any request
&lt;/li&gt;
&lt;li&gt;🎭 Spin up mock servers from JSON files instantly
&lt;/li&gt;
&lt;li&gt;🔄 Generate fetch/axios/curl code from requests
&lt;/li&gt;
&lt;li&gt;⚡ Zero dependencies — pure Node.js built-ins
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Quick Start
&lt;/h2&gt;

&lt;p&gt;Install globally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @ansospace/apicraft
&lt;span class="c"&gt;# or&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @ansospace/apicraft
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apicraft get https://api.github.com/users/sanjaysah101
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set environments:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apicraft &lt;span class="nb"&gt;set &lt;/span&gt;baseUrl https://api.example.com
apicraft get &lt;span class="o"&gt;{{&lt;/span&gt;baseUrl&lt;span class="o"&gt;}}&lt;/span&gt;/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎭 Mock Server Example
&lt;/h2&gt;

&lt;p&gt;Need a quick backend while your team builds APIs? Just drop JSON files in a folder and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apicraft mock ./mocks 3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🏆 Why Apicraft?
&lt;/h2&gt;

&lt;p&gt;Unlike Postman, curl, or httpie — Apicraft is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLI-native&lt;/li&gt;
&lt;li&gt;Zero-dependency&lt;/li&gt;
&lt;li&gt;Git-friendly (config in version control)&lt;/li&gt;
&lt;li&gt;Includes built-in mocking + code generation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Why I Built This
&lt;/h2&gt;

&lt;p&gt;I created Apicraft for the &lt;strong&gt;&lt;a href="https://100lines.dev/" rel="noopener noreferrer"&gt;100lines.dev Hackathon&lt;/a&gt;&lt;/strong&gt; with a strict &lt;strong&gt;300-line limit&lt;/strong&gt;. That constraint forced me to focus only on features that matter most — and make them as compact and efficient as possible.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Try it Out
&lt;/h2&gt;

&lt;p&gt;👉 Install from npm: &lt;a href="https://www.npmjs.com/package/@ansospace/apicraft" rel="noopener noreferrer"&gt;@ansospace/apicraft&lt;/a&gt;&lt;br&gt;
👉 GitHub repo: &lt;a href="https://github.com/sanjaysah101/apicraft" rel="noopener noreferrer"&gt;github.com/sanjaysah101/apicraft&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love to hear your thoughts — what would make this CLI even more useful for your workflow? 🚀&lt;/p&gt;

</description>
      <category>postman</category>
      <category>cli</category>
      <category>node</category>
      <category>api</category>
    </item>
    <item>
      <title>FlagFeed: Gamified Tech Learning with Feature Flags 🚀</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Tue, 17 Dec 2024 16:12:27 +0000</pubDate>
      <link>https://forem.com/sanjaysah/flagfeed-gamified-tech-learning-with-feature-flags-189j</link>
      <guid>https://forem.com/sanjaysah/flagfeed-gamified-tech-learning-with-feature-flags-189j</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/devcycle"&gt;DevCycle Feature Flag Challenge&lt;/a&gt;: Feature Flag Funhouse&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Overview
&lt;/h2&gt;

&lt;p&gt;FlagFeed is a developer-focused learning platform powered by DevCycle feature flags that combines RSS feed curation with gamification. It helps developers stay updated with tech content through personalized RSS feeds while making learning engaging through gamification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features ✨
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Core Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;📚 Curated tech RSS feeds with real-time updates&lt;/li&gt;
&lt;li&gt;🎮 Learn-and-earn points system&lt;/li&gt;
&lt;li&gt;🚀 Progressive feature rollouts&lt;/li&gt;
&lt;li&gt;✅ Real-time quiz competitions&lt;/li&gt;
&lt;li&gt;🔄 Real-time subscriptions&lt;/li&gt;
&lt;li&gt;🔐 Row Level Security Implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Feature Flags (DevCycle)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔄 Advanced feed filtering&lt;/li&gt;
&lt;li&gt;🏆 Gamification elements&lt;/li&gt;
&lt;li&gt;📊 Learning Analytics&lt;/li&gt;
&lt;li&gt;🎯 Personalized content&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech Stack 💻
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend &amp;amp; Backend&lt;/strong&gt;: Next.js 15&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: PostgreSQL with Prisma ORM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature Flags&lt;/strong&gt;: DevCycle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Vercel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling&lt;/strong&gt;: Tailwind CSS with shadcn/ui&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Feature Flags Enhance the Experience 🎯
&lt;/h2&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%2Fz1ak6u1k5bb2ah96ulng.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%2Fz1ak6u1k5bb2ah96ulng.png" alt="Devcycle features flag list" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Progressive Feature Rollouts&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Gradually introduce new features like advanced quiz modes&lt;/li&gt;
&lt;li&gt;Test UI/UX changes with specific user segments&lt;/li&gt;
&lt;li&gt;Enable experimental personalization algorithms&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Gamification Controls&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Toggle gamification elements like points, badges, and leaderboards&lt;/li&gt;
&lt;li&gt;Control difficulty levels and rewards&lt;/li&gt;
&lt;li&gt;Enable special events and challenges&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Learning Personalization&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Toggle AI-powered content recommendations&lt;/li&gt;
&lt;li&gt;Control adaptive quiz difficulty&lt;/li&gt;
&lt;li&gt;Enable social learning features&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Performance &amp;amp; UX&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Control real-time updates frequency&lt;/li&gt;
&lt;li&gt;Toggle advanced filtering options&lt;/li&gt;
&lt;li&gt;Manage resource-intensive features&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/I7YmuUNSm18"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation Details 🛠️
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Feature Flag Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FLAGS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;ANALYTICS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;ENABLED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;analytics-enabled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;GAMIFICATION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;ENABLED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gamification-enabled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;POINT_BOOST&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gamification-point-boost&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;STREAKS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gamification-reading-streaks&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;ACHIEVEMENTS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gamification-achievements&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;LEADERBOARD&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gamification-leaderboard&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;DAILY_CHALLENGES&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gamification-daily-challenges&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;RSS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;ADVANCED_FILTERING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rss-advanced-filtering&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;SMART_CATEGORIZATION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rss-smart-categorization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;LEARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;ADAPTIVE_QUIZZES&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;learning-adaptive-quizzes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;LIVE_QUIZZES&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;learning-live-quizzes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;NEW_FEED_LAYOUT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ui-new-feed-layout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;FEED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;REALTIME_UPDATES&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;feed-realtime-updates&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;AI_RECOMMENDATIONS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;feed-ai-recommendations&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Feature Flag Usage Examples
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example 1: Gamification Features&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;GamificationHub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hasAchievements&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useVariableValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;FLAGS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GAMIFICATION&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ACHIEVEMENTS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hasLeaderboard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useVariableValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;FLAGS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GAMIFICATION&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LEADERBOARD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;space-y-4&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;hasAchievements&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Achievements&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;hasLeaderboard&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Leaderboard&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Example 2: Adaptive Learning&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Quiz&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;articleId&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;QuizProps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isAdaptive&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useVariableValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;FLAGS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LEARNING&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ADAPTIVE_QUIZZES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;difficulty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;isAdaptive&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nf"&gt;calculateUserLevel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;normal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;QuizContent&lt;/span&gt; &lt;span class="nx"&gt;difficulty&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;difficulty&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Live Demo &amp;amp; Repository 🌐
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Demo&lt;/strong&gt;: &lt;a href="https://flag-feed.vercel.app" rel="noopener noreferrer"&gt;FlagFeed Demo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/sanjaysah101/flag-feed" rel="noopener noreferrer"&gt;GitHub - FlagFeed&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/8ZxI4d8mcuI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Enhancements 🔮
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;AI Integration&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Smart content recommendations&lt;/li&gt;
&lt;li&gt;Automated quiz generation&lt;/li&gt;
&lt;li&gt;Personalized learning paths&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Social Features&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Reading rooms&lt;/li&gt;
&lt;li&gt;Collaborative annotations&lt;/li&gt;
&lt;li&gt;Team challenges&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Analytics&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Learning pattern analysis&lt;/li&gt;
&lt;li&gt;Feature usage tracking&lt;/li&gt;
&lt;li&gt;A/B testing insights&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion 🎉
&lt;/h2&gt;

&lt;p&gt;FlagFeed demonstrates how feature flags can enhance the learning experience by enabling progressive rollouts, personalization, and experimental features. Using DevCycle's feature flag system, we've created a platform that can evolve based on user feedback and usage patterns.&lt;/p&gt;

</description>
      <category>devcyclechallenge</category>
      <category>nextjs</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How I Won the RetroAI Hackathon 2024: My Solo Journey</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Fri, 18 Oct 2024 17:54:36 +0000</pubDate>
      <link>https://forem.com/sanjaysah/how-i-won-the-retroai-hackathon-2024-my-solo-journey-2e0n</link>
      <guid>https://forem.com/sanjaysah/how-i-won-the-retroai-hackathon-2024-my-solo-journey-2e0n</guid>
      <description>&lt;p&gt;Participating in the RetroAI Hackathon 2024 was a thrilling experience, and I’m excited to share how I secured 3rd place as a solo participant. Competing against some of the best minds in AI and text-based game development, I learned a lot and developed a project I’m proud of. Here’s a breakdown of my journey, my project, and some tips that could help you succeed in your next hackathon.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7251292177731911682/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fc45fy346jw096z9pbphyyhdz7" height="800" class="m-0" width="1400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7251292177731911682/" rel="noopener noreferrer" class="c-link"&gt;
            3rd place in the Retro Quest Hackathon | Sanjay Kumar Sah
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            I’m happy 😊 to share that I’ve secured 3rd place in the RetroAI Quest Hackathon from Hackathon Raptors!

Here is my work: https://lnkd.in/dmafwvVY
Github: https://lnkd.in/dk86zYPZ
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  About the RetroAI Hackathon
&lt;/h2&gt;

&lt;p&gt;The RetroAI Hackathon is a competitive event focusing on developing AI-driven text adventure games. Participants were challenged to create innovative projects using AI and text-based storytelling. You can learn more about the hackathon &lt;a href="https://textadventurehack.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Competing as a solo participant, I aimed to create something unique and impactful.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Project: RetroAI Quest
&lt;/h2&gt;

&lt;p&gt;For this hackathon, I developed &lt;code&gt;RetroAI Quest&lt;/code&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sanjaysah101" rel="noopener noreferrer"&gt;
        sanjaysah101
      &lt;/a&gt; / &lt;a href="https://github.com/sanjaysah101/RetroAI-Quest" rel="noopener noreferrer"&gt;
        RetroAI-Quest
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      RetroAI quest is a terminal-based, AI-powered text adventure game. Embark on a retro-style, interactive fiction journey where you control the story using natural language commands, experience dynamic story generation, and make decisions that shape your path.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;RetroAI quest&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;RetroAI quest&lt;/strong&gt; is a terminal-based, AI-powered text adventure game. Embark on a retro-style, interactive fiction journey where you control the story using natural language commands, experience dynamic story generation, and make decisions that shape your path. Powered by artificial intelligence, every game play session offers a unique experience with multiple branching storylines, AI-driven character interactions, and multiple possible endings.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terminal-Based Interface:&lt;/strong&gt; Classic text adventure interface with retro-inspired design and terminal commands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-Powered Dynamic Storytelling:&lt;/strong&gt; The game generates new events and character responses in real-time using AI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple Branching Paths:&lt;/strong&gt; Players will encounter multiple decision points leading to different outcomes, adding replayability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retro-Inspired Aesthetic:&lt;/strong&gt; Experience a nostalgic text-based adventure in a terminal interface, complete with retro ASCII art and visual elements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NLP (Natural Language Processing):&lt;/strong&gt; Players can interact with the game using free-form commands instead of rigid text options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replay ability:&lt;/strong&gt; Every play through offers a different story…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/sanjaysah101/RetroAI-Quest" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The idea behind RetroAI Quest was to combine AI and classic text-based gameplay, creating an engaging story where AI generates dynamic narratives based on player choices.Focus on crafting engaging narratives and innovative AI interactions within a text-only format. Here’s what I focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Core Concept&lt;/strong&gt;: A text-based adventure game where players interact with AI-generated storylines, making each playthrough unique.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technology Stack&lt;/strong&gt;: I used React and Gemini models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Challenges&lt;/strong&gt;: Fine-tuning the AI for narrative consistency, balancing AI-generated responses with user input, and creating a seamless user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  My Strategy to Win
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Understanding the Theme&lt;/strong&gt;: I dedicated time to thoroughly understanding the hackathon theme and the judges’ expectations, ensuring my project aligned with the criteria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planning &amp;amp; Time Management&lt;/strong&gt;: With a clear timeline, I broke down tasks into manageable milestones, allowing me to focus on coding, testing, and refining the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leveraging AI Tools&lt;/strong&gt;: Using the Gemini model was key to generating dynamic storylines. I ensured the model could handle diverse inputs and maintain a coherent narrative.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Presentation Matters&lt;/strong&gt;: I created a polished demo that highlighted the unique aspects of my project, emphasizing how AI contributed to the gameplay experience.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  10 Tips for Succeeding in a Hackathon
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with a Unique Idea&lt;/strong&gt;: A creative approach helps your project stand out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Know Your Tools&lt;/strong&gt;: Mastering your tech stack before the event gives you an edge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prioritize Key Features&lt;/strong&gt;: Focus on core functionality that aligns with the theme.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time Management is Crucial&lt;/strong&gt;: Break your project into smaller goals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Frequently&lt;/strong&gt;: Catch bugs early to save time during the final stretch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prepare a Solid Pitch&lt;/strong&gt;: A well-prepared presentation can make a huge difference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay Focused&lt;/strong&gt;: Avoid getting sidetracked by less important features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be Ready for Challenges&lt;/strong&gt;: Adapt quickly to technical hurdles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interact with Mentors&lt;/strong&gt;: Use their feedback to refine your project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn from the Experience&lt;/strong&gt;: Each hackathon is a chance to grow and improve.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Participating solo in the RetroAI Hackathon taught me the importance of balancing creativity with technical skills. I gained valuable insights into AI’s role in interactive storytelling and strengthened my project management skills. &lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts and Future Goals
&lt;/h2&gt;

&lt;p&gt;This experience was a significant milestone in my journey as a developer. I’m looking forward to applying the lessons learned to future hackathons and projects. If you’re interested in learning more about RetroAI Quest, check out the &lt;a href="https://github.com/sanjaysah101/RetroAI-Quest" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you found these insights helpful, or if you’ve got questions about hackathons, feel free to leave a comment below! Follow my blog for more stories and tech tips.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>hackathon</category>
      <category>react</category>
    </item>
    <item>
      <title>PIG GAME 🐗</title>
      <dc:creator>Sanjay Kumar Sah</dc:creator>
      <pubDate>Mon, 30 Sep 2024 04:52:45 +0000</pubDate>
      <link>https://forem.com/sanjaysah/pig-game-pde</link>
      <guid>https://forem.com/sanjaysah/pig-game-pde</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/webgame"&gt;Web Game Challenge&lt;/a&gt;, Build a Game: Alien Edition&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built an exciting web game called PIG GAME! It's a simple dice game first described in print by John Scarne in 1945. The game is easy to pick up but requires some strategy and luck to win. I implemented it as a fun exercise to practice HTML, CSS, and JavaScript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Stack 🛠️
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTML5:&lt;/strong&gt; Structuring the basic elements of the game.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS3:&lt;/strong&gt; Styling the game interface for an engaging user experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript (ES6):&lt;/strong&gt; Handling the game logic, dice rolls, and user interactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project was a great opportunity to refine my DOM manipulation skills and event handling in JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  RULES📃TO PLAY GAME
&lt;/h2&gt;

&lt;p&gt;Each turn, a player repeatedly rolls a die until either a 1 is rolled or the player decides to “hold”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the player rolls a 1, they score nothing and it becomes the next player's turn.&lt;/li&gt;
&lt;li&gt;If the player rolls any other number, it is added to their turn total and the player's turn continues.&lt;/li&gt;
&lt;li&gt;If a player chooses to “hold”, their turn total is added to their score, becoming the next player's turn.&lt;/li&gt;
&lt;li&gt;Variation we used, if you roll snake eyes (both 1's), your total score from past rounds is reset to 0.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first player to score 100 or more points wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features ✨
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Score Updates:&lt;/strong&gt; The score and dice rolls update live as the player plays.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Winning Screen:&lt;/strong&gt; A celebratory message displays when a player wins the game.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snake Eyes Reset Rule:&lt;/strong&gt; Rolling double ones adds an element of risk, making the game more challenging.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;You can play the Pig game &lt;a href="https://github.com/sanjaysah101/HTML-CSS3-JavaScript-Projects/tree/master/Project%206%20-%20Pig%20Game" rel="noopener noreferrer"&gt;here&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;I built this game using HTML, CSS, and JavaScript as part of a project to enhance my front-end development skills. One of the main challenges was figuring out the logic for handling different game states, such as when the player should roll when they should hold, and how to implement the snake eyes rule.&lt;/p&gt;

&lt;p&gt;Additionally, I spent time optimizing the user interface to be responsive and intuitive, ensuring players could enjoy the game on different devices.&lt;/p&gt;

&lt;p&gt;This project helped me to improve my understanding of event-driven programming in JavaScript and how to manage state changes in a small game application.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
