<?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>Music Forem</title>
    <description>The most recent home feed on Music Forem.</description>
    <link>https://music.forem.com</link>
    <atom:link rel="self" type="application/rss+xml" href="https://music.forem.com/feed"/>
    <language>en</language>
    <item>
      <title>🚀 Exploring the Unknown: Building UAP Detector with MeDo</title>
      <dc:creator>Michael G. Inso</dc:creator>
      <pubDate>Sun, 10 May 2026 11:03:40 +0000</pubDate>
      <link>https://music.forem.com/michaelinzo/exploring-the-unknown-building-uap-detector-with-medo-2ede</link>
      <guid>https://music.forem.com/michaelinzo/exploring-the-unknown-building-uap-detector-with-medo-2ede</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Exploring the Unknown: Building UAP Detector with MeDo
&lt;/h2&gt;

&lt;p&gt;The skies have always inspired wonder, but they also hold mysteries we’ve yet to explain. For the &lt;strong&gt;Build with MeDo Hackathon&lt;/strong&gt;, we set out to create something bold: &lt;strong&gt;UAP Detector powered by MeDo&lt;/strong&gt; — an immersive anomaly detection platform that blends &lt;strong&gt;AI precision, cyberpunk design, and community-driven exploration&lt;/strong&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  🌌 Inspiration
&lt;/h3&gt;

&lt;p&gt;We wanted to build a tool that feels like &lt;strong&gt;mission control for the unexplained&lt;/strong&gt;. Inspired by aerospace innovation, anomaly research, and the aesthetics of sci-fi, our vision was to merge &lt;strong&gt;scientific curiosity with artistic immersion&lt;/strong&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 What It Does
&lt;/h3&gt;

&lt;p&gt;UAP Detector provides a &lt;strong&gt;multi-layered detection system&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📷 &lt;strong&gt;Camera-based anomaly detection&lt;/strong&gt; with image/video capture
&lt;/li&gt;
&lt;li&gt;📡 &lt;strong&gt;Radar simulation&lt;/strong&gt; with waveform visualization and anomaly blips
&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Frequency spectrum scanning&lt;/strong&gt; for electromagnetic disturbances
&lt;/li&gt;
&lt;li&gt;🗺️ &lt;strong&gt;Location-based logging&lt;/strong&gt; with timestamps and geotags
&lt;/li&gt;
&lt;li&gt;💾 &lt;strong&gt;Secure storage &amp;amp; CSV export&lt;/strong&gt; via Supabase
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All wrapped in a &lt;strong&gt;cyberpunk-inspired dashboard&lt;/strong&gt; with animated starfields, glitch effects, and holographic UI.  &lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 How We Built It
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Platform:&lt;/strong&gt; MeDo no-code AI builder for rapid prototyping
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; Supabase for secure event storage and retrieval
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Custom CSS animations + MeDo modules for radar/frequency visualization
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;APIs:&lt;/strong&gt; REST + JSON pipelines for modular data flow
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration:&lt;/strong&gt; GitHub for version control, CapCut/Dreamina for creative assets
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚙️ Challenges
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Balancing &lt;strong&gt;scientific realism&lt;/strong&gt; with immersive visuals
&lt;/li&gt;
&lt;li&gt;Ensuring &lt;strong&gt;real-time synchronization&lt;/strong&gt; across detection modules
&lt;/li&gt;
&lt;li&gt;Optimizing UI for &lt;strong&gt;mobile performance&lt;/strong&gt; without losing fidelity
&lt;/li&gt;
&lt;li&gt;Extending MeDo’s no-code environment with &lt;strong&gt;custom AI logic&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 Accomplishments
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built a &lt;strong&gt;fully functional detection dashboard&lt;/strong&gt; in hackathon time
&lt;/li&gt;
&lt;li&gt;Designed a &lt;strong&gt;cinematic cyberpunk interface&lt;/strong&gt; that feels futuristic
&lt;/li&gt;
&lt;li&gt;Achieved &lt;strong&gt;real-time anomaly visualization&lt;/strong&gt; with radar + frequency overlays
&lt;/li&gt;
&lt;li&gt;Created a &lt;strong&gt;community-ready platform&lt;/strong&gt; for enthusiasts and researchers
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📚 What We Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The power of &lt;strong&gt;no-code AI platforms&lt;/strong&gt; in accelerating innovation
&lt;/li&gt;
&lt;li&gt;How to merge &lt;strong&gt;data visualization with emotional design&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The importance of &lt;strong&gt;UX storytelling&lt;/strong&gt; in engaging users
&lt;/li&gt;
&lt;li&gt;Cross-disciplinary collaboration yields results that are both &lt;strong&gt;functional and artistic&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔮 What’s Next
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🌍 Integration with &lt;strong&gt;satellite &amp;amp; weather data&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;📱 Mobile app with &lt;strong&gt;AR sky scanning&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🌐 Community portal for &lt;strong&gt;collaborative anomaly tracking&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🤖 AI model refinement with &lt;strong&gt;open datasets&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;✈️ Partnerships with &lt;strong&gt;aerospace &amp;amp; research organizations&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;💡 This project was #BuiltWithMeDo — a testament to how creativity and technology can converge to explore the unknown.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hashtags:&lt;/strong&gt;  &lt;/p&gt;

&lt;h1&gt;
  
  
  BuiltWithMeDo #Hackathon #AI #Cyberpunk #DataVisualization #UAP #Innovation
&lt;/h1&gt;




&lt;p&gt;&lt;strong&gt;_🔗Live Demo link: &lt;a href="https://dev.to/michaelinso/uap-detector-powered-by-medo"&gt;UAP Detector powered by MeDo&lt;/a&gt;&lt;br&gt;
_&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>medo</category>
      <category>nocode</category>
    </item>
    <item>
      <title>I shipped my mobile app to production. Key engineering decisions and sub-agents-based QA system.</title>
      <dc:creator>Saar Ezagouri</dc:creator>
      <pubDate>Sun, 10 May 2026 11:02:28 +0000</pubDate>
      <link>https://music.forem.com/saar_ezagouri_f9e823978b6/i-shipped-my-mobile-app-to-production-key-engineering-decisions-and-a-sub-agent-qa-system-4ed5</link>
      <guid>https://music.forem.com/saar_ezagouri_f9e823978b6/i-shipped-my-mobile-app-to-production-key-engineering-decisions-and-a-sub-agent-qa-system-4ed5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Brief introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m a solo builder. I built &lt;a href="https://www.trysalute.com/" rel="noopener noreferrer"&gt;Salute&lt;/a&gt;, a cross-platform mobile application focused on structured tracking of workouts, nutrition, and habits — the three core pillars for building a sustainable healthy lifestyle product.&lt;/p&gt;

&lt;p&gt;In this post, I want to walk through some of the more significant technical and architectural decisions I made during the last months of development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building solo: slow is fast&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Working alone changes the nature of execution. You are responsible for both system design and implementation, and every decision compounds quickly.&lt;/p&gt;

&lt;p&gt;I tend to work in a highly time-aware way, optimizing small actions and switching contexts efficiently. But when building a full product solo, I had to shift priorities.&lt;/p&gt;

&lt;p&gt;I followed a principle I learned from my Brazilian Jiu-Jitsu coach: technique first, then power. In practice, this translated to:&lt;/p&gt;

&lt;p&gt;Prioritizing architecture before implementation&lt;br&gt;
Spending time on system design and edge cases upfront&lt;br&gt;
Mapping flows visually (I used Miro and physical sketches). Defining constraints and tech decisions early, but keeping flexibility where needed. &lt;br&gt;
Although this approach felt slower at the beginning, it significantly reduced rework later and improved overall development speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flutter for cross-platform development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the key decisions was using Flutter for cross-platform development.&lt;/p&gt;

&lt;p&gt;While I did not perform a deep comparative evaluation with React Native in this project, Flutter proved to be stable and consistent across platforms in practice. The ecosystem was mature enough for all required features, and the community and documentation were reliable and structured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code and sub-agent workflows&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During the planning phase, I introduced sub-agent workflows as a core part of the development process.&lt;/p&gt;

&lt;p&gt;I worked with Claude Code (and evaluated other tools such as Gemini Pro, GPT-based coding tools, FlutterFlow, and Firebase Studio), but found that a structured agent-based workflow provided the most control and reliability.&lt;/p&gt;

&lt;p&gt;A key part of this system was building a knowledge layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collecting official documentation and best practices from Flutter&lt;/li&gt;
&lt;li&gt;Structuring them into modular “skills”&lt;/li&gt;
&lt;li&gt;Maintaining a central instruction file (CLAUDE.md) containing architectural rules and coding standards&lt;/li&gt;
&lt;li&gt;Adding platform-specific guidelines from Android (Material Design) and iOS (Human Interface Guidelines)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This created a reusable, structured context layer for the agents, improving consistency in UI/UX and architecture decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sub-agent QA system: a major productivity shift&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most impactful parts of the system was an agent-based QA pipeline.&lt;/p&gt;

&lt;p&gt;As a solo developer, testing becomes a bottleneck. External beta testers help, but feedback cycles are slow and inconsistent. I needed a more deterministic system.&lt;/p&gt;

&lt;p&gt;So I built an internal QA pipeline composed of multiple specialized agents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;u&gt;Screeners&lt;/u&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each screener is responsible for a specific part of the application (e.g., onboarding flow). Their tasks include but not limited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI/UX validation against platform guidelines&lt;/li&gt;
&lt;li&gt;Identifying broken states or missing edge cases&lt;/li&gt;
&lt;li&gt;Detecting unlocalized or inconsistent text&lt;/li&gt;
&lt;li&gt;Verifying interaction behavior&lt;/li&gt;
&lt;li&gt;Responsive and adaptive UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They operate with direct access to the running app via MCP tools and the Dart SDK environment.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;u&gt;Validators&lt;/u&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Validators review screener outputs and filter noise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove false positives&lt;/li&gt;
&lt;li&gt;Split overloaded screener tasks when necessary&lt;/li&gt;
&lt;li&gt;Improve signal-to-noise ratio in reported issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They do not modify the system, only verify findings.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;u&gt;Reviewers&lt;/u&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Reviewers consolidate validated findings into structured reports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Summarize issues per feature area&lt;/li&gt;
&lt;li&gt;Refine or generate targeted improvement notes&lt;/li&gt;
&lt;li&gt;Update or extend internal “skills” documentation when needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are responsible for turning raw findings into actionable engineering work - for the head agent.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;u&gt;Orchestrator&lt;/u&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The orchestrator manages execution flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Screeners run first&lt;/li&gt;
&lt;li&gt;Validators refine outputs&lt;/li&gt;
&lt;li&gt;Reviewers structure the final reports&lt;/li&gt;
&lt;li&gt;Implementation follows based on prioritized findings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A key aspect of making this system work in practice was carefully managing agent permissions and tool access. Each agent was given a very specific role, with tightly scoped responsibilities and minimal required context. This was important both for maintaining order in the workflow and for controlling token usage across the system. Overloading agents with broad access or unclear responsibilities quickly reduced efficiency and increased noise in the output, so strict separation of concerns and tool-level access control became a core design principle. When optimized - it works very good and saves priceless time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical QA infrastructure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The QA system was built around a direct runtime connection to the Flutter application using the Dart SDK MCP server, which exposes the Dart Tooling Daemon (DTD) and flutter_driver capabilities to agents.&lt;/p&gt;

&lt;p&gt;Each screener agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launches the app in debug mode on an emulator&lt;/li&gt;
&lt;li&gt;Connects to the Dart Tooling Daemon&lt;/li&gt;
&lt;li&gt;Interacts with the live application through MCP tools&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;UI interaction (taps, input, navigation, scrolling)&lt;/li&gt;
&lt;li&gt;Widget tree inspection&lt;/li&gt;
&lt;li&gt;Runtime log and error monitoring&lt;/li&gt;
&lt;li&gt;Hot reload / hot restart cycles
Because agents interact directly with the running app, there is no need for traditional test harness code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I intentionally avoided integration_test due to both architectural constraints and known build issues (notably release-time dependency stripping of required libraries under R8, which can break plugin registration).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outcome&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This QA architecture significantly reduced manual testing overhead and improved iteration speed during development. For a solo builder, it effectively acted as a scalable internal QA team, without introducing heavy testing infrastructure.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>claude</category>
      <category>ai</category>
    </item>
    <item>
      <title>Python and Its Role in Data Analytics: A Beginner-Friendly Guide Using Logistics Data</title>
      <dc:creator>NelimaL</dc:creator>
      <pubDate>Sun, 10 May 2026 11:01:00 +0000</pubDate>
      <link>https://music.forem.com/nelima/python-and-its-role-in-data-analytics-a-beginner-friendly-guide-using-logistics-data-591a</link>
      <guid>https://music.forem.com/nelima/python-and-its-role-in-data-analytics-a-beginner-friendly-guide-using-logistics-data-591a</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today’s digital economy, organizations generate huge amounts of data every single day. However, raw data alone is not useful unless businesses can analyze it and turn it into meaningful insights.&lt;/p&gt;

&lt;p&gt;One of the most powerful tools used in data analytics today is Python. Python has become one of the most popular programming languages in the world because it is simple, powerful, flexible, and beginner-friendly.&lt;/p&gt;

&lt;p&gt;Unlike some programming languages that are difficult for beginners to understand, Python uses readable syntax that looks almost like normal English. &lt;/p&gt;

&lt;h1&gt;
  
  
  What Is Python?
&lt;/h1&gt;

&lt;p&gt;Python is a high-level programming language created by Guido van Rossum and released in 1991. It was designed to be simple, readable, and easy to learn.&lt;/p&gt;

&lt;p&gt;A high-level language means programmers can write code using human-friendly commands instead of complicated machine instructions.&lt;/p&gt;

&lt;p&gt;For example, displaying a message in Python only requires one line of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello world&lt;/span&gt;&lt;span class="sh"&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 simplicity is one of the main reasons Python is popular among beginners.&lt;/p&gt;

&lt;p&gt;Python is also versatile. It can be used in many industries and fields such as: Data analytics, Data science, Artificial intelligence, Machine learning, Web development, Cybersecurity&lt;br&gt;
and Software development&lt;/p&gt;
&lt;h1&gt;
  
  
  Why Python Is Popular in Data Analytics
&lt;/h1&gt;

&lt;p&gt;Python has become one of the most widely used tools in the data analytics space for several reasons.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Python Is Easy to Learn
&lt;/h2&gt;

&lt;p&gt;Python syntax is clean and readable.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Adult&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Minor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even beginners can understand what this code is doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Python Has Powerful Data Libraries
&lt;/h2&gt;

&lt;p&gt;Python has many built-in libraries and external packages that make data analysis easier.&lt;/p&gt;

&lt;p&gt;Instead of writing long and complicated code, analysts can use specialized libraries to complete tasks quickly.&lt;/p&gt;

&lt;p&gt;Popular libraries include: Pandas, NumPy, Matplotlib, Seaborn and Scikit-learn&lt;br&gt;
&lt;strong&gt;These libraries help analysts to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean data&lt;/li&gt;
&lt;li&gt;Analyze data&lt;/li&gt;
&lt;li&gt;Create charts&lt;/li&gt;
&lt;li&gt;Perform calculations&lt;/li&gt;
&lt;li&gt;Build predictive models&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  3. Python Has a Large Community
&lt;/h2&gt;

&lt;p&gt;Millions of people use Python worldwide. This means beginners can easily find: Tutorials, Documentation, YouTube videos, Coding forums and Online courses -If a beginner encounters an error, there is a high chance someone else has already solved the same problem online.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Python Handles Large Amounts of Data
&lt;/h2&gt;

&lt;p&gt;Businesses often work with thousands or millions of rows of data.&lt;br&gt;
Python can process large datasets efficiently and integrate with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL databases&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Excel files&lt;/li&gt;
&lt;li&gt;Cloud platforms&lt;/li&gt;
&lt;li&gt;Machine learning tools
This makes Python valuable in modern organizations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Python Libraries Used in Data Analytics
&lt;/h1&gt;

&lt;p&gt;Python libraries are collections of pre-written code that help developers complete tasks faster.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Pandas
&lt;/h2&gt;

&lt;p&gt;Pandas is one of the most important Python libraries for data analytics. It is mainly used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading data&lt;/li&gt;
&lt;li&gt;Cleaning data&lt;/li&gt;
&lt;li&gt;Filtering records&lt;/li&gt;
&lt;li&gt;Grouping information&lt;/li&gt;
&lt;li&gt;Performing calculations&lt;/li&gt;
&lt;li&gt;Working with tables&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example: Loading a Logistics Dataset
&lt;/h3&gt;

&lt;p&gt;Below is an example of loading the logistics dataset using Pandas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://raw.githubusercontent.com/NelimaL/LOGISTICS_DATA/refs/heads/main/LOGISTICS_MOCK_DATA%20(1).json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Display first 5 rows by slicing
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code imports the logistics dataset and displays the first five rows.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. NumPy
&lt;/h2&gt;

&lt;p&gt;NumPy is used for numerical operations and mathematical calculations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: Calculating Average Delivery Time
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;

&lt;span class="n"&gt;delivery_times&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;average_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delivery_times&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Average Delivery Time:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;average_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;Average&lt;/span&gt; &lt;span class="n"&gt;Delivery&lt;/span&gt; &lt;span class="n"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;9.2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Matplotlib
&lt;/h2&gt;

&lt;p&gt;Matplotlib is used for creating charts and graphs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: Visualizing Delivery Ratings
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;
&lt;span class="n"&gt;ratings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ratings&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Delivery Ratings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ratings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Frequency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a histogram showing how delivery ratings are distributed.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Seaborn
&lt;/h2&gt;

&lt;p&gt;Seaborn is another visualization library that creates more attractive statistical charts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: Delivery Time vs Package Weight
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;seaborn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;
&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scatterplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;package_weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_time&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Package Weight vs Delivery Time&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This chart helps analysts determine whether heavier packages take longer to deliver.&lt;/p&gt;

&lt;h1&gt;
  
  
  How Python Is Used to Clean Data
&lt;/h1&gt;

&lt;p&gt;Real-world datasets are rarely perfect.&lt;br&gt;
Data often contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing values&lt;/li&gt;
&lt;li&gt;Duplicate records&lt;/li&gt;
&lt;li&gt;Incorrect formats&lt;/li&gt;
&lt;li&gt;Typing errors&lt;/li&gt;
&lt;li&gt;Invalid values
Data cleaning is one of the most important steps in analytics.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Checking for Missing Values
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Check missing values
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isnull&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This code checks how many missing values exist in each column.&lt;/p&gt;
&lt;h2&gt;
  
  
  Removing Duplicate Records
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Remove duplicates
&lt;/span&gt;&lt;span class="n"&gt;logistics_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drop_duplicates&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Duplicates removed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Duplicate records can affect business reports and calculations.&lt;/p&gt;
&lt;h2&gt;
  
  
  Converting Date Columns
&lt;/h2&gt;

&lt;p&gt;Dates are very important in analytics.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Convert dates
&lt;/span&gt;&lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pickup_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pickup_date&lt;/span&gt;&lt;span class="sh"&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 converts the columns into proper date format.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking Data Types
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dtypes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Understanding data types helps analysts know which operations can be performed.&lt;/p&gt;

&lt;h1&gt;
  
  
  How Python Is Used to Analyze Data
&lt;/h1&gt;

&lt;p&gt;Once data is cleaned, analysts can start extracting insights.&lt;/p&gt;

&lt;h1&gt;
  
  
  Example 1: Counting Delivery Statuses
&lt;/h1&gt;

&lt;p&gt;A logistics company may want to know how many deliveries were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delivered&lt;/li&gt;
&lt;li&gt;Returned&lt;/li&gt;
&lt;li&gt;In Transit&lt;/li&gt;
&lt;li&gt;Out for Delivery
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;status_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example Output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;Delivered&lt;/span&gt;           &lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="n"&gt;Returned&lt;/span&gt;            &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="n"&gt;Transit&lt;/span&gt;          &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="n"&gt;Out&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;Delivery&lt;/span&gt;    &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps management monitor operational performance.&lt;/p&gt;




&lt;h1&gt;
  
  
  Example 2: Average Delivery Rating
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;average_rating&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_rating&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Average Delivery Rating:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;average_rating&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example Output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;Average&lt;/span&gt; &lt;span class="n"&gt;Delivery&lt;/span&gt; &lt;span class="n"&gt;Rating&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;3.4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps companies evaluate customer satisfaction.&lt;/p&gt;




&lt;h1&gt;
  
  
  Example 3: Finding the Fastest Deliveries
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;fastest_delivery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_time&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fastest_delivery&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tracking_number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_time&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nf"&gt;head&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This identifies packages delivered in the shortest time.&lt;/p&gt;

&lt;h1&gt;
  
  
  Example 4: Analyzing Delivery Companies
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;company_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_company&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;company_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows how many deliveries each company handled.&lt;/p&gt;

&lt;h1&gt;
  
  
  Example 5: Average Package Weight
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;average_weight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;package_weight&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Average Package Weight:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;average_weight&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps logistics companies understand shipment trends.&lt;/p&gt;

&lt;h1&gt;
  
  
  How Python Is Used to Visualize Data
&lt;/h1&gt;

&lt;p&gt;Data visualization helps analysts communicate findings clearly.&lt;/p&gt;

&lt;p&gt;Instead of reading large tables, decision-makers can quickly understand charts and graphs.&lt;/p&gt;

&lt;h1&gt;
  
  
  Example 1: Bar Chart of Delivery Status
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;status_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;status_count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bar&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Delivery Status Distribution&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Delivery Status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This chart shows the number of packages in each delivery status.&lt;/p&gt;

&lt;h1&gt;
  
  
  Example 2: Pie Chart of Delivery Ratings
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;rating_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_rating&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;rating_count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pie&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;autopct&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%1.1f%%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Delivery Ratings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This chart helps visualize customer satisfaction levels.&lt;/p&gt;




&lt;h1&gt;
  
  
  Example 3: Line Graph of Delivery Time
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_time&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;line&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Delivery Time Trend&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Shipment Number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Delivery Time&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This graph helps analysts identify delivery trends.&lt;/p&gt;




&lt;h1&gt;
  
  
  Real-World Uses of Python in Data Analytics
&lt;/h1&gt;

&lt;p&gt;Python is used in many industries worldwide.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. Logistics and Supply Chain
&lt;/h1&gt;

&lt;p&gt;Logistics companies use Python to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track deliveries&lt;/li&gt;
&lt;li&gt;Optimize delivery routes&lt;/li&gt;
&lt;li&gt;Predict delays&lt;/li&gt;
&lt;li&gt;Analyze delivery performance&lt;/li&gt;
&lt;li&gt;Monitor customer satisfaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using the logistics dataset, analysts can identify common delivery failure reasons.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;failure_reason&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logistics_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_failure_reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;failure_reason&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps companies reduce failed deliveries.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Banking Industry
&lt;/h1&gt;

&lt;p&gt;Banks use Python for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fraud detection&lt;/li&gt;
&lt;li&gt;Credit scoring&lt;/li&gt;
&lt;li&gt;Customer analysis&lt;/li&gt;
&lt;li&gt;Financial forecasting&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 python"&gt;&lt;code&gt;&lt;span class="n"&gt;transactions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15000&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;transactions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Suspicious transaction:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  3. Healthcare Industry
&lt;/h1&gt;

&lt;p&gt;Hospitals use Python to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyze patient records&lt;/li&gt;
&lt;li&gt;Predict diseases&lt;/li&gt;
&lt;li&gt;Monitor patient recovery&lt;/li&gt;
&lt;li&gt;Manage hospital operations&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 python"&gt;&lt;code&gt;&lt;span class="n"&gt;patients&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;John&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;James&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;patient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pressure&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;patients&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pressure&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;140&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;patient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;has high blood pressure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  4. Retail Industry
&lt;/h1&gt;

&lt;p&gt;Retail businesses use Python to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyze customer purchases&lt;/li&gt;
&lt;li&gt;Predict sales trends&lt;/li&gt;
&lt;li&gt;Manage inventory&lt;/li&gt;
&lt;li&gt;Recommend products
Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Milk&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bread&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Milk&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Eggs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Milk&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Milk&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  To manageinventory
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Why Beginners Should Learn Python
&lt;/h1&gt;

&lt;p&gt;There are many reasons beginners should consider learning Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Python Is Beginner-Friendly
&lt;/h2&gt;

&lt;p&gt;Python has simple syntax that makes programming easier to understand. Beginners can focus on solving problems instead of struggling with complicated rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Python Is Highly Marketable
&lt;/h2&gt;

&lt;p&gt;Python skills are highly demanded in industries such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data analytics&lt;/li&gt;
&lt;li&gt;Artificial intelligence&lt;/li&gt;
&lt;li&gt;Software engineering&lt;/li&gt;
&lt;li&gt;Cybersecurity&lt;/li&gt;
&lt;li&gt;Data science
Professionals with Python skills often have strong career opportunities.
## 3. Python Supports Automation
Python can automate repetitive tasks which saves time and increases efficiency.
Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;report&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generating Report&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Python Encourages Problem Solving
&lt;/h2&gt;

&lt;p&gt;Learning Python improves logical thinking and problem-solving skills. This skill is valuable in many careers.&lt;/p&gt;

&lt;h1&gt;
  
  
  Challenges Beginners May Face
&lt;/h1&gt;

&lt;p&gt;Although Python is beginner-friendly, learners may still experience challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Understanding Programming Logic
&lt;/h2&gt;

&lt;p&gt;Programming requires critical thinking and logical reasoning.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Learning Libraries
&lt;/h2&gt;

&lt;p&gt;Libraries such as Pandas and NumPy can feel overwhelming at first.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Debugging Errors
&lt;/h2&gt;

&lt;p&gt;Beginners often encounter syntax errors.&lt;br&gt;
Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The closing bracket is missing.&lt;br&gt;
However, with practice, debugging becomes easier.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tips for Learning Python Successfully
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Practice Regularly-The more you practice, the more comfortable you become.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Build Real Projects-Projects help beginners apply what they learn.
&lt;/h2&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delivery tracking dashboards&lt;/li&gt;
&lt;li&gt;Sales analysis projects&lt;/li&gt;
&lt;li&gt;Expense trackers&lt;/li&gt;
&lt;li&gt;Student performance analysis
## Learn Data Visualization-Visualization is one of the most valuable skills in analytics.
Practice creating:&lt;/li&gt;
&lt;li&gt;Bar charts&lt;/li&gt;
&lt;li&gt;Pie charts&lt;/li&gt;
&lt;li&gt;Histograms&lt;/li&gt;
&lt;li&gt;Scatter plots
## Read Error Messages Carefully-Python error messages usually explain the problem. Understanding these messages helps learners improve faster.
## Use Real Data-Working with real datasets improves learning.
The logistics dataset used in this article demonstrates how businesses analyze operational data using Python.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;As businesses continue generating larger amounts of data, the demand for Python skills will continue growing. Beginners who start learning Python today are preparing themselves for exciting opportunities in the future of data analytics.&lt;/p&gt;

</description>
      <category>python</category>
      <category>datascience</category>
    </item>
    <item>
      <title>I Built an AI-Powered Daily LeetCode Planner in 2 Hours Using Workflow Automation</title>
      <dc:creator>Rishabh</dc:creator>
      <pubDate>Sun, 10 May 2026 11:00:51 +0000</pubDate>
      <link>https://music.forem.com/rishabhrawat05/i-built-an-ai-powered-daily-leetcode-planner-in-2-hours-using-workflow-automation-jd5</link>
      <guid>https://music.forem.com/rishabhrawat05/i-built-an-ai-powered-daily-leetcode-planner-in-2-hours-using-workflow-automation-jd5</guid>
      <description>&lt;h1&gt;
  
  
  I Built an AI-Powered Daily LeetCode Planner Using Workflow Automation
&lt;/h1&gt;

&lt;p&gt;Recently, I explored workflow automation using Kestra and ended up building a small but powerful system, an AI-powered Daily LeetCode Planner.&lt;/p&gt;

&lt;p&gt;The goal was simple:&lt;br&gt;&lt;br&gt;
Stop wasting time deciding what to solve every day and automate the entire process.&lt;/p&gt;




&lt;h1&gt;
  
  
  What it does
&lt;/h1&gt;

&lt;p&gt;Every morning, the system automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetches coding problems from LeetCode
&lt;/li&gt;
&lt;li&gt;Selects a balanced set of Easy, Medium, and Hard questions
&lt;/li&gt;
&lt;li&gt;Sends them to an AI model for structured analysis
&lt;/li&gt;
&lt;li&gt;Generates a full study plan with patterns and hints
&lt;/li&gt;
&lt;li&gt;Emails it directly to me
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Tech Stack
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Kestra (workflow orchestration)
&lt;/li&gt;
&lt;li&gt;Python (data processing and logic)
&lt;/li&gt;
&lt;li&gt;Google Gemini API (AI analysis)
&lt;/li&gt;
&lt;li&gt;LeetCode GraphQL API (problem data source)
&lt;/li&gt;
&lt;li&gt;SMTP (email automation)
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  How the workflow works
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Fetch problems
&lt;/h2&gt;

&lt;p&gt;Pulls a list of 50 problems from LeetCode GraphQL API.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Select questions
&lt;/h2&gt;

&lt;p&gt;A Python script:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filters valid entries
&lt;/li&gt;
&lt;li&gt;Groups by difficulty
&lt;/li&gt;
&lt;li&gt;Randomly selects a balanced set
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. AI analysis
&lt;/h2&gt;

&lt;p&gt;Gemini processes the selected questions and generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Solving patterns
&lt;/li&gt;
&lt;li&gt;Important concepts
&lt;/li&gt;
&lt;li&gt;One-line hints
&lt;/li&gt;
&lt;li&gt;Interview insights
&lt;/li&gt;
&lt;li&gt;Recommended solving order
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Email output
&lt;/h2&gt;

&lt;p&gt;The final structured plan is sent automatically to my email every morning.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why I built this
&lt;/h1&gt;

&lt;p&gt;As someone practicing DSA regularly, I noticed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time wasted choosing problems
&lt;/li&gt;
&lt;li&gt;No structured daily flow
&lt;/li&gt;
&lt;li&gt;No pattern-based learning system
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I automated it instead.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I learned
&lt;/h1&gt;

&lt;p&gt;This project taught me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workflow automation can connect full systems, not just scripts
&lt;/li&gt;
&lt;li&gt;AI is best used for structuring and reasoning, not just answers
&lt;/li&gt;
&lt;li&gt;Small automation pipelines can quickly become powerful tools
&lt;/li&gt;
&lt;li&gt;Debugging multi-step workflows is a different skill than normal coding
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Flow YAML File (Github): &lt;a href="https://github.com/rishabhrawat05/AI-Daily-LeetCode-Planner-Kestra" rel="noopener noreferrer"&gt;https://github.com/rishabhrawat05/AI-Daily-LeetCode-Planner-Kestra&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xjhmm4jpn38vwb6bx9q.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%2F4xjhmm4jpn38vwb6bx9q.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8o7j93xg1u8zaep01uq.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%2Fc8o7j93xg1u8zaep01uq.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhg2rglzu88984xtl25q.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%2Fuhg2rglzu88984xtl25q.png" alt=" " width="635" height="945"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F562te5xc0y3pwd94kpm8.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%2F562te5xc0y3pwd94kpm8.png" alt=" " width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fet7xvsoe7p7xp5s2kmq2.jpeg" 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%2Fet7xvsoe7p7xp5s2kmq2.jpeg" alt=" " width="800" height="1407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2aqnczdqvek60om5hzvl.jpeg" 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%2F2aqnczdqvek60om5hzvl.jpeg" alt=" " width="800" height="1433"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kestra</category>
      <category>workflowautomation</category>
      <category>buildinpublic</category>
      <category>automation</category>
    </item>
    <item>
      <title>Your Walk Betrays You</title>
      <dc:creator>Tim Green</dc:creator>
      <pubDate>Sun, 10 May 2026 11:00:00 +0000</pubDate>
      <link>https://music.forem.com/rawveg/your-walk-betrays-you-5594</link>
      <guid>https://music.forem.com/rawveg/your-walk-betrays-you-5594</guid>
      <description>&lt;p&gt;You have never walked anonymously. You may have believed otherwise, pulling a hood over your head or choosing the busy side of the street, but the truth has been catching up for years. The way you shift your weight from one foot to the other, the cadence of your stride, the particular rhythm of your fingers on a keyboard, even the micro-fluctuations in your voice when you order a coffee: all of these patterns are, increasingly, as identifiable as your fingerprint. And unlike your fingerprint, you leave them everywhere, involuntarily, continuously, without ever pressing your thumb to glass.&lt;/p&gt;

