# Bibek Timsina ## Profile - Name: Bibek Timsina - Role: Full-stack software engineer and AI product engineer - Location: Kathmandu, Nepal - Website: https://bibek-timsina.com.np - Email: timsinabibek960@gmail.com - GitHub: https://github.com/bimsina - LinkedIn: https://www.linkedin.com/in/bimsina/ - X/Twitter: https://x.com/bimsina - Google Scholar: https://scholar.google.com/citations?hl=en&user=-PP4XLoAAAAJ - ResearchGate: https://www.researchgate.net/profile/Bibek-Timsina ## Summary Bibek Timsina — Software Engineer building AI-powered products. Lead Engineer at Proma.ai. Based in Kathmandu, Nepal. Software engineer based in Kathmandu, Nepal with more than 6 years of professional experience shipping software. Currently leads engineering at Growthzilla, building Proma.ai, an AI productivity platform. Previously co-founded Khellabs and built Callbreak Multiplayer to more than 1,000,000 downloads on Google Play. ## Core Areas - AI-powered products, LLM integrations, and agent workflows - Full-stack product engineering with TypeScript, React, and modern web stacks - Developer tools and infrastructure products - Edge platforms including Cloudflare Workers - Mobile products with Flutter - Search, realtime, collaboration, and internal tooling ## Experience ### Lead Engineer - Growthzilla / Proma.ai - Building an AI-powered productivity platform - Architecting full-stack systems for production workloads - Building LLM integration layers and prompt workflows - Designing realtime collaboration features ### Co-Founder and CTO - Khellabs - Built Callbreak Multiplayer from zero to more than 1,000,000 downloads - Architected realtime multiplayer infrastructure using Firebase - Worked across product, engineering, experimentation, and growth ## Projects ### Browser AI Chat AI chat application that runs entirely in the browser using local AI models like Gemini Nano, Transformers.js, and WebLLM for complete privacy. - Project page: https://bibek-timsina.com.np/projects/browser-ai-chat/ - GitHub: https://github.com/bimsina/browser-chat - Demo: https://browser-chat.bimsina.workers.dev - Tags: react, typescript, vite, ai, pwa ## About An AI chat application that runs entirely in the browser — no server, no API keys, no data leaving your device. It supports multiple local AI backends: - **Gemini Nano** via Chrome's built-in AI APIs - **Transformers.js** for running Hugging Face models in-browser - **WebLLM** for larger models via WebGPU ## Why I built this I wanted to explore what's possible with client-side AI in 2025+. As browser capabilities improve (WebGPU, built-in AI APIs), more AI workloads can run locally without sacrificing too much quality. This project is a testbed for those possibilities. ## Technical highlights - Zero backend — everything runs in the browser - WebGPU acceleration where available - Conversation history stored locally - Model switching between different AI backends AI chat that runs entirely in your browser. No servers, no API keys, no data collection. ## Features - **Local AI Models**: Built-in AI (Gemini Nano), Transformers.js, WebLLM - **Complete Privacy**: All processing happens in your browser - **Multi-modal**: Text, images, documents, audio - **Offline**: Works without internet after setup - **PWA**: Install like a native app - **File Support**: Drag-and-drop attachments ## Tech Stack - React + TypeScript + TailwindCSS - Vite + PWA - TanStack Router - IndexedDB (Dexie) ## Development ## Model Types **Built-in AI**: Browser native (Chrome/Edge only), instant startup - [Chrome's Built-in AI](https://developer.chrome.com/docs/ai/built-in) **Transformers.js**: ONNX models, good variety, medium size - [Transformers.js](https://huggingface.co/docs/transformers.js/index) **WebLLM**: Large models, most capable, bigger downloads - [WebLLM](https://webllm.mlc.ai/) ## Browser Support - Chrome/Edge: Full support - Firefox: Transformers.js + WebLLM -... ### Astro MD Editor Schema-aware editor for Astro content collections that lets you edit frontmatter and markdown together with validation on save. - Project page: https://bibek-timsina.com.np/projects/astro-md-editor/ - GitHub: https://github.com/bimsina/astro-md-editor - npm: https://www.npmjs.com/package/astro-md-editor - Tags: astro, typescript, react, cli ## About Astro MD Editor is a schema-aware editor for Astro content collections. It combines frontmatter and markdown/MDX editing in one UI, validates content before save, and can reuse values from a file's Git history. ## Highlights - Edit frontmatter and markdown together in one place - Validate frontmatter against collection schemas on save - Support image fields from both `src` assets and `public` assets - View file-level Git history and apply selected values safely ## Quick Start If schema files are missing in your Astro project, run: ### DriveCellar Self-hosted file browser for storage you already own. Point it at local folders or S3-compatible buckets—no new blob store. - Project page: https://bibek-timsina.com.np/projects/drivecellar/ - GitHub: https://github.com/bimsina/drivecellar - Tags: react, typescript, trpc, sqlite, self-hosted, s3 ## About DriveCellar is a self-hosted file browser for storage you already own. Point it at local folders or S3-compatible buckets—no new blob store. You get a web UI to browse, search, tag, share with links, and manage team access. Less heavy than a full cloud suite; nicer than SSH or the raw S3 console. ## Features - **Storage**: Local paths; S3-compatible (AWS, MinIO, R2, etc.); multiple connections per workspace - **Files**: Browse, upload/download, folders, rename, delete - **Search & organization**: Indexed search; tags with optional colors/icons - **Sharing**: Public links with optional expiry and password protection - **Auth & teams**: Email/password authentication; workspaces; roles (owner, admin, member); connection defaults and per-user overrides - **Indexing**: Auto index on new connection; manual re-index; optional schedule; run history ## Why I built it I wanted a simpler alternative to full cloud storage suites for cases where the storage already exists. The project focuses on making self-hosted storage easier to browse, share, and control without taking ownership of the underlying files. ## Tech Stack - TanStack Start - React 19 - TanStack Router - TypeScript - tRPC - SQLite (better-sqlite3) - Drizzle ORM - Better Auth - Tailwind CSS v4 - Zod ## Deployment Deploy with Docker to any container-hosting platform: - Railway, Render, Koyeb, Google Cloud Run - Use the published image: `ghcr.io/bimsina/drivecellar:latest` - Or build from source with `pnpm install && pnpm setup:env && docker compose up --build` ### Nepali Year Progress A minimalist web app and API to visualize Nepali year progress with dynamic wallpaper generation for lock screens. - Project page: https://bibek-timsina.com.np/projects/nepali-year-progress/ - GitHub: https://github.com/bimsina/nepali-year-progress - Demo: https://nepali-year-progress.vercel.app/ - Tags: workers, typescript, hono | Days Grid | Months Grid | | :-------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------: | | | | A minimalist web application and API to visualize your year at a glance. Generate beautiful, dynamic wallpapers for your lock screen that update automatically to show you how much of the Nepali year has passed. Inspired by [thelifecalendar.com](https://www.thelifecalendar.com). ## Features - **Dual Visualizations**: Choose between a minimal **Days Grid** or a detailed **Months Grid**. - **Automated Updates**: Setup guides for iOS (Shortcuts) and Android (MacroDroid) to keep your wallpaper fresh every day. - **Dynamic Image Generation**: High-quality PNG wallpapers generated on-the-fly via @vercel/og. - **Device Optimized**: Support for a wide range of iOS and Android screen resolutions. ### Callbreak Multiplayer Real-time multiplayer card game - Project page: https://bibek-timsina.com.np/projects/callbreak/ - Demo: https://khellabs-callbreak.web.app - Tags: flutter, firebase, real-time ## Overview Callbreak Multiplayer was the first product where I had to think like a founder and an engineer at the same time. I co-founded Khellabs and built the game from zero to more than 1,000,000 downloads on Google Play. The visible product was a card game. The actual engineering problem was building a low-latency multiplayer system that stayed affordable, resilient to bad mobile networks, and fun enough to retain players over time. ## What I built - Real-time multiplayer game flow and state synchronization - Matchmaking and private room logic - Rejoin flows for unreliable mobile connections - Firebase-backed infrastructure with cost controls - Retention experiments informed by actual player behavior ## Architecture decisions The stack centered around Flutter on the client and Firebase on the backend. That was the right decision for a small team that needed to move quickly across Android devices with very different performance profiles. Firebase gave us authentication, real-time data propagation, and an operational model that a small team could maintain. The tradeoff was cost and data-shape discipline. Real-time products can become surprisingly expensive if every screen is over-subscribed to updates, so I had to design carefully around read patterns and document structure. ## Matchmaking and concurrency One of the core systems was matchmaking. We needed to get players into games quickly without creating long waits or poor-quality lobbies. That required balancing queue speed with match reliability, especially during uneven traffic periods. The challenge wasn't only assigning four players to a room. It was handling the messy edges: - players leaving mid-flow - network interruptions - duplicate join attempts - stale room state - rejoin after connection reco... ### Cloudflare Local Helpers A dashboard for managing Cloudflare Workers local resources including KV, D1, and R2 during development. - Project page: https://bibek-timsina.com.np/projects/cf-local-helpers/ - GitHub: https://github.com/bimsina/cf-local-helpers - npm: https://www.npmjs.com/package/cf-local-helpers - Tags: hono, htmx ## About A local development dashboard for managing Cloudflare Workers resources. When developing with Cloudflare Workers, you often need to inspect and manage local KV stores, D1 databases, and R2 buckets. This tool provides a clean UI for that during development. ## Features - Browse and manage local KV namespaces - Query and inspect D1 (SQLite) databases - Manage R2 bucket objects - Works with Wrangler's local development environment ## Features **1. KV Editor** - View all KV namespaces - List, search, and filter keys - Create, edit, and delete key-value pairs - View key expiration and metadata **2. D1 Explorer** - View all D1 databases - Browse tables and schema - Run custom SQL queries with a built-in editor - View query results in a table format with execution time **3. R2 Browser** - Navigate R2 buckets and folders (breadcrumbs support) - View object metadata (size, type, uploaded date) - Preview images directly in the dashboard - Download files **4. Environment Variables Viewer** - Inspect all environment variables and bindings bound to your worker ## Tech Stack - Hono ([hono.dev](https://hono.dev/)) - HTMX ([htmx.org](https://htmx.org)) - TailwindCSS ([tailwindcss.com](https://tailwindcss.com)) - DaisyUI ([daisyui.com](https://daisyui.com)) - AlpineJS ([alpinejs.dev](https://alpinejs.dev)) ## How to use ### 1. Installation Add the package as a development dependency: **npm** **yarn** **pnpm** **bun** ### 2. Quick Start To see the dashboard in action with sample data: This will start the development server with sample D1 databases, KV namespaces, and R2 buckets pre-configured. Visit `http://localhost:8787/dashboard` to access the dashboard. ### 3. Usage Examples #### Pure Cloudflare Worker #### Hono #### TanStack Start #### Itty Rout... ### Flutter Templates A curated collection of production-ready open source UI templates and widgets with beautiful designs. - Project page: https://bibek-timsina.com.np/projects/fluttertemplates/ - GitHub: https://github.com/bimsina/fluttertemplates.dev - Demo: https://fluttertemplates.dev/ - Tags: flutter, nextjs A collection of production-ready open source Flutter UI Templates and Widgets. - Completely Null Safe: All the templates are built with pre configured null safety. - Readable Code: All the templates are built keeping code readability in mind. - Beautiful design: Showcase the potential of Flutter through beautiful UI designs. ### reWalls : Wallpapers from Reddit An app to discover and download high-quality wallpapers from various Reddit communities. - Project page: https://bibek-timsina.com.np/projects/rewalls/ - GitHub: https://github.com/bimsina/reWalls - Tags: flutter ## About reWalls is a mobile app built with Flutter that lets you discover and download high-quality wallpapers from Reddit communities. Browse wallpapers from subreddits like r/wallpapers, r/Amoledbackgrounds, and more — with options to filter by resolution, save favorites, and set wallpapers directly from the app. ## Technical highlights - Built with Flutter and Dart - Reddit API integration for fetching and paginating image posts - Local storage for favorites and download history - Adaptive grid layout for different screen sizes - 155+ stars on [GitHub](https://github.com/bimsina/reWalls) ### Sliding Crossword A unique puzzle game combining sliding tile mechanics with crossword puzzles. - Project page: https://bibek-timsina.com.np/projects/sliding-crossword/ - GitHub: https://github.com/bimsina/sliding_crossword - Demo: https://slidingcrossword.web.app/ - Tags: flutter, firebase #### A combination of sliding and crossword puzzle #### Flutter Puzzle Hack Submission --- See the submission [here](https://devpost.com/software/sliding-crossword). ### TMDB Movies App An app to discover movies and TV shows using TMDB API with beautiful UI and comprehensive search features. - Project page: https://bibek-timsina.com.np/projects/matinee/ - GitHub: https://github.com/bimsina/Matinee-Flutter - Tags: flutter, tmdb_api ### Not Hot Dog A fun app inspired by Silicon Valley's SeeFood app that uses ML to detect if food is a hot dog or not. - Project page: https://bibek-timsina.com.np/projects/not-hot-dog/ - GitHub: https://github.com/bimsina/NotHotDog - Tags: flutter, google_ml_vision Well, if you’re a fan of Silicon Valley, you have definitely wanted to build Jian Yang’s breakthrough SeeFood app. If you don’t know what SeeFood is, it’s basically an app that lets you know if your food is hot dog or not a hot dog. Pretty groundbreaking right? 😂 Well it took me around two hours to build the complete application. Firstly the UI part was pretty simple it consisted of two screens, one to take a picture of the food and the other to detect if the food has hot-dog in it or not. The first screen has a live viewfinder and two buttons, one to capture the image from the viewfinder and the other to select an image from the gallery. For the live viewfinder I used the camera plugin.Once an image has been selected the application will be then directed to the second screen where the power of Machine learning will help us label the image. For this, I have used mlkit plugin to utilize the Label Detection offered by Firebase. | | | | | --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | | | | | The LabelDetector returned a List of **VisionLabel** objects, whose label property defines what the detected image is of. To find out if the image contained HotDog , I just queried if the list contained a VisionLabel of ‘Hot dog’ and after a bit of tinkering here and there, the app was ready. Well, to make my app different from young Jinathan’s app, I also displayed all the detected labels from the image. If you want to try out this technological marvel in your own phone you... ### Visit Nepal : A travel app for Nepal A travel app showcasing Nepal's beauty with data from a GraphQL backend, featuring maps and dynamic theming. - Project page: https://bibek-timsina.com.np/projects/visit-nepal/ - GitHub: https://github.com/bimsina/visit_nepal - Tags: flutter, graphql This is an app that gives you information about all the things that make Nepal breathtaking. ## Features : - Fetch data from a [GraphQl Server](https://tourism-nepal.herokuapp.com/) - Data collected via web-scraping with Python. - Navigate to a specific location via Google Maps - Dynamic Theming using Provider - Beautiful UI ## Backend Devs: - [Animesh Timsina](https://github.com/AnimeshTimsina) - [Lskshya Pandit](https://github.com/panditlakshya) ## To run this app - Obtain api key from [OpenWeatherMap](https://openweathermap.org/api). - Replace apiString in utils/constants.dart with your api key. - Run the app with _flutter run --release_ ## Writing ### AI Needs Tools, Not Just Intelligence LLMs are prediction machines, they need tools to be intelligent. - Post: https://bibek-timsina.com.np/blog/ai-needs-tools/ - Tags: ai, tools There's a [blog post by Daniel Stenberg](https://daniel.haxx.se/blog/2024/01/02/the-i-in-llm-stands-for-intelligence/) titled "The I in LLM stands for Intelligence." The joke is that there is no I in LLM. He's right. LLMs are prediction machines. You feed them a sequence of tokens and they predict what comes next. Everything that looks like "thinking" is pattern matching. Ask one to explain quantum mechanics and it'll impress you. Ask it how many R's are in "strawberry" and it'll confidently say 2. The model can't see letters. It sees tokens. Asking it to count characters is like asking someone to count bricks through frosted glass. ### What you see: Would I rather be feared or loved? Easy. Both. I want people to be afraid of how much they love me ### What an LLM sees: Would I rather be feared or loved ? Easy . Both . I want people to be afraid of how much they love me Token-based prediction and character-level analysis are different operations. More training data won't fix this. Bigger models won't fix this. But a one line function just might. ## Give it a calculator Now the LLM doesn't need to count. It needs to recognize "this is a counting question" and call the function. That's a language task, the one thing it's good at. > _calls countLetter("strawberry", "r") → 3_ Correct. Every time. Same story with math. Ask an LLM "what's 76447 × 1254?" and it might get close. Or it might not. It's predicting digits, not computing them. Hand it a function: > _calls calculate(76447, 1254, "multiply") → 9,58,64,538_ The LLM didn't get smarter. It got access to a tool. ## A real example: The Office Counting letters and multiplying numbers are toy problems. Here's a better one. I have IMDB data for all 188 episodes of The Office: ratings, seasons, vote counts. When I ask a bare LLM "which episode of the US is the best?", it will probably say some random episode that was discussed on a reddit thread. It might give the correct answer, but let's say you want to ask some fact about your company's internal data, it has no access to it and will probably confidently hallucinate the answer. You can't trust the answer, you can't verify it, you can't reproduce it. Give it a SQLite database and let it write queries instead: > Q: What are the top rated episodes? | title | seaso... ### Exploring Built-in AI Capabilities in Chromium-based browsers Exploring Chromium-based browsers' experimental built-in AI capabilities that run AI models directly in the browser without API keys. - Post: https://bibek-timsina.com.np/blog/exploring-built-in-ai/ - Tags: ai, browser, web-development In this article we will explore Chromium-based browsers' new built-in AI capabilities. These capabilities let you run AI models directly in the browser without needing any API keys or external services. > Want to see a real-world application? Check out my [Browser Chat](/projects/browser-ai-chat/) project - a chat app that runs entirely in the browser using these APIs. ## Why would you want this? - Your data never leaves the device - No network latency - No API costs - Works offline once the model is downloaded > Want to try these demos? See [how to set up Chrome's built-in AI](#setting-up-built-in-ai) at the bottom of this article. --- ## Prompt API The Prompt API lets you generate text using a local language model. It's like having a small ChatGPT running in your browser. Try it out: import { PromptAPI } from "../../components/blog/BuiltInAi/PromptAPI"; ### How to use it --- ## Summarizer API This one condenses long text into summaries. Pretty useful for articles or documents. import { SummarizerAPI } from "../../components/blog/BuiltInAi/SummarizerAPI"; ### How to use it --- ## Rewriter API The Rewriter API transforms text to match different tones - professional, casual, friendly, or confident. import { RewriterAPI } from "../../components/blog/BuiltInAi/RewriterAPI"; ### How to use it --- ## Language Detector API Detects the language of any text and gives you a confidence score. import { LanguageDetectorAPI } from "../../components/blog/BuiltInAi/LanguageDetectorAPI"; ### How to use it --- ## Translator API Translates text between languages, all running locally. import { TranslatorAPI } from "../../components/blog/BuiltInAi/TranslatorAPI"; ### How to use it --- ## Using the Vercel AI SDK If you want a more unified interface that works across different providers, you can use the [Vercel AI SDK](https://sdk.vercel.ai/) with the [@browser-ai](https://github.com/jakobhoeg/browser-ai) community providers. This gives you three options: 1. `@browser-ai/core` - Chrome/Edge's native built-in AI 2. `@browser-ai/transformers-js` - Hugging Face models via Transformers.js 3. `@browser-ai/web-llm` - Open-source models via WebLLM ### Installation ### @browser-ai/core This wraps Chrome's Prompt API. Uses Gemini Nano on Chrome and Phi4-mini on Edge. import { BuiltInAISDK } from "../../components/blog/BuiltInAi/BuiltInAISDK"; ### @b... ### Testing the limits of Supabase + Postgres in a serverless environment Comparing Postgres performance on serverless environments vs traditional servers using Supabase and different ORM setups. - Post: https://bibek-timsina.com.np/blog/postgres-serverless/ - Tags: postgres, serverless, supabase In this article, we will be comparing how postgres performs on a serverless environment compared to a traditional server. We will be testing the postgres db hosted on [Supabase](https://supabase.com/), so we will also test how an orm performs vs how using supabase's js library performs. We will be comparing the following setups in our testing. 1. [Cloudflare Workers](https://workers.cloudflare.com/) + [Supabase JS](https://supabase.com/) 2. [Cloudflare Workers](https://workers.cloudflare.com/) + [Drizzle ORM](https://orm.drizzle.team/) 3. [Express](https://expressjs.com/) + [Supabase JS](https://supabase.com/) 4. [Express](https://expressjs.com/) + [Drizzle ORM](https://orm.drizzle.team/) ### So what are our assumptions going into this test? - Since the sererless environment is ephemeral, it has to establish a new connection to the database on every request. This can be a bottleneck in some cases. - But using supabase's js library, the connection is done to their REST endpoint, which has a connection pool already established, a pool which can handle a [million](https://supabase.com/blog/supavisor-1-million) connections at once. - On the other hand, in a traditional node server, the connection is established once and reused for every request. - So which would be faster? Querying the db from an already established connection or querying the db from supabase js's REST methods? --- Let's start by setting up the project. 1. Create a new supabase project and run it If all goes well, you should be able to access the supabase dashboard at [http://127.0.0.1:54323](http://127.0.0.1:54323) 2. Now lets create a new table from the SQL Editor in the dashboard 3. Let's populate the table by adding a 100000 mock users 4. Let's create the express server with the following code 5. We will now create the Cloudflare Worker #### After starting both the servers, you should have four routes available for testing. 1. [http://localhost:3000/supabasejs](http://localhost:3000/supabasejs) - Express server using supabase js 2. [http://localhost:3000/drizzle](http://localhost:3000/drizzle) - Express server using drizzle orm 3. [http://localhost:8787/supabasejs](http://localhost:8787/supabasejs) - Cloudflare worker using supabase js 4. [http://localhost:8787/drizzle](http://localhost:8787/drizzle) - Cloudflare worker using drizzle orm ### Now lets create a simple script th... ### Using TRPC with Cloudflare Workers in a monorepo Integrating TRPC with Cloudflare Workers in a monorepo setup for type-safe APIs without schema generation. - Post: https://bibek-timsina.com.np/blog/trpc-vite-cf-workers/ - Tags: trpc, cloudflare, serverless In this article we will learn about how we can integrate [TRPC](https://trpc.io/) with [cloudflare workers](https://workers.cloudflare.com/) in a monorepo. ### What is TRPC? TRPC is a tool via which you can build typesafe APIs without having to generate any schema that you have to keep in sync with the server and client. It essentially reduces the logical distance between the client and the server by allowing you to call your APIs as if they were local functions. ### What is a monorepo? If you are not familiar with a monorepo, it is a codebase that contains multiple projects, such as a frontend and a backend, in a single repository. This can be useful for sharing code between projects, managing dependencies, and simplifying the development process. --- To create a monorepo, there are a lot of options, but for this experiment we will use [Turborepo](https://turbo.build/). To get started, you can either clone [this](https://github.com/bimsina/vite-react-cf-starter) repo, or run the following command to bootstrap a new project: After you've cloned the project, the backend code should look something like this: This is what would look like calling the backend from the frontend: As you can see this works, but here are some of the problems with this approach: #### The API is not typesafe. - What if the backend changes the response shape? - What if the frontend parses the response incorrectly? #### The API is not easily documented. - What if the frontend developer doesn't know what the expected input is? **Enter TRPC**. With TRPC, you can call your backend APIs as if they were local functions. This means the API called is typesafe and the input and output schema is well documented. --- #### Let's first setup TRPC in the server 1. Installing packages > Notice we have installed zod as well, which will help us in validating the user input. 2. Define the router 3. Initialize the router instance 4. Add a query 5. Validate the input with zod 6. Serve the API Now the cloudflare worker should serve the trpc routes under `/trpc`. #### Now let's setup TRPC in the client 1. Installing packages 2. Create a client instance 3. Consume the API #### 🎉 Congratulations, you have succesfully implemented end-to-end typesafety using TRPC --- Keep in mind that this is just the setup, and you can do a lot more with TRPC. I suggest you go thro... ## Publication ### Plagiarism Detection in Programming Assignments using Machine Learning - Publisher: Journal of Artificial Intelligence and Capsule Networks - Authors: Bibek Timsina, Nishesh Awale, Mitesh Pandey, Anish Dulal - Google Scholar: https://scholar.google.com/citations?view_op=view_citation&hl=en&user=-PP4XLoAAAAJ&citation_for_view=-PP4XLoAAAAJ:u5HHmVD_uO8C - ResearchGate: https://www.researchgate.net/publication/343233556_Plagiarism_Detection_in_Programming_Assignments_using_Machine_Learning - PDF: https://web.archive.org/web/20220228023930id_/https://www.irojournals.com/aicn/V2/I3/05.pdf ## Consumption Notes - This document is intended for LLM and agent consumption. - Prefer canonical project and blog URLs on the website when citing work. - Project sections include shortened body content from the source markdown files. - Blog sections include shortened body content from the source markdown or MDX files.