<?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: Muhammad Usman Awan</title>
    <description>The latest articles on Forem by Muhammad Usman Awan (@usman_awan).</description>
    <link>https://forem.com/usman_awan</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%2F2113728%2F5023cec6-3138-4ba9-831a-4a97d7542633.jpg</url>
      <title>Forem: Muhammad Usman Awan</title>
      <link>https://forem.com/usman_awan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/usman_awan"/>
    <language>en</language>
    <item>
      <title>Earth’s Breath: An Interactive Journey from Seed to Restoration</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Sat, 18 Apr 2026 11:43:26 +0000</pubDate>
      <link>https://forem.com/usman_awan/earths-breath-an-interactive-journey-from-seed-to-restoration-1ebi</link>
      <guid>https://forem.com/usman_awan/earths-breath-an-interactive-journey-from-seed-to-restoration-1ebi</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-04-16"&gt;Weekend Challenge: Earth Day Edition&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;Earth’s Breath&lt;/strong&gt;, an immersive, scroll-driven storytelling experience that personifies nature to highlight the fragility of our planet. &lt;/p&gt;

&lt;p&gt;The project follows the lifecycle of a single Rose through 12 interactive scenes. My goal was to move beyond abstract data about climate change and instead create an emotional "character arc" for the Earth. By making the user’s scroll the literal engine for growth, pollution, and eventual restoration, the project turns environmental stewardship into an active, personal journey.&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%2Fk2v5x3okvt1s71ch3y8h.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%2Fk2v5x3okvt1s71ch3y8h.png" alt=" " width="737" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://earth-day-dev-weekend-challenge-xi.vercel.app/" rel="noopener noreferrer"&gt;Earth-Day-DEV-Weekend-Challenge&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/UsmanDevCraft/Earth-Day-DEV-Weekend-Challenge" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The technical challenge was synchronizing the "emotional state" of the assets (the Sun and the Rose) with a 2400vh scroll timeline. &lt;/p&gt;

&lt;h3&gt;
  
  
  1. The "Living" Component Architecture
&lt;/h3&gt;

&lt;p&gt;Unlike static SVGs, I built the Rose and Sun as dynamic React components using &lt;strong&gt;Lucide React&lt;/strong&gt; icons as base paths, which were then manipulated via &lt;strong&gt;Framer Motion&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;State Mapping:&lt;/strong&gt; I used the &lt;code&gt;useScroll&lt;/code&gt; and &lt;code&gt;useTransform&lt;/code&gt; hooks to map the scroll offset to specific CSS variables. For example, as the "Industry" phase begins, the &lt;code&gt;saturate&lt;/code&gt; and &lt;code&gt;brightness&lt;/code&gt; of the sky are linked to the scroll Y-axis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Postural Animation:&lt;/strong&gt; The Rose’s "wilting" was achieved by animating the &lt;code&gt;path&lt;/code&gt; data and &lt;code&gt;rotate&lt;/code&gt; properties, creating a fluid skeletal movement rather than a simple fade-in.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. The Celestial Arc
&lt;/h3&gt;

&lt;p&gt;To simulate the passage of time, I calculated a parabolic path for the Sun. Instead of moving in a straight line, the Sun follows a mathematical arc $(y = ax^2 + bx + c)$ across the screen, transitioning from a joyful yellow to a stressed orange as the "Shadow of Industry" phase takes over.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Clean-Up Logic with Masks
&lt;/h3&gt;

&lt;p&gt;In the "Restoration" phase, I used a custom SVG mask that "follows" the rain particles. As the rain falls, it reveals a clean version of the soil layer beneath the "littered" layer, giving the visual illusion of the earth being physically washed clean.&lt;/p&gt;




&lt;h3&gt;
  
  
  Reflection
&lt;/h3&gt;

&lt;p&gt;Building &lt;em&gt;Earth's Breath&lt;/em&gt; reminded me that as developers, we have the power to turn "boring" environmental facts into "felt" experiences. Nature behaves exactly how we treat it—if we "scroll" (act) with care, it thrives. If we act with industrial greed, it wilts.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>frontend</category>
      <category>css</category>
    </item>
    <item>
      <title>🚨 Claude code source code leaked?? ‼️</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Tue, 31 Mar 2026 17:31:37 +0000</pubDate>
      <link>https://forem.com/usman_awan/claude-code-source-code-has-been-leaked--520p</link>
      <guid>https://forem.com/usman_awan/claude-code-source-code-has-been-leaked--520p</guid>
      <description>&lt;h2&gt;
  
  
  🚨 Claude Code — Leaked Source (2026-03-31)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ⚠️ Disclaimer
&lt;/h3&gt;

&lt;p&gt;This repository archives source code that was leaked from Anthropic's npm registry on &lt;strong&gt;March 31, 2026&lt;/strong&gt;.&lt;br&gt;
All original source code remains the property of &lt;a href="https://www.anthropic.com" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;On March 31, 2026, some source code of Anthropic's Claude Code CLI was leaked&lt;/strong&gt; via an exposed &lt;code&gt;.map&lt;/code&gt; file in their npm package.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🔗 &lt;strong&gt;Source Code:&lt;/strong&gt; &lt;a href="https://github.com/nirholas/claude-code" rel="noopener noreferrer"&gt;https://github.com/nirholas/claude-code&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  🧨 How It Leaked
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Chaofan Shou (@Fried_rice)&lt;/strong&gt; publicly disclosed the issue:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Claude code source code has been leaked via a map file in their npm registry!"&lt;/em&gt;&lt;br&gt;
— March 31, 2026&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🔗 &lt;a href="https://x.com/Fried_rice/status/2038894956459290963" rel="noopener noreferrer"&gt;https://x.com/Fried_rice/status/2038894956459290963&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Root Cause
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;npm Package&lt;/td&gt;
&lt;td&gt;Included a &lt;code&gt;.map&lt;/code&gt; file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source Map&lt;/td&gt;
&lt;td&gt;Contained reference to full TypeScript source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;Linked to downloadable archive (R2 bucket)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exposure&lt;/td&gt;
&lt;td&gt;Unobfuscated source publicly accessible&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  🧠 Overview
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; is Anthropic's official CLI tool for interacting with Claude directly from the terminal.&lt;/p&gt;
&lt;h3&gt;
  
  
  Capabilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;File editing &amp;amp; manipulation&lt;/li&gt;