&lt;p&gt;Artificial intelligence systems can now identify individuals through subtle behavioural patterns and voice characteristics with startling accuracy. Gait recognition software deployed on the streets of Beijing and Shanghai can pick you out of a crowd from 50 metres away, even with your back turned and your face completely covered. Voice biometric systems in banking can authenticate your identity from a few seconds of speech. Wi-Fi signals bouncing off your body as you walk through a room can betray your identity through walls. The question is no longer whether these technologies work. It is what their proliferation means for the very concept of being unknown in a public space, and whether truly private human interaction remains possible in an age of pervasive, ambient identification.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Expanding Biometric Frontier Beyond the Face
&lt;/h2&gt;

&lt;p&gt;For over a decade, the surveillance debate has centred on facial recognition. Cities have banned it. Activists have marched against it. Researchers like Joy Buolamwini at the MIT Media Lab have exposed its profound racial biases, demonstrating through her landmark 2018 Gender Shades study that commercial facial analysis systems from IBM, Microsoft, and Face++ misclassified darker-skinned women at rates as high as 47 per cent while achieving error rates below 1 per cent for lighter-skinned men. Her work, co-authored with Timnit Gebru, catalysed a reckoning that led every audited US-based company to stop selling facial recognition technology to law enforcement by 2020.&lt;/p&gt;

&lt;p&gt;But while the world was arguing about faces, a quieter revolution was unfolding. Behavioural biometrics, the science of identifying people through how they move, type, speak, and interact with the physical world, has advanced rapidly and without the same degree of public scrutiny. Unlike facial recognition, which requires a camera pointed at your face, behavioural biometrics can operate at a distance, through obstacles, and without the subject's knowledge or cooperation. This makes it, in many respects, a far more consequential threat to anonymity than the technology that has dominated headlines.&lt;/p&gt;

&lt;p&gt;The gait biometrics market was valued at USD 1.25 billion in 2024 and is projected to reach USD 3.41 billion by 2032, growing at a compound annual growth rate of 13.38 per cent. Security agencies accounted for roughly 44 per cent of that market in 2024, with Asia-Pacific expected to see the fastest growth at 15.15 per cent annually through 2032. These are not speculative projections from fringe analysts; they reflect sustained investment by governments and corporations in technologies that identify you not by what you look like, but by what you do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gait Recognition Comes of Age
&lt;/h2&gt;

&lt;p&gt;The idea that every person walks differently is not new. Forensic investigators have long known that gait is distinctive. What is new is the ability of AI systems to extract that distinctiveness from ordinary surveillance footage and match it against databases at scale.&lt;/p&gt;

&lt;p&gt;The Chinese AI company Watrix, incubated by the Chinese Academy of Sciences, has developed gait recognition software that extracts a person's silhouette from video and analyses its movement to create a model of how that person walks. According to Watrix CEO Huang Yongzhen, the technology has been trialled by police in Beijing, Shanghai, and Chongqing, and a pilot system operates in Hubei and Guangdong provinces. The system can identify individuals from up to 50 metres away, from any angle, even when faces are covered and in darkness. “With facial recognition people need to look into a camera,” Huang told the South China Morning Post. “Cooperation is not needed for them to be recognised by our technology.”&lt;/p&gt;

&lt;p&gt;The accuracy Watrix claims is striking: up to 96 per cent. The company, which was inspired by a US Defence Advanced Research Projects Agency (DARPA) study, has been in discussions with security firms in Singapore, India, Russia, the Netherlands, and the Czech Republic. Security officials in China's Xinjiang province, where the Uyghur Muslim population faces intense surveillance, have also expressed interest. The technology is not merely supplementary to existing surveillance; it fills the gaps that facial recognition cannot reach. It operates in conditions where faces are obscured, where lighting is poor, and where subjects are unaware they are being watched. Every person's posture, Huang has stated, is unique, like a fingerprint, and gait recognition is capable of identifying targets from any angle.&lt;/p&gt;

&lt;p&gt;Nor is Watrix alone. In September 2024, NEC Corporation launched a gateless biometric authentication system capable of authenticating 100 people per minute while they are in motion. The system, initially deployed at NEC's Tokyo headquarters in July 2024, combines face recognition with gait-based matching technology to identify individuals in crowded areas without requiring them to stop or present credentials. NEC, which has been ranked first in face recognition benchmark tests by the US National Institute of Standards and Technology since 2009, has deployed its biometric technology in more than 50 countries and across 80 airports globally. The new system is being offered in Japan, the United States, and Singapore, and uses deep learning to re-identify tracked individuals even after they pass behind obstructions or through dense crowds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Voice That Gives You Away
&lt;/h2&gt;

&lt;p&gt;Your voice is another behavioural signature that AI systems are learning to read with uncomfortable precision. Voice biometrics analyse characteristics including pitch, tone, cadence, and the physical properties of your vocal tract to create a unique voiceprint. Financial institutions have been early adopters: customers can authenticate transactions simply by speaking. The technology is marketed as frictionless and secure, a way to eliminate passwords and PINs. But a voiceprint, once captured, is not a password. It cannot be changed if compromised. And the infrastructure for capturing voice data is already ubiquitous: every smartphone, every smart speaker, every customer service line.&lt;/p&gt;

&lt;p&gt;But the same technology that verifies your identity can also compromise it. Voice recordings are biometric identifiers as sensitive as fingerprints or retinal scans, yet they can be captured from a distance, harvested from voicemail messages, or scraped from social media posts. According to the 2024 Javelin Identity Fraud Study, American consumers lost more than USD 47 billion to identity fraud that year, with AI-generated synthetic identity fraud and voice cloning driving much of that figure. A survey by BioCatch found that 91 per cent of US banks are reconsidering voice biometric authentication due to AI cloning risks.&lt;/p&gt;

&lt;p&gt;The threat is not theoretical. In April 2025, Hong Kong police dismantled a deepfake scam ring that used AI-generated video and cloned voice attacks to open accounts at HSBC, resulting in losses exceeding HK 1.5 billion, approximately USD 193.2 million. The UK government has published a briefing note on the ethical issues arising from public sector use of biometric voice recognition technology, acknowledging the tensions between convenience, security, and privacy. Some institutions store biometric voice templates indefinitely or share them with third-party vendors for AI training purposes, often without the knowledge of the individuals whose voices are on file.&lt;/p&gt;

&lt;p&gt;The US Department of Justice has affirmed a broad definition of biometric identifiers that encompasses facial images, voiceprints and patterns, retina and iris scans, palm and fingerprints, and behavioural data such as gait and keyboard usage patterns. This definitional expansion matters because it signals that regulators are beginning to recognise what technologists have known for some time: the body is a broadcasting device, and everything it broadcasts can be recorded, analysed, and matched to an identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Invisible Biometric Layer
&lt;/h2&gt;

&lt;p&gt;Beyond gait and voice, there exists an entire category of behavioural biometrics that most people never consider. Keystroke dynamics, the study of how you type, can identify individuals based on the timing between key presses, the duration for which each key is held, and the rhythm of your overall typing pattern. These measurements, captured at millisecond precision, create a biometric template that is unique to each person and extremely difficult to replicate.&lt;/p&gt;

&lt;p&gt;Research published in &lt;em&gt;Discover Applied Sciences&lt;/em&gt; in 2025 highlights that keystroke dynamics can be used for continuous, real-time authentication, with any deviation from established typing patterns triggering an alert for possible unauthorised access. A 2024 study published in &lt;em&gt;Sensors&lt;/em&gt; demonstrated that deep learning architectures combining convolutional and recurrent neural networks achieve high effectiveness in identifying users based on typing patterns. Forensic applications are also emerging: regardless of the number of machines a person uses, their typing pattern persists, making keystroke dynamics a potential tool for identifying anonymous online activity.&lt;/p&gt;

&lt;p&gt;The transparency of this technology is part of what makes it so consequential. Keystroke dynamics require no specialised hardware. They operate via backend software implementation, and in most cases users are entirely unaware they are being profiled. This passive, invisible collection of behavioural data represents a fundamentally different kind of surveillance from a camera on a pole or a guard at a door. It is ambient, continuous, and nearly impossible to evade. Research from MDPI in 2023 also found that keystroke authentication is influenced by the language being typed, meaning bilingual users produce distinct profiles for each language, further enriching the data available for identification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wi-Fi Signals as a Surveillance Medium
&lt;/h2&gt;

&lt;p&gt;Perhaps the most unsettling frontier in behavioural identification is the use of ordinary Wi-Fi signals to detect, track, and identify people. Wi-Fi sensing exploits the way radio signals interact with human bodies: as you move through a space, you cause reflections, refractions, and attenuations in the Wi-Fi signal, and these disturbances encode information about your body shape, movement patterns, and activities.&lt;/p&gt;

&lt;p&gt;A comprehensive 2024 survey published in &lt;em&gt;ACM Transactions on Sensor Networks&lt;/em&gt; documents how researchers have used Channel State Information from Wi-Fi signals to identify individuals based on their unique gait patterns, achieving accuracy rates above 90 per cent. Unlike camera-based systems, Wi-Fi sensing works through walls, in complete darkness, and without requiring any device to be carried by the subject. The technology leverages existing infrastructure, requiring only standard Wi-Fi access points and receiving devices.&lt;/p&gt;

&lt;p&gt;Research published in &lt;em&gt;Engineering Applications of Artificial Intelligence&lt;/em&gt; demonstrated human activity recognition through walls using deep learning models applied to Wi-Fi CSI data. The PA-CSI model, which combines phase and amplitude analysis with attention mechanisms, has achieved accuracy rates of up to 99.9 per cent on benchmark datasets. A specialised system called WiFind can detect, localise, and estimate body pose through walls, debris, and smoke, using nodes costing under USD 150 each.&lt;/p&gt;

&lt;p&gt;The implications are stark. A person walking through a building equipped with standard Wi-Fi infrastructure could, in principle, be continuously tracked and identified without any visible surveillance equipment, without their knowledge, and without any possibility of covering their face or altering their appearance to avoid detection. Wi-Fi technology has evolved from its initial 802.11 standard to Wi-Fi 6 and the anticipated Wi-Fi 7, with each generation improving the resolution and sensitivity of sensing capabilities. The physical world is becoming readable in ways that were previously confined to science fiction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Regulation Struggles to Keep Pace
&lt;/h2&gt;

&lt;p&gt;The regulatory response to behavioural biometric surveillance has been fragmented and reactive, consistently trailing the technology it seeks to govern. The most significant legislative development has been the European Union's AI Act (Regulation (EU) 2024/1689), which entered into force on 1 August 2024 and began enforcing prohibitions on certain AI systems from 2 February 2025.&lt;/p&gt;

&lt;p&gt;Article 5 of the AI Act prohibits real-time remote biometric identification systems in publicly accessible spaces for law enforcement, with limited exceptions. It bans AI systems that scrape facial images from the internet or CCTV footage, and prohibits biometric categorisation systems that deduce race, political opinions, religious beliefs, or sexual orientation from biometric data. Violations carry fines of up to 35 million euros or 7 per cent of global annual turnover, whichever is higher.&lt;/p&gt;

&lt;p&gt;Yet the Act contains significant exceptions for law enforcement, allowing real-time biometric identification for targeted searches of victims of abduction or trafficking, prevention of imminent threats, and prosecution of serious crimes, all subject to judicial authorisation. These carve-outs have drawn criticism from organisations like European Digital Rights (EDRi), which argues they may legitimise the very practices the Act purports to ban. As a Stanford Law School analysis noted, despite omitting an outright ban on facial recognition in publicly accessible spaces, the AI Act will probably show its full potential in the years after its entry into force.&lt;/p&gt;

&lt;p&gt;In the United States, Illinois' Biometric Information Privacy Act remains the strongest state-level protection, granting individuals a private right of action and statutory damages of USD 1,000 per negligent violation and USD 5,000 per intentional violation. BIPA class action settlements totalled more than USD 206 million in 2024, including the landmark Clearview AI settlement in which class members received a 23 per cent equity stake in the company, valued at approximately USD 51.75 million. In August 2024, Illinois amended BIPA to limit damages to one violation per person regardless of how many times data was collected, a change that contributed to a sharp decline in new filings. Clearview AI itself had amassed a database of more than 60 billion facial images scraped from social media platforms, news websites, and other publicly accessible online sources, prompting the wave of litigation.&lt;/p&gt;

&lt;p&gt;San Francisco became the first US city to ban government use of facial recognition in May 2019, with Supervisor Aaron Peskin declaring, “We all support good policing but none of us want to live in a police state.” Yet even this landmark ordinance had limits: it carved out exceptions for federal facilities and did not apply to private businesses. Moreover, in the five years since the ban, San Francisco police admitted to circumventing it on six separate occasions.&lt;/p&gt;

&lt;p&gt;The UK's Information Commissioner's Office launched its AI and biometrics strategy in June 2025, focusing on situations where risks are highest and public concern is clearest. The ICO plans to set a high threshold of lawfulness for AI systems that infer subjective traits, intentions, or emotions based on physical or behavioural characteristics. Public polling cited in the strategy found that 54 per cent of UK adults have concerns about facial recognition technology impacting civil liberties, and that concern about AI use for welfare eligibility has risen from 44 per cent to 59 per cent between 2022 and 2025.&lt;/p&gt;

&lt;h2&gt;
  
  
  When the Wrong Person Gets Caught
&lt;/h2&gt;

&lt;p&gt;The dangers of these systems are not abstract. In January 2020, Robert Williams, a Black man living in Farmington Hills, Michigan, was arrested outside his home in front of his wife and two young daughters by Detroit police. He was detained for thirty hours in an overcrowded, dirty cell. The arrest was based on a facial recognition match from a blurry surveillance image of a shoplifting suspect at a Shinola store in Detroit. Williams was actually the ninth-best match in the system's results, and detectives had not investigated his whereabouts before making the arrest.&lt;/p&gt;

&lt;p&gt;Williams' case, brought to public attention by the ACLU and the University of Michigan Law School's Civil Rights Litigation Initiative, became the first publicly reported instance of a false facial recognition match leading to a wrongful arrest. On 28 June 2024, the parties reached a groundbreaking settlement that established the nation's strongest police department policies constraining law enforcement's use of facial recognition, including a prohibition on arrests based solely on facial recognition results and mandatory training on the technology's risks and its higher misidentification rates for people of colour.&lt;/p&gt;

&lt;p&gt;Williams' case was one of three known wrongful arrests in Detroit where police relied on facial recognition technology. All three individuals wrongfully arrested were Black. This pattern underscores the findings of Buolamwini's Gender Shades study and raises a critical question about behavioural biometrics more broadly: if the training data and deployment contexts of gait recognition, voice identification, and other behavioural systems reproduce the same biases, the consequences for marginalised communities could be severe. The Pew Research Center found in a 2022 survey that 28 per cent of Black adults said police would definitely make more false arrests if facial recognition were widely adopted, compared with just 11 per cent of white adults.&lt;/p&gt;

&lt;h2&gt;
  
  
  Surveillance and the Death of Free Assembly
&lt;/h2&gt;

&lt;p&gt;The surveillance theorist and Harvard professor Shoshana Zuboff has described surveillance capitalism as “the unilateral claiming of private human experience as free raw material for translation into behavioural data.” Her framework, articulated in &lt;em&gt;The Age of Surveillance Capitalism&lt;/em&gt; (2019), identifies a fundamental shift in which human experiences are extracted, computed, and sold as prediction products. “We are not surveillance capitalism's 'customers,'” Zuboff writes. “We are the sources of surveillance capitalism's crucial surplus.”&lt;/p&gt;

&lt;p&gt;When behavioural identification systems operate in public spaces, they do not merely observe; they transform public space itself. Research consistently demonstrates that surveillance produces measurable “chilling effects” on freedom of expression, assembly, and political participation. A qualitative study published in the &lt;em&gt;Journal of Human Rights Practice&lt;/em&gt; (Oxford Academic) documented, through interviews with 44 participants in Uganda and Zimbabwe, how the fear of surveillance undermines trust and interpersonal relationships, creating spirals of paranoia and mistrust that directly affect the right to freedom of assembly.&lt;/p&gt;

&lt;p&gt;These findings extend well beyond authoritarian contexts. In the United States, the Department of Commerce's National Telecommunications and Information Administration found in a survey of 41,000 households that one in five Americans avoided online activity because of concerns about government data collection. The Electronic Frontier Foundation has highlighted studies showing that government surveillance discourages both speech and access to information on the internet. When people know they are being watched, they change what they say, where they go, and whom they associate with. The extension of these chilling effects from the digital to the physical realm, through gait recognition cameras, voice identification microphones, and Wi-Fi sensing systems, represents a qualitative escalation.&lt;/p&gt;

&lt;p&gt;Amnesty International's Ban the Scan campaign, launched in 2021, has mapped the surveillance landscape of New York City, documenting more than 25,500 CCTV cameras across the city and revealing that the NYPD used facial recognition technology in 22,000 cases since 2017. The campaign found that the most surveilled neighbourhood across three boroughs was an area in Brooklyn with a population comprising 54.4 per cent Black residents, underscoring the racialised geography of surveillance infrastructure. Amnesty further documented how facial recognition was used at Black Lives Matter protest sites in 2020 to identify, track, and harass people exercising their rights to peaceful assembly.&lt;/p&gt;

&lt;p&gt;The UN Office of the High Commissioner for Human Rights is preparing a thematic report, expected at the 62nd session of the Human Rights Council, analysing the impact of digital and AI-assisted surveillance on assembly and association rights, including chilling effects. A 2025 study in &lt;em&gt;Big Data and Society&lt;/em&gt;, examining Extinction Rebellion protests in The Hague, revealed that surveillance technology produces effects beyond traditional chilling, including what researchers termed “hyper-transparency” and “hyper-alertness” among both protesters and police.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rise of Anti-Surveillance Fashion
&lt;/h2&gt;

&lt;p&gt;The proliferation of behavioural identification systems has given rise to a counter-movement that sounds like it belongs in a cyberpunk novel but is entirely real: adversarial fashion. These are garments, accessories, and cosmetic techniques designed to confuse, disrupt, or defeat AI surveillance systems.&lt;/p&gt;

&lt;p&gt;Artist and researcher Adam Harvey pioneered this field with his CV Dazzle project in 2010, which used cubist-inspired makeup patterns to defeat facial detection algorithms. The technique, named after the dazzle camouflage developed by British painter Norman Wilkinson for Allied ships during the First World War, works by obscuring key facial features until recognition systems can no longer detect a human face. Harvey followed this with HyperFace in 2016, which takes the opposite approach: rather than hiding faces, it floods the environment with false face-like patterns printed on fabric, exploiting algorithms' preference for the highest-confidence facial region.&lt;/p&gt;

&lt;p&gt;More recently, the Italian company Cap_able has developed a patented process that algorithmically generates adversarial patterns, translating them into knitted garments that retail between USD 300 and USD 600. These garments combine visual adversarial patterns with infrared protection, aiming to disrupt both optical and thermal surveillance. Researchers have also published work on thermally activated dual-modal adversarial clothing that can defeat both visible-light cameras and infrared sensors simultaneously.&lt;/p&gt;

&lt;p&gt;However, as technologist Adam Harvey himself has cautioned, “Camouflage, in general, should be considered temporary, but especially technical camouflage that targets quickly evolving algorithms.” The arms race between surveillance systems and countermeasures is inherently asymmetric: updating a neural network is cheaper and faster than redesigning a wardrobe. Moreover, the very act of wearing obviously adversarial clothing in a public space draws human attention, potentially marking the wearer as suspicious even as it confuses the machines.&lt;/p&gt;

&lt;p&gt;The video surveillance industry, enhanced by AI, is projected to grow from USD 3.90 billion in 2024 to USD 12.46 billion by 2030, according to market research. Against this scale of investment, adversarial fashion remains a niche countermeasure, meaningful as a statement of resistance but limited as a practical solution to the erosion of anonymity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Europe's Border Experiment in Behavioural Biometrics
&lt;/h2&gt;

&lt;p&gt;While much of the debate about behavioural biometrics focuses on domestic surveillance, the technology is also reshaping the boundaries of national security and border control. The European Union's PopEye project, funded through a Horizon Europe grant of 3.2 million euros, represents a significant step towards integrating gait recognition into border security infrastructure.&lt;/p&gt;

&lt;p&gt;PopEye, an acronym for “robust Privacy-preserving biOmetric technologies for Passengers' identification and verification at EU external borders maximising the accuracY, reliability and throughput of the rEcognition,” aims to identify individuals on the move, at distances of up to 200 metres, without requiring them to stop. The project combines gait recognition with 3D facial recognition, addressing the limitations of each technology when used in isolation.&lt;/p&gt;

&lt;p&gt;The project follows a 2021 Frontex study that examined gait recognition in depth, suggesting that video, radar, and floor sensors could be used to identify people by how they walk. Led by the European Association for Biometrics, PopEye involves partners including the AIT Austrian Institute of Technology, Idiap Research Institute, KU Leuven, and Vrije Universiteit Brussel, among others. Pilot programmes are being conducted at the external borders of Romania and Finland, with the Finnish Ministry of Interior and Romanian Border Authorities serving as key participants.&lt;/p&gt;

&lt;p&gt;The project's emphasis on privacy preservation and compliance with the EU's AI Act and GDPR reflects an awareness that the technology it develops operates in a sensitive legal and ethical space. Researchers from VUB and KU Leuven are leading efforts on integrated impact assessments to safeguard human rights and data protection. Yet the fundamental tension remains: a system designed to identify people at a distance, without their cooperation, is inherently a surveillance technology, regardless of the procedural safeguards that surround it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Economics of Knowing Who You Are
&lt;/h2&gt;

&lt;p&gt;The security technologist Bruce Schneier, a fellow and lecturer at Harvard's Kennedy School and board member of the Electronic Frontier Foundation, has written extensively about the economics of surveillance and the asymmetries of power it creates. “It is poor civic hygiene to install technologies that could someday facilitate a police state,” Schneier has warned. He has illustrated the collapsing cost of surveillance with a telling comparison: covert human surveillance of an individual costs approximately USD 175,000 per month, while obtaining location information from a mobile provider costs as little as USD 30 per month.&lt;/p&gt;

&lt;p&gt;Behavioural biometrics push this economic logic further still. Gait recognition can operate using existing CCTV infrastructure. Keystroke dynamics require only software. Wi-Fi sensing leverages networks that are already installed in virtually every commercial and institutional building. The marginal cost of identifying one additional person approaches zero, which means the economic incentive to deploy these systems is enormous and the barriers to mass deployment are vanishingly small.&lt;/p&gt;

&lt;p&gt;This economic reality creates what Schneier has called an alliance of interests between corporate and government surveillance. Corporations collect behavioural data for authentication, fraud prevention, and customer profiling. Governments seek the same data for security, immigration enforcement, and law enforcement. The data collected for one purpose inevitably becomes available for others, a phenomenon that privacy advocates call “function creep.” The US Consumer Financial Protection Bureau has already issued guidance stating that biometric information, including keystroke frequency and behavioural monitoring, used in employment decisions must comply with the Fair Credit Reporting Act.&lt;/p&gt;

&lt;p&gt;Zuboff's analysis cuts deeper. She argues that “the power to predict human behaviour is the power to modify human behaviour, and this is what surveillance capitalism is all about.” When every public interaction can be linked to a known identity through behavioural patterns, the entire notion of a public sphere where individuals can move, speak, and associate without being tracked becomes an anachronism. The right to privacy, she insists, is not merely about data protection; it is about the conditions necessary for human autonomy: “what should become data in the first place, that is where the line has to be drawn.”&lt;/p&gt;

&lt;h2&gt;
  
  
  What Remains of Anonymity
&lt;/h2&gt;

&lt;p&gt;The question this article set out to address, what does the rise of AI behavioural recognition mean for anonymity in public spaces, has a disquieting answer. The technological trajectory is clear: identification systems are becoming cheaper, more accurate, more pervasive, and harder to evade. They are moving beyond the face into the body's every motion and utterance. They work through walls, in darkness, and across distances that make consent meaningless.&lt;/p&gt;

&lt;p&gt;The regulatory response, while significant in certain jurisdictions, remains fragmented and reactive. The EU's AI Act represents the most comprehensive attempt at governance, but its exceptions for law enforcement create significant loopholes. BIPA has produced substantial financial penalties in the United States, but it is a single state's law, and its recent amendments have blunted its deterrent effect. The UK's ICO strategy is still in its early stages. Globally, there is no coherent framework for governing technologies that can identify people from their walk, their voice, or the way they type.&lt;/p&gt;

&lt;p&gt;What is at stake is not merely a technical question about privacy settings or data policies. It is a question about the kind of society that emerges when public spaces become zones of continuous, ambient identification. Research on the chilling effects of surveillance demonstrates that when people believe they are being watched, they modify their behaviour, self-censor their speech, and withdraw from political participation. The extension of surveillance from visible cameras to invisible behavioural identification systems does not reduce this effect; it amplifies it, because there is no way to know when you are and are not being observed.&lt;/p&gt;

&lt;p&gt;Truly private human interaction in public spaces, a conversation with a stranger that no system records, a protest march where participants cannot be individually identified, a walk through a city where your movements are not logged and matched against a database, is becoming technologically impossible. This does not mean it will vanish entirely; enforcement gaps, technical limitations, and deliberate resistance will preserve pockets of anonymity. But the default condition of public life is shifting, from one where anonymity was assumed to one where identification is the norm.&lt;/p&gt;

&lt;p&gt;The technologies being installed today will outlast the political conditions under which they were deployed. Gait recognition cameras placed for counter-terrorism will not be removed when the threat recedes. Voice identification systems built for banking will not be dismantled when fraud declines. Wi-Fi sensing capabilities embedded in building infrastructure will persist indefinitely. The question is not whether these technologies will be misused, but when, by whom, and with what consequences for the freedoms that depend on the ability to move through the world unrecognised.&lt;/p&gt;

&lt;p&gt;Bruce Schneier put it plainly: “Privacy protects us from abuses by those in power, even if we're doing nothing wrong at the time of surveillance.” In a world where your walk, your voice, and your keystrokes are all that stand between you and identification, that protection is being quietly, systematically, irreversibly eroded.&lt;/p&gt;




&lt;h2&gt;
  
  
  References and Sources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Joy Buolamwini and Timnit Gebru. “Gender Shades: Intersectional Accuracy Disparities in Commercial Gender Classification.” &lt;em&gt;Proceedings of Machine Learning Research&lt;/em&gt;, Vol. 81, 2018. &lt;a href="http://proceedings.mlr.press/v81/buolamwini18a/buolamwini18a.pdf" rel="noopener noreferrer"&gt;http://proceedings.mlr.press/v81/buolamwini18a/buolamwini18a.pdf&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;South China Morning Post. “Chinese police test gait-recognition technology from AI start-up Watrix that identifies people based on how they walk.” November 2018. &lt;a href="https://www.scmp.com/tech/start-ups/article/2187600/chinese-police-surveillance-gets-boost-ai-start-watrix-technology-can" rel="noopener noreferrer"&gt;https://www.scmp.com/tech/start-ups/article/2187600/chinese-police-surveillance-gets-boost-ai-start-watrix-technology-can&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;NEC Corporation. “NEC Launches new system using Biometric Authentication Technology.” Press Release, 3 September 2024. &lt;a href="https://www.nec.com/en/press/202409/global_20240903_01.html" rel="noopener noreferrer"&gt;https://www.nec.com/en/press/202409/global_20240903_01.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GlobeNewsWire/SNS Insider. “Gait Biometrics Market Size to Hit USD 3.41 Billion by 2032.” 21 July 2025. &lt;a href="https://www.globenewswire.com/news-release/2025/07/21/3118758/0/en/Gait-Biometrics-Market-Size-to-Hit-USD-3-41-Billion-by-2032-at-13-38-CAGR-Research-by-SNS-Insider.html" rel="noopener noreferrer"&gt;https://www.globenewswire.com/news-release/2025/07/21/3118758/0/en/Gait-Biometrics-Market-Size-to-Hit-USD-3-41-Billion-by-2032-at-13-38-CAGR-Research-by-SNS-Insider.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;European Parliament. “EU AI Act: first regulation on artificial intelligence.” &lt;a href="https://www.europarl.europa.eu/topics/en/article/20230601STO93804/eu-ai-act-first-regulation-on-artificial-intelligence" rel="noopener noreferrer"&gt;https://www.europarl.europa.eu/topics/en/article/20230601STO93804/eu-ai-act-first-regulation-on-artificial-intelligence&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stanford Law School. “No. 91: EU Artificial Intelligence Act: Regulating the Use of Facial Recognition Technologies in Publicly Accessible Spaces.” &lt;a href="https://law.stanford.edu/publications/no-91-eu-artificial-intelligence-act-regulating-the-use-of-facial-recognition-technologies-in-publicly-accessible-spaces/" rel="noopener noreferrer"&gt;https://law.stanford.edu/publications/no-91-eu-artificial-intelligence-act-regulating-the-use-of-facial-recognition-technologies-in-publicly-accessible-spaces/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WilmerHale. “Year in Review: 2024 BIPA Litigation Takeaways.” 19 February 2025. &lt;a href="https://www.wilmerhale.com/en/insights/blogs/wilmerhale-privacy-and-cybersecurity-law/20250219-year-in-review-2024-bipa-litigation-takeaways" rel="noopener noreferrer"&gt;https://www.wilmerhale.com/en/insights/blogs/wilmerhale-privacy-and-cybersecurity-law/20250219-year-in-review-2024-bipa-litigation-takeaways&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bloomberg Law. “Clearview AI Gets Settlement Approved in Face-Scan Privacy Case.” 2025. &lt;a href="https://news.bloomberglaw.com/litigation/clearview-ai-gets-settlement-approved-in-face-scan-privacy-case" rel="noopener noreferrer"&gt;https://news.bloomberglaw.com/litigation/clearview-ai-gets-settlement-approved-in-face-scan-privacy-case&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CNN. “San Francisco just banned facial-recognition technology.” 14 May 2019. &lt;a href="https://www.cnn.com/2019/05/14/tech/san-francisco-facial-recognition-ban" rel="noopener noreferrer"&gt;https://www.cnn.com/2019/05/14/tech/san-francisco-facial-recognition-ban&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SF Standard. “SFPD skirted facial-recognition ban, lawsuit says.” 18 July 2024. &lt;a href="https://sfstandard.com/2024/07/18/san-francisco-police-facial-recognition-violations/" rel="noopener noreferrer"&gt;https://sfstandard.com/2024/07/18/san-francisco-police-facial-recognition-violations/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ACLU. “Williams v. City of Detroit.” &lt;a href="https://www.aclu.org/cases/williams-v-city-of-detroit-face-recognition-false-arrest" rel="noopener noreferrer"&gt;https://www.aclu.org/cases/williams-v-city-of-detroit-face-recognition-false-arrest&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shoshana Zuboff. &lt;em&gt;The Age of Surveillance Capitalism: The Fight for a Human Future at the New Frontier of Power.&lt;/em&gt; PublicAffairs, 2019.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Oxford Academic. “Chilling Effects of Surveillance and Human Rights: Insights from Qualitative Research in Uganda and Zimbabwe.” &lt;em&gt;Journal of Human Rights Practice&lt;/em&gt;, Vol. 16, Issue 1, 2024. &lt;a href="https://academic.oup.com/jhrp/article/16/1/397/7234270" rel="noopener noreferrer"&gt;https://academic.oup.com/jhrp/article/16/1/397/7234270&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Amnesty International. “Ban The Scan New York City.” &lt;a href="https://banthescan.amnesty.org/nyc/index.html" rel="noopener noreferrer"&gt;https://banthescan.amnesty.org/nyc/index.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Storbeck, M. et al. “Surveillance experiences of extinction rebellion activists and police: Unpacking the technologization of Dutch protest policing.” &lt;em&gt;Big Data &amp;amp; Society&lt;/em&gt;, 2025. &lt;a href="https://journals.sagepub.com/doi/10.1177/20539517241307892" rel="noopener noreferrer"&gt;https://journals.sagepub.com/doi/10.1177/20539517241307892&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ICO. “Preventing harm, promoting trust: our AI and biometrics strategy.” June 2025. &lt;a href="https://ico.org.uk/about-the-ico/our-information/our-strategies-and-plans/artificial-intelligence-and-biometrics-strategy/" rel="noopener noreferrer"&gt;https://ico.org.uk/about-the-ico/our-information/our-strategies-and-plans/artificial-intelligence-and-biometrics-strategy/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ACM Transactions on Sensor Networks. “A Survey on WiFi-based Human Identification: Scenarios, Challenges, and Current Solutions.” 2024. &lt;a href="https://dl.acm.org/doi/10.1145/3708323" rel="noopener noreferrer"&gt;https://dl.acm.org/doi/10.1145/3708323&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ScienceDirect. “WiFi-based human activity recognition through wall using deep learning.” &lt;em&gt;Engineering Applications of Artificial Intelligence&lt;/em&gt;, 2024. &lt;a href="https://www.sciencedirect.com/science/article/abs/pii/S0952197623013556" rel="noopener noreferrer"&gt;https://www.sciencedirect.com/science/article/abs/pii/S0952197623013556&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Springer Nature. “Keystroke dynamics for intelligent biometric authentication with machine learning.” &lt;em&gt;Discover Applied Sciences&lt;/em&gt;, 2025. &lt;a href="https://link.springer.com/article/10.1007/s42452-025-07449-5" rel="noopener noreferrer"&gt;https://link.springer.com/article/10.1007/s42452-025-07449-5&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MDPI/Applied Sciences. “Authentication by Keystroke Dynamics: The Influence of Typing Language.” 2023. &lt;a href="https://www.mdpi.com/2076-3417/13/20/11478" rel="noopener noreferrer"&gt;https://www.mdpi.com/2076-3417/13/20/11478&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bruce Schneier. “The Eternal Value of Privacy.” &lt;em&gt;Schneier on Security&lt;/em&gt;, May 2006. &lt;a href="https://www.schneier.com/essays/archives/2006/05/the_eternal_value_of.html" rel="noopener noreferrer"&gt;https://www.schneier.com/essays/archives/2006/05/the_eternal_value_of.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Biometric Update. “PopEye to strengthen EU border biometrics with gait recognition integration.” October 2024. &lt;a href="https://www.biometricupdate.com/202410/popeye-to-strengthen-eu-border-biometrics-with-gait-recognition-integration" rel="noopener noreferrer"&gt;https://www.biometricupdate.com/202410/popeye-to-strengthen-eu-border-biometrics-with-gait-recognition-integration&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mozilla Foundation. “How to Disappear: The Rise of Anti-Surveillance Fashion.” &lt;a href="https://www.mozillafoundation.org/en/nothing-personal/anti-surveillance-fashion-privacy-ai/" rel="noopener noreferrer"&gt;https://www.mozillafoundation.org/en/nothing-personal/anti-surveillance-fashion-privacy-ai/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GOV.UK. “Briefing note on the ethical issues arising from the public sector use of biometric voice recognition technology.” &lt;a href="https://www.gov.uk/government/publications/public-sector-use-of-biometric-voice-recognition-technology-ethical-issues/" rel="noopener noreferrer"&gt;https://www.gov.uk/government/publications/public-sector-use-of-biometric-voice-recognition-technology-ethical-issues/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pew Research Center. “Public views of police use of facial recognition technology.” 17 March 2022. &lt;a href="https://www.pewresearch.org/internet/2022/03/17/public-more-likely-to-see-facial-recognition-use-by-police-as-good-rather-than-bad-for-society/" rel="noopener noreferrer"&gt;https://www.pewresearch.org/internet/2022/03/17/public-more-likely-to-see-facial-recognition-use-by-police-as-good-rather-than-bad-for-society/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fos7pdncawa0mgqcin0gf.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%2Fos7pdncawa0mgqcin0gf.png" alt="Tim Green" width="100" height="100"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tim Green&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;UK-based Systems Theorist &amp;amp; Independent Technology Writer&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Tim explores the intersections of artificial intelligence, decentralised cognition, and posthuman ethics. His work, published at &lt;a href="https://smarterarticles.co.uk" rel="noopener noreferrer"&gt;smarterarticles.co.uk&lt;/a&gt;, challenges dominant narratives of technological progress while proposing interdisciplinary frameworks for collective intelligence and digital stewardship.&lt;/p&gt;