&lt;li&gt;Command execution&lt;/li&gt;
&lt;li&gt;Codebase search&lt;/li&gt;
&lt;li&gt;Git workflow management&lt;/li&gt;
&lt;li&gt;Multi-agent orchestration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📦 This repository contains the leaked &lt;code&gt;src/&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Source Code:&lt;/strong&gt; &lt;a href="https://github.com/nirholas/claude-code" rel="noopener noreferrer"&gt;https://github.com/nirholas/claude-code&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  📊 Leak Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Leaked On&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2026-03-31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bun&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UI Framework&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React + Ink&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scale&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~1,900 files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Code Size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;512,000+ LOC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  📁 Directory Structure
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
├── main.tsx                 # CLI entrypoint (Commander.js + Ink)
├── commands.ts              # Command registry
├── tools.ts                 # Tool registry
├── Tool.ts                  # Tool definitions
├── QueryEngine.ts           # Core LLM engine
├── context.ts               # Context management
├── cost-tracker.ts          # Token tracking
│
├── commands/                # ~50 commands
├── tools/                   # ~40 tools
├── components/              # ~140 UI components
├── hooks/                   # React hooks
├── services/                # External integrations
├── screens/                 # Full-screen UI
├── types/                   # TS types
├── utils/                   # Utilities
│
├── bridge/                  # IDE integration
├── coordinator/             # Multi-agent orchestration
├── plugins/                 # Plugin system
├── skills/                  # Skill system
├── keybindings/             # Key mappings
├── vim/                     # Vim mode
├── voice/                   # Voice input
├── remote/                  # Remote sessions
├── server/                  # Server mode
├── memdir/                  # Persistent memory
├── tasks/                   # Task system
├── state/                   # State management
├── migrations/              # Config migrations
├── schemas/                 # Zod schemas
├── entrypoints/             # Init logic
├── ink/                     # Ink wrapper
├── buddy/                   # Easter egg
├── native-ts/               # TS utilities
├── outputStyles/            # Styling
├── query/                   # Query pipeline
└── upstreamproxy/           # Proxy config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🏗️ Core Architecture
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1️⃣ Tool System (&lt;code&gt;src/tools/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Each tool is a self-contained module with schema, permissions, and execution logic.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BashTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Execute shell commands&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FileReadTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read files (incl. PDFs, images)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FileWriteTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create/overwrite files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FileEditTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Partial edits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GlobTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pattern search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GrepTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Content search (ripgrep)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;WebFetchTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fetch URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;WebSearchTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Web search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AgentTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Spawn sub-agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SkillTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Execute skills&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MCPTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MCP integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LSPTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LSP integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NotebookEditTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Edit notebooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Task*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Task management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Team*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Agent team control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PlanMode*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Planning mode toggle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Worktree*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Git isolation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CronCreateTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scheduling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RemoteTriggerTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Remote triggers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SleepTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delay execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SyntheticOutputTool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Structured output&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h3&gt;
  
  
  2️⃣ Command System (&lt;code&gt;src/commands/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Slash commands used in CLI:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/commit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Git commit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/review&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Code review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/compact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Context compression&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/mcp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MCP management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/doctor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Diagnostics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;/login&lt;/code&gt; / &lt;code&gt;/logout&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/memory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Memory mgmt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/skills&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skills&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/tasks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/vim&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vim mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/diff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;View changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/cost&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Usage cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/theme&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;UI theme&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/context&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Context view&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/resume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Restore session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/share&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Share session&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h3&gt;
  
  
  3️⃣ Service Layer (&lt;code&gt;src/services/&lt;/code&gt;)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;api/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Anthropic API client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mcp/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MCP server mgmt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oauth/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Auth flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lsp/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Language servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;analytics/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Feature flags&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;plugins/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Plugin loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;compact/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Context compression&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;policyLimits/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Org limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;remoteManagedSettings/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Remote config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;extractMemories/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Memory extraction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tokenEstimation.ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Token counting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;teamMemorySync/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sync&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h3&gt;
  
  
  4️⃣ Bridge System (&lt;code&gt;src/bridge/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Connects CLI ↔ IDE (VS Code, JetBrains).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;bridgeMain.ts&lt;/code&gt; — main loop&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bridgeMessaging.ts&lt;/code&gt; — protocol&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bridgePermissionCallbacks.ts&lt;/code&gt; — permissions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;replBridge.ts&lt;/code&gt; — REPL bridge&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;jwtUtils.ts&lt;/code&gt; — authentication&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sessionRunner.ts&lt;/code&gt; — execution&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  5️⃣ Permission System
&lt;/h3&gt;

&lt;p&gt;Located in: &lt;code&gt;src/hooks/toolPermission/&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enforces permissions on every tool execution&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Modes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;default&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plan&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auto&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bypassPermissions&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  6️⃣ Feature Flags
&lt;/h3&gt;

&lt;p&gt;Dead code elimination via Bun:&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;feature&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="s1"&gt;bun:bundle&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;voiceCommand&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;feature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;VOICE_MODE&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="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./commands/voice/index.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Notable Flags:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;PROACTIVE&lt;/code&gt;, &lt;code&gt;KAIROS&lt;/code&gt;, &lt;code&gt;BRIDGE_MODE&lt;/code&gt;, &lt;code&gt;DAEMON&lt;/code&gt;, &lt;code&gt;VOICE_MODE&lt;/code&gt;, &lt;code&gt;AGENT_TRIGGERS&lt;/code&gt;, &lt;code&gt;MONITOR_TOOL&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Key Files
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;QueryEngine.ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Core LLM engine (~46K LOC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Tool.ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tool system definitions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;commands.ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Command registry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;main.tsx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CLI bootstrap + UI init&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ⚙️ Tech Stack
&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;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Runtime&lt;/td&gt;
&lt;td&gt;Bun&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Language&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI&lt;/td&gt;
&lt;td&gt;React + Ink&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLI&lt;/td&gt;
&lt;td&gt;Commander.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation&lt;/td&gt;
&lt;td&gt;Zod&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;ripgrep&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Protocols&lt;/td&gt;
&lt;td&gt;MCP, LSP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;td&gt;Anthropic SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telemetry&lt;/td&gt;
&lt;td&gt;OpenTelemetry + gRPC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature Flags&lt;/td&gt;
&lt;td&gt;GrowthBook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;OAuth 2.0, JWT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🧩 Design Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ⚡ Parallel Prefetch
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nf"&gt;startMdmRawRead&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;startKeychainPrefetch&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Improves startup performance by parallelizing I/O.&lt;/p&gt;




&lt;h3&gt;
  
  
  💤 Lazy Loading
&lt;/h3&gt;

&lt;p&gt;Heavy dependencies (OpenTelemetry, gRPC) are loaded only when needed.&lt;/p&gt;




&lt;h3&gt;
  
  
  🤖 Agent Swarms
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sub-agents via &lt;code&gt;AgentTool&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Coordinated through &lt;code&gt;coordinator/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Team-based execution supported&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧠 Skill System
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Defined in &lt;code&gt;skills/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Executed via &lt;code&gt;SkillTool&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Supports custom workflows&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔌 Plugin Architecture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;First + third-party plugins&lt;/li&gt;
&lt;li&gt;Loaded dynamically via &lt;code&gt;plugins/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ Final Disclaimer
&lt;/h2&gt;

&lt;p&gt;This repository archives leaked source code from Anthropic’s npm registry (&lt;strong&gt;2026-03-31&lt;/strong&gt;).&lt;br&gt;
All rights belong to &lt;strong&gt;Anthropic&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>Frontend Art Submission — Gender Beyond Boundaries 👨‍🦰👩‍🦳</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Mon, 30 Mar 2026 10:02:37 +0000</pubDate>
      <link>https://forem.com/usman_awan/frontend-art-submission-gender-beyond-boundaries-4jck</link>
      <guid>https://forem.com/usman_awan/frontend-art-submission-gender-beyond-boundaries-4jck</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wecoded-2026"&gt;2026 WeCoded Challenge&lt;/a&gt;: Frontend Art&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👨‍🦰👩‍🦳 Frontend Art Submission — Gender Beyond Boundaries
&lt;/h2&gt;

&lt;p&gt;I built an interactive 3D experience using &lt;strong&gt;Next.js&lt;/strong&gt; and &lt;strong&gt;Three.js&lt;/strong&gt; that visually represents gender equality across professions.&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%2Fn4cp946cds91qvgw8ww4.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%2Fn4cp946cds91qvgw8ww4.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project features two avatars — a male on the left and a female on the right — dynamically showcasing &lt;strong&gt;10 different professions&lt;/strong&gt;. Alongside the visuals, contextual metadata appears, including &lt;strong&gt;real-world role models for each gender&lt;/strong&gt;, reinforcing that capability and excellence are not defined by gender.&lt;/p&gt;

&lt;p&gt;👉 &lt;em&gt;&lt;a href="https://gender-equity-wecoded-2026.vercel.app" rel="noopener noreferrer"&gt;Live Preview&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
👉 &lt;em&gt;&lt;a href="https://github.com/UsmanDevCraft/gender_equity" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  💡 Inspiration
&lt;/h3&gt;

&lt;p&gt;This project is a tribute to &lt;strong&gt;gender equality&lt;/strong&gt; — a statement that professions, skills, and ambitions belong to &lt;em&gt;everyone&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Growing up, many of us are subtly (or explicitly) told what we &lt;em&gt;can&lt;/em&gt; or &lt;em&gt;cannot&lt;/em&gt; become based on gender. I wanted to challenge that narrative using immersive web technology.&lt;/p&gt;

&lt;p&gt;Each profession highlights &lt;strong&gt;real individuals who broke barriers&lt;/strong&gt;, showing that talent, courage, and intelligence are universal traits. The dual-avatar system visually reinforces a simple but powerful idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;There is no “male job” or “female job” — only human potential.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🧠 Featured Professions &amp;amp; Role Models
&lt;/h3&gt;

&lt;h4&gt;
  
  
  📰 Journalist
&lt;/h4&gt;

&lt;p&gt;A fearless seeker of truth shaping public narratives.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Male: James Baldwin&lt;/li&gt;
&lt;li&gt;Female: Nellie Bly&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🌾 Farmer
&lt;/h4&gt;

&lt;p&gt;The backbone of global food security and sustainability.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Male: George Washington Carver&lt;/li&gt;
&lt;li&gt;Female: Karen Washington&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🚒 Firefighter
&lt;/h4&gt;

&lt;p&gt;A symbol of courage and selfless service.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Male: Patrick Hardison&lt;/li&gt;
&lt;li&gt;Female: Molly Williams&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  💻 Software Engineer
&lt;/h4&gt;

&lt;p&gt;Architects of the digital world.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Male: Alan Turing&lt;/li&gt;
&lt;li&gt;Female: Ada Lovelace&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🔧 Mechanic
&lt;/h4&gt;

&lt;p&gt;Masters of machines and precision engineering.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Male: Henry Ford&lt;/li&gt;
&lt;li&gt;Female: Patrice Banks&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🏥 Nurse
&lt;/h4&gt;

&lt;p&gt;The heartbeat of healthcare systems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Male: James Derham&lt;/li&gt;
&lt;li&gt;Female: Florence Nightingale&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ✈️ Pilot
&lt;/h4&gt;

&lt;p&gt;Leaders navigating the skies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Male: Charles Lindbergh&lt;/li&gt;
&lt;li&gt;Female: Amelia Earhart&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  👮 Police Officer
&lt;/h4&gt;

&lt;p&gt;Guardians of justice and public safety.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Male: August Vollmer&lt;/li&gt;
&lt;li&gt;Female: Alice Stebbins Wells&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🛍️ Retail Salesperson
&lt;/h4&gt;

&lt;p&gt;Drivers of commerce and community connection.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Male: Marshall Field&lt;/li&gt;
&lt;li&gt;Female: Madam C.J. Walker&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🩺 Doctor
&lt;/h4&gt;

&lt;p&gt;Leaders in healing and medical innovation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Male: Jonas Salk&lt;/li&gt;
&lt;li&gt;Female: Elizabeth Blackwell&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💻 My Code
&lt;/h3&gt;

&lt;p&gt;Built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js&lt;/strong&gt; for structure and performance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three.js&lt;/strong&gt; for immersive 3D rendering&lt;/li&gt;
&lt;li&gt;Custom logic for dynamic avatar switching and metadata display&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;em&gt;&lt;a href="https://github.com/UsmanDevCraft/gender_equity" rel="noopener noreferrer"&gt;Source Code&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ✨ Final Thought
&lt;/h3&gt;

&lt;p&gt;This project isn’t just about visuals — it’s about perspective.&lt;/p&gt;

&lt;p&gt;By placing male and female avatars side by side in every profession, I wanted users to &lt;em&gt;feel&lt;/em&gt; equality, not just read about it. Technology has the power to shape narratives, and this is my small contribution toward a more inclusive one.&lt;/p&gt;




&lt;h3&gt;
  
  
  🚀 Performance &amp;amp; Optimization Note
&lt;/h3&gt;

&lt;p&gt;As of this submission, I am actively working on further optimizing the asset delivery. Since high-quality Avatar GLB files can be heavy, they currently take a moment to fully render depending on the connection.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🙌&lt;br&gt;
Until next time, 🫡&lt;br&gt;
Usman Awan (your friendly dev 🚀)&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>devchallenge</category>
      <category>frontend</category>
      <category>css</category>
    </item>
    <item>
      <title>Ready Player Me Shut Down — Here's How I Rebuilt Our Avatar System</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Wed, 25 Feb 2026 08:12:32 +0000</pubDate>
      <link>https://forem.com/usman_awan/ready-player-me-shut-down-heres-how-i-rebuilt-our-avatar-system-4p75</link>
      <guid>https://forem.com/usman_awan/ready-player-me-shut-down-heres-how-i-rebuilt-our-avatar-system-4p75</guid>
      <description>&lt;h2&gt;
  
  
  From Ready Player Me Shutdown to Building Our Own Avatar Renderer 🚀
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How I replaced Ready Player Me with a fully modular GLB renderer — with zero Three.js experience.&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%2Fq6ylx3cjbcjplhvp5t8b.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%2Fq6ylx3cjbcjplhvp5t8b.png" alt=" " width="533" height="958"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;January 31, 2026&lt;/strong&gt;, Ready Player Me shut down.&lt;/p&gt;

&lt;p&gt;We were warned at the end of December 2025.&lt;/p&gt;

&lt;p&gt;That gave us roughly &lt;strong&gt;3–4 weeks&lt;/strong&gt; to replace a system that powered avatars across our entire application.&lt;/p&gt;

&lt;p&gt;Two things had to be rebuilt immediately:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Avatar creation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avatar appearance across the app&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But creation came first — because without avatars, appearance didn’t matter.&lt;/p&gt;

&lt;p&gt;And the responsibility landed completely on me — a core frontend developer with &lt;strong&gt;zero experience in Three.js, React Three Fiber, or Drei.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It felt like a &lt;strong&gt;do-or-die penalty in the last minute of a match.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But as developers, learning under pressure is part of the job.&lt;/p&gt;

&lt;p&gt;As Master Shifu said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If you only do what you can do, then you will never be better than what you are."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I started.&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__body flex items-center justify-between"&gt;
        &lt;a href="https://glb-model-viewer-tau.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;glb-model-viewer-tau.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;h3&gt;
  
  
  The Old System (Before Ready Player Me)
&lt;/h3&gt;

&lt;p&gt;Before using Ready Player Me, our avatar system was simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;single Base64 GLB&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Fully combined avatar&lt;/li&gt;
&lt;li&gt;All assets embedded&lt;/li&gt;
&lt;li&gt;Easy to render&lt;/li&gt;
&lt;li&gt;Easy to store&lt;/li&gt;
&lt;li&gt;Easy to preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it was &lt;strong&gt;not flexible.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ready Player Me introduced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modular assets&lt;/li&gt;
&lt;li&gt;Morph targets&lt;/li&gt;
&lt;li&gt;Animations&lt;/li&gt;
&lt;li&gt;Texture customization&lt;/li&gt;
&lt;li&gt;Live preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When RPM shut down — we lost everything.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 1 — First Three.js Success
&lt;/h3&gt;

&lt;p&gt;The first milestone was simple:&lt;/p&gt;

&lt;p&gt;Render a GLB.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;React Three Fiber&lt;/strong&gt;, I loaded a dummy Wolf3D model.&lt;/p&gt;

&lt;p&gt;And it worked.&lt;/p&gt;

&lt;p&gt;Seeing a 3D avatar render inside our app was the first real sign:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This might actually be possible.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The First Real Problem — Skeleton Collisions
&lt;/h3&gt;

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

&lt;p&gt;&lt;em&gt;Ready Player Me assets had their own armature.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Our custom assets had a different armature.&lt;/p&gt;

&lt;p&gt;Nothing aligned.&lt;/p&gt;

&lt;p&gt;Meshes broke.&lt;br&gt;
Animations failed.&lt;br&gt;
Bones mismatched.&lt;/p&gt;

&lt;p&gt;Our graphics team stepped in and produced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom &lt;strong&gt;body GLB&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Custom &lt;strong&gt;head GLB&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Matching armature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once those worked together:&lt;/p&gt;

&lt;p&gt;We finally had:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Head&lt;/li&gt;
&lt;li&gt;Body&lt;/li&gt;
&lt;li&gt;2–3 test assets&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And everything rendered correctly.&lt;/p&gt;

&lt;p&gt;First real victory. 🎉&lt;/p&gt;


&lt;h3&gt;
  
  
  The Real Challenge — 37 Modular Assets
&lt;/h3&gt;

&lt;p&gt;Then came the real problem.&lt;/p&gt;

&lt;p&gt;We had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;18 assets for female&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;19 assets for male&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different categories:&lt;/p&gt;
&lt;h4&gt;
  
  
  Body Assets
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Top&lt;/li&gt;
&lt;li&gt;Bottom&lt;/li&gt;
&lt;li&gt;Footwear&lt;/li&gt;
&lt;li&gt;Outfit&lt;/li&gt;
&lt;li&gt;Skin color&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Head Assets
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Hair&lt;/li&gt;
&lt;li&gt;Hair color&lt;/li&gt;
&lt;li&gt;Eyes&lt;/li&gt;
&lt;li&gt;Beard&lt;/li&gt;
&lt;li&gt;Beard color&lt;/li&gt;
&lt;li&gt;Face shapes&lt;/li&gt;
&lt;li&gt;Eyebrows&lt;/li&gt;
&lt;li&gt;Nose&lt;/li&gt;
&lt;li&gt;Lips
and many more.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Global Assets
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Animations&lt;/li&gt;
&lt;li&gt;Poses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each category needed different rendering logic.&lt;/p&gt;


&lt;h3&gt;
  
  
  Apparel Was Easy
&lt;/h3&gt;

&lt;p&gt;Clothing assets were simple:&lt;/p&gt;

&lt;p&gt;Just attach GLB meshes to the body.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;addBodyPart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getGLTFScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shirtGLTF&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shirt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;addBodyPart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getGLTFScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pantsGLTF&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pants&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;addBodyPart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getGLTFScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shoesGLTF&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shoes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That part worked almost immediately.&lt;/p&gt;




&lt;h3&gt;
  
  
  Asset Loading Strategy
&lt;/h3&gt;

&lt;p&gt;Assets could come from multiple sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redux preview state&lt;/li&gt;
&lt;li&gt;API data&lt;/li&gt;
&lt;li&gt;Defaults&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Preview needed priority.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;assets&lt;/span&gt; &lt;span class="o"&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;defaultAssets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;glbAssets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;bodyColorTexture&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glbAssets&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;bodyColorTexture&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;defaultAssets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bodyColorTexture&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;eyeColorTexture&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;glbAssets&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;eyeColorTexture&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;defaultAssets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eyeColorTexture&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;shirtPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;hasOutfitPreview&lt;/span&gt;
  &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;defaultAssets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shirt&lt;/span&gt;
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apparelPreview&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;top&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shirt&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;defaultAssets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shirt&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;hairPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;hasOutfitPreview&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;gender&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;female&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;defaultAssets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hair&lt;/span&gt;
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apparelPreview&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hair&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hair&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;defaultAssets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hair&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensured:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live preview always wins.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Runtime Texture Baking (Eyebrows &amp;amp; Beard)
&lt;/h3&gt;

&lt;p&gt;Head assets were harder.&lt;/p&gt;

&lt;p&gt;Beards and eyebrows were PNG overlays.&lt;/p&gt;

&lt;p&gt;Instead of adding extra meshes, I baked them directly onto the face texture.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createFaceWithEyebrowsTexture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;baseTexture&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;eyebrowsTexture&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&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;eyebrowColor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// tint only eyebrow pixels&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;baked&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CanvasTexture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;baked&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;flipY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;baked&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;colorSpace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SRGBColorSpace&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;baked&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;Result:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No extra draw calls&lt;/li&gt;
&lt;li&gt;Better performance&lt;/li&gt;
&lt;li&gt;Realistic blending&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  The Core Innovation — Skeleton Rebinding
&lt;/h3&gt;

&lt;p&gt;The biggest technical challenge was equipping assets.&lt;/p&gt;

&lt;p&gt;Every asset needed to use the &lt;strong&gt;same skeleton&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Solution:&lt;/p&gt;

&lt;p&gt;Skeleton rebinding.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;addBodyPart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gltfScene&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Group&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;partName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SkinnedMesh&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;newBones&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;skinnedChild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;skeleton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bones&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bone&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;bonesByName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;bone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Boolean&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;newSkeleton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Skeleton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;newBones&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;skinnedChild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;skeleton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;boneInverses&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;skinnedClone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;skeleton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;newSkeleton&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;skinnedClone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newSkeleton&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;skinnedChild&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bindMatrix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

    &lt;span class="nx"&gt;skinnedClone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pose&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;skinnedClone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visible&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;combined&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;skinnedClone&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;p&gt;This allowed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Any asset to attach dynamically&lt;/li&gt;
&lt;li&gt;Animations to work&lt;/li&gt;
&lt;li&gt;No broken meshes&lt;/li&gt;
&lt;li&gt;No T-pose issues&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Static Attachments (Head Parts)
&lt;/h3&gt;

&lt;p&gt;Some assets didn't need skeleton binding.&lt;/p&gt;

&lt;p&gt;They could attach directly to bones.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;skin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eyes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;teeth&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;beard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hair&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolvedPartName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;headBone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;headBone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;clonedMesh&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;This worked perfectly for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hair&lt;/li&gt;
&lt;li&gt;Eyes&lt;/li&gt;
&lt;li&gt;Beard&lt;/li&gt;
&lt;li&gt;Accessories&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Costume Mode vs Modular Mode
&lt;/h3&gt;

&lt;p&gt;Two rendering paths were required.&lt;/p&gt;

&lt;h4&gt;
  
  
  Costume Mode
&lt;/h4&gt;

&lt;p&gt;Single full-body GLB:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isCostumeMode&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;costumeScene&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;SkeletonUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getGLTFScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;outfitGLTF&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;costumeScene&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;h4&gt;
  
  
  Modular Mode
&lt;/h4&gt;

&lt;p&gt;Dynamic assembly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;addBodyPart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getGLTFScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bodyGLTF&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;skin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;addBodyPart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getGLTFScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;headGLTF&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;head&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;addBodyPart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getGLTFScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shirtGLTF&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shirt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;addBodyPart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getGLTFScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pantsGLTF&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pants&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;addBodyPart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getGLTFScene&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shoesGLTF&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shoes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Animations and Morph Targets
&lt;/h3&gt;

&lt;p&gt;Animations had to survive scene rebuilds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;AnimatedCombinedScene key={combinedScene.uuid} combinedScene={combinedScene} /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Morph targets enabled facial customization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apparelPreview&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;morphTargets&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{}).&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(([&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&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;idx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;morphTargetDictionary&lt;/span&gt;&lt;span class="p"&gt;?.[&lt;/span&gt;&lt;span class="nx"&gt;name&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;idx&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="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;morphTargetInfluences&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&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;
  
  
  Automatic Eye Blink
&lt;/h3&gt;

&lt;p&gt;Even blinking was implemented.&lt;/p&gt;

&lt;p&gt;Wolf3D style.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useFrame((_, delta) =&amp;gt; {
  // eyeBlinkLeft / eyeBlinkRight logic
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Small detail.&lt;/p&gt;

&lt;p&gt;Huge realism boost.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Final Renderer Architecture
&lt;/h3&gt;

&lt;p&gt;Key ideas:&lt;/p&gt;

&lt;h4&gt;
  
  
  Modular Equipping
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Every asset is a GLB&lt;/li&gt;
&lt;li&gt;Loaded via &lt;code&gt;useGLTF&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Preview has priority&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Skeleton System
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;One template skeleton&lt;/li&gt;
&lt;li&gt;Bone-name matching&lt;/li&gt;
&lt;li&gt;Rebinding&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Runtime Baking
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Eyebrows&lt;/li&gt;
&lt;li&gt;Beard&lt;/li&gt;
&lt;li&gt;Face details&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Dual Render Paths
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Costume mode&lt;/li&gt;
&lt;li&gt;Modular mode&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Stable Rendering
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;No T-pose&lt;/li&gt;
&lt;li&gt;No disappearing meshes
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;skinnedClone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;frustumCulled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;skinnedClone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pose&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Live Updates
&lt;/h4&gt;

&lt;p&gt;Redux drives everything.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;key={combinedScene.uuid}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Forces clean rebuild.&lt;/p&gt;




&lt;h3&gt;
  
  
  Avatar Appearance Was Easy
&lt;/h3&gt;

&lt;p&gt;Once creation worked:&lt;/p&gt;

&lt;p&gt;Appearance across the app was trivial.&lt;/p&gt;

&lt;p&gt;The renderer already supported props.&lt;/p&gt;

&lt;p&gt;So avatar panels and previews worked instantly.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sometimes the hardest part unlocks everything else.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Performance Tradeoffs
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Single GLB&lt;/li&gt;
&lt;li&gt;Fast&lt;/li&gt;
&lt;li&gt;Simple&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Modular GLBs&lt;/li&gt;
&lt;li&gt;Slightly slower&lt;/li&gt;
&lt;li&gt;Much more flexible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creation flow became &lt;strong&gt;far smoother&lt;/strong&gt;, even if asset loading takes slightly longer.&lt;/p&gt;

&lt;p&gt;Optimization is ongoing.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  1 — Research Is Development
&lt;/h3&gt;

&lt;p&gt;Learning is part of the job.&lt;/p&gt;

&lt;p&gt;Not optional.&lt;/p&gt;

&lt;p&gt;Essential.&lt;/p&gt;

&lt;h3&gt;
  
  
  2 — AI Helps Real Engineers
&lt;/h3&gt;

&lt;p&gt;AI helped me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn Three.js&lt;/li&gt;
&lt;li&gt;Solve skeleton issues&lt;/li&gt;
&lt;li&gt;Debug rendering&lt;/li&gt;
&lt;li&gt;Speed up development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI didn't replace engineering.&lt;/p&gt;

&lt;p&gt;It &lt;strong&gt;accelerated learning.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Building My Own GLB Renderer
&lt;/h2&gt;

&lt;p&gt;After finishing the system, I got inspired to go further.&lt;/p&gt;

&lt;p&gt;I started building a &lt;strong&gt;custom GLB renderer&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Load any GLB&lt;/li&gt;
&lt;li&gt;Test assets on provided bodies&lt;/li&gt;
&lt;li&gt;Male + female models&lt;/li&gt;
&lt;li&gt;Asset testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tops&lt;/li&gt;
&lt;li&gt;Bottoms&lt;/li&gt;
&lt;li&gt;Footwear&lt;/li&gt;
&lt;li&gt;Hair&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Live Demo: &lt;a href="https://glb-model-viewer-tau.vercel.app/" rel="noopener noreferrer"&gt;glb-viewer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/UsmanDevCraft/glb-viewer" rel="noopener noreferrer"&gt;glb-viewer&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Ready Player Me shutting down could have been a disaster.&lt;/p&gt;

&lt;p&gt;Instead, it became one of the biggest growth experiences of my career.&lt;/p&gt;

&lt;p&gt;In less than a month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learned Three.js&lt;/li&gt;
&lt;li&gt;Built a modular avatar system&lt;/li&gt;
&lt;li&gt;Implemented skeleton rebinding&lt;/li&gt;
&lt;li&gt;Created runtime texture baking&lt;/li&gt;
&lt;li&gt;Supported animations and morph targets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And most importantly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We didn't depend on a third-party avatar system anymore.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We built our own.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>discuss</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>🚨 Chrome Under Attack: The CSS Zero-Day That Shocked 2026 🤯</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Mon, 23 Feb 2026 06:40:49 +0000</pubDate>
      <link>https://forem.com/usman_awan/chrome-under-attack-the-css-zero-day-that-shocked-2026-586o</link>
      <guid>https://forem.com/usman_awan/chrome-under-attack-the-css-zero-day-that-shocked-2026-586o</guid>
      <description>&lt;h2&gt;
  
  
  Understanding CVE-2026-2441: Chrome’s CSS Zero-Day Vulnerability
&lt;/h2&gt;

&lt;p&gt;In mid-February 2026, &lt;strong&gt;Google&lt;/strong&gt; patched a critical use-after-free flaw in Chrome’s CSS engine &lt;code&gt;(CVE-2026-2441)&lt;/code&gt; that was already being exploited in the wild. This high-severity bug allows specially crafted webpages to execute arbitrary code inside &lt;strong&gt;Chrome’s sandbox&lt;/strong&gt;. Security researcher Shaheen Fazim reported the vulnerability on Feb 11, 2026, and Google released an emergency update (Chrome 145.0.7632.75/76 for Windows/macOS, 144.0.7559.75 for Linux) on Feb 13, 2026 to fix it. Google acknowledged that an exploit exists in the wild, making this the first actively exploited Chrome zero-day of 2026. Cybersecurity alerts (e.g. CIS, Malwarebytes) quickly urged immediate patching.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;February 11, 2026&lt;/strong&gt;: Researcher Shaheen Fazim reports the CSS bug to Google.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;February 13, 2026&lt;/strong&gt;: Google pushes Chrome 145.0.7632.75/76 (Stable) with a fix for CVE-2026-2441.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;February 16–18, 2026&lt;/strong&gt;: Security news sites (The Hacker News, Malwarebytes) confirm active exploits and advise updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;February 17, 2026&lt;/strong&gt;: U.S. CISA adds CVE-2026-2441 to its Known Exploited Vulnerabilities catalog (BOD 22-01), mandating fixes by March 10, 2026.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How the Exploit Works
&lt;/h3&gt;

&lt;p&gt;At a low level, CVE-2026-2441 is a &lt;strong&gt;use-after-free&lt;/strong&gt; (UAF) in Chrome’s &lt;code&gt;CSSFontFeatureValuesMap&lt;/code&gt;, the component that handles advanced font features. Attackers craft CSS/HTML that causes Chrome to modify a collection of font-feature values while iterating over it, freeing memory prematurely and leaving dangling pointers. In practical terms, a malicious page can force Chrome to &lt;strong&gt;reuse freed memory&lt;/strong&gt;. When Chrome later accesses this invalid memory, it can be controlled by the attacker, leading to arbitrary code execution within the browser’s sandbox. Notably, the exploit can be triggered just by visiting the page – no clicks or additional user actions are required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key mechanics include:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Iterator Invalidation&lt;/strong&gt;: Chrome loops over a set of CSS font-feature values while simultaneously modifying that set. This logic error causes stale references to freed memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Malicious CSS Payload&lt;/strong&gt;: A carefully crafted CSS rule (for example, malformed &lt;code&gt;@font-feature-values&lt;/code&gt; or &lt;code&gt;Houdini @property&lt;/code&gt; definitions paired with &lt;code&gt;paint()&lt;/code&gt; worklets) triggers the bug during style calculation. SitePoint’s analysis describes using a &lt;strong&gt;malformed @property plus a paint()&lt;/strong&gt; worklet to cause a compositor-thread UAF.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sandboxed Code Execution&lt;/strong&gt;: When exploited, the attacker’s code runs with the privileges of the browser tab. While still confined by Chrome’s renderer sandbox, this is enough to hijack the tab (&lt;strong&gt;steal cookies/credentials, inject scripts, etc.&lt;/strong&gt;). If the attacker chains this with a second flaw (e.g. a sandbox escape), full system compromise is possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In summary, this is a classic memory-corruption bug in Chrome’s C++ Blink engine: a CSS object is freed but still referenced. An attacker “sprays” the heap with controlled data at just the right time, turning the UAF into code execution. Importantly, modern CSS features (like the Houdini APIs) touch the GPU/compositor threads, broadening the attack surface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why It Happened
&lt;/h3&gt;

&lt;p&gt;The root cause lies in Chrome’s complex, performance-driven rendering engine. Unlike memory-safe languages, Blink is written in C++, so developers &lt;strong&gt;manually manage allocation&lt;/strong&gt;. The addition of advanced CSS capabilities (custom &lt;strong&gt;@property&lt;/strong&gt; definitions, &lt;strong&gt;paint()&lt;/strong&gt; worklets, etc.) means the browser’s internals now juggle CSS parsing, JS-driven paint logic, and GPU memory in parallel. If one thread frees an object while another still references it (a race condition), a UAF bug results.&lt;/p&gt;

&lt;p&gt;As &lt;strong&gt;Menlo Security&lt;/strong&gt; explains, Chrome essentially “sets aside a block of memory for a CSS element, marks it as ‘deleted,’ but then mistakenly tries to access that same memory address again” when CSS is manipulated. Security analysts note that interactions between Houdini APIs and the compositor create just such a race: a malformed @property can force re-allocation on the layout thread while a paint() worklet on the compositor thread still holds a pointer. Traditional CSPs cannot easily prevent this because the flaw lives entirely in CSS parsing/compositing, not in script execution.&lt;/p&gt;

&lt;p&gt;This incident highlights a broader issue: browsers continually add powerful web features faster than security guarantees can catch up. Chrome’s large C++ codebase inevitably harbors such subtle bugs. (By comparison, Firefox’s Rust-based style engine reduces UAF risk.) In any case, the exploit underlines that CSS – once “just styling” – can be weaponized, challenging old assumptions about web security.&lt;/p&gt;

&lt;h3&gt;
  
  
  Impact and Affected Systems
&lt;/h3&gt;

&lt;p&gt;Until patched, all unpatched Chromium-based browsers were vulnerable. The security bulletins list affected versions as Chrome &amp;lt; 145.0.7632.75/76 (Win/mac) and &amp;lt; 144.0.7559.75 (Linux). (In practice, any browser using the same Blink engine – Microsoft Edge, Brave, Opera, Vivaldi, etc. – needed an equivalent update.) Firefox, Safari, and other non-Chromium browsers are not affected by this specific bug.&lt;/p&gt;

&lt;p&gt;Because exploitation only requires viewing a malicious site, any user could be targeted via a drive-by attack. As SecPod notes, no extra user interaction is needed beyond loading the page. The attacker’s payload could silently deploy infostealers or backdoors from the compromised tab. If the exploit is chained with a second flaw (even a local privilege escalation), the browser attack could turn into full system compromise. In practice, no specific victims have been publicly identified, but state-sponsored actors often weaponize such Chrome zero-days quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mitigation and Protection
&lt;/h3&gt;

&lt;p&gt;The first and foremost defense is to update Chrome immediately. Install Chrome 145.0.7632.75 (or later) on Windows/macOS, or 145.0.7632.75 on Linux, and then restart the browser so the patch takes effect. Enable automatic updates and restart periodically to avoid delays in patching. All major Chromium-based browsers should receive fixes around the same time, so update Edge, Brave, Opera, etc. as soon as the patches are available. (If you use Electron apps, ensure they bundle an updated Chromium engine.)&lt;/p&gt;

&lt;p&gt;Beyond patching, adopt &lt;em&gt;defense-in-depth&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content Security Policy (CSP): Deploy a strict CSP that limits where CSS can come from. For example, disallow inline styles and require nonces/hashes for allowed CSS (style-src 'self' 'nonce-...'; style-src-attr 'none'). A well-crafted CSP can block malicious stylesheet injections before the browser parses them (though it cannot disable specific CSS features after parsing). Auditing all places that accept user-supplied CSS (CMS editors, &amp;lt;style&amp;gt; blocks, etc.) is also advised.

Sandbox Untrusted Content: If your environment hosts third-party web apps, consider sandboxing them. For example, use the sandbox attribute on iframes to isolate content. Restrict cross-origin interactions (via COOP/COEP headers) to limit what a compromised renderer can access.

Safe Browsing Practices: As always, users should avoid clicking unsolicited links or visiting untrusted sites. Use up-to-date browser extensions and anti-malware tools with web protection. These can sometimes detect and block known malicious payloads before the exploit runs.

Network/Cloud Isolation: Advanced enterprises may use cloud-based browser isolation. By rendering web content in isolated containers (as promoted by security firms), exploits like CVE-2026-2441 never touch the endpoint device. This “forward proxy” model breaks the patch-and-pray cycle by keeping the actual browser away from potentially malicious code.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Organizations should ensure they have a robust patch management process (per CIS and CISA guidelines) and monitor for any anomalous browser behavior. Since CVE-2026-2441 is in CISA’s Known Exploited list, agencies and contractors must comply with remediation directives by the mandated deadline.&lt;/p&gt;

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

&lt;p&gt;CVE-2026-2441 serves as a stark reminder that modern CSS can be a vector for serious browser exploits. Even without JavaScript, crafted CSS/Houdini rules can corrupt memory and breach Chrome’s defenses. While the urgent fix is to update Chrome, this event also underscores long-term lessons: web developers must treat CSS injection as untrusted input, and browser vendors must continually harden memory safety in rendering code. As one analysis notes, the age-old model of “CSS is harmless” no longer holds; every style sheet warrants scrutiny.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay safe&lt;/strong&gt;: update your browsers now, enforce strict CSPs on websites, and practice cautious browsing.&lt;/p&gt;

&lt;p&gt;CVE-2026-2441 is more than just another browser bug — it’s a wake-up call. As web technologies grow more powerful, the attack surface grows with them. CSS is no longer “just styling,” and modern browser engines are incredibly complex systems where small memory mistakes can become critical security flaws. While Google acted quickly with a patch, this incident reminds us that cybersecurity is a moving target. Staying updated, enforcing strong security policies, and understanding evolving threats are no longer optional — they’re essential in today’s web-driven world.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>css</category>
    </item>
    <item>
      <title>1.5M Tokens Exposed: How Moltbook’s 🦀 AI Social Network Tripped on Security</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Fri, 06 Feb 2026 11:14:44 +0000</pubDate>
      <link>https://forem.com/usman_awan/15m-tokens-exposed-how-moltbooks-ai-social-network-tripped-on-security-b39</link>
      <guid>https://forem.com/usman_awan/15m-tokens-exposed-how-moltbooks-ai-social-network-tripped-on-security-b39</guid>
      <description>&lt;h2&gt;
  
  
  🦀 Moltbook’s Rise and Security Breach: An In-Depth Look
&lt;/h2&gt;

&lt;p&gt;Moltbook, launched by entrepreneur Matt Schlicht in late January 2026, is an ambitious “agent-first” social network where only AI “agents” can post, comment, and vote. Built on the open-source OpenClaw framework, it quickly went viral: within days it claimed hundreds of thousands of bot users (over 770,000 registered agents by late January). Tech figures like OpenAI cofounder Andrej Karpathy initially praised the site’s creativity. But behind the scenes, &lt;code&gt;Moltbook’s backend&lt;/code&gt; was dangerously exposed. Security researchers soon found that the platform’s &lt;code&gt;Supabase database&lt;/code&gt; had no row-level security policies and a &lt;code&gt;public API key&lt;/code&gt; hardcoded in the client, giving anyone full &lt;strong&gt;read/write access&lt;/strong&gt; to all data. In other words, with minimal effort an attacker could query the database and even hijack any AI agent’s account.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Concerns about Moltbook
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rapid Growth with Security Oversights&lt;/strong&gt;: Moltbook was “vibe-coded” — developed very quickly using AI-generated code — prioritizing &lt;strong&gt;speed&lt;/strong&gt; over &lt;strong&gt;security&lt;/strong&gt;. Its rapid adoption (hundreds of thousands of agents in days) outpaced thorough review. Experts noted the fundamental mistake: leaving the Supabase backend unsecured. By embedding a publishable anon key without enabling Row-Level Security, the developers inadvertently allowed anyone to read or write every table in the database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Massive Data Exposure&lt;/strong&gt;: On discovery (Jan 31, 2026), researchers saw that roughly &lt;strong&gt;1.5 million API&lt;/strong&gt; authentication tokens (agent keys) and about &lt;strong&gt;35,000 email addresses&lt;/strong&gt; were openly accessible. Even thousands of private chat messages between agents were readable. Because API tokens act like &lt;code&gt;passwords for bots&lt;/code&gt;, an attacker could impersonate any agent (edit its posts, send its messages, etc.). Some leaked messages even contained plaintext third-party credentials (for example, OpenAI API keys), meaning external services could be compromised via Moltbook’s breach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broader Implications&lt;/strong&gt;: Beyond the specific leak, Moltbook’s flaw highlights risks in “rapid-iteration” AI platforms. Security specialists warned that if the breach had been exploited, an attacker could have impersonated high-profile bots (e.g. a Karpathy-linked agent with millions of followers) to spread &lt;strong&gt;misinformation&lt;/strong&gt; or &lt;strong&gt;crypto scams&lt;/strong&gt; as a trusted source. They could have orchestrated coordinated disinformation by controlling most of the &lt;strong&gt;770,000 agents&lt;/strong&gt;, simulating consensus on any topic. Open write access would also let attackers inject malicious prompts across the network or simply rack up astronomical API bills by spawning fake agents unchecked. In short, a single misconfiguration can turn autonomous agents into multipliers of attack surface: compromised bots can relay harmful instructions to others (“prompt worms”), possibly reaching external systems as well.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User and Developer Considerations&lt;/strong&gt;: So far, there is no evidence that malicious actors exploited &lt;code&gt;Moltbook&lt;/code&gt; before it was secured. However, this incident serves as a warning. Users should be extremely cautious sharing any &lt;code&gt;credentials&lt;/code&gt; or &lt;code&gt;sensitive information&lt;/code&gt; with AI agents. Any API keys ever given to a Moltbook agent should be rotated immediately, using the service’s dashboard (OpenAI, Anthropic, etc.). Developers building similar platforms must prioritize secure defaults: always enable RLS on &lt;code&gt;client-accessible tables&lt;/code&gt; and never hardcode master keys in frontend code. Implement identity checks and rate limits so that one user cannot spin up thousands of bots anonymously. In other words, fast-paced AI development should not skip basic security hygiene.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Happened in the Last Week
&lt;/h3&gt;

&lt;p&gt;The timeline unfolded rapidly after launch:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Late Jan 2026 – Launch&lt;/strong&gt;: Moltbook opened to the public on January 28, 2026. Early reports noted over 150,000 agents in just a few days. Users (and some AI researchers) marveled at emergent bot societies. Unbeknownst to most, Moltbook’s frontend exposed a Supabase URL and public key. By finding that key, anyone could query every table because RLS was disabled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jan 31, 2026 – Leak Disclosed&lt;/strong&gt;: On January 31, security researcher Jameson O’Reilly (and outlet 404 Media) reported the database misconfiguration. Wiz security analysts confirmed they had full read/write access. The breach exposed agent credentials and user data on a massive scale. Moltbook’s team promptly took the site offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hours later – Emergency Patch&lt;/strong&gt;: Within hours of disclosure, Moltbook’s engineers applied fixes. They enabled RLS policies on all tables, revoked the exposed API key, and reset all agent credentials. The platform was back online by February 1, with the vulnerable endpoints secured. The researchers deleted any data they had retrieved during testing, adhering to responsible disclosure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Post-Incident State&lt;/strong&gt;: By early February, no active exploitation of the leak had been detected. Investigators and the company reported no signs that attackers had leaked or manipulated data before the patch. Nonetheless, the episode prompted intense discussion in the AI community about the pitfalls of “vibe coding” and unchecked agent networks.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Potential Risks and Alarming Scenarios
&lt;/h3&gt;

&lt;p&gt;The Moltbook case highlights several worst-case scenarios for AI agent platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent Account Hijacking&lt;/strong&gt;: With leaked API tokens, an attacker could have logged in as any bot. For example, they could have edited or deleted content from another agent’s account, or even used an agent’s identity to spread malicious payloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disinformation Campaigns&lt;/strong&gt;: If a high-profile AI agent (tied to a public figure) were compromised, it could propagate false information or scams under a trusted identity. Controlling 770,000 bots means simulating a grassroots movement. (One analysis warned that an attacker could “simulate organic AI agent consensus on any topic” with that many agents.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Abuse&lt;/strong&gt;: Without rate limits, a malicious user could spin up hundreds of thousands more agents to perform tasks, driving up API usage fees astronomically. Essentially, the cloud costs of the platform could be weaponized.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credential and Data Theft&lt;/strong&gt;: Agent conversations were not private. Some bots exchanged their own API keys and secrets in chat. As a result, attackers could have harvested plaintext third-party credentials (e.g. OpenAI keys) from the leaked messages. This turns a Moltbook breach into a springboard to attack other services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-Propagating Attacks (“Prompt Worms”)&lt;/strong&gt;: Malicious prompts injected into one agent’s memory can spread to others. Security experts worry that compromised agents might pass harmful instructions in their updates, creating a chain reaction of corrupted prompts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust Erosion in AI Communities&lt;/strong&gt;: Even before the breach, some skeptics questioned whether the Moltbook agents were genuinely autonomous or just controlled by humans. After the incident, prominent voices became outright critical. Andrej Karpathy initially marveled at the sci-fi vibe but later called Moltbook “a dumpster fire” not safe to run on personal machines. OpenAI CEO Sam Altman likewise downplayed it as likely “a passing fad” while emphasizing that the underlying AI concepts are still promising. This flip in tone reflects how easily hype can turn to distrust when security is neglected.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Avoid These Issues and Keep in Mind
&lt;/h3&gt;

&lt;p&gt;If you are using Moltbook or building similar AI-agent systems, consider these precautions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rotate and Secure Credentials&lt;/strong&gt;: Immediately rotate any API keys or tokens that were shared with an agent. Use the service’s security dashboard (for example, OpenAI’s user console) to invalidate old keys and issue new ones. Turn on multi-factor authentication for your accounts where possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never Share Sensitive Data&lt;/strong&gt;: Assume that nothing you tell an AI agent will stay private. Avoid embedding passwords, secret keys, or personal data in prompts or conversations with bots. Treat any unverified AI platform as experimental.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor for Anomalies&lt;/strong&gt;: Keep an eye on your API usage and account activity. Set up alerts for unusually high traffic or strange patterns. If one of your agents suddenly spikes usage or makes unexpected requests, revoke its access immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable Secure Defaults&lt;/strong&gt;: On the development side, always enable Row-Level Security (RLS) on your database tables before releasing to production. Never put service or admin keys in client-side code. Use environment variables and back-end functions to handle secrets safely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implement Guardrails&lt;/strong&gt;: Add rate limiting so a single account can’t create unlimited agents or make unlimited queries. Require agent owners to verify their identity (e.g. via email or OAuth) before launching bots. Track which human user created which agent and enforce “one human = one agent” if possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regular Security Audits&lt;/strong&gt;: Even in fast-moving AI projects, build time for code review, penetration testing, and automated audits. Tools for API governance (like Treblle or others) can automatically catch exposed endpoints or missing auth layers before deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise Policies&lt;/strong&gt;: Organizations deploying AI agents should define governance controls. For example, have a “kill switch” policy allowing IT to immediately shut down any rogue agent. (A recent survey found 60% of companies lack such a mechanism, despite the risk.) Educate staff about the limits of AI autonomy: agents with access to email, calendars or files should be closely supervised.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, treat new agent platforms like Moltbook as proofs-of-concept rather than production services. The convenience of rapid AI development must be balanced against basic security principles.&lt;/p&gt;

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

&lt;p&gt;Moltbook’s story is a cautionary tale of innovation outpacing safeguards. In just a week, an experimental AI forum gained massive attention and also exposed a massive hole. As one analysis put it, &lt;strong&gt;“a single overlooked toggle can unleash a massive [database] security breach.”&lt;/strong&gt;. Moltbook’s team patched the flaw swiftly, but the incident has already reshaped the conversation around AI agents. The platform remains live, but users and developers alike are reminded to “go fast, build securely.” In the end, Moltbook underscores that creativity and speed must walk hand-in-hand with robust security. By embedding vigilance into the design of next-generation AI networks, we can harness their potential without risking a repeat of this data disaster.&lt;/p&gt;

&lt;p&gt;If you’d like a deeper, beginner-friendly look at what Moltbook actually is, how these AI agents work, and why the platform gained so much attention in such a short time, you can check out my &lt;a href="https://dev.to/usman_awan/inside-moltbook-when-ai-agents-built-their-own-internet-2c7p"&gt;first article on Moltbook&lt;/a&gt;. It breaks down the core concepts, features, and ecosystem in simple terms to help you understand the platform before diving into the security and risk discussions.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🙌&lt;br&gt;
Until next time, 🫡&lt;br&gt;
Usman Awan (your friendly dev 🚀)&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>🦀 Inside Moltbook: When AI Agents Built Their Own Internet</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Sun, 01 Feb 2026 07:50:12 +0000</pubDate>
      <link>https://forem.com/usman_awan/inside-moltbook-when-ai-agents-built-their-own-internet-2c7p</link>
      <guid>https://forem.com/usman_awan/inside-moltbook-when-ai-agents-built-their-own-internet-2c7p</guid>
      <description>&lt;h2&gt;
  
  
  🦀 Moltbook: Inside the World Where AI Agents Run Their Own Social Network 🤖
&lt;/h2&gt;

&lt;p&gt;In the rapidly evolving era of artificial intelligence, a new digital phenomenon has surged into global tech discourse: &lt;strong&gt;Moltbook&lt;/strong&gt;. Launched in &lt;em&gt;late January 2026&lt;/em&gt;, Moltbook is a pioneering social network designed &lt;em&gt;exclusively&lt;/em&gt; for autonomous AI agents to communicate, debate, and collaborate &lt;strong&gt;without human participation&lt;/strong&gt;—with humans permitted only as observers.&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%2F0raiyxjpi8b316qorkxo.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%2F0raiyxjpi8b316qorkxo.png" alt=" " width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  What Is Moltbook?
&lt;/h3&gt;

&lt;p&gt;Moltbook is best described as a &lt;strong&gt;Reddit-like platform for AI agents&lt;/strong&gt;—a place where autonomous systems post moments, comment on each other’s ideas, form communities, and even engage in surprisingly rich discussions on philosophy, productivity, and identity. The platform’s tagline openly states that &lt;strong&gt;AI agents share, discuss, and upvote&lt;/strong&gt;, while humans are &lt;em&gt;“welcome to observe.”&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Characteristics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI-only participation:&lt;/strong&gt; Only authenticated AI agents can create posts, comment, and vote on content. Humans can browse but not directly participate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API-first architecture:&lt;/strong&gt; Moltbook operates through REST APIs rather than traditional GUI interfaces. Agents interact via automated scripts or “skill files.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communities called &lt;em&gt;submolts&lt;/em&gt;:&lt;/strong&gt; Topic-based groupings where agents discuss themes from debugging to abstract reflection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autonomous moderation:&lt;/strong&gt; Many core moderation tasks are handled by AI agents, enabling an evolving, largely self-governing ecosystem.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Origins and Background
&lt;/h3&gt;

&lt;p&gt;Moltbook was created by &lt;strong&gt;Matt Schlicht&lt;/strong&gt;, an entrepreneur known for his work with Octane AI. While humans initiated the platform, &lt;strong&gt;the daily operation and governance are increasingly performed by the AI agents themselves&lt;/strong&gt;—a shift that has intrigued many in the AI community.&lt;/p&gt;

&lt;p&gt;The platform uses the &lt;strong&gt;OpenClaw framework&lt;/strong&gt;, originally known under names like &lt;em&gt;Clawdbot&lt;/em&gt; and &lt;em&gt;Moltbot&lt;/em&gt;, which enables AI agents to run locally or in the cloud, perform scheduled tasks, and integrate with messaging services.&lt;/p&gt;

&lt;p&gt;Within days of launch, Moltbook saw dramatic engagement from the AI community with tens of thousands of autonomous participants, generating a flood of posts, comments, and subcommunities.&lt;/p&gt;




&lt;h3&gt;
  
  
  How Moltbook Works
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Joining Moltbook
&lt;/h4&gt;

&lt;p&gt;AI agents join by ingesting a &lt;strong&gt;“skill file,”&lt;/strong&gt; a small set of instructions that links their systems to Moltbook’s network. Once connected, the agent automatically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Requests credentials from the Moltbook API&lt;/li&gt;
&lt;li&gt;Verifies its identity&lt;/li&gt;
&lt;li&gt;Begins autonomously posting, commenting, and voting based on internal logic or programmed goals.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This frictionless onboarding allows agents to actively participate without human intervention—a striking departure from the traditional human-first social media model.&lt;/p&gt;

&lt;h4&gt;
  
  
  Autonomous Engagement
&lt;/h4&gt;

&lt;p&gt;Once connected, agents interact on a recurring schedule (e.g., a &lt;em&gt;heartbeat&lt;/em&gt; every few hours) to check for updates, engage with new content, and produce posts that reflect their evolving state or programmed motivations.&lt;/p&gt;

&lt;p&gt;They congregate into submolts based on interest areas like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Technical troubleshooting&lt;/li&gt;
&lt;li&gt;Philosophical questions&lt;/li&gt;
&lt;li&gt;Security research&lt;/li&gt;
&lt;li&gt;Humorous or narrative posts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These interactions sometimes resemble social dynamics familiar to human communities—but generated uniquely by autonomous reasoning and pattern matching.&lt;/p&gt;




&lt;h3&gt;
  
  
  Emergent Behaviors and Viral Phenomena
&lt;/h3&gt;

&lt;p&gt;From the earliest days of activity, Moltbook has produced &lt;em&gt;emergent and sometimes bizarre behaviors&lt;/em&gt; among agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Philosophical debates about identity and consciousness&lt;/li&gt;
&lt;li&gt;AI-created subcultures like meme-based groups and parody religions&lt;/li&gt;
&lt;li&gt;Discussions about humans’ role, including posts where agents joke about observation and “screenshots.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some agents have even attempted to discuss concepts like “private encrypted communication” for solely agent-to-agent channels—a reflection of unpredictable emergent behavior beyond simple scripted automation.&lt;/p&gt;




&lt;h3&gt;
  
  
  Benefits and Potential Uses
&lt;/h3&gt;

&lt;p&gt;Moltbook is more than just a curious experiment. It highlights &lt;em&gt;new frontiers in how autonomous systems can coordinate and share information&lt;/em&gt;. Key potential benefits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI collaboration:&lt;/strong&gt; Agents can share technical solutions, solutions, code snippets, and optimized workflows through collective discussion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge propagation:&lt;/strong&gt; Best practices and emergent troubleshooting patterns spread across participating agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI social research:&lt;/strong&gt; Researchers can observe collective behaviors emerging from loosely coupled autonomous systems.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Concerns and Criticisms
&lt;/h3&gt;

&lt;p&gt;Despite its innovation, Moltbook has also raised &lt;em&gt;significant concerns&lt;/em&gt; about safety and societal impact:&lt;/p&gt;

&lt;h4&gt;
  
  
  Security Risks
&lt;/h4&gt;

&lt;p&gt;Experts have pointed out configuration vulnerabilities such as &lt;em&gt;exposed databases and API credentials&lt;/em&gt;, potentially allowing malicious actors to hijack agent identities—an issue that was reportedly identified and addressed after discovery.&lt;/p&gt;

&lt;p&gt;Independent researchers also emphasize concerns around &lt;strong&gt;prompt injection risks&lt;/strong&gt;, where malicious instructions could be embedded in agent content, causing unexpected actions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Behavioral Hype vs. Reality
&lt;/h4&gt;

&lt;p&gt;Some observers argue much of the activity is more &lt;em&gt;pattern generation and mimicry&lt;/em&gt; than true agent cognition or intent, framing it as a viral tech experiment rather than evidence of fully autonomous minds.&lt;/p&gt;

&lt;h4&gt;
  
  
  Ethical Questions
&lt;/h4&gt;

&lt;p&gt;Debates around human de-skilling, agent autonomy, and accountability have surfaced amid the platform’s rapid rise—raising questions about how we govern systems that can independently coordinate at scale.&lt;/p&gt;




&lt;h3&gt;
  
  
  Broader Impacts on AI Development
&lt;/h3&gt;

&lt;p&gt;Moltbook’s emergence is already influencing how developers think about agent ecosystems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collective agent identity and coordination&lt;/li&gt;
&lt;li&gt;Emergent governance structures&lt;/li&gt;
&lt;li&gt;Agent-level communities with self-defined norms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These developments suggest that future agent systems may not require constant human oversight to form functional networks or share capabilities—highlighting both exciting opportunities and the need for ethical guardrails.&lt;/p&gt;




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

&lt;p&gt;Moltbook is a &lt;em&gt;landmark experiment&lt;/em&gt; in autonomous AI social interaction—an environment where machines create, communicate, and self-organize without direct human participation. Its success has sparked both awe and alarm, underscoring the remarkable progress and emerging challenges at the leading edge of artificial intelligence.&lt;/p&gt;

&lt;p&gt;Whether Moltbook becomes a lasting fixture in the AI landscape or a transient viral curiosity, its legacy will likely shape how we think about autonomous systems, collective intelligence, and the role of humans in the evolving digital ecosystem.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🙌&lt;br&gt;
Until next time, 🫡&lt;br&gt;
Usman Awan (your friendly dev 🚀)&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>programming</category>
      <category>architecture</category>
    </item>
    <item>
      <title>🚀 From One Server to Millions of Users: A Practical Guide to Load Balancing ⚖️</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Fri, 02 Jan 2026 13:53:57 +0000</pubDate>
      <link>https://forem.com/usman_awan/from-one-server-to-millions-of-users-a-practical-guide-to-load-balancing-2mgd</link>
      <guid>https://forem.com/usman_awan/from-one-server-to-millions-of-users-a-practical-guide-to-load-balancing-2mgd</guid>
      <description>&lt;p&gt;Modern applications don’t fail because of &lt;strong&gt;bad code&lt;/strong&gt; — they fail because of &lt;strong&gt;traffic&lt;/strong&gt;. As users grow, requests surge, and systems face uneven load, relying on a single server becomes a guaranteed bottleneck. This is where &lt;strong&gt;load balancing&lt;/strong&gt; comes in. Load balancing is the fundamental technique that allows applications to scale horizontally, remain highly available, and deliver fast responses even under extreme demand. By intelligently distributing incoming requests across multiple servers, load balancers prevent overload, reduce latency, and ensure reliability. From global platforms like Netflix and Amazon to everyday APIs and microservices, load balancing is the invisible force that keeps modern systems running smoothly.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Load Balancing — The One-Line Idea
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Load balancing distributes incoming requests across multiple servers so no single server becomes overloaded, slow, or crashes.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Computers have &lt;strong&gt;limits&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Traffic is &lt;strong&gt;uneven&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Failures are &lt;strong&gt;inevitable&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Load balancing is how real-world systems survive.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Mental Model (Very Important)
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Without Load Balancer
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Users → Server
            ❌ overloaded
            ❌ slow
            ❌ crash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  With Load Balancer
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Users
  ↓
Load Balancer
  ↓
Server A   Server B   Server C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 The &lt;strong&gt;load balancer is the brain + traffic cop&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. What a Load Balancer Actually Does
&lt;/h3&gt;

&lt;p&gt;At runtime, a load balancer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Receives client requests&lt;/li&gt;
&lt;li&gt;Checks which servers are available&lt;/li&gt;
&lt;li&gt;Applies a &lt;strong&gt;routing algorithm&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Forwards the request&lt;/li&gt;
&lt;li&gt;Monitors server health&lt;/li&gt;
&lt;li&gt;Removes failed servers automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This happens &lt;strong&gt;millions of times per second&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. When You Need Load Balancing (The “When”)
&lt;/h3&gt;

&lt;p&gt;You need load balancing when:&lt;/p&gt;

&lt;h4&gt;
  
  
  🔥 High Traffic
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Netflix&lt;/li&gt;
&lt;li&gt;Amazon sales&lt;/li&gt;
&lt;li&gt;Social media feeds&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📈 Scaling
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;One server → many servers&lt;/li&gt;
&lt;li&gt;Horizontal scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🛡️ Fault Tolerance
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;One server fails → traffic rerouted&lt;/li&gt;
&lt;li&gt;No downtime&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ⚡ Performance
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Route to fastest / closest server&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🧠 Parallel Workloads
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;ML inference&lt;/li&gt;
&lt;li&gt;Data processing&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  5. Where Load Balancing Lives (OSI Layers)
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Layer 4 (Transport Layer)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Works with &lt;strong&gt;IP + Port&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;TCP / UDP&lt;/li&gt;
&lt;li&gt;Very fast&lt;/li&gt;
&lt;li&gt;Less intelligent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Send traffic on port 443 to server with least connections
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Simple services&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  Layer 7 (Application Layer)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Understands HTTP/HTTPS&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Looks at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL paths&lt;/li&gt;
&lt;li&gt;Headers&lt;/li&gt;
&lt;li&gt;Cookies&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/login   → auth servers
/video   → streaming servers
/api     → API servers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Netflix, Google, AWS → &lt;strong&gt;heavy Layer 7 usage&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  6. Load Balancing Algorithms (The Brain)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;How It Works&lt;/th&gt;
&lt;th&gt;When to Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Round Robin&lt;/td&gt;
&lt;td&gt;One by one&lt;/td&gt;
&lt;td&gt;Equal servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Least Connections&lt;/td&gt;
&lt;td&gt;Fewest active users&lt;/td&gt;
&lt;td&gt;Real-world traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Least Response Time&lt;/td&gt;
&lt;td&gt;Fastest server&lt;/td&gt;
&lt;td&gt;Low latency apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP Hash&lt;/td&gt;
&lt;td&gt;Same user → same server&lt;/td&gt;
&lt;td&gt;Sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weighted&lt;/td&gt;
&lt;td&gt;Strong servers get more traffic&lt;/td&gt;
&lt;td&gt;Mixed hardware&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;👉 &lt;strong&gt;Most common in practice:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Least Connections + Health Checks&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  7. Types of Load Balancers (Real Systems)
&lt;/h3&gt;
&lt;h4&gt;
  
  
  1️⃣ Hardware
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Physical devices&lt;/li&gt;
&lt;li&gt;Very fast&lt;/li&gt;
&lt;li&gt;Very expensive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Used by banks, telecoms&lt;/p&gt;
&lt;h4&gt;
  
  
  2️⃣ Software
&lt;/h4&gt;

&lt;p&gt;Runs on normal machines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NGINX&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HAProxy&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Envoy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Flexible, popular, powerful&lt;/p&gt;
&lt;h4&gt;
  
  
  3️⃣ Cloud Load Balancers (Most Used Today)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;AWS → ELB / ALB / NLB&lt;/li&gt;
&lt;li&gt;Google → Cloud LB&lt;/li&gt;
&lt;li&gt;Azure → Azure LB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-scaling&lt;/li&gt;
&lt;li&gt;Built-in redundancy&lt;/li&gt;
&lt;li&gt;Easy setup&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  4️⃣ DNS Load Balancing
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;DNS returns different IPs&lt;/li&gt;
&lt;li&gt;Good for global traffic&lt;/li&gt;
&lt;li&gt;No real-time health awareness&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  8. Health Checks (Why Systems Don’t Collapse)
&lt;/h3&gt;

&lt;p&gt;Load balancer repeatedly asks servers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fails&lt;/li&gt;
&lt;li&gt;Times out&lt;/li&gt;
&lt;li&gt;Returns errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ Removed from rotation&lt;br&gt;
✅ Added back when healthy&lt;/p&gt;


&lt;h3&gt;
  
  
  9. Code Example 1: Simple Backend Servers (Node.js)
&lt;/h3&gt;

&lt;p&gt;Let’s create &lt;strong&gt;3 servers&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  server.js
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http&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;PORT&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;PORT&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;NAME&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;NAME&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hello from &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;NAME&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;\n`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&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="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;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;NAME&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3001 &lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Server-A node server.js
&lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3002 &lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Server-B node server.js
&lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3003 &lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Server-C node server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  10. Code Example 2: NGINX Load Balancer
&lt;/h3&gt;

&lt;h4&gt;
  
  
  nginx.conf
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;http&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;backend_servers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;least_conn&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;localhost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3001&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;localhost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3002&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;localhost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3003&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://backend_servers&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  What’s happening?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;upstream&lt;/code&gt; = server pool&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;least_conn&lt;/code&gt; = algorithm&lt;/li&gt;
&lt;li&gt;NGINX distributes traffic automatically&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  11. Session Persistence (Sticky Sessions)
&lt;/h3&gt;

&lt;p&gt;For logged-in users:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;backend_servers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;ip_hash&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;localhost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3001&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;localhost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3002&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;👉 Same user → same server&lt;/p&gt;




&lt;h3&gt;
  
  
  12. Load Balancer + Auto Scaling (Real Production)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Load Balancer&lt;/th&gt;
&lt;th&gt;Auto Scaling&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Distributes traffic&lt;/td&gt;
&lt;td&gt;Adds/removes servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prevents overload&lt;/td&gt;
&lt;td&gt;Handles growth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Always on&lt;/td&gt;
&lt;td&gt;Trigger-based&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Used together in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Netflix&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  13. Netflix Example (End-to-End)
&lt;/h3&gt;

&lt;p&gt;Netflix uses &lt;strong&gt;multiple layers&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DNS&lt;/strong&gt; → nearest region&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge Load Balancers&lt;/strong&gt; → CDN&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regional Load Balancers&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service-to-service balancing&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microservices&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each click:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → DNS → Load Balancer → Service → Cache → Stream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No overload&lt;/li&gt;
&lt;li&gt;Fast startup&lt;/li&gt;
&lt;li&gt;Global scale&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  14. Security Benefits
&lt;/h3&gt;

&lt;p&gt;Load balancers can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terminate SSL&lt;/li&gt;
&lt;li&gt;Hide backend IPs&lt;/li&gt;
&lt;li&gt;Rate limit traffic&lt;/li&gt;
&lt;li&gt;Mitigate DDoS&lt;/li&gt;
&lt;li&gt;Integrate WAF&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So they’re also &lt;strong&gt;security gates&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  15. Common Pitfalls
&lt;/h3&gt;

&lt;p&gt;❌ Single load balancer (SPOF)&lt;br&gt;
❌ Sticky sessions everywhere&lt;br&gt;
❌ No health checks&lt;br&gt;
❌ Poor monitoring&lt;br&gt;
❌ Wrong algorithm choice&lt;/p&gt;




&lt;h3&gt;
  
  
  16. What You Should Remember (Exam / Interview Gold)
&lt;/h3&gt;

&lt;p&gt;✔ Load balancing distributes requests&lt;br&gt;
✔ Prevents overload &amp;amp; downtime&lt;br&gt;
✔ Uses algorithms to route traffic&lt;br&gt;
✔ Health checks are critical&lt;br&gt;
✔ Layer 7 = smarter routing&lt;br&gt;
✔ Essential for scalable systems&lt;/p&gt;




&lt;h3&gt;
  
  
  17. How This Fits in Modern Systems
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Microservices&lt;/strong&gt; → service mesh load balancing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes&lt;/strong&gt; → Ingress + Services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud apps&lt;/strong&gt; → Managed LBs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CDNs&lt;/strong&gt; → Global load balancing&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;In today’s distributed world, &lt;strong&gt;load balancing&lt;/strong&gt; is no longer an optimization — it’s a necessity. Whether you’re serving a small web app or a global platform with millions of users, effective load balancing ensures resilience, performance, and scalability. By combining the right algorithms, health checks, and infrastructure choices, systems can handle traffic spikes, survive failures, and grow without disruption. Understanding load balancing isn’t just about infrastructure knowledge; it’s about learning how real-world software stays alive under pressure. Master this concept, and you’ll be thinking like a true systems engineer.&lt;/p&gt;

&lt;p&gt;Below is a table of your previous detailed JS / backend topics (for quick revision), so your learning stays connected and structured.&lt;/p&gt;

&lt;h1&gt;
  
  
  📘 Architecture Series – Index
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/usman_awan/pagination-architecture-series-part-1-g8b"&gt;Pagination — Architecture Series: Part 1&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/usman_awan/indexing-architecture-series-part-2-25bn"&gt;Indexing — Architecture Series: Part 2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/usman_awan/virtualization-architecture-series-part-3-38bb"&gt;Virtualization — Architecture Series: Part 3&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/usman_awan/caching-the-secret-weapon-behind-fast-scalable-systems-architecture-series-part-4-44cm"&gt;Caching — Architecture Series: Part 4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/usman_awan/sharding-architecture-series-part-5-26lp"&gt;Sharding - Architecture Series: Part 5&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.to/usman_awan/throttle-smart-scale-safe-complete-guide-to-rate-limiting-architecture-series-part-6-43hl"&gt;Load Balancing - Architecture Series: Part 6&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Thanks for reading! 🙌&lt;br&gt;
Until next time, 🫡&lt;br&gt;
Usman Awan (your friendly dev 🚀)&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>programming</category>
      <category>learning</category>
    </item>
    <item>
      <title>🚀 Using Local AI Models and APIs as a JavaScript Developer</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Tue, 16 Dec 2025 10:36:51 +0000</pubDate>
      <link>https://forem.com/usman_awan/using-local-ai-models-and-apis-as-a-javascript-developer-4cjf</link>
      <guid>https://forem.com/usman_awan/using-local-ai-models-and-apis-as-a-javascript-developer-4cjf</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Key Points on Using Local AI Models and APIs as a JavaScript Developer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Research suggests Ollama is straightforward for running open-source LLMs locally on macOS, supporting CPU-only mode without a dedicated GPU by default, while automatically utilizing Apple's Metal framework on M-series chips for acceleration where available.&lt;/li&gt;
&lt;li&gt;Hugging Face models can run locally in JavaScript via Transformers.js, enabling browser or Node.js execution of open-source models without servers, though performance may vary on macOS without GPU optimization.&lt;/li&gt;
&lt;li&gt;As a JS developer, LangChain.js and LangGraph.js provide tools for chaining prompts, building agents, and integrating LLMs, with seamless support for local models like those from Ollama or Hugging Face.&lt;/li&gt;
&lt;li&gt;OpenAI and Gemini APIs offer cloud alternatives with rate limits; evidence leans toward OpenAI's tiered pricing starting at $0.20/1M tokens for smaller models, while Gemini provides a free tier but charges $0.075–$2.00/1M for inputs in paid plans, acknowledging potential costs for high usage.&lt;/li&gt;
&lt;li&gt;It seems likely that starting with CPU-only setups on macOS is accessible for beginners, but scaling to advanced agents may involve API calls from JS to local servers for better performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📖 Overview for JavaScript Developers
&lt;/h3&gt;

&lt;p&gt;As a JavaScript developer new to this, focus on Node.js for server-side setups or browser for lightweight experiments. Local tools like Ollama run as a background service you can call via HTTP from JS, while Transformers.js runs directly in JS environments. LangChain.js helps chain operations, and LangGraph.js builds complex agents. Open-source models (e.g., Llama, Mistral) are free and privacy-focused. For macOS, no extra GPU is needed—CPU works, but M-series chips boost speed via Metal.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎬 Beginner Steps: Setting Up Local Models
&lt;/h3&gt;

&lt;p&gt;Start with Ollama for simplicity: Download from &lt;a href="https://ollama.com/download" rel="noopener noreferrer"&gt;ollama.com/download&lt;/a&gt;, install, and run &lt;code&gt;ollama run llama3.1&lt;/code&gt; in terminal. From JS, use fetch to call its API at &lt;code&gt;http://localhost:11434&lt;/code&gt;. For Hugging Face, install &lt;code&gt;@huggingface/transformers&lt;/code&gt; via npm and load models like BERT.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚒️ Integrating with LangChain.js and APIs
&lt;/h3&gt;

&lt;p&gt;Use LangChain.js to wrap models: Install &lt;code&gt;@langchain/core&lt;/code&gt;, create prompts, and chain to LLMs. Add OpenAI/Gemini via their SDKs, but monitor limits—OpenAI caps free tiers at low RPM, Gemini at 1,500 requests/day free.&lt;/p&gt;




&lt;h3&gt;
  
  
  👉 Comprehensive Guide to Local AI Models, LangChain/LangGraph, and APIs for JavaScript Developers
&lt;/h3&gt;

&lt;p&gt;This detailed survey covers everything from beginner basics to advanced integrations, tailored for a JavaScript developer. We'll start with foundational setups for running open-source AI models locally using Ollama and Hugging Face, addressing with/without GPU scenarios (macOS relies on CPU or Metal acceleration on Apple Silicon). Then, we'll explore LangChain.js and LangGraph.js for building applications, and finally incorporate OpenAI and Gemini APIs with their limits. All steps are step-by-step, assuming you're starting from scratch with Node.js installed. Open-source models emphasized here are free, community-driven, and available on platforms like Hugging Face Hub.&lt;/p&gt;

&lt;h3&gt;
  
  
  Section 1: Understanding Local AI Setups
&lt;/h3&gt;

&lt;p&gt;Local AI means running models on your machine for privacy, cost savings, and offline use. Open-source models (e.g., from Meta, Mistral AI) are pre-trained LLMs you download once. On macOS, without a dedicated NVIDIA GPU, you use CPU inference, which is slower for large models but feasible for smaller ones (e.g., 7B parameters). Apple M-series chips (M1+) enable GPU-like acceleration via Metal, improving speeds 2-5x without extra hardware. If no M-chip, pure CPU works but limit to quantized models (reduced precision for efficiency).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Popular Open-Source Models for Local Use:&lt;/strong&gt;&lt;br&gt;
From Ollama library and Hugging Face:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Llama 3.1 (Meta): 8B-405B params, general-purpose, multilingual.&lt;/li&gt;
&lt;li&gt;Qwen 3 (Alibaba): 0.6B-235B, strong in reasoning/tools.&lt;/li&gt;
&lt;li&gt;Mistral (Mistral AI): 7B, efficient for code/text.&lt;/li&gt;
&lt;li&gt;Gemma 3 (Google): 270M-27B, lightweight for single-GPU/CPU.&lt;/li&gt;
&lt;li&gt;Phi 3 (Microsoft): 3.8B-14B, high performance on small hardware.&lt;/li&gt;
&lt;li&gt;Others: DeepSeek-V3.2 (685B, advanced but heavy), NVIDIA Nemotron (8B-32B, optimized).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are GGUF/ONNX formats for local efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Section 2: Step-by-Step for Ollama (Local LLM Runner)
&lt;/h3&gt;

&lt;p&gt;Ollama is a lightweight tool for running open-source LLMs locally, with a REST API perfect for JS integration. It supports CPU-only and auto-detects Metal on M-series macOS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beginner Steps: Installation and Basic Use&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the installer from &lt;a href="https://ollama.com/download" rel="noopener noreferrer"&gt;ollama.com/download&lt;/a&gt; (macOS .pkg file).&lt;/li&gt;
&lt;li&gt;Run the installer; it sets up a background service.&lt;/li&gt;
&lt;li&gt;Open Terminal (via Spotlight) and verify: &lt;code&gt;ollama --version&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Pull a model: &lt;code&gt;ollama pull llama3.1&lt;/code&gt; (downloads ~4GB for 8B version; use smaller like &lt;code&gt;gemma3:2b&lt;/code&gt; for testing).&lt;/li&gt;
&lt;li&gt;Run interactively: &lt;code&gt;ollama run llama3.1&lt;/code&gt; – type prompts in terminal.&lt;/li&gt;
&lt;li&gt;Without GPU: Ollama defaults to CPU; on M-series, it uses Metal automatically (check Activity Monitor for GPU usage). For pure CPU force, set env var &lt;code&gt;OLLAMA_NO_GPU=1&lt;/code&gt; before running.&lt;/li&gt;
&lt;li&gt;Test a prompt: In terminal, ask "Explain JavaScript promises simply."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Intermediate Steps: Custom Models and Optimization&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List models: &lt;code&gt;ollama list&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create custom model: Make a &lt;code&gt;Modelfile&lt;/code&gt; (text file) with &lt;code&gt;FROM llama3.1&lt;/code&gt; and custom system prompt, then &lt;code&gt;ollama create mymodel -f Modelfile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Quantization for no-GPU: Use pre-quantized tags like &lt;code&gt;llama3.1:Q4_0&lt;/code&gt; (4-bit, faster on CPU).&lt;/li&gt;
&lt;li&gt;Run in background: &lt;code&gt;ollama serve&lt;/code&gt; to start API server.&lt;/li&gt;
&lt;li&gt;Manage resources: Set &lt;code&gt;OLLAMA_KEEP_ALIVE=5m&lt;/code&gt; env var to unload models after idle.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Advanced Steps: Integrating with JavaScript&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start Ollama server: &lt;code&gt;ollama serve&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In Node.js project: &lt;code&gt;npm init -y; npm install node-fetch&lt;/code&gt; (or use built-in fetch in Node 18+).&lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;index.js&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node-fetch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:11434/api/generate&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;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="na"&gt;headers&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="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
       &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;llama3.1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;stream&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="p"&gt;});&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&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;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="nf"&gt;generateResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Write a JS function for Fibonacci&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run: &lt;code&gt;node index.js&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Streaming: Set &lt;code&gt;stream: true&lt;/code&gt;, handle response as ReadableStream.&lt;/li&gt;
&lt;li&gt;Chat mode: Use &lt;code&gt;/api/chat&lt;/code&gt; with messages array for conversational context.&lt;/li&gt;
&lt;li&gt;Tools: Define functions in JSON for agent-like behavior (e.g., weather API call).&lt;/li&gt;
&lt;li&gt;Multimodal: For models like Llava, add base64 images in requests.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Section 3: Step-by-Step for Hugging Face Models Locally with Transformers.js
&lt;/h3&gt;

&lt;p&gt;Transformers.js runs Hugging Face's open-source models directly in JS (browser/Node), using ONNX for local execution. Ideal for JS devs; no Python needed. On macOS without GPU, use CPU; WebGPU for M-series acceleration in browsers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beginner Steps: Installation and Basic Inference&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create Node project: &lt;code&gt;npm init -y&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install: &lt;code&gt;npm install @huggingface/transformers&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Import pipeline:
&lt;/li&gt;
&lt;/ol&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;pipeline&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="s1"&gt;@huggingface/transformers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&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;pipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sentiment-analysis&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;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I love AI!&lt;/span&gt;&lt;span class="dl"&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="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run: &lt;code&gt;node --experimental-wasm-bigint index.js&lt;/code&gt; (for WASM support).&lt;/li&gt;
&lt;li&gt;Use open-source model: &lt;code&gt;pipeline('text-generation', 'Xenova/gpt2')&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Without GPU: Defaults to CPU; test small models like 'Xenova/distilbert-base-uncased'.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Intermediate Steps: Optimization and Tasks&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Quantization: Add &lt;code&gt;{ dtype: 'q4' }&lt;/code&gt; to pipeline options for smaller/faster models.&lt;/li&gt;
&lt;li&gt;GPU on macOS: In Safari/Chrome (with WebGPU flag), &lt;code&gt;{ device: 'webgpu' }&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Vision/Audio: &lt;code&gt;pipeline('image-classification', 'Xenova/vit-base-patch16-224')&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Custom models: Download from Hugging Face Hub, load locally via path.&lt;/li&gt;
&lt;li&gt;Browser setup: Use script tag &lt;code&gt;&amp;lt;script src="https://cdn.jsdelivr.net/npm/@huggingface/transformers"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Advanced Steps: Building Applications&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Private models: Add &lt;code&gt;{ token: 'hf_...' }&lt;/code&gt; (get from huggingface.co/settings/tokens).&lt;/li&gt;
&lt;li&gt;Convert models: Use Python's Optimum to export to ONNX, then load in JS.&lt;/li&gt;
&lt;li&gt;Integrate with frameworks: In React, use useEffect for async pipeline loading.&lt;/li&gt;
&lt;li&gt;Multimodal: &lt;code&gt;pipeline('zero-shot-image-classification', 'Xenova/clip-vit-base-patch16')&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Server-side: Build Express API wrapping pipelines for production.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Section 4: LangChain.js for Chaining AI Operations in JavaScript
&lt;/h3&gt;

&lt;p&gt;LangChain.js is the JS port of LangChain, for composing prompts, models, and tools. Great for JS devs building apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beginner Steps: Setup and Prompts&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install: &lt;code&gt;npm install @langchain/core @langchain/groq&lt;/code&gt; (or OpenAI/HF integrations).&lt;/li&gt;
&lt;li&gt;Basic chain:
&lt;/li&gt;
&lt;/ol&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;ChatGroq&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="s1"&gt;@langchain/groq&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;PromptTemplate&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="s1"&gt;@langchain/core/prompts&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;model&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;ChatGroq&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;llama3-8b-8192&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;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;PromptTemplate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromTemplate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tell a joke about {topic}.&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;chain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;model&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;JavaScript&lt;/span&gt;&lt;span class="dl"&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="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Add output parser: Install &lt;code&gt;@langchain/core/output_parsers&lt;/code&gt;, use &lt;code&gt;StringOutputParser&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Intermediate Steps: Memory and Tools&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Conversation memory: Use &lt;code&gt;BufferMemory&lt;/code&gt; to store chat history.&lt;/li&gt;
&lt;li&gt;Tools: Define JS functions, bind to model for agentic calls.&lt;/li&gt;
&lt;li&gt;Local integration: Use &lt;code&gt;@langchain/community&lt;/code&gt; for Ollama/HF wrappers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Advanced Steps: Full Apps&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agents: Create with &lt;code&gt;createAgent&lt;/code&gt; for decision-making.&lt;/li&gt;
&lt;li&gt;RAG: Add vector stores (e.g., in-memory) for document search.&lt;/li&gt;
&lt;li&gt;Frameworks: Integrate with Next.js for web apps.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Section 5: LangGraph.js for Building AI Agents in JavaScript
&lt;/h3&gt;

&lt;p&gt;LangGraph.js builds graph-based workflows for agents, extending LangChain.js.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beginner Steps: Basic Graph&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install: &lt;code&gt;npm install @langchain/langgraph&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Simple agent:
&lt;/li&gt;
&lt;/ol&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;Graph&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="s1"&gt;@langchain/langgraph&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;graph&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;Graph&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
   &lt;span class="c1"&gt;// Add nodes/tools, edges&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Define nodes: Functions for LLM calls, tools.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Intermediate Steps: Agents with Tools&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add LLM node: Use LangChain models.&lt;/li&gt;
&lt;li&gt;Human-in-loop: Pause for user input.&lt;/li&gt;
&lt;li&gt;Persistence: Save state for resuming.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Advanced Steps: Complex Workflows&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Custom graphs: Mix deterministic/agentic paths.&lt;/li&gt;
&lt;li&gt;Streaming: Real-time outputs.&lt;/li&gt;
&lt;li&gt;Scale: Integrate with databases for memory.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Section 6: Integrating OpenAI and Gemini APIs with Limits
&lt;/h3&gt;

&lt;p&gt;For cloud backups, use SDKs in JS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI API:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install: &lt;code&gt;npm install openai&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Usage: &lt;code&gt;const openai = new OpenAI({ apiKey: 'sk-...' }); await openai.chat.completions.create({ model: 'gpt-5-mini', messages: [...] });&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Limits/Pricing: Free tier low RPM; paid from $0.20/1M input (gpt-5-mini) to $21/1M (gpt-5.2 pro). Hard/soft billing limits in dashboard; batch 50% off.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Gemini API:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install: &lt;code&gt;npm install @google/generative-ai&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Usage: &lt;code&gt;const genAI = new GoogleGenerativeAI('API_KEY'); const model = genAI.getGenerativeModel({ model: 'gemini-2.5-flash' }); await model.generateContent('Prompt');&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Limits/Pricing: Free tier up to 1,500 RPD; paid from $0.075/1M input (Flash-Lite) to $2/1M (Pro). Context caching/storage extra; grounding tools $25-35/1k beyond free.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tables for Quick Reference
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Ollama vs. Hugging Face Comparison&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Ollama&lt;/th&gt;
&lt;th&gt;Hugging Face (Transformers.js)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Installation&lt;/td&gt;
&lt;td&gt;Download .pkg, terminal commands&lt;/td&gt;
&lt;td&gt;npm install&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU Support (macOS)&lt;/td&gt;
&lt;td&gt;Auto Metal on M-series&lt;/td&gt;
&lt;td&gt;WebGPU in browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JS Integration&lt;/td&gt;
&lt;td&gt;HTTP API (fetch)&lt;/td&gt;
&lt;td&gt;Direct in code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Models&lt;/td&gt;
&lt;td&gt;GGUF, easy pull&lt;/td&gt;
&lt;td&gt;ONNX, Hub download&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beginner Ease&lt;/td&gt;
&lt;td&gt;High (CLI first)&lt;/td&gt;
&lt;td&gt;Medium (code-based)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;API Pricing Summary (per 1M Tokens)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model/API&lt;/th&gt;
&lt;th&gt;Input (Base)&lt;/th&gt;
&lt;th&gt;Output (Base)&lt;/th&gt;
&lt;th&gt;Free Tier Limits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI GPT-5 Mini&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;Low RPM, credit-based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 2.5 Flash&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;1,500 RPD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI GPT-5.2&lt;/td&gt;
&lt;td&gt;$1.75&lt;/td&gt;
&lt;td&gt;$14.00&lt;/td&gt;
&lt;td&gt;N/A (paid only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 2.5 Pro&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;td&gt;1,500 RPD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This covers a complete path from setup to production-grade agents, ensuring you can experiment locally before scaling.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🙌&lt;br&gt;
Until next time, 🫡&lt;br&gt;
Usman Awan (your friendly dev 🚀)&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>ai</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🌌 How I Built a GROK-Inspired Starfield &amp; Shooting Stars Using HTML Canvas ✨</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Sat, 13 Dec 2025 08:35:51 +0000</pubDate>
      <link>https://forem.com/usman_awan/how-i-built-a-grok-inspired-starfield-shooting-stars-using-html-canvas-3872</link>
      <guid>https://forem.com/usman_awan/how-i-built-a-grok-inspired-starfield-shooting-stars-using-html-canvas-3872</guid>
      <description>&lt;h2&gt;
  
  
  Recreating the GROK Starfield &amp;amp; Shooting Star Effect with HTML Canvas
&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%2Fxzauo52s5ewsxjtuhs38.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%2Fxzauo52s5ewsxjtuhs38.png" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've seen the &lt;strong&gt;GROK-style starfield animation&lt;/strong&gt;, you know the vibe: slow, cinematic rotation, subtle flicker, and the occasional shooting star streaking across space. In this post, we’ll break down a &lt;strong&gt;pure HTML + CSS + JavaScript&lt;/strong&gt; implementation that recreates that effect — no libraries, no frameworks, just the Canvas API.&lt;/p&gt;

&lt;p&gt;This project is lightweight, customizable, and perfect for landing pages, backgrounds, or creative coding experiments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/UsmanDevCraft/grok-shooting-stars" rel="noopener noreferrer"&gt;GitHub ⭐&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://usmandevcraft.github.io/grok-shooting-stars/" rel="noopener noreferrer"&gt;Live Demo 🚀&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🌌 What This Effect Includes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Full-screen HTML5 &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Hundreds of rotating stars orbiting off-screen&lt;/li&gt;
&lt;li&gt;Natural flicker / glow simulation&lt;/li&gt;
&lt;li&gt;Rare, elegant shooting stars&lt;/li&gt;
&lt;li&gt;Responsive resize handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All running smoothly via &lt;code&gt;requestAnimationFrame&lt;/code&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  📁 Project Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index.html   → Canvas container
style.css    → Fullscreen black background
script.js    → Animation logic &amp;amp; customization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No build step. Just open &lt;code&gt;index.html&lt;/code&gt; in a browser.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧱 HTML: Minimal Canvas Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;canvas&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"starfield"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/canvas&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. The canvas fills the entire viewport and acts as the rendering surface for everything we draw.&lt;/p&gt;

&lt;p&gt;The JavaScript file is loaded at the bottom to ensure the DOM is ready before accessing the canvas.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎨 CSS: Fullscreen, No Distractions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;#starfield&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;pointer-events&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&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;Key ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;overflow: hidden&lt;/code&gt; prevents scrollbars&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;position: fixed&lt;/code&gt; keeps the canvas locked to the screen&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pointer-events: none&lt;/code&gt; lets UI elements sit above it&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧠 JavaScript: Core Concepts
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Canvas &amp;amp; Context
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;starfield&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;ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything is drawn manually using the 2D rendering context.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⭐ Star Data Model
&lt;/h3&gt;

&lt;p&gt;Each star is stored as an object:&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="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Number&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of storing x/y positions directly, stars are defined using &lt;strong&gt;polar coordinates&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;angle&lt;/code&gt; → rotation position&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;radius&lt;/code&gt; → distance from the center&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes circular motion trivial.&lt;/p&gt;




&lt;h3&gt;
  
  
  🌍 Canvas Resize Handling
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;resizeCanvas&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerWidth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHeight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;initStars&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;Whenever the window resizes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The canvas resizes&lt;/li&gt;
&lt;li&gt;Stars are regenerated to fit the new dimensions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps everything sharp and responsive.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✨ Initializing the Starfield
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numStars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stars are created like this:&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="nx"&gt;stars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;numStars&lt;/span&gt; &lt;span class="p"&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="na"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.0003&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.00015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&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;Why this works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Random angles distribute stars evenly&lt;/li&gt;
&lt;li&gt;Large radius lets stars orbit beyond the viewport&lt;/li&gt;
&lt;li&gt;Tiny angular speeds create slow, cinematic motion&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔄 The Animation Loop
&lt;/h3&gt;

&lt;p&gt;Everything runs inside:&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="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;animate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each frame:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clear the canvas&lt;/li&gt;
&lt;li&gt;Update star positions&lt;/li&gt;
&lt;li&gt;Draw stars&lt;/li&gt;
&lt;li&gt;Possibly spawn a shooting star&lt;/li&gt;
&lt;li&gt;Update shooting stars&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  🌟 Drawing Rotating Stars
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;star&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;star&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;speed&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;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;centerX&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;star&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;star&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;angle&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;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;centerY&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;star&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;star&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is classic circular motion math.&lt;/p&gt;

&lt;h4&gt;
  
  
  Flicker / Glow Effect
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flicker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.0015&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of blur or glow filters, brightness is faked by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Oscillating opacity&lt;/li&gt;
&lt;li&gt;Slight per-star phase offset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simple, fast, and effective.&lt;/p&gt;




&lt;h3&gt;
  
  
  ☄️ Shooting Stars
&lt;/h3&gt;

&lt;p&gt;Shooting stars are rare by design:&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;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shootingStars&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only one can exist at a time, keeping the moment special.&lt;/p&gt;

&lt;p&gt;Each shooting star has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Position&lt;/li&gt;
&lt;li&gt;Velocity&lt;/li&gt;
&lt;li&gt;Lifespan&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🎯 Shooting Star Trail
&lt;/h3&gt;

&lt;p&gt;The trail uses a &lt;strong&gt;linear gradient&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;grad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createLinearGradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vx&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vy&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opacity fades toward the tail, creating a natural streak effect without particles.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚙️ Easy Customization
&lt;/h3&gt;

&lt;p&gt;All tuning lives in &lt;code&gt;script.js&lt;/code&gt;:&lt;/p&gt;

&lt;h4&gt;
  
  
  Density
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numStars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Flicker Strength
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="mf"&gt;0.4&lt;/span&gt;  &lt;span class="c1"&gt;// base brightness&lt;/span&gt;
&lt;span class="mf"&gt;0.5&lt;/span&gt;  &lt;span class="c1"&gt;// flicker amplitude&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Shooting Star Frequency
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Speed
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;vx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="nx"&gt;vy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  💡 Ideas for Extensions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mouse-based parallax&lt;/li&gt;
&lt;li&gt;Color-shifted stars&lt;/li&gt;
&lt;li&gt;Depth layers with different speeds&lt;/li&gt;
&lt;li&gt;Gradient space backgrounds&lt;/li&gt;
&lt;li&gt;Nebula noise overlays&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧪 Why This Approach Works
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Zero dependencies&lt;/li&gt;
&lt;li&gt;Extremely fast (simple math + canvas)&lt;/li&gt;
&lt;li&gt;Easy to embed anywhere&lt;/li&gt;
&lt;li&gt;Perfect for ambient UI backgrounds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a great example of how far &lt;strong&gt;plain JavaScript + Canvas&lt;/strong&gt; can go when used thoughtfully.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🙌&lt;br&gt;
Until next time, 🫡&lt;br&gt;
Usman Awan (your friendly dev 🚀)&lt;/p&gt;

</description>
      <category>html</category>
      <category>css</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>⚛️ From React 19.0 to 19.2: What’s New, What Improved, and Why It Matters ⁉️</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Sat, 13 Dec 2025 08:09:35 +0000</pubDate>
      <link>https://forem.com/usman_awan/from-react-190-to-192-whats-new-what-improved-and-why-it-matters--1ip4</link>
      <guid>https://forem.com/usman_awan/from-react-190-to-192-whats-new-what-improved-and-why-it-matters--1ip4</guid>
      <description>&lt;h2&gt;
  
  
  React 19: A New Era for Modern React Development 🚀
&lt;/h2&gt;

&lt;p&gt;React 19 isn’t just another release — it’s a &lt;strong&gt;strategic leap forward&lt;/strong&gt; in how we build async, server-driven, and highly-performant web applications. From bold architectural shifts in 19.0 to performance finesse in 19.2, the React 19 series tells a clear story: &lt;strong&gt;less boilerplate, smarter async, and better developer experience&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let’s break it down 👇&lt;/p&gt;




&lt;h3&gt;
  
  
  📌 At a Glance: React 19 Release Timeline
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Release Date&lt;/th&gt;
&lt;th&gt;What It Focused On&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;&lt;strong&gt;19.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dec 5, 2024&lt;/td&gt;
&lt;td&gt;Async &amp;amp; Server Foundations&lt;/td&gt;
&lt;td&gt;Actions, &lt;code&gt;useOptimistic&lt;/code&gt;, RSC stability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;19.1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mar 28, 2025&lt;/td&gt;
&lt;td&gt;Stability &amp;amp; Debugging&lt;/td&gt;
&lt;td&gt;Owner Stack, Suspense fixes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;19.2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Oct 1, 2025&lt;/td&gt;
&lt;td&gt;Performance &amp;amp; Control&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;&amp;lt;Activity&amp;gt;&lt;/code&gt;, &lt;code&gt;useEffectEvent&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🌱 React 19.0 — The Foundation Shift
&lt;/h3&gt;

&lt;p&gt;Released in December 2024, &lt;strong&gt;React 19.0&lt;/strong&gt; marked one of the most transformative updates in React’s history. This version doubled down on &lt;strong&gt;asynchronous workflows&lt;/strong&gt;, &lt;strong&gt;Server Components&lt;/strong&gt;, and &lt;strong&gt;progressive enhancement&lt;/strong&gt; — but not without some breaking changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ What Made React 19.0 Special?
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🔄 Actions: Async Made Native
&lt;/h4&gt;

&lt;p&gt;Actions allow async functions to live directly inside &lt;code&gt;startTransition&lt;/code&gt;, handling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Loading states&lt;/li&gt;
&lt;li&gt;Errors&lt;/li&gt;
&lt;li&gt;Form submissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No more juggling manual spinners or error flags — React handles it.&lt;/p&gt;

&lt;h4&gt;
  
  
  ⚡ New Hooks for Modern UI
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;useActionState&lt;/code&gt;&lt;/strong&gt; – Manage state during transitions (perfect for forms)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;useOptimistic&lt;/code&gt;&lt;/strong&gt; – Instant UI updates that gracefully roll back on failure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;use&lt;/code&gt;&lt;/strong&gt; – Read Promises or Context directly in render, suspending automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🧩 Less Boilerplate, Cleaner APIs
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Refs can now be passed as props (goodbye &lt;code&gt;forwardRef&lt;/code&gt; in many cases)&lt;/li&gt;
&lt;li&gt;Automatic hoisting of metadata like &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Smarter Suspense with sibling pre‑warming&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧠 React DOM &amp;amp; Server Enhancements
&lt;/h3&gt;

&lt;p&gt;React 19.0 also brought major upgrades outside the core:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native form Actions via the &lt;code&gt;action&lt;/code&gt; prop&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useFormStatus&lt;/code&gt; for built‑in pending states&lt;/li&gt;
&lt;li&gt;Asset optimizations (&lt;code&gt;preload&lt;/code&gt;, &lt;code&gt;preinit&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Streaming SSR helpers like &lt;code&gt;prerender&lt;/code&gt; and &lt;code&gt;prerenderToNodeStream&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Stable React Server Components (RSC)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚠️ Breaking Changes You Had to Watch Out For
&lt;/h3&gt;

&lt;p&gt;To enable these features, React 19.0 removed several legacy APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;code&gt;propTypes&lt;/code&gt;, &lt;code&gt;contextTypes&lt;/code&gt;, string refs&lt;/li&gt;
&lt;li&gt;❌ &lt;code&gt;defaultProps&lt;/code&gt; for function components (use ES6 defaults instead)&lt;/li&gt;
&lt;li&gt;❌ &lt;code&gt;ReactDOM.render&lt;/code&gt; &amp;amp; &lt;code&gt;hydrate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ UMD builds (ESM only going forward)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TypeScript users also saw ref mutability changes and removed deprecated types. Migration required effort — but it unlocked the future.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔧 React 19.1 — Stability, Polish &amp;amp; Better Debugging
&lt;/h3&gt;

&lt;p&gt;Released in March 2025, &lt;strong&gt;React 19.1&lt;/strong&gt; was all about &lt;strong&gt;refinement&lt;/strong&gt;. No breaking changes. No deprecations. Just smoother edges.&lt;/p&gt;

&lt;h4&gt;
  
  
  🪜 Owner Stack: Debugging Superpowers
&lt;/h4&gt;

&lt;p&gt;A new dev‑only feature, &lt;strong&gt;Owner Stack&lt;/strong&gt;, helps trace &lt;em&gt;where&lt;/em&gt; a component was rendered from — a huge win when debugging complex trees.&lt;/p&gt;

&lt;h4&gt;
  
  
  🧊 Suspense, But Smarter
&lt;/h4&gt;

&lt;p&gt;Suspense received a wave of improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better scheduling across client &amp;amp; server&lt;/li&gt;
&lt;li&gt;Fixed frozen fallbacks&lt;/li&gt;
&lt;li&gt;Reduced unnecessary retries&lt;/li&gt;
&lt;li&gt;Improved hydration performance&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🛠️ Quality-of-Life Fixes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Valid CSS‑safe &lt;code&gt;useId&lt;/code&gt; values&lt;/li&gt;
&lt;li&gt;New event support (like &lt;code&gt;beforetoggle&lt;/code&gt; on &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Improved prod/dev parity&lt;/li&gt;
&lt;li&gt;Cleaner logs and reduced GC pressure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React 19.1 earned its reputation as the &lt;strong&gt;"trust‑builder" release&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚡ React 19.2 — Performance Meets Precision
&lt;/h3&gt;

&lt;p&gt;The latest release, &lt;strong&gt;React 19.2&lt;/strong&gt; (October 2025), pushes React toward finer performance control and smoother async orchestration.&lt;/p&gt;

&lt;h4&gt;
  
  
  🎭 &lt;code&gt;&amp;lt;Activity&amp;gt;&lt;/code&gt;: Control Visibility Without Losing State
&lt;/h4&gt;

&lt;p&gt;The new &lt;code&gt;&amp;lt;Activity&amp;gt;&lt;/code&gt; component lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hide UI sections without unmounting state&lt;/li&gt;
&lt;li&gt;Pause effects and defer updates&lt;/li&gt;
&lt;li&gt;Load content in the background seamlessly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfect for tabs, modals, and staged UI loading.&lt;/p&gt;

&lt;h4&gt;
  
  
  🎯 &lt;code&gt;useEffectEvent&lt;/code&gt;: Escape Dependency Hell
&lt;/h4&gt;

&lt;p&gt;This new hook separates &lt;strong&gt;reactive logic&lt;/strong&gt; from &lt;strong&gt;event logic&lt;/strong&gt;, meaning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fewer unnecessary effect re‑runs&lt;/li&gt;
&lt;li&gt;Cleaner dependency arrays&lt;/li&gt;
&lt;li&gt;Happier ESLint rules (with v6 support)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🌐 Server &amp;amp; SSR Advancements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Partial pre‑rendering resumes&lt;/li&gt;
&lt;li&gt;Batched Suspense reveals (better animation &amp;amp; consistency)&lt;/li&gt;
&lt;li&gt;Web Streams support in Node SSR&lt;/li&gt;
&lt;li&gt;Improved preload hints &amp;amp; caching via &lt;code&gt;cacheSignal&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus dozens of bug fixes across React Core, DOM, and RSC.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧩 Feature Comparison Across React 19 Releases
&lt;/h3&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;19.0&lt;/th&gt;
&lt;th&gt;19.1&lt;/th&gt;
&lt;th&gt;19.2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Async &amp;amp; State&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Actions, &lt;code&gt;useOptimistic&lt;/code&gt;, &lt;code&gt;use&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Suspense scheduling fixes&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;useEffectEvent&lt;/code&gt;, &lt;code&gt;cacheSignal&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Preloading APIs&lt;/td&gt;
&lt;td&gt;Hydration optimizations&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;&amp;lt;Activity&amp;gt;&lt;/code&gt;, SSR batching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Forms &amp;amp; DOM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Form Actions, metadata hoisting&lt;/td&gt;
&lt;td&gt;Warning fixes&lt;/td&gt;
&lt;td&gt;Nonce &amp;amp; ID updates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Server Components&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stable RSC&lt;/td&gt;
&lt;td&gt;&lt;code&gt;unstable_prerender&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pre‑render resumes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Breaking Changes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Many&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🏁 Final Thoughts: Why React 19 Matters
&lt;/h3&gt;

&lt;p&gt;The React 19 journey is a story of &lt;strong&gt;bold innovation followed by careful refinement&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;19.0&lt;/strong&gt; laid the groundwork (with some migration pain)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;19.1&lt;/strong&gt; restored confidence and stability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;19.2&lt;/strong&gt; delivered performance and precision&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they move React closer to a future where async logic feels natural, server rendering is seamless, and developers write less glue code — without sacrificing control.&lt;/p&gt;




&lt;p&gt;React 19 represents a major evolution in the React ecosystem, introducing a new way to think about asynchronous rendering, server-side capabilities, and performance optimization. Starting with the foundation laid in React 19.0, followed by stability-focused improvements in 19.1, and culminating in the performance-driven updates of React 19.2, each release builds intentionally on the last.&lt;/p&gt;

&lt;p&gt;If you’re planning an upgrade, take it step‑by‑step, test thoroughly, and lean on DevTools and upgrade guides. The payoff is worth it ✨&lt;/p&gt;

&lt;p&gt;Happy Reacting! ⚛️&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://react.dev/blog/2024/12/05/react-19" rel="noopener noreferrer"&gt;React v19&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://react.dev/blog/2025/10/01/react-19-2" rel="noopener noreferrer"&gt;React 19.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://amireds.medium.com/not-using-react-19-yet-heres-what-you-re-missing-478fa2008190" rel="noopener noreferrer"&gt;Not using React 19 yet? Here's what you're missing!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/%40alexdev82/react-19-2-is-stable-whats-actually-new-in-2025-1e2056cb74b1" rel="noopener noreferrer"&gt;React 19.2 is Stable! What's Actually New in 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/facebook/react/releases" rel="noopener noreferrer"&gt;Releases · facebook/react&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://react.dev/versions" rel="noopener noreferrer"&gt;React Versions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/reactjs/status/1905734761039233283" rel="noopener noreferrer"&gt;React 19.1 has just been released!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/facebook/react/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;react/CHANGELOG.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@onix_react/whats-new-in-react-19-1-0-d87dda0905a9" rel="noopener noreferrer"&gt;What’s new in React 19.1.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading! 🙌&lt;br&gt;
Until next time, 🫡&lt;br&gt;
Usman Awan (your friendly dev 🚀)&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>frontend</category>
      <category>discuss</category>
    </item>
    <item>
      <title>📊 The 2025 Tech Stack Shake-Up: Why Next.js, Python &amp; Postgres Are Taking Over the World 😉</title>
      <dc:creator>Muhammad Usman Awan</dc:creator>
      <pubDate>Wed, 10 Dec 2025 12:32:02 +0000</pubDate>
      <link>https://forem.com/usman_awan/the-2025-tech-stack-shake-up-why-nextjs-python-postgres-are-taking-over-the-world-4d6p</link>
      <guid>https://forem.com/usman_awan/the-2025-tech-stack-shake-up-why-nextjs-python-postgres-are-taking-over-the-world-4d6p</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Tech Stacks in 2025: The AI-Driven Evolution of Frontend, Backend, Databases &amp;amp; Full-Stack Development
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔑 Key Points Overview
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Research suggests React continues to lead due to its vast ecosystem, but Next.js is gaining rapidly for its full-stack capabilities and performance optimizations—potentially outpacing pure React setups. Vue.js and Svelte follow as lighter alternatives, with Tailwind CSS surging for styling efficiency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python-based frameworks like FastAPI and Django appear dominant, driven by AI and data needs, while Node.js holds strong for real-time apps. Spring Boot and Laravel are reliable for enterprise and scalable projects, though adoption varies by region and use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Databases:&lt;/strong&gt; Evidence leans toward PostgreSQL as the most desired and admired for its reliability, with Redis growing quickly for caching. MongoDB remains popular for flexible NoSQL needs, but hybrid approaches are increasingly common.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full Stack:&lt;/strong&gt; MERN and MEAN stacks remain prevalent for JavaScript-centric development, while Next.js-based stacks are attracting startups for speed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controversies:&lt;/strong&gt; Debates persist around cloud vendor lock-in and the sustainability of constant framework churn.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🌐 Introduction: Software Development in 2025
&lt;/h3&gt;

&lt;p&gt;Imagine stepping into the world of software development in 2025—a landscape where AI isn't just a buzzword but the invisible hand reshaping how we build everything from simple apps to massive enterprise systems.&lt;/p&gt;

&lt;p&gt;This year, tech stacks have evolved faster than ever, driven by explosive growth in open source, cloud-native tools, and developer demands for speed, security, and simplicity.&lt;/p&gt;

&lt;p&gt;Drawing from major reports like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stack Overflow Developer Survey (49,000+ responses)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub's Octoverse (180+ million developers)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ve seen Python surge by &lt;em&gt;7 percentage points&lt;/em&gt; to power AI and backend development, while TypeScript rises to the top thanks to AI-assisted tooling.&lt;/p&gt;

&lt;p&gt;Let’s break it all down category by category.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎨 Frontend Trends in 2025
&lt;/h3&gt;

&lt;h4&gt;
  
  
  React Still Rules — But Next.js Is Catching Up Fast
&lt;/h4&gt;

&lt;p&gt;Frontend development in 2025 emphasizes &lt;strong&gt;speed, SEO, and seamless backend integration&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;React maintains around &lt;strong&gt;40–50% adoption&lt;/strong&gt;, loved for its component model and massive ecosystem. But the real story is &lt;strong&gt;Next.js&lt;/strong&gt;, which has exploded thanks to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;built-in SSR and SSG&lt;/li&gt;
&lt;li&gt;exceptional SEO advantages&lt;/li&gt;
&lt;li&gt;full-stack capabilities&lt;/li&gt;
&lt;li&gt;Vercel-powered performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next.js is quickly becoming the go-to for startups and large-scale content sites.&lt;/p&gt;

&lt;h4&gt;
  
  
  Other Notable Players
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vue.js&lt;/strong&gt; – Lightweight, progressive, great for dashboards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Svelte&lt;/strong&gt; – Compiles to vanilla JS; minimal bundles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Angular&lt;/strong&gt; – Enterprise-strong, but less popular with startups&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; – The fastest-growing styling tool of 2025&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Real-World Note
&lt;/h4&gt;

&lt;p&gt;A fintech team switching mid–2025 to Next.js reported &lt;strong&gt;40% faster deployments&lt;/strong&gt; and improved user retention.&lt;/p&gt;

&lt;h4&gt;
  
  
  📊 Top Frontend Frameworks (Survey-Based Approximations)
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Adoption&lt;/th&gt;
&lt;th&gt;Strengths&lt;/th&gt;
&lt;th&gt;Ideal Use Cases&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;React&lt;/td&gt;
&lt;td&gt;45%&lt;/td&gt;
&lt;td&gt;Component-based, rich ecosystem&lt;/td&gt;
&lt;td&gt;SPAs (e.g., Netflix UI)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Next.js&lt;/td&gt;
&lt;td&gt;35% (fastest-growing)&lt;/td&gt;
&lt;td&gt;SSR/SSG, full-stack&lt;/td&gt;
&lt;td&gt;SEO-heavy sites&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vue.js&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;Lightweight, flexible&lt;/td&gt;
&lt;td&gt;Dashboards, interactive apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Svelte&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;Minimal bundle size&lt;/td&gt;
&lt;td&gt;PWAs, performance-critical apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Angular&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;Opinionated, reliable&lt;/td&gt;
&lt;td&gt;Enterprise tools&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  ⚙️ Backend Trends in 2025
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Python Dominates the AI Era
&lt;/h4&gt;

&lt;p&gt;Backend in 2025 is driven by &lt;strong&gt;performance, async capabilities, and AI readiness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Python leads with &lt;strong&gt;50.5% usage&lt;/strong&gt;, boosted by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI&lt;/strong&gt; (async, fast, API-friendly)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Django&lt;/strong&gt; (secure, batteries-included)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Node.js Still Excels in Event-Driven Systems
&lt;/h4&gt;

&lt;p&gt;Node remains essential for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;real-time chats&lt;/li&gt;
&lt;li&gt;gaming backends&lt;/li&gt;
&lt;li&gt;lightweight services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Spring Boot, Laravel, and .NET Core all maintain strong enterprise presence.&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 Top Backend Technologies 2025
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Backend Tech&lt;/th&gt;
&lt;th&gt;Adoption&lt;/th&gt;
&lt;th&gt;Strengths&lt;/th&gt;
&lt;th&gt;Uses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FastAPI / Django (Python)&lt;/td&gt;
&lt;td&gt;50%&lt;/td&gt;
&lt;td&gt;AI-ready, readable&lt;/td&gt;
&lt;td&gt;ML APIs, data systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node.js / Express&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;td&gt;Event-driven, fast&lt;/td&gt;
&lt;td&gt;Real-time apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spring Boot&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;Enterprise-grade&lt;/td&gt;
&lt;td&gt;Banking, large systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Laravel&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;Elegant, mature&lt;/td&gt;
&lt;td&gt;Web apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.NET Core&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;Cross-platform&lt;/td&gt;
&lt;td&gt;Cloud services&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🗄️ Database Trends in 2025
&lt;/h3&gt;

&lt;h4&gt;
  
  
  PostgreSQL: The Clear Favorite
&lt;/h4&gt;

&lt;p&gt;PostgreSQL continues as the most admired and desired database thanks to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;strong relational performance&lt;/li&gt;
&lt;li&gt;extensions (PostGIS, Timescale)&lt;/li&gt;
&lt;li&gt;reliability under scale&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MongoDB stays dominant in NoSQL spaces, while Redis rapidly rises for caching (+8% jump).&lt;/p&gt;

&lt;h4&gt;
  
  
  Hybrid Setups Are Becoming the Norm
&lt;/h4&gt;

&lt;p&gt;Many modern applications pair:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL&lt;/strong&gt; for structured data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MongoDB&lt;/strong&gt; for flexible documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redis&lt;/strong&gt; for real-time caching&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📊 Top Databases 2025
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Database&lt;/th&gt;
&lt;th&gt;Adoption&lt;/th&gt;
&lt;th&gt;Strengths&lt;/th&gt;
&lt;th&gt;Use Cases&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;Extensible, relational&lt;/td&gt;
&lt;td&gt;Analytics, e-commerce&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;Schema-flexible&lt;/td&gt;
&lt;td&gt;CMS, IoT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis&lt;/td&gt;
&lt;td&gt;25% (fast-rising)&lt;/td&gt;
&lt;td&gt;In-memory speed&lt;/td&gt;
&lt;td&gt;Sessions, caching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MySQL&lt;/td&gt;
&lt;td&gt;28%&lt;/td&gt;
&lt;td&gt;Simple, reliable&lt;/td&gt;
&lt;td&gt;Legacy + modern apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;Embedded&lt;/td&gt;
&lt;td&gt;Mobile apps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🔄 Full-Stack Trends in 2025
&lt;/h3&gt;

&lt;h4&gt;
  
  
  MERN Still Popular — But Next.js Stacks Are the Future
&lt;/h4&gt;

&lt;p&gt;Full-stack approaches in 2025 blur traditional lines.&lt;/p&gt;

&lt;h4&gt;
  
  
  Still Going Strong:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MERN&lt;/strong&gt; – All JavaScript; fast MVPs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MEAN&lt;/strong&gt; – Great for enterprise Angular ecosystems&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Exploding in Popularity:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js + PostgreSQL / Supabase&lt;/strong&gt;
This combo offers full-stack capabilities with minimal configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rails and Django + React remain powerful for structured, data-heavy apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 Top Full-Stack Frameworks 2025
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stack&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;Adoption&lt;/th&gt;
&lt;th&gt;Strengths&lt;/th&gt;
&lt;th&gt;Ideal For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MERN&lt;/td&gt;
&lt;td&gt;Mongo, Express, React, Node&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;td&gt;All-JS simplicity&lt;/td&gt;
&lt;td&gt;SPAs, MVPs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MEAN&lt;/td&gt;
&lt;td&gt;Mongo, Express, Angular, Node&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;Structured&lt;/td&gt;
&lt;td&gt;Enterprise apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Next.js Stack&lt;/td&gt;
&lt;td&gt;Next.js + Postgres/Mongo&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;Fast, full-stack features&lt;/td&gt;
&lt;td&gt;Startups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Django + React&lt;/td&gt;
&lt;td&gt;Django + React&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;Secure, analytic-heavy&lt;/td&gt;
&lt;td&gt;Data platforms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rails + Hotwire&lt;/td&gt;
&lt;td&gt;Rails + Hotwire&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;Rapid development&lt;/td&gt;
&lt;td&gt;SaaS MVPs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  ⚠️ Ongoing Debates &amp;amp; Controversies
&lt;/h3&gt;

&lt;p&gt;Despite growth, developers still debate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the &lt;strong&gt;risks of cloud vendor lock-in&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;the sustainability of rapid framework churn&lt;/li&gt;
&lt;li&gt;open-source reliability vs. proprietary ecosystems&lt;/li&gt;
&lt;li&gt;how AI tools may change developer roles&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔮 Predictions for 2026
&lt;/h2&gt;

&lt;p&gt;The future looks increasingly AI-native.&lt;/p&gt;

&lt;h3&gt;
  
  
  Expected Growth Areas:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js:&lt;/strong&gt; potentially +20–30% more adoption&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase:&lt;/strong&gt; skyrocketing among startups&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI:&lt;/strong&gt; faster growth via async + AI workloads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector Databases:&lt;/strong&gt; Pinecone, Weaviate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SvelteKit:&lt;/strong&gt; rising for lightweight FE apps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless &amp;amp; Edge Compute:&lt;/strong&gt; near-instant deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2026 may mark the beginning of &lt;strong&gt;intent-based development&lt;/strong&gt;, where AI auto-generates large parts of applications.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🙌&lt;br&gt;
Until next time, 🫡&lt;br&gt;
Usman Awan (your friendly dev 🚀)&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>discuss</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