&lt;p&gt;His writing has been featured on Ground News and shared by independent researchers across both academic and technological communities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ORCID:&lt;/strong&gt; &lt;a href="https://orcid.org/0009-0002-0156-9795" rel="noopener noreferrer"&gt;0009-0002-0156-9795&lt;/a&gt; &lt;br&gt;
&lt;strong&gt;Email:&lt;/strong&gt; &lt;a href="mailto:tim@smarterarticles.co.uk"&gt;tim@smarterarticles.co.uk&lt;/a&gt;&lt;/p&gt;

</description>
      <category>humanintheloop</category>
      <category>aigaitrecognition</category>
      <category>behavioralbiometrics</category>
      <category>anonymityerosion</category>
    </item>
    <item>
      <title>Synchronous vs Asynchronous JavaScript</title>
      <dc:creator>Pratham</dc:creator>
      <pubDate>Sun, 10 May 2026 10:53:26 +0000</pubDate>
      <link>https://music.forem.com/pratham69/synchronous-vs-asynchronous-javascript-4933</link>
      <guid>https://music.forem.com/pratham69/synchronous-vs-asynchronous-javascript-4933</guid>
      <description>&lt;p&gt;&lt;em&gt;Why JavaScript doesn't just wait around — and how that changes everything about how you write code.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Let me tell you about the moment asynchronous JavaScript broke my brain.&lt;/p&gt;

&lt;p&gt;I wrote this code, fully expecting it to print in order:&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;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;First&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Second&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Third&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;I expected: First → Second → Third.&lt;/p&gt;

&lt;p&gt;I got: First → Third → Second.&lt;/p&gt;

&lt;p&gt;Zero milliseconds of delay, and "Second" &lt;em&gt;still&lt;/em&gt; printed last. I stared at my screen thinking JavaScript was broken. It wasn't. I just didn't understand how JavaScript handles time.&lt;/p&gt;

&lt;p&gt;This is the story of &lt;strong&gt;synchronous vs asynchronous&lt;/strong&gt; code, and once you get it, a massive amount of JavaScript behavior suddenly makes sense. Let me walk you through it the way it finally clicked for me in the ChaiCode Web Dev Cohort 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does Synchronous Code Mean?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Synchronous&lt;/strong&gt; means "one thing at a time, in order." Each line waits for the previous line to finish before it starts.&lt;/p&gt;

&lt;p&gt;Think of it like a single-lane road. Only one car can pass at a time. If the car in front stops, everyone behind it waits.&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;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Step 1: Wake up&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Step 2: Brush teeth&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Step 3: Make coffee&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Step 4: Start coding&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;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Step 1: Wake up
Step 2: Brush teeth
Step 3: Make coffee
Step 4: Start coding
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each line runs, finishes, and &lt;em&gt;then&lt;/em&gt; the next one starts. Predictable. Linear. No surprises.&lt;/p&gt;

&lt;h3&gt;
  
  
  Synchronous Execution Timeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Time →
─────────────────────────────────────────────────

  Step 1       Step 2       Step 3       Step 4
  ┌─────┐     ┌─────┐     ┌─────┐     ┌─────┐
  │Wake │ ──→ │Brush│ ──→ │Make │ ──→ │Code │
  │ up  │     │teeth│     │coffee│    │     │
  └─────┘     └─────┘     └─────┘     └─────┘

Each task COMPLETES before the next one STARTS.
Nothing runs in parallel.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how JavaScript works by default. It's a &lt;strong&gt;single-threaded&lt;/strong&gt; language — it has one call stack, one thread, and it processes one operation at a time.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: Blocking Code
&lt;/h2&gt;

&lt;p&gt;Synchronous execution works perfectly until you hit a task that takes &lt;em&gt;time&lt;/em&gt;. Not a millisecond — real time. Seconds. Maybe longer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-World Example: Waiting for Data
&lt;/h3&gt;

&lt;p&gt;Imagine you're building a web app. You need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Show a loading message&lt;/li&gt;
&lt;li&gt;Fetch user data from an API (takes 2–3 seconds)&lt;/li&gt;
&lt;li&gt;Display the user data&lt;/li&gt;
&lt;li&gt;Show other page content&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If everything is synchronous:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Time →
─────────────────────────────────────────────────

  Show        Fetch data       Display      Show
  loading     (waiting...)     user data    content
  ┌─────┐    ┌────────────────┐ ┌─────┐    ┌─────┐
  │     │ ──→│  2-3 SECONDS   │→│     │ ──→│     │
  │     │    │  EVERYTHING    │ │     │    │     │
  │     │    │  IS FROZEN     │ │     │    │     │
  └─────┘    └────────────────┘ └─────┘    └─────┘
                     ↑
              BLOCKING! 🚫
              Nothing else can run while waiting.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The entire page &lt;strong&gt;freezes&lt;/strong&gt;. The user can't scroll, can't click, can't do anything. The UI is unresponsive for 2–3 seconds. That's a terrible user experience.&lt;/p&gt;

&lt;p&gt;This is called &lt;strong&gt;blocking&lt;/strong&gt; — one slow task blocks everything else from running.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Example of Blocking
&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;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Page is loading...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Simulating a blocking operation (DON'T do this in real code)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&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="k"&gt;while &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="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Busy-wait for 3 seconds — blocks EVERYTHING&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Data loaded!&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Showing rest of the page&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;During those 3 seconds, JavaScript can't do &lt;em&gt;anything&lt;/em&gt; else. No animations, no button clicks, no rendering. The browser might even show the "page unresponsive" dialog.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does Asynchronous Code Mean?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Asynchronous&lt;/strong&gt; means "start a task, move on, and come back to it when it's done." You don't wait — you continue doing other things.&lt;/p&gt;

&lt;p&gt;Think of it like ordering food at a restaurant. You place your order and then &lt;em&gt;continue your conversation&lt;/em&gt; while the kitchen prepares the food. When the food is ready, the waiter brings it to you. You didn't freeze in silence staring at the kitchen door for 20 minutes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SYNCHRONOUS (blocking):
  You order → you STARE at the kitchen → food arrives → you eat → you talk

ASYNCHRONOUS (non-blocking):
  You order → you TALK while kitchen cooks → food arrives → you eat
  (you didn't waste time waiting)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In JavaScript, asynchronous code lets you say: "Start this task. I'll keep running other code. Call me when you're done."&lt;/p&gt;




&lt;h2&gt;
  
  
  Why JavaScript Needs Asynchronous Behavior
&lt;/h2&gt;

&lt;p&gt;JavaScript runs in the browser. Browsers need to do a &lt;em&gt;lot&lt;/em&gt; at the same time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Respond to user clicks&lt;/li&gt;
&lt;li&gt;Render animations smoothly (60 fps)&lt;/li&gt;
&lt;li&gt;Fetch data from APIs&lt;/li&gt;
&lt;li&gt;Run your JavaScript code&lt;/li&gt;
&lt;li&gt;Update the DOM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If JavaScript blocked on every slow operation, the browser would freeze constantly. That's unacceptable for a web environment. So JavaScript uses an &lt;strong&gt;asynchronous model&lt;/strong&gt; to handle time-consuming tasks without freezing the main thread.&lt;/p&gt;

&lt;p&gt;The slow tasks get &lt;em&gt;offloaded&lt;/em&gt;. While they're being processed elsewhere (by the browser, the network, the filesystem), JavaScript keeps running the rest of your code. When the slow task finishes, a callback is queued up and JavaScript processes it when it's free.&lt;/p&gt;




&lt;h2&gt;
  
  
  Asynchronous Examples: Timers and API Calls
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;setTimeout&lt;/code&gt; — The Simplest Async Example
&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;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Start&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;setTimeout&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;This runs after 2 seconds&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="mi"&gt;2000&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;End&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;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Start
End
This runs after 2 seconds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wait — "End" printed &lt;em&gt;before&lt;/em&gt; the timeout message, even though the timeout line comes first in the code! Here's why:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;console.log("Start")&lt;/code&gt; runs immediately.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;setTimeout&lt;/code&gt; registers the callback and says "run this after 2 seconds." JavaScript &lt;strong&gt;doesn't wait&lt;/strong&gt; — it moves on.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;console.log("End")&lt;/code&gt; runs immediately.&lt;/li&gt;
&lt;li&gt;After 2 seconds, the callback fires: &lt;code&gt;console.log("This runs after 2 seconds")&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Zero-Delay Mystery (Explained!)
&lt;/h3&gt;

&lt;p&gt;Remember my opening example?&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;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;First&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Second&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Third&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;Output: First → Third → Second.&lt;/p&gt;

&lt;p&gt;Even with 0 milliseconds delay, the callback doesn't run immediately. It gets placed in the &lt;strong&gt;task queue&lt;/strong&gt; and only executes &lt;em&gt;after&lt;/em&gt; all synchronous code has finished. JavaScript always finishes what's on its plate before checking the queue.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;setInterval&lt;/code&gt; — Repeat at Intervals
&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;let&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&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;timer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setInterval&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;count&lt;/span&gt;&lt;span class="o"&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;`Tick &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;count&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;clearInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timer&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Timer stopped.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Timer started — code continues running...&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;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Timer started — code continues running...
Tick 1       (after 1 second)
Tick 2       (after 2 seconds)
Tick 3       (after 3 seconds)
Timer stopped.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code &lt;em&gt;after&lt;/em&gt; &lt;code&gt;setInterval&lt;/code&gt; runs immediately. The ticks happen in the background.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Calls with &lt;code&gt;fetch&lt;/code&gt; (Preview)
&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;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fetching user data...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&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="s2"&gt;https://jsonplaceholder.typicode.com/users/1&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;then&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="o"&gt;=&amp;gt;&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="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;user&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;`User: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;user&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;`&lt;/span&gt;&lt;span class="p"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;This runs while fetch is working...&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;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fetching user data...
This runs while fetch is working...
User: Leanne Graham       (arrives later)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;fetch&lt;/code&gt; doesn't block. It fires the request, and JavaScript keeps going. When the response comes back, the &lt;code&gt;.then()&lt;/code&gt; callback handles it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Asynchronous Task Queue Concept
&lt;/h2&gt;

&lt;p&gt;Here's the mental model that ties everything together:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────────────────────────────────┐
│                   Call Stack                          │
│           (synchronous code runs here)               │
│                                                      │
│   console.log("Start")  ← runs immediately           │
│   setTimeout(cb, 2000)  ← registers callback, moves on│
│   console.log("End")    ← runs immediately           │
│                                                      │
└──────────────────────────┬───────────────────────────┘
                           │
              "Is the call stack empty?"
                           │
                    YES ↓  NO → keep running
                           │
┌──────────────────────────┴───────────────────────────┐
│                   Task Queue                          │
│        (async callbacks wait here)                   │
│                                                      │
│   [callback from setTimeout]  ← waiting...           │
│                                                      │
│   When call stack is empty, this moves up ↑           │
└──────────────────────────────────────────────────────┘

The EVENT LOOP continuously checks:
  "Is the call stack empty? If yes, take the next task
   from the queue and put it on the stack."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step-by-Step Trace
&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;Code&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;Step&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="nx"&gt;Call&lt;/span&gt; &lt;span class="nx"&gt;Stack&lt;/span&gt;&lt;span class="p"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;     &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;prints&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="nx"&gt;Step&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="nx"&gt;Call&lt;/span&gt; &lt;span class="nx"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;    &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;registers&lt;/span&gt; &lt;span class="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;removed&lt;/span&gt;
         &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="nx"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;Step&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="nx"&gt;Call&lt;/span&gt; &lt;span class="nx"&gt;Stack&lt;/span&gt;&lt;span class="p"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;     &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;prints&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="nx"&gt;Step&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="nx"&gt;Call&lt;/span&gt; &lt;span class="nx"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;EMPTY&lt;/span&gt;
         &lt;span class="nx"&gt;Event&lt;/span&gt; &lt;span class="nx"&gt;Loop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Stack empty? Yes → move cb from queue to stack&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="nx"&gt;Step&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="nx"&gt;Call&lt;/span&gt; &lt;span class="nx"&gt;Stack&lt;/span&gt;&lt;span class="p"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;     &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;prints&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="nx"&gt;Output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is why "B" prints last even with a 0ms delay. The callback &lt;em&gt;always&lt;/em&gt; waits for all synchronous code to finish before it can run.&lt;/p&gt;




&lt;h2&gt;
  
  
  Synchronous vs Asynchronous — Side by Side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Synchronous&lt;/th&gt;
&lt;th&gt;Asynchronous&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Execution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One at a time, in order&lt;/td&gt;
&lt;td&gt;Start task, move on, handle result later&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Blocking?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes — waits for each task&lt;/td&gt;
&lt;td&gt;❌ No — moves on immediately&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UI impact&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can freeze the page&lt;/td&gt;
&lt;td&gt;Keeps the page responsive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Use case&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple calculations, variable assignment&lt;/td&gt;
&lt;td&gt;API calls, timers, file reads, user events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Code complexity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple, linear&lt;/td&gt;
&lt;td&gt;Requires callbacks, promises, or async/await&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;let x = 1 + 2;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fetch(url).then(...)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Everyday Analogy
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SYNCHRONOUS — doing laundry the blocking way:
  1. Put clothes in washer → WAIT 45 min → done
  2. Move to dryer → WAIT 60 min → done
  3. Fold clothes → done
  Total: You did NOTHING else for 2 hours.

ASYNCHRONOUS — doing laundry the smart way:
  1. Put clothes in washer → go cook dinner
  2. Washer beeps → move to dryer → go read a book
  3. Dryer beeps → fold clothes
  Total: You cooked dinner AND read a book while waiting.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Problems That Occur with Blocking Code
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Frozen UI
&lt;/h3&gt;

&lt;p&gt;If JavaScript is busy with a synchronous task, the browser can't update the screen, respond to clicks, or animate anything. Users see a frozen, unresponsive page.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Poor User Experience
&lt;/h3&gt;

&lt;p&gt;Nobody wants to wait 3 seconds staring at a blank screen while data loads. Async code lets you show loading spinners, skeleton screens, or partial content while data arrives.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Timeouts and Failures
&lt;/h3&gt;

&lt;p&gt;Synchronous network requests (which are deprecated for good reason) would freeze the browser until the server responds — or until the request times out, leaving the user stuck.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Wasted Resources
&lt;/h3&gt;

&lt;p&gt;A single-threaded language that blocks means the CPU is idle during I/O waits. Async code lets the CPU do useful work while waiting for slow operations to complete.&lt;/p&gt;




&lt;h2&gt;
  
  
  Let's Practice: Hands-On Assignment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Part 1: Predict the Output
&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;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;1000&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;4&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5&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;&lt;strong&gt;Answer:&lt;/strong&gt; &lt;code&gt;1, 3, 5, 4, 2&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;1&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt;, &lt;code&gt;5&lt;/code&gt; are synchronous — they run immediately in order.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;4&lt;/code&gt; has 0ms delay but still waits for synchronous code to finish.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;2&lt;/code&gt; has 1000ms delay — runs last.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Part 2: Simulate Async Data Loading
&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;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;📡 Fetching user data...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;setTimeout&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;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pratham&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;developer&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="s2"&gt;`✅ User loaded: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;user&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; (&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;)`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;2000&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;⏳ Meanwhile, showing the rest of the page...&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;📰 News section loaded.&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;📊 Dashboard widgets loaded.&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;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📡 Fetching user data...
⏳ Meanwhile, showing the rest of the page...
📰 News section loaded.
📊 Dashboard widgets loaded.
✅ User loaded: Pratham (developer)   ← arrives 2 seconds later
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Part 3: Experience Blocking vs Non-Blocking
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Blocking version — freezes everything for 3 seconds&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Start (blocking)&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;start&lt;/span&gt; &lt;span class="o"&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="k"&gt;while &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="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="c1"&gt;// busy wait&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;End (blocking)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// prints after 3 seconds of freezing&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ Non-blocking version — doesn't freeze anything&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Start (non-blocking)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;setTimeout&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;End (non-blocking)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// prints after 3 seconds, but nothing froze&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;3000&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Still running other code!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// prints immediately&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Synchronous&lt;/strong&gt; code runs one line at a time, in order. Each line waits for the previous one to finish. Simple but potentially blocking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous&lt;/strong&gt; code starts a task and moves on. The result is handled later via callbacks, promises, or async/await. Non-blocking.&lt;/li&gt;
&lt;li&gt;JavaScript is &lt;strong&gt;single-threaded&lt;/strong&gt; but uses an &lt;strong&gt;event loop&lt;/strong&gt; and &lt;strong&gt;task queue&lt;/strong&gt; to handle async operations without blocking the main thread.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blocking code&lt;/strong&gt; freezes the UI, wastes CPU time, and creates terrible user experiences. Async code keeps everything responsive.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;setTimeout&lt;/code&gt;, &lt;code&gt;fetch&lt;/code&gt;, event listeners, and file I/O are all asynchronous — they register callbacks that execute &lt;em&gt;after&lt;/em&gt; all synchronous code finishes.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Understanding the difference between synchronous and asynchronous JavaScript is one of the most important mental shifts you'll make as a developer. Once you see that JavaScript doesn't "wait" for slow tasks — it moves on and comes back later — a huge amount of confusing behavior starts making sense. The order of &lt;code&gt;console.log&lt;/code&gt; outputs, how &lt;code&gt;fetch&lt;/code&gt; works, why your data is &lt;code&gt;undefined&lt;/code&gt; before the API responds — it all clicks.&lt;/p&gt;

&lt;p&gt;I'm working through all of this in the &lt;strong&gt;ChaiCode Web Dev Cohort 2026&lt;/strong&gt; under Hitesh Chaudhary and Piyush Garg. This article is the foundation — next comes promises, async/await, and the full event loop picture. But understanding sync vs async first makes everything that follows much easier.&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://www.linkedin.com/in/pratham16" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or visit &lt;a href="https://prathamdev.in" rel="noopener noreferrer"&gt;PrathamDEV.in&lt;/a&gt;. More articles coming as the journey continues.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by Pratham Bhardwaj | Web Dev Cohort 2026, ChaiCode&lt;/em&gt;&lt;/p&gt;

</description>
      <category>chaicode</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Coding Cat Oran S2 Ep1 — The Excel Republic</title>
      <dc:creator>SysLayer</dc:creator>
      <pubDate>Sun, 10 May 2026 10:51:45 +0000</pubDate>
      <link>https://music.forem.com/syslayer/coding-cat-oran-s2-ep1-the-excel-republic-5g15</link>
      <guid>https://music.forem.com/syslayer/coding-cat-oran-s2-ep1-the-excel-republic-5g15</guid>
      <description>&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%2Foucfi2z8dc777gr69ool.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%2Foucfi2z8dc777gr69ool.png" alt=" " width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A story about trial production, three departments, and three versions of the truth.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;It's 7am on the production floor.&lt;/p&gt;

&lt;p&gt;Three people are standing around a whiteboard.&lt;br&gt;
One is from QA. One is from Engineering. One is from Manufacturing.&lt;br&gt;
They are arguing about a number.&lt;/p&gt;

&lt;p&gt;The number is the yield rate for Product A, Batch 7, last Tuesday.&lt;/p&gt;

&lt;p&gt;QA says: &lt;strong&gt;87%.&lt;/strong&gt;&lt;br&gt;
Engineering says: &lt;strong&gt;91%.&lt;/strong&gt;&lt;br&gt;
Manufacturing says: &lt;em&gt;"Depends on which shift."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All three are holding laptops.&lt;br&gt;
All three are looking at Excel files.&lt;br&gt;
All three are right.&lt;/p&gt;



&lt;p&gt;Oran is an orange cat. No CS degree.&lt;br&gt;
He learned to code at night, online, on his own time,&lt;br&gt;
with AI tools and courses he bought on sale.&lt;/p&gt;

&lt;p&gt;He got hired anyway. It's that kind of year.&lt;/p&gt;

&lt;p&gt;His job title is IT. His actual job is: whatever nobody else wants to do.&lt;/p&gt;

&lt;p&gt;This week, his job is to &lt;em&gt;reconcile the production data.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;He sits down. He opens all three Excel files.&lt;/p&gt;

&lt;p&gt;The columns have different names.&lt;br&gt;
The formulas have different logic.&lt;br&gt;
The defect definitions are different.&lt;br&gt;
QA counts a scratch as a defect. Manufacturing counts it as cosmetic. Engineering doesn't count it at all unless it affects function.&lt;/p&gt;

&lt;p&gt;Same scratch. Three categories. Three numbers.&lt;/p&gt;

&lt;p&gt;Oran closes his laptop.&lt;br&gt;
He stares at the ceiling for a long time.&lt;/p&gt;



&lt;p&gt;Here is what Oran understands, sitting in that chair:&lt;/p&gt;

&lt;p&gt;The data problem is not a data problem.&lt;/p&gt;

&lt;p&gt;It's a &lt;strong&gt;political problem dressed as a data problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each department's Excel file is their scoreboard.&lt;br&gt;
Their evidence. Their alibi.&lt;br&gt;
If QA's numbers are the official numbers, QA controls the narrative.&lt;br&gt;
If Engineering's numbers are official, Engineering does.&lt;br&gt;
If they merge into one system, someone's score gets worse.&lt;/p&gt;

&lt;p&gt;Nobody built these spreadsheets to hide information.&lt;br&gt;
They built them to protect themselves.&lt;br&gt;
That's different. And it's harder to fix.&lt;/p&gt;



&lt;p&gt;Oran opens a blank document.&lt;/p&gt;

&lt;p&gt;He doesn't start with a database schema.&lt;br&gt;
He doesn't start with a system architecture.&lt;br&gt;
He starts with a question:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What would it mean for all three of these numbers to be correct at the same time?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;He writes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inspection timing&lt;/strong&gt; is different. QA measures at end-of-line. Engineering measures at each station. Manufacturing measures at shipment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Defect scope&lt;/strong&gt; is different. Three departments, three definitions, never written down anywhere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The data is collected by different people, at different times, with different tools, for different audiences.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One batch. One production run. Six data points that look like contradictions but are actually just context.&lt;/p&gt;

&lt;p&gt;The problem isn't that the data is wrong.&lt;br&gt;
The problem is that there's no single place that holds all of it together.&lt;/p&gt;



&lt;p&gt;That evening, Oran writes the first three lines of what will eventually become a database schema.&lt;/p&gt;

&lt;p&gt;He doesn't know that yet.&lt;br&gt;
He thinks he's just taking notes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- What actually happened&lt;/span&gt;
&lt;span class="c1"&gt;-- Who was there&lt;/span&gt;
&lt;span class="c1"&gt;-- When&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;He looks at the three Excel files one more time.&lt;/p&gt;

&lt;p&gt;Then he writes a fourth line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- And what "defect" means in this context&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;em&gt;There were three versions of the truth.&lt;br&gt;
Everyone was lying. No one was wrong.&lt;br&gt;
The database didn't exist yet.&lt;br&gt;
But the problem did.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>cim</category>
      <category>database</category>
      <category>dataclean</category>
    </item>
    <item>
      <title>Learning Xahau: Debunking Common Myths About Xahau</title>
      <dc:creator>Ekiserrepe</dc:creator>
      <pubDate>Sun, 10 May 2026 10:50:31 +0000</pubDate>
      <link>https://music.forem.com/ekiserrepe/learning-xahau-debunking-common-myths-about-xahau-1eke</link>
      <guid>https://music.forem.com/ekiserrepe/learning-xahau-debunking-common-myths-about-xahau-1eke</guid>
      <description>&lt;p&gt;If you spend enough time reading discussions about Xahau, you’ll quickly notice that many people talk about the blockchain and its capabilities without fully understanding how it actually works.&lt;/p&gt;

&lt;p&gt;The rise of AI-generated content, combined with the lack of deep technical research in many online discussions, has created an environment where misinformation spreads extremely fast. Over the last few months, I’ve repeatedly seen the same myths, misunderstandings, and inaccurate comparisons appear across social media.&lt;/p&gt;

&lt;p&gt;So I decided to write this article to help clarify some of the most common misconceptions surrounding Xahau.&lt;/p&gt;

&lt;p&gt;If you want to learn more about Xahau, I also recommend checking out the rest of the &lt;strong&gt;Learning Xahau&lt;/strong&gt; &lt;a href="https://dev.to/ekiserrepe/series/31668"&gt;series&lt;/a&gt;, where I share information about the ecosystem, automation concepts, development ideas, and practical use cases for builders interested in working with Xahau.&lt;/p&gt;

&lt;p&gt;Today, however, we’re going to focus on breaking down some of the most common myths I’ve encountered online.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. “Xahau Is an XRP Ledger Sidechain”
&lt;/h1&gt;

&lt;p&gt;This is probably the most repeated myth.&lt;/p&gt;

&lt;p&gt;XRP Ledger and Xahau share technological origins, but Xahau is &lt;strong&gt;not&lt;/strong&gt; a native sidechain connected to the XRP Ledger.&lt;/p&gt;

&lt;p&gt;Xahau is an independent &lt;strong&gt;Layer 1 blockchain&lt;/strong&gt; built from a fork of XRPL code that evolved in a completely different direction.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Xahau has its own validators&lt;/li&gt;
&lt;li&gt;Xahau has its own native asset: &lt;strong&gt;XAH&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Xahau has its own governance and technical evolution&lt;/li&gt;
&lt;li&gt;XRPL amendments do &lt;strong&gt;not&lt;/strong&gt; automatically appear on Xahau&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both networks may occasionally adopt ideas from one another, but they evolve independently.&lt;/p&gt;

&lt;p&gt;There are features available on XRP Ledger that do not exist on Xahau, and there are features on Xahau that do not exist on XRP Ledger.&lt;/p&gt;

&lt;p&gt;Part of the &lt;em&gt;sidechain&lt;/em&gt; confusion comes from the early history of the project.&lt;/p&gt;

&lt;p&gt;In the beginning, Xahau was actually described as a sidechain, including in early versions of its whitepaper. At that time, there was a &lt;a href="https://xahau.network/docs/features/burn-2-mint/" rel="noopener noreferrer"&gt;mechanism&lt;/a&gt; where XRP could be burned on the XRP Ledger and converted into XAH on the Xahau blockchain. However, that process was eventually closed. Once that bridge mechanism disappeared, the term “sidechain” no longer made technical sense.&lt;/p&gt;

&lt;p&gt;Today, Xahau operates as an independent Layer 1 blockchain, even though it still shares part of its original codebase heritage with XRP Ledger.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. “Projects Built on Xahau Don’t Actually Use XAH”
&lt;/h1&gt;

&lt;p&gt;This is another claim I’ve seen online that honestly surprised me.&lt;/p&gt;

&lt;p&gt;In many blockchain ecosystems, “adoption” often refers to companies using private versions of the technology, centralized services, or additional enterprise services offered by blockchain companies, while still presenting it publicly as if they were directly using the public blockchain itself. In some cases, the public chain or its native asset barely participates in the actual operation behind the scenes. Xahau works differently.&lt;/p&gt;

&lt;p&gt;To interact with the network, you need &lt;strong&gt;XAH&lt;/strong&gt;. Because XAH is the native asset required for network operation. XAH is a gas token.&lt;/p&gt;

&lt;p&gt;XAH is used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Account/Object reserves&lt;/li&gt;
&lt;li&gt;Transaction execution&lt;/li&gt;
&lt;li&gt;Hook interactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no artificial separation between “the technology” and “the public blockchain.” Xahau only makes sense if the blockchain itself is actively used.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. “Hooks Are Just Ethereum Smart Contracts”
&lt;/h1&gt;

&lt;p&gt;No. While both systems enable automation, the philosophy behind them is completely different.&lt;/p&gt;

&lt;p&gt;In Ethereum, smart contracts are typically full decentralized applications deployed directly on-chain. In Xahau, &lt;strong&gt;Hooks&lt;/strong&gt; are lightweight pieces of logic attached directly to accounts that react to specific ledger events.&lt;/p&gt;

&lt;p&gt;This creates a very different model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compact logic&lt;/li&gt;
&lt;li&gt;Deterministic behavior&lt;/li&gt;
&lt;li&gt;Native account integration&lt;/li&gt;
&lt;li&gt;Direct financial automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hooks were never designed to replicate the EVM.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. “The XAH You See on XRPL Is Native XAH”
&lt;/h1&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;When you see XAH traded on the XRP Ledger DEX, you are usually seeing an &lt;strong&gt;IOU representation&lt;/strong&gt; of XAH, not native XAH itself.&lt;/p&gt;

&lt;p&gt;Even worse, multiple fake IOUs using the name “XAH” have appeared over time, created by scammers attempting to mislead users.&lt;/p&gt;

&lt;p&gt;At the moment, the main legitimate XAH IOU on XRPL is issued by Gatehub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Currency Code:&lt;/strong&gt; XAH&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issuer:&lt;/strong&gt; &lt;code&gt;rswh1fvyLqHizBS2awu1vs6QcmwTBd9qiv&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Native XAH only exists directly on the Xahau blockchain. This is similar to how wrapped versions of BTC or ETH exist on other blockchains without being the native assets themselves.&lt;/p&gt;

&lt;p&gt;And this distinction matters because certain features only exist directly on Xahau, such as &lt;strong&gt;Balance Adjustment&lt;/strong&gt;, which currently provides around 4%.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. “Xahau Is Just XRP Ledger With Smart Contracts”
&lt;/h1&gt;

&lt;p&gt;That explanation is far too simplistic.&lt;/p&gt;

&lt;p&gt;Yes, Hooks are one of the biggest innovations introduced by Xahau. But Xahau also introduces new programmable dynamics and a different philosophy around financial automation.&lt;/p&gt;

&lt;p&gt;The goal is not simply to “add smart contracts.”&lt;/p&gt;

&lt;p&gt;The goal is to allow users to integrate custom business logic directly into the ledger itself. That fundamentally changes how financial systems can be automated.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. “Hooks Are Dangerous Because They Can Do Anything”
&lt;/h1&gt;

&lt;p&gt;Actually, Hooks were specifically designed with limitations in mind. Strict execution limits and deterministic behavior exist precisely to avoid many of the problems seen in more open smart contract environments. Those limitations are not weaknesses. They are part of the design philosophy.&lt;/p&gt;

&lt;p&gt;Instead of allowing infinite complexity, Hooks prioritize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Predictability&lt;/li&gt;
&lt;li&gt;Efficiency&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Low operational costs&lt;/li&gt;
&lt;li&gt;Native integration&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  7. “Xahau Depends on Ripple”
&lt;/h1&gt;

&lt;p&gt;Ripple does not own or control Xahau.&lt;/p&gt;

&lt;p&gt;Xahau emerged after years of research and development surrounding Hooks technology. Originally, Hooks were expected to become part of XRP Ledger itself. However, after significant pushback, the developers behind the Hooks project decided not to abandon years of work and instead launched an independent blockchain where Hooks could exist natively: Xahau.&lt;/p&gt;

&lt;p&gt;Like XRPL, Xahau is built using open-source technology and independent validators. Ripple has no governance control or any type of control over Xahau.&lt;/p&gt;

&lt;p&gt;Interestingly, it was later announced that a certain level of programmability would be introduced to the XRP Ledger, beginning with features such as Smart Escrows, expected around late 2025. As of May 2026, those features have still not arrived in production.&lt;/p&gt;




&lt;h1&gt;
  
  
  8. “Xahau Is Trying to Compete With Every Other Blockchain”
&lt;/h1&gt;

&lt;p&gt;The blockchain industry often frames everything as a constant war between ecosystems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One chain vs another&lt;/li&gt;
&lt;li&gt;One token vs another&lt;/li&gt;
&lt;li&gt;One community attacking another&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But Xahau does not necessarily need to operate under that mentality. Financial institutions are free to use whatever technologies they consider useful. And in reality, most companies rarely depend on a single infrastructure provider.&lt;/p&gt;

&lt;p&gt;An organization may simultaneously use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple blockchains&lt;/li&gt;
&lt;li&gt;Traditional banking systems&lt;/li&gt;
&lt;li&gt;Private infrastructure&lt;/li&gt;
&lt;li&gt;Internal automation tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xahau does not need to “win” a blockchain war to be useful.&lt;/p&gt;

&lt;p&gt;There’s also an uncomfortable reality within this industry:&lt;/p&gt;

&lt;p&gt;Many blockchain companies directly or indirectly pay for institutional pilots and demonstrations through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PoCs&lt;/li&gt;
&lt;li&gt;Pilot programs&lt;/li&gt;
&lt;li&gt;Corporate demos&lt;/li&gt;
&lt;li&gt;Marketing partnerships&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And in many cases, those institutions never end up using the public blockchain or native token at all. Yet the announcements are still heavily promoted to generate speculation and marketing narratives. That creates enormous confusion within crypto communities.&lt;/p&gt;

&lt;p&gt;Xahau is attempting to follow a different philosophy. The goal is not to manufacture headlines. The goal is to build tools that can actually function in real regulatory and financial environments. And if institutions choose to combine Xahau with other technologies, they can. Because the objective is not to “win a competition.” The objective is to build useful technology.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Understanding Xahau requires looking beyond the usual blockchain narratives. Too often, people try to categorize every project using the same labels: Ethereum competitor, XRPL sidechain, smart contract platform, or DeFi chain. But Xahau was not designed to fit neatly into those categories. Its philosophy is different.&lt;/p&gt;

&lt;p&gt;Instead of chasing maximum complexity, Xahau focuses on making financial automation more integrated, predictable, and usable directly at the ledger level.&lt;/p&gt;

&lt;p&gt;Whether Xahau succeeds long term will ultimately depend on real adoption, real builders, and real utility, not marketing narratives or social media speculation.&lt;/p&gt;

&lt;p&gt;And that is probably the most important thing to understand about Xahau: the goal is not to imitate what already exists, but to explore a different way of building programmable financial systems.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>cryptocurrency</category>
      <category>learning</category>
      <category>web3</category>
    </item>
    <item>
      <title>Bootstrapping a Serverless CRM: Surviving a Forensic P0 Audit &amp; Hardening Supabase</title>
      <dc:creator>Miloš Kulpinski</dc:creator>
      <pubDate>Sun, 10 May 2026 10:44:17 +0000</pubDate>
      <link>https://music.forem.com/milosk88/bootstrapping-a-serverless-crm-surviving-a-forensic-p0-audit-hardening-supabase-i3b</link>
      <guid>https://music.forem.com/milosk88/bootstrapping-a-serverless-crm-surviving-a-forensic-p0-audit-hardening-supabase-i3b</guid>
      <description>&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%2Ftgaz4gf8rnr9n086lccs.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%2Ftgaz4gf8rnr9n086lccs.png" alt="Supabase Data Schema"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: I am launching the LuKul Bio-Sync CRM architecture on Product Hunt this Wednesday. If you are a systems architect handling complex biometric telemetry or migrating monoliths to Next.js, I’d love your technical teardown on the launch here.&lt;/p&gt;

&lt;p&gt;After 16 years running elite coaching operations in the GCC, I got tired of standard fitness SaaS dropping high-value biometric data. I transitioned to software engineering and built LuKul Bio-Sync—a serverless B2B CRM and PWA ecosystem—entirely from scratch as a solo developer.&lt;/p&gt;

&lt;p&gt;To ship the MVP fast, I built it in Vanilla JS, HTML, and CSS, backed by Supabase (PostgreSQL + Edge Functions). The product-market fit was immediate. It retained clients, acquired new ones, and generated revenue.&lt;/p&gt;

&lt;p&gt;Then, I ran a full Production-Grade Forensic Systems Audit. The results were terrifying.&lt;/p&gt;

&lt;p&gt;The Fragility of the Vanilla Monolith&lt;br&gt;
The audit uncovered a massive gap between the conceptual brilliance of the product (which featured an Ephemeral State Engine and time-decaying somatic heatmaps) and its operational security. I had built a prototype that was operating at a SaaS scale, and the architectural seams were cracking.&lt;/p&gt;

&lt;p&gt;My "ship-it-fast" approach had introduced critical vulnerabilities:&lt;/p&gt;

&lt;p&gt;Global API Exposure (P1): window.supabaseClient was initialized globally, creating a trivial target for XSS amplification where any injected payload could hijack the authenticated user's RLS permissions.&lt;/p&gt;

&lt;p&gt;Orphaned Closures &amp;amp; Memory Leaks: During "Nuclear Wipes" (clearing the DOM via .innerHTML = ""), global event listeners stacked infinitely on the document object, severely degrading performance.&lt;/p&gt;

&lt;p&gt;Unauthenticated Edge Webhooks (P1): Mission-critical data pipelines (like somatic_sync) were accepting raw payloads without JWT validation.&lt;/p&gt;

&lt;p&gt;The "Hydra" Anomaly: The client was fetching infinite historical logs to deduplicate arrays in the main UI thread, choking the browser's memory.&lt;/p&gt;

&lt;p&gt;The Defensive Engineering Sprint (Zero-Downtime)&lt;br&gt;
Transitioning from a founder-led project to an enterprise platform required an immediate pivot to defensive engineering. Before migrating the frontend to Next.js, I had to harden the infrastructure.&lt;/p&gt;

&lt;p&gt;Here are the specific architectural remediations deployed to production:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Cryptographic Validation &amp;amp; Threat Mitigation&lt;br&gt;
I purged all hardcoded legacy checks and implemented a timing-safe, constant-time bitwise XOR comparison at the Edge to handle administrative overrides. To neutralize open relay spam vectors, I engineered a pg_cron garbage-collected atomic rate limiter using Postgres RPCs (check_rate_limit), mapping request windows strictly to x-forwarded-for IPs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RLS Hardening &amp;amp; Singleton Isolation&lt;br&gt;
The global supabaseClient was destroyed. I isolated the SDK payload dynamically via a unified ES6 singleton module, ensuring state could not be read or mutated from the global window scope. Row Level Security (RLS) policies were tightened to strictly enforce is_coach_of() boundaries, preventing vertical privilege bleeding.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Eradicating the "Hydra" (RPC Telemetry)&lt;br&gt;
Client-side array slicing for biometric telemetry was deleted. I pushed the compute burden entirely to the database, invoking strict PostgreSQL RPCs (get_daily_telemetry_batch) with explicit limits to stabilize the render pipeline.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Next.js 14 &amp;amp; Zustand Architecture&lt;br&gt;
With the backend fortified, the UI is currently undergoing a massive zero-downtime migration to Next.js 14 (App Router) and Zustand.&lt;/p&gt;

&lt;p&gt;To maintain 100% visual parity across 5 distinct B2B and consumer locales without rewriting 10,000 lines of legacy CSS, I am leveraging Next.js Route Groups (marketing), (b2b), and (blog-hub). Each layout.tsx imports only its specific legacy CSS dependencies, achieving perfect cascade isolation.&lt;/p&gt;

&lt;p&gt;Imperative DOM reads and module-scope variables have been replaced by declarative Zustand stores (e.g., useBotStore for the AI Concierge, useCalculatorStore for in-memory B2B revenue simulations).&lt;/p&gt;

&lt;p&gt;The Multimodal Flex: Zero-Dependency Audio Injection&lt;br&gt;
While migrating the heavy infrastructure, I wanted to deploy ElevenLabs AI voice clones across our static editorial pages. Avoiding bloated React audio players, I wrote a lightweight, decoupled Vanilla JS injector. It securely fetches the assets from a public Supabase storage bucket without coupling the .mp3 target to fragile URL paths.&lt;/p&gt;

&lt;p&gt;JavaScript&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;AUDIO_CONFIG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nwugkqkesolynuzlhqum&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="na"&gt;bucketName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;voiceovers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;containerClass&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.voiceover-container&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;VoiceoverPlayer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-slug&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audioUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;AUDIO_CONFIG&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.supabase.co/storage/v1/object/public/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;AUDIO_CONFIG&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bucketName&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.mp3`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audioElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isPlaying&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="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;init&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="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verifyAudioExists&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;injectUI&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setupAudio&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;verifyAudioExists&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audioUrl&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;HEAD&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})).&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&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;warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`[LuKul Audio] Fetch failed: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&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="k"&gt;return&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="p"&gt;}&lt;/span&gt;

    &lt;span class="nf"&gt;injectUI&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;playerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
            &amp;lt;style&amp;gt;
                .lukul-audio-wrapper {
                    display: inline-flex; align-items: center; background-color: #0a0a0a;
                    border: 1px solid #1a1a1a; padding: 8px 16px; font-family: monospace;
                    cursor: pointer; transition: all 0.3s ease; margin: 20px 0;
                }
                .lukul-audio-wrapper:hover { border-color: #cda434; }
                .lukul-play-icon {
                    width: 0; height: 0; border-top: 6px solid transparent;
                    border-bottom: 6px solid transparent; border-left: 10px solid #2e8b57;
                    margin-right: 12px; transition: all 0.2s ease;
                }
                .lukul-audio-wrapper.playing .lukul-play-icon {
                    border: none; width: 10px; height: 12px; background-color: #cda434;
                    border-left: 3px solid #cda434; border-right: 3px solid #cda434; box-sizing: border-box;
                }
                .lukul-audio-text { color: #e0e0e0; font-size: 0.85rem; text-transform: uppercase; }
            &amp;lt;/style&amp;gt;
            &amp;lt;div class="lukul-audio-wrapper"&amp;gt;
                &amp;lt;div class="lukul-play-icon"&amp;gt;&amp;lt;/div&amp;gt;
                &amp;lt;span class="lukul-audio-text"&amp;gt;Listen to Architectural Breakdown&amp;lt;/span&amp;gt;
            &amp;lt;/div&amp;gt;
        `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;playerHTML&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nf"&gt;setupAudio&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audioElement&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;Audio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audioUrl&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;btn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.lukul-audio-wrapper&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;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.lukul-audio-text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&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="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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isPlaying&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audioElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;playing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Listen to Architectural Breakdown&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="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audioElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;play&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;playing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Playing...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isPlaying&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="p"&gt;}).&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Audio blocked:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;

        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audioElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ended&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isPlaying&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;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;playing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Listen to Architectural Breakdown&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&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;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DOMContentLoaded&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&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;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;AUDIO_CONFIG&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;containerClass&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;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VoiceoverPlayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;init&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;If you are dealing with technical debt, securing Edge Functions, or mapping complex relational telemetry in Supabase, let’s connect.&lt;/p&gt;

&lt;p&gt;Domain: lukulatelier.com/business&lt;/p&gt;

&lt;p&gt;Stack: Next.js 14, Zustand, Supabase, Vanilla JS&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>supabase</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why Your RAG Chatbot Looks Great in Week 1 and Hallucinates by Month 2</title>
      <dc:creator>Akshay Kumar BM </dc:creator>
      <pubDate>Sun, 10 May 2026 10:43:34 +0000</pubDate>
      <link>https://music.forem.com/akshay_kumar_bm/why-your-rag-chatbot-looks-great-in-week-1-and-hallucinates-by-month-2-52k5</link>
      <guid>https://music.forem.com/akshay_kumar_bm/why-your-rag-chatbot-looks-great-in-week-1-and-hallucinates-by-month-2-52k5</guid>
      <description>&lt;p&gt;💡 Week 1 demo → "this is amazing."&lt;/p&gt;

&lt;p&gt;Month 2 production → "why is it hallucinating?"&lt;/p&gt;

&lt;p&gt;I've seen this pattern more times than I can count. The team builds a RAG chatbot. It works beautifully on the 20 questions they tested it with. They ship it. Real users show up with real questions. The cracks appear.&lt;/p&gt;

&lt;p&gt;The model is almost never the problem.&lt;/p&gt;

&lt;p&gt;The system around it is.&lt;/p&gt;

&lt;p&gt;After shipping 10+ production RAG systems — handling everything from 100 queries a day to 1,000+ a week at 95% accuracy — I've narrowed it down to four things that consistently separate the ones that keep working from the ones that quietly get abandoned.&lt;/p&gt;

&lt;p&gt;Here's what I follow on every build now.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Why RAG Fails in Production (It's Not the Model)
&lt;/h2&gt;

&lt;p&gt;Most teams build RAG like this:&lt;/p&gt;

&lt;p&gt;→ Grab the documents&lt;br&gt;
→ Chunk and embed them&lt;br&gt;
→ Add a retriever&lt;br&gt;
→ Write a prompt&lt;br&gt;
→ Ship it&lt;/p&gt;

&lt;p&gt;It works in the demo because the demo is a controlled environment. You know the questions. You've tested on a small, clean set of docs. The model looks smart.&lt;/p&gt;

&lt;p&gt;Production breaks this in three ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real users ask questions the team never anticipated.&lt;/strong&gt; The retriever pulls the wrong chunks. The model doesn't know it retrieved the wrong chunks. It answers anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The knowledge base is messier than it looked.&lt;/strong&gt; Confluence pages that conflict with each other. Slack threads that reference decisions never written down. Google Docs with five versions. The model retrieves all of it and synthesizes a "confident average" — which is a hallucination with citations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There's no feedback loop.&lt;/strong&gt; Nobody knows which answers are wrong until a user complains, by which point the damage is done.&lt;/p&gt;

&lt;p&gt;Research confirms this isn't a fringe problem: 40–60% of RAG implementations never make it to production at all. Of the ones that do, naive RAG — embed, retrieve top-k, prompt — consistently plateaus at 70–80% retrieval precision without additional structure around it.&lt;/p&gt;

&lt;p&gt;The fix isn't a better model. It's building the system properly.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 Rule 1: Evals Before Prompts
&lt;/h2&gt;

&lt;p&gt;This is the highest-leverage thing I do on every RAG project, and it's the thing most teams skip.&lt;/p&gt;

&lt;p&gt;Before writing a single prompt, build a test set of 30–40 real questions with expected answers. Run every prompt change — every chunk size tweak, every retriever adjustment — against the full set.&lt;/p&gt;

&lt;p&gt;Without this, you're optimizing blind. You fix one question and break three others without knowing it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# eval_set.py — structure for a minimal RAG eval set
&lt;/span&gt;
&lt;span class="n"&gt;eval_set&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What is our refund policy for enterprise customers?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expected_answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Enterprise customers get a 30-day money-back guarantee.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_doc&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enterprise-policy-v3.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;policy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Who do I contact for billing issues?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expected_answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;billing@company.com or the #billing Slack channel.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_doc&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;support-contacts.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;contacts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="c1"&gt;# ... 30-40 total, covering every major topic area
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rag_chain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;eval_set&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;eval_set&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rag_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="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expected&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expected_answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;actual&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sources_retrieved&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_documents&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📌 &lt;strong&gt;Pro tip:&lt;/strong&gt; Pull the questions from real user queries where possible. If you have a Slack channel where employees ask the kind of questions the bot will answer, mine it for the first 30 questions. Real questions are always harder than invented ones.&lt;/p&gt;

&lt;p&gt;The eval set also tells you when you're done. "Good enough" stops being subjective — either it passes 90%+ of cases or it doesn't ship.&lt;/p&gt;

&lt;p&gt;Worth noting: in 2026, 60% of RAG deployments include systematic evaluation from day one, up from under 30% in early 2025. The teams that skipped it are the ones rebuilding their systems now.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠 Rule 2: One Source of Truth
&lt;/h2&gt;

&lt;p&gt;Most RAG failures I've traced start here — not in the model.&lt;/p&gt;

&lt;p&gt;The knowledge is scattered. Confluence has the official policy. Someone updated it in a Google Doc but didn't update Confluence. There's a Slack thread where a manager made a call that contradicts both. The RAG system indexes all three.&lt;/p&gt;

&lt;p&gt;The model retrieves two conflicting chunks. It can't tell which is authoritative. It synthesizes a confident-sounding answer that blends both — and matches neither.&lt;/p&gt;

&lt;p&gt;No retriever in the world solves this. It's a data problem, not a model problem.&lt;/p&gt;

&lt;p&gt;Step 1 of every RAG project I touch is not building the bot. It's forcing a canonical source:&lt;/p&gt;

&lt;p&gt;→ Pick one system as ground truth per knowledge domain (Confluence for policy, Notion for specs, etc.)&lt;br&gt;
→ Archive or redirect any conflicting copies — if it's not in the canonical source, it doesn't exist for the bot&lt;br&gt;
→ Set an update SLA: if a policy changes, the canonical page gets updated within 24 hours&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;graph TD
    A[User Query] --&amp;gt; B[Retriever]
    B --&amp;gt; C{Single canonical source?}
    C --&amp;gt;|Yes| D[Clean, consistent chunks]
    C --&amp;gt;|No| E[Conflicting chunks from 3 systems]
    D --&amp;gt; F[Faithful, accurate answer]
    E --&amp;gt; G[Confident hallucination]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This sounds like busywork. It's actually the most important infrastructure decision in the project.&lt;/p&gt;

&lt;p&gt;Research backs it up: 60% of enterprise RAG projects fail not because of poor retrieval, but because they can't maintain data freshness at scale. One study found that when given unvetted baseline data, models fabricated responses for 52% of out-of-scope questions — not because the model was bad, but because it had no way to know what it didn't know.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Rule 3: Fallback Over Hallucination
&lt;/h2&gt;

&lt;p&gt;A system that says "I don't know" is more valuable than one that guesses wrong.&lt;/p&gt;

&lt;p&gt;This sounds obvious. It's almost never implemented.&lt;/p&gt;

&lt;p&gt;The failure mode: the retriever pulls chunks that are loosely related but not actually relevant. The model generates a plausible-sounding answer from them. The user reads it. They have no way to know it's wrong. They act on it.&lt;/p&gt;

&lt;p&gt;Trust is built one answer at a time. It's destroyed the same way.&lt;/p&gt;

&lt;p&gt;Here's the pattern I use — a confidence-based router that sends uncertain answers to a human instead of letting the model guess:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# confidence_router.py
&lt;/span&gt;
&lt;span class="n"&gt;CONFIDENCE_THRESHOLD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.75&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;route_with_fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rag_chain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;retriever&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;docs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;retriever&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_relevant_documents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# No docs or low retrieval confidence → route to human
&lt;/span&gt;    &lt;span class="n"&gt;top_score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;docs&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;top_score&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;CONFIDENCE_THRESHOLD&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;m not confident I have accurate information on this. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Let me tag someone who can help — @support-team&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;routed_to_human&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rag_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="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;routed_to_human&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sources&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_documents&lt;/span&gt;&lt;span class="sh"&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;📌 &lt;strong&gt;Pro tip:&lt;/strong&gt; Log every query that gets routed to a human. These are your highest-value training questions. Add them to the eval set with the correct answer documented. Over time, the system learns its own blind spots.&lt;/p&gt;

&lt;p&gt;The fallback message matters too. "I don't know — here's who does" is not a failure. Users who get honest fallbacks trust the system more than users who get confidently wrong answers twice.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Rule 4: Observability from Day One
&lt;/h2&gt;

&lt;p&gt;The eval set is your pre-deployment safety net. Observability is your production safety net.&lt;/p&gt;

&lt;p&gt;Log every conversation. Not just the query and the answer — log the retrieved chunks, the retrieval scores, the prompt constructed, and the final response.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# logger.py — minimal production RAG logging
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;log_rag_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;retrieved_docs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;routed_to_human&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{}):&lt;/span&gt;
    &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;utcnow&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;retrieved_chunks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;page_content&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;retrieved_docs&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;routed_to_human&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;routed_to_human&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;# Write to your logging backend — CloudWatch, Datadog, a flat file
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then build the review loop:&lt;/p&gt;

&lt;p&gt;→ Flag every answer that gets a thumbs-down or triggers a human escalation&lt;br&gt;
→ Review flagged answers weekly (30 minutes, not hours)&lt;br&gt;
→ Add wrong answers to the eval set with the correct answer documented&lt;br&gt;
→ Re-run evals before the next deployment&lt;/p&gt;

&lt;p&gt;This loop is what makes the system improve over time instead of silently degrade.&lt;/p&gt;

&lt;p&gt;The eval set starts at 30–40 questions. Six months in, it's 150 questions covering every edge case real users found. The system that was 80% accurate in week 1 is genuinely 95% accurate by month 6 — not because the model changed, but because the system around it got tighter.&lt;/p&gt;

&lt;p&gt;Tools I've used for this: LangSmith for tracing and full conversation logging, RAGAS for automated eval scoring, and a simple shared spreadsheet for the human review loop. You don't need an elaborate stack. You need the habit.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;✅ Write 30–40 eval questions before a single prompt — this is the line between a demo and a system you can maintain&lt;br&gt;
✅ Fix the data before building the bot — no retriever fixes conflicting or fragmented knowledge sources&lt;br&gt;
✅ A system that says "I don't know" is more valuable than one that confidently hallucinates&lt;/p&gt;




&lt;p&gt;The pattern I keep seeing: teams spend time optimizing the part that's already good (the model) and skip the parts that actually break in production (evals, data quality, fallbacks, observability). The boring infrastructure is what makes the intelligent part work.&lt;/p&gt;

&lt;p&gt;If you're building or inheriting a RAG system that performs well in testing but keeps surfacing wrong answers in production — these four things are almost always where it breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  👋 Let's Connect
&lt;/h2&gt;

&lt;p&gt;If you found this useful or want to talk through a similar problem:&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.linkedin.com/in/akshay-kumar-bm" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; | 💻 &lt;a href="https://akshay-kumar-bm.github.io/" rel="noopener noreferrer"&gt;Portfolio&lt;/a&gt; | 📧 &lt;a href="mailto:akshaykumarbedre.bm@gmail.com"&gt;akshaykumarbedre.bm@gmail.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
      <category>rag</category>
    </item>
    <item>
      <title>I Built Graphode — An AI-Powered GitHub Repository Visualizer</title>
      <dc:creator>Harsh Kalia</dc:creator>
      <pubDate>Sun, 10 May 2026 10:39:56 +0000</pubDate>
      <link>https://music.forem.com/harshkalia/i-built-graphode-an-ai-powered-github-repository-visualizer-3bpm</link>
      <guid>https://music.forem.com/harshkalia/i-built-graphode-an-ai-powered-github-repository-visualizer-3bpm</guid>
      <description>&lt;h1&gt;
  
  
  I Built Graphode — An AI-Powered GitHub Repository Visualizer
&lt;/h1&gt;

&lt;p&gt;Ever spent hours trying to understand a new codebase? I did too. So I built Graphode to solve that problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Graphode?
&lt;/h2&gt;

&lt;p&gt;An AI-powered GitHub repository visualizer that helps you understand any codebase in minutes, not hours.&lt;/p&gt;

&lt;p&gt;Just upload a GitHub repo → Get instant insights on architecture, dependencies &amp;amp; code flow → Understand what you're looking at.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch it in action:
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/RMtDsTH4bxQ"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;✓ &lt;strong&gt;AI-Powered Analysis&lt;/strong&gt; — Uses Google Gemini AI to analyze your code&lt;br&gt;
✓ &lt;strong&gt;Visual Architecture&lt;/strong&gt; — See dependencies &amp;amp; code flow instantly&lt;br&gt;
✓ &lt;strong&gt;Real-Time Collaboration&lt;/strong&gt; — Analyze together with your team&lt;br&gt;
✓ &lt;strong&gt;Instant Insights&lt;/strong&gt; — No more hours wasted on code exploration&lt;/p&gt;

&lt;h2&gt;
  
  
  Perfect For
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Code reviews&lt;/li&gt;
&lt;li&gt;Onboarding new team members&lt;/li&gt;
&lt;li&gt;Diving into unfamiliar projects&lt;/li&gt;
&lt;li&gt;Understanding legacy codebases&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it free
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://graphode.tech/" rel="noopener noreferrer"&gt;https://graphode.tech/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Would love your feedback! Let me know what you think in the comments 🙌&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>github</category>
      <category>ai</category>
      <category>startup</category>
    </item>
    <item>
      <title>Building Echovault During a 130,000 Person Hackathon</title>
      <dc:creator>Ugo Nwune</dc:creator>
      <pubDate>Sun, 10 May 2026 10:37:09 +0000</pubDate>
      <link>https://music.forem.com/bigbadbillion/building-echovault-during-a-130000-person-hackathon-40dc</link>
      <guid>https://music.forem.com/bigbadbillion/building-echovault-during-a-130000-person-hackathon-40dc</guid>
      <description>&lt;p&gt;A few months ago I entered the world’s largest hackathon with over 130,000 competitors.&lt;/p&gt;

&lt;p&gt;My original project idea had nothing to do with AI memory preservation.&lt;/p&gt;

&lt;p&gt;I started by building a social commerce platform called OAK where people could upload clothing designs and have them printed onto real garments and shipped. Halfway through the competition I realized I wasn’t emotionally connected to the idea, and honestly it didn’t feel differentiated enough to compete at that scale.&lt;/p&gt;

&lt;p&gt;One of the hackathon sponsors was Tavus.&lt;/p&gt;

&lt;p&gt;Around that time I remembered a voice note my uncle sent me before he was killed in Nigeria.&lt;/p&gt;

&lt;p&gt;For years I replayed that recording during difficult periods of my life. Hearing his voice still carried emotional weight long after he was gone. But eventually I kept thinking about something unsettling:&lt;/p&gt;

&lt;p&gt;the voice note was static.&lt;/p&gt;

&lt;p&gt;I could replay it forever, but I could never ask a new question.&lt;br&gt;
I could never hear a new story.&lt;br&gt;
The memory was frozen in time.&lt;/p&gt;

&lt;p&gt;That realization became the foundation for Echovault.&lt;/p&gt;

&lt;p&gt;I pivoted completely and spent the next 9 days building an AI digital legacy platform designed to preserve a person’s memories, personality, stories, and voice for future generations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;p&gt;The project started on Bolt.new since the hackathon required it, then eventually moved into Cursor for faster iteration.&lt;/p&gt;

&lt;p&gt;The stack ended up looking like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React frontend&lt;/li&gt;
&lt;li&gt;Supabase backend&lt;/li&gt;
&lt;li&gt;Gemini for NLP and embeddings&lt;/li&gt;
&lt;li&gt;Tavus for conversational video&lt;/li&gt;
&lt;li&gt;ElevenLabs for voice synthesis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mostly written in typescript and deployed on vercel. The core idea behind Echovault was building an “Echo,” an AI representation of a person trained on their memories, personality traits, and life experiences through guided conversations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Disaster Moment
&lt;/h2&gt;

&lt;p&gt;At one point during development, an AI assistant accidentally triggered a database reset during a prompt chain.&lt;/p&gt;

&lt;p&gt;I blindly approved it.&lt;/p&gt;

&lt;p&gt;The entire database disappeared instantly.&lt;/p&gt;

&lt;p&gt;That mistake cost nearly two full days of recovery work. I had to rebuild from an old schema.sql file inside the workspace, recreate missing tables manually, and rewrite parts of the RLS policies to secure the database properly again.&lt;/p&gt;

&lt;p&gt;The recovered database was never quite the same afterward, but the project survived.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;Echovault ended up winning the “Most Inspirational Story” award at the hackathon.&lt;/p&gt;

&lt;p&gt;Part of me secretly hoped to win something more technical because I was proud of how ambitious the architecture became under such a short timeline, but the award still meant a lot because the story behind the product was deeply personal.&lt;/p&gt;

&lt;p&gt;The experience completely changed how I think about software creation.&lt;/p&gt;

&lt;p&gt;Long term, my goal is to make Echovault a legitimate way for people to digitally preserve themselves for the far future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://echovault.me" rel="noopener noreferrer"&gt;https://echovault.me&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>digitallegacy</category>
      <category>echovault</category>
      <category>react</category>
    </item>
  </channel>
</rss>
