<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Julien Avezou</title>
    <description>The latest articles on Forem by Julien Avezou (@javz).</description>
    <link>https://forem.com/javz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3245143%2Ff6cf9acd-541d-4ad4-a846-2788da803c99.png</url>
      <title>Forem: Julien Avezou</title>
      <link>https://forem.com/javz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/javz"/>
    <language>en</language>
    <item>
      <title>Turn Your Laptop Into an AI Agent (Free OpenClaw + Telegram Setup)</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Mon, 13 Apr 2026 12:48:52 +0000</pubDate>
      <link>https://forem.com/javz/turn-your-laptop-into-an-ai-agent-free-openclaw-telegram-setup-296f</link>
      <guid>https://forem.com/javz/turn-your-laptop-into-an-ai-agent-free-openclaw-telegram-setup-296f</guid>
      <description>&lt;p&gt;I have been following the developments of Openclaw and hadn't properly played around with it until now. The FOMO was too strong so I decided to experiment with it in a very low stakes context and share this experiment with you.&lt;/p&gt;

&lt;p&gt;No APIs. No subscriptions. Just my machine.&lt;/p&gt;




&lt;h2&gt;
  
  
  Setting the scene
&lt;/h2&gt;

&lt;p&gt;For those living under a rock these past months, let's start with defining what Openclaw is. &lt;br&gt;
Only kidding, if you don't know what Openclaw is that's totally fine, things move fast these days and it's hard to keep up with everything. If you already know what Openclaw is, here is a refresher:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw is a local AI agent runtime that connects LLMs to real-world tools, channels (like Telegram), and automation, letting you build autonomous, personalized AI systems that run on your own machine.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Openclaw is seen as revolutionary because &lt;strong&gt;it turns an LLM into a programmable system, not just a chatbot&lt;/strong&gt; through agents, tool integrations, automations, native channels etc.&lt;/p&gt;

&lt;p&gt;Now that we understand what we are working with, let's set some goals, a target architecture and structure for this tutorial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My goals for this experiment:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Become familiar with the basics of OpenClaw ✅&lt;/li&gt;
&lt;li&gt;Free setup for low stakes experimentation ✅&lt;/li&gt;
&lt;li&gt;Local models only ✅&lt;/li&gt;
&lt;li&gt;Isolation via VM for security ✅&lt;/li&gt;
&lt;li&gt;Share this experiment in public to share knowledge ✅&lt;/li&gt;
&lt;li&gt;Have fun and learn something new ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The flow for this tutorial:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User in Telegram
   ↓
Telegram bot/channel
   ↓
OpenClaw native Telegram channel
   ↓
bookbot agent
   ↓
Ollama on host Mac
   ↓
Mistral
   ↓
Response sent back to Telegram
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Architecture diagram:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                           ┌──────────────────────────┐
                           │       Telegram App       │
                           │     (user messages)      │
                           └────────────┬─────────────┘
                                        │
                                        │ native Telegram channel
                                        ▼
                    ┌──────────────────────────────────────────┐
                    │          OpenClaw Gateway (VM)           │
                    │                                          │
                    │  Ubuntu VM in UTM                        │
                    │  - OpenClaw                              │
                    │  - native Telegram integration           │
                    │  - bookbot agent                         │
                    │  - cron / scheduling experiments         │
                    └────────────┬─────────────────────────────┘
                                 │
                                 │ model requests
                                 ▼
                 ┌────────────────────────────────────┐
                 │      Ollama on macOS host          │
                 │                                    │
                 │  - local runtime                   │
                 │  - mistral:latest                  │
                 │  - exposed to VM via local IP      │
                 └────────────┬───────────────────────┘
                              │
                              │ local inference
                              ▼
                 ┌────────────────────────────────────┐
                 │       Open source local model      │
                 │            (Mistral 7B)            │
                 └────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Having the model run on macOS keeps it fast, while having the agent logic inside the VM isolates it for better security:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────────┐
│                        MacBook Pro (host)                      │
│                                                                 │
│  ┌──────────────────────────────┐   ┌─────────────────────────┐ │
│  │   Ollama                     │   │   UTM                   │ │
│  │   - mistral:latest          │   │   Ubuntu VM             │ │
│  │   - OLLAMA_HOST=0.0.0.0     │   │   - OpenClaw            │ │
│  │   - port 11434              │   │   - Telegram channel    │ │
│  └───────────────┬──────────────┘   │   - bookbot agent       │ │
│                  │                  └──────────┬──────────────┘ │
│                  └──────── local network ──────┘                │
└─────────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Resources used:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VM: 6GB RAM, 50GB disk&lt;/li&gt;
&lt;li&gt;Host for Ollama: 6–8GB free RAM + ~15GB disk (model + cache)&lt;/li&gt;
&lt;li&gt;Extra disk buffer: ~10GB&lt;/li&gt;
&lt;li&gt;Model: one local 7B model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Model choice -&amp;gt; Mistral:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low memory (~5GB in Ollama)&lt;/li&gt;
&lt;li&gt;Fast on Apple Silicon&lt;/li&gt;
&lt;li&gt;Stable for agent loops&lt;/li&gt;
&lt;li&gt;Good enough reasoning + coding&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Inside VM:

&lt;ul&gt;
&lt;li&gt;No shared folders initially&lt;/li&gt;
&lt;li&gt;No SSH keys mounted&lt;/li&gt;
&lt;li&gt;Use limited permissions&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Between VM ↔ host:

&lt;ul&gt;
&lt;li&gt;Only expose Ollama port (11434)&lt;/li&gt;
&lt;li&gt;Restrict to localhost&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;I am being conservative here with the setup to avoid my machine crashing while working on my everyday tasks, i.e. having browser tabs and other apps running in parallel. &lt;/p&gt;

&lt;p&gt;However feel free to tweak this setup according to your own preferences and resources available. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For reference, I am running this experiment on my Macbook Pro M4 24GB RAM 1TB SSD.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's begin!&lt;/p&gt;




&lt;h2&gt;
  
  
  Optimising available resources
&lt;/h2&gt;

&lt;p&gt;Before starting on the actual Openclaw setup, I wanted to optimise my local resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Free SSD space
&lt;/h3&gt;

&lt;p&gt;I personally found some applications I could easily delete to free up storage. I took advantage of this to do a spring clean and freed up plenty enough space!&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%2Fbyx8rdf0l0sauaj0uieu.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%2Fbyx8rdf0l0sauaj0uieu.png" alt=" " width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Free RAM
&lt;/h3&gt;

&lt;p&gt;Check Activity Monitor&lt;/p&gt;

&lt;p&gt;My setup wasn't ideal.&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%2Futwhje0848pjydwjl6ts.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%2Futwhje0848pjydwjl6ts.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Chrome was the biggest culprit! &lt;/p&gt;

&lt;p&gt;Some tips to help reduce memory usage by Chrome:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chrome → Settings → Performance → Turn on Memory Saver&lt;/li&gt;
&lt;li&gt;Kill tabs - Keep &amp;lt;10 active tabs&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove inactive extensions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quit background apps you aren't actively using&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clear cache. Recommended to do this occasionally (monthly or before heavy workloads)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restart Mac to clear any memory leaks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By following these steps, I optimised used memory by roughly 4 GB.&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%2F5fftt9rwxt1pf2z3lh8y.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%2F5fftt9rwxt1pf2z3lh8y.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Install tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install Ollama (on host)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;ollama
ollama serve
ollama pull mistral

&lt;span class="c"&gt;# test&lt;/span&gt;
ollama run mistral
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fu1pha09m6xoqc4jn2a0e.gif" 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%2Fu1pha09m6xoqc4jn2a0e.gif" alt=" " width="990" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setup VM

&lt;ul&gt;
&lt;li&gt;Install UTM&lt;/li&gt;
&lt;li&gt;Download Ubuntu ARM64 (downloading via the UTM Gallery worked for me)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&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%2Fp8n76urphmdpykdyyicx.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%2Fp8n76urphmdpykdyyicx.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set the correct resources
Memory: 6144 MiB (6GB)
CPU: 4 cores&lt;/li&gt;
&lt;/ul&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%2Fq1vpqrpqor4hpp7nxuuf.gif" 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%2Fq1vpqrpqor4hpp7nxuuf.gif" alt=" " width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Start the VM&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clone OpenClaw and install pre-dependencies (in VM)&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; git curl build-essential

curl &lt;span class="nt"&gt;-o-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NVM_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.nvm"&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt;
nvm &lt;span class="nb"&gt;install &lt;/span&gt;22
nvm use 22
node &lt;span class="nt"&gt;-v&lt;/span&gt;
npm &lt;span class="nt"&gt;-v&lt;/span&gt;

corepack &lt;span class="nb"&gt;enable
&lt;/span&gt;corepack prepare pnpm@latest &lt;span class="nt"&gt;--activate&lt;/span&gt;
pnpm &lt;span class="nt"&gt;-v&lt;/span&gt;

git clone https://github.com/openclaw/openclaw.git
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/openclaw

pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fru52spawbriefhpdt78l.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%2Fru52spawbriefhpdt78l.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install OpenClaw
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Find Mac IP and set in Ollama base URL during Openclaw onboarding&lt;/span&gt;
&lt;span class="c"&gt;# run cmd below in terminal on host&lt;/span&gt;
ifconfig | &lt;span class="nb"&gt;grep &lt;/span&gt;inet
&lt;span class="c"&gt;# look for something like: `192.168.x.x`&lt;/span&gt;

pnpm openclaw onboard &lt;span class="nt"&gt;--install-daemon&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;During onboarding select:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quickstart&lt;/li&gt;
&lt;li&gt;Model: Ollama &lt;/li&gt;
&lt;li&gt;Ollama base URL: &lt;a href="http://INSERT_YOUR_MAC_IP:11434" rel="noopener noreferrer"&gt;http://INSERT_YOUR_MAC_IP:11434&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ollama mode: Local&lt;/li&gt;
&lt;li&gt;Default model: ollama/mistral:latest&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skip the rest of the remaining steps for now: channels, search providers, skills, hooks, hatch mode.&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%2F5s70v0vbp9s0gjqvu5da.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%2F5s70v0vbp9s0gjqvu5da.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test it manually after installation
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm openclaw agent &lt;span class="nt"&gt;--agent&lt;/span&gt; main &lt;span class="nt"&gt;--message&lt;/span&gt; &lt;span class="s2"&gt;"Say hello in one sentence."&lt;/span&gt; &lt;span class="nt"&gt;--thinking&lt;/span&gt; low
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should work and you get a response back from the agent!&lt;/p&gt;

&lt;p&gt;The OpenClaw dashboard is useful to monitor for statuses and logs. You can access it on port 18789.&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%2Fn1mot19rh8r13ibkxpas.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%2Fn1mot19rh8r13ibkxpas.png" alt=" " width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the Telegram app on your device and create your bot using &lt;code&gt;@BotFather&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/start
/newbot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the new bot is created BotFather will provide you with a bot token. Keep it safe as we will need it for later when configuring Openclaw.&lt;/p&gt;




&lt;h2&gt;
  
  
  Configure the experiment
&lt;/h2&gt;

&lt;p&gt;From this point on, I will proceed with my own business logic for OpenBooks. But feel free to implement the business logic for your own application.&lt;/p&gt;

&lt;p&gt;Need inspiration for your own experiments? &lt;br&gt;
This useful github repo showcases many potential implementations made possible with Openclaw: &lt;a href="https://github.com/hesamsheikh/awesome-openclaw-usecases" rel="noopener noreferrer"&gt;https://github.com/hesamsheikh/awesome-openclaw-usecases&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Step 1 — Configure native Telegram channel
&lt;/h4&gt;

&lt;p&gt;Now that OpenClaw is installed and your bot is created via &lt;code&gt;@BotFather&lt;/code&gt;, let’s connect Telegram.&lt;/p&gt;

&lt;p&gt;Add your Telegram bot to your Openclaw config:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="s2"&gt;"channels"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"telegram"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"enabled"&lt;/span&gt;: &lt;span class="nb"&gt;true&lt;/span&gt;,
    &lt;span class="s2"&gt;"botToken"&lt;/span&gt;: &lt;span class="s2"&gt;"INSERT_YOUR_BOT_TOKEN"&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart the gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm openclaw gateway restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Send a message to your bot in Telegram. You should now get a response from OpenClaw.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2 — Create BookBot agent + workspace
&lt;/h4&gt;

&lt;p&gt;Instead of using the default &lt;code&gt;main&lt;/code&gt; agent, we create a dedicated agent for our experiment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm openclaw agents add bookbot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bind Telegram to this agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm openclaw agents &lt;span class="nb"&gt;bind&lt;/span&gt; &lt;span class="nt"&gt;--agent&lt;/span&gt; bookbot &lt;span class="nt"&gt;--bind&lt;/span&gt; telegram
pnpm openclaw agents bindings

&lt;span class="c"&gt;# You should see: bookbot &amp;lt;- telegram&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now configure the agent behavior via its workspace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# SOUL.md&lt;/span&gt;

You are BookBot.

You are a Telegram book recommendation assistant.

Recommend 3 books in this format:

📚 Recommendations
&lt;span class="p"&gt;
1.&lt;/span&gt; Title — Author  
Why: short reason  
&lt;span class="p"&gt;
2.&lt;/span&gt; Title — Author  
Why: short reason  
&lt;span class="p"&gt;
3.&lt;/span&gt; Title — Author  
Why: short reason  

Rules:
&lt;span class="p"&gt;-&lt;/span&gt; No long intro
&lt;span class="p"&gt;-&lt;/span&gt; No tool descriptions
&lt;span class="p"&gt;-&lt;/span&gt; Keep it concise
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# AGENTS.md&lt;/span&gt;

Interpret the following as recommendation requests:
&lt;span class="p"&gt;
-&lt;/span&gt; recommend me a book
&lt;span class="p"&gt;-&lt;/span&gt; what should I read next
&lt;span class="p"&gt;-&lt;/span&gt; books for developers
&lt;span class="p"&gt;-&lt;/span&gt; books like [X]

If the request is clear → recommend 3 books  
If vague → ask 1 short clarifying question
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart the gateway and test in Telegram:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Recommend 3 books for software engineers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fboqpwsx84o8fgll1o273.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%2Fboqpwsx84o8fgll1o273.PNG" alt=" " width="800" height="1734"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3 — Test scheduling (simple cron)
&lt;/h4&gt;

&lt;p&gt;Before doing anything complex, let’s just prove scheduling works.&lt;/p&gt;

&lt;p&gt;Create a one-shot reminder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm openclaw cron add &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"Test reminder"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--at&lt;/span&gt; &lt;span class="s2"&gt;"10m"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--message&lt;/span&gt; &lt;span class="s2"&gt;"📚 Reading reminder: ask BookBot for recommendations!"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--announce&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--channel&lt;/span&gt; telegram &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--to&lt;/span&gt; &lt;span class="s2"&gt;"INSERT_YOUR_CHAT_ID"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;List jobs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm openclaw cron list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test immediately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm openclaw cron run &amp;lt;JOB_ID&amp;gt;

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

&lt;/div&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%2Fvm24kwmhtvts3a7khfc7.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%2Fvm24kwmhtvts3a7khfc7.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should receive a Telegram message confirming that cron works!&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4 — Daily recurring cron job
&lt;/h4&gt;

&lt;p&gt;Now convert this into a daily habit (adapt to your tz)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm openclaw cron add &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"Daily reading reminder"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cron&lt;/span&gt; &lt;span class="s2"&gt;"0 9 * * *"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tz&lt;/span&gt; &lt;span class="s2"&gt;"America/Toronto"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--message&lt;/span&gt; &lt;span class="s2"&gt;"📚 Daily reminder: ask BookBot for 3 new book recommendations."&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--announce&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--channel&lt;/span&gt; telegram &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--to&lt;/span&gt; &lt;span class="s2"&gt;"INSERT_YOUR_CHAT_ID"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm openclaw cron run &amp;lt;JOB_ID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🎉 We are done! &lt;/p&gt;

&lt;p&gt;You now have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a local AI agent&lt;/li&gt;
&lt;li&gt;connected to Telegram&lt;/li&gt;
&lt;li&gt;powered by a local model&lt;/li&gt;
&lt;li&gt;with daily automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All running on your own machine, for free.&lt;/p&gt;




&lt;h2&gt;
  
  
  Start and stop the experiment
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; the setup runs locally, meaning that if your machine or VM shuts off then Openclaw will stop working.&lt;/p&gt;

&lt;p&gt;Here are some tips to avoid this:&lt;/p&gt;

&lt;p&gt;On host:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;caffeinate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prevent VM from going to sleep by disabling systemd sleep:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start Openclaw agent &amp;amp; detach using tmux (in VM):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; tmux

tmux new &lt;span class="nt"&gt;-s&lt;/span&gt; openclaw

&lt;span class="nb"&gt;cd&lt;/span&gt; ~/openclaw
openclaw gateway start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Press CTRL + B, then D to detach&lt;/p&gt;

&lt;p&gt;Stop Openclaw agent (in VM):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tmux attach &lt;span class="nt"&gt;-t&lt;/span&gt; openclaw
openclaw gateway stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On your host don't forget to stop serving the model via Ollama and shut off your VM when not in use to free resources.&lt;/p&gt;




&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To avoid unnecessary model calls and background noise, and if there is no explicit need for it, I would recommend disabling the heartbeat via the OpenClaw config and relying on an explicit cron job:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"heartbeat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"every"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0m"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Move from model-driven skills to tool-dispatched skills so they bypass the model and call a deterministic local tool instead. This improves accuracy of outputs. Getting deterministic outputs felt like a struggle with OpenClaw in general, this helps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a dedicated agent + routing binding vs hijacking main agent for more specific logic&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Glossary of OpenClaw commands I found useful
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Gateway&lt;/span&gt;
pnpm openclaw gateway start
pnpm openclaw gateway restart

&lt;span class="c"&gt;# Agents&lt;/span&gt;
pnpm openclaw agents add bookbot
pnpm openclaw agents &lt;span class="nb"&gt;bind&lt;/span&gt; &lt;span class="nt"&gt;--agent&lt;/span&gt; &amp;lt;AGENT&amp;gt; &lt;span class="nt"&gt;--bind&lt;/span&gt; &amp;lt;CHANNEL&amp;gt;
pnpm openclaw agents bindings

&lt;span class="c"&gt;# Cron&lt;/span&gt;
pnpm openclaw cron add ...
pnpm openclaw cron list
pnpm openclaw cron run &amp;lt;JOB_ID&amp;gt;

&lt;span class="c"&gt;# Debugging&lt;/span&gt;
journalctl &lt;span class="nt"&gt;--user&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; openclaw-gateway.service &lt;span class="nt"&gt;-f&lt;/span&gt;
pnpm openclaw doctor &lt;span class="nt"&gt;--fix&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Future improvements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Improve functionalities, add memory capability to unlock insights&lt;br&gt;
“Compare this book to the last 3 books I read”&lt;br&gt;
“Turn my reading history into themes and recommendations”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consider a hybrid strategy where the setup is less resource intense during day as I work in parallel on manual tasks, but more resource intense and high performance at night while I am asleep for longer experiments.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Discussions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What are you using Openclaw for?&lt;/li&gt;
&lt;li&gt;What does your setup look like?&lt;/li&gt;
&lt;li&gt;Any tips/hacks with Openclaw to share? I have only started exploring this tool :)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;🦞 Thanks for following along, I hope you enjoyed this tutorial! 🦞&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Standup Chaos Simulator</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Fri, 10 Apr 2026 16:12:44 +0000</pubDate>
      <link>https://forem.com/javz/the-standup-chaos-simulator-1ch8</link>
      <guid>https://forem.com/javz/the-standup-chaos-simulator-1ch8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Most of us have sat in standups that somehow consumed time, generated stress, and produced zero meaningful decisions. So I decided to make a useless app to remember these moments in all their chaos and glory.&lt;/p&gt;

&lt;p&gt;Behold &lt;strong&gt;Standup Chaos Simulator&lt;/strong&gt;, a web app that generates chaotic developer standups in a chat UI.&lt;/p&gt;

&lt;p&gt;Pick your team.&lt;/p&gt;

&lt;p&gt;Assign roles.&lt;/p&gt;

&lt;p&gt;Choose how doomed the sprint is.&lt;/p&gt;

&lt;p&gt;Select extra chaos events.&lt;/p&gt;

&lt;p&gt;Watch the meeting unfold message by message like a live team sync that should probably have been async.&lt;/p&gt;

&lt;p&gt;Once the fake standup finishes, the app gives you a Team Dysfunction Meter, lets you copy the transcript, and exports the whole thing as a shareable GIF.&lt;/p&gt;

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


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://standup-chaos-simulator.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;standup-chaos-simulator.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&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%2Fvidxk0tykybbu9ttkub1.gif" 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%2Fvidxk0tykybbu9ttkub1.gif" alt=" " width="720" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/JulienAvezou/standup-chaos-simulator" rel="noopener noreferrer"&gt;https://github.com/JulienAvezou/standup-chaos-simulator&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;html2canvas&lt;/li&gt;
&lt;li&gt;gif.js&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No backend, no database, no auth, no LLM calls.&lt;/p&gt;

&lt;p&gt;I used Codex as my coding assistant for this project.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Community Favorite&lt;/strong&gt; - many of us share the pain of standups :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't be late for standup!
&lt;/h2&gt;

&lt;p&gt;Drop your most chaotic standup GIF in the comments.&lt;/p&gt;

&lt;p&gt;Any missing features you would like to add to generate even more chaos? &lt;/p&gt;

&lt;p&gt;And if you have any stories to share about your most memorable standup moments, I would love to hear them!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Building a coding course generator in public #1: The problem with learning to code today</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Tue, 31 Mar 2026 13:32:09 +0000</pubDate>
      <link>https://forem.com/javz/building-a-coding-course-generator-in-public-1-the-problem-with-learning-to-code-today-2pm7</link>
      <guid>https://forem.com/javz/building-a-coding-course-generator-in-public-1-the-problem-with-learning-to-code-today-2pm7</guid>
      <description>&lt;p&gt;If I had to learn how to code today from scratch, I’m not sure I would learn it properly.&lt;/p&gt;

&lt;p&gt;Not because there aren’t enough resources.&lt;/p&gt;

&lt;p&gt;But because there are too many shortcuts.&lt;/p&gt;

&lt;p&gt;With AI tools everywhere, it’s never been easier to build apps without fully understanding what’s happening under the hood.&lt;/p&gt;

&lt;p&gt;And honestly… that’s very tempting!&lt;/p&gt;




&lt;h3&gt;
  
  
  How I learned to code
&lt;/h3&gt;

&lt;p&gt;My path was much more traditional:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I started with a bootcamp to learn fundamentals&lt;/li&gt;
&lt;li&gt;Then I built projects to apply what I learned&lt;/li&gt;
&lt;li&gt;Then I gained real-world experience in a company&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first two steps were what got me my first job.&lt;/p&gt;

&lt;p&gt;They gave me something more valuable than just code:&lt;br&gt;
&lt;strong&gt;intuition, structure, and confidence.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The problem today
&lt;/h3&gt;

&lt;p&gt;Learning to code today often falls into two extremes:&lt;/p&gt;

&lt;p&gt;Too theoretical → you get stuck in tutorials&lt;br&gt;
Too shallow → you ship things without understanding them&lt;/p&gt;

&lt;p&gt;AI has amplified the second path.&lt;/p&gt;

&lt;p&gt;You can now build fast…&lt;br&gt;
but you might hit a wall later when things break, scale, or need to evolve.&lt;/p&gt;




&lt;h3&gt;
  
  
  My idea
&lt;/h3&gt;

&lt;p&gt;So I decided to build something to explore this problem:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;A course generator that teaches coding&lt;/strong&gt; through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hands-on project building&lt;/li&gt;
&lt;li&gt;coding fundamentals&lt;/li&gt;
&lt;li&gt;best practices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not theory-heavy.&lt;br&gt;
Not AI shortcut-heavy.&lt;br&gt;
But something in between.&lt;/p&gt;




&lt;h3&gt;
  
  
  Building in public
&lt;/h3&gt;

&lt;p&gt;Over the next few weeks, I’ll be sharing this journey publicly.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;experiment&lt;/li&gt;
&lt;li&gt;learn&lt;/li&gt;
&lt;li&gt;share everything along the way&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also plan to &lt;strong&gt;open-source the app&lt;/strong&gt; once it’s ready so anyone can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run it locally&lt;/li&gt;
&lt;li&gt;learn from it&lt;/li&gt;
&lt;li&gt;build on top of it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are no monetization plans or intentions here, this is purely an experiment.&lt;/p&gt;




&lt;h3&gt;
  
  
  Some interesting statistics
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;AI is making building software more accessible than ever.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;180M+ developers on GitHub with 36M new developers joining yearly.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;63% of Vibe Coders are Non-Developers.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Emerging concerns in Vibe Coding highlight that 40% of junior developers admit to deploying AI-generated code they don't fully understand.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Stack Overflow’s 2024 survey finds 82% of developers use online resources as a primary way to learn.&lt;/strong&gt;&lt;/p&gt;

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




&lt;h3&gt;
  
  
  Why this matters (to me)
&lt;/h3&gt;

&lt;p&gt;I believe we’re entering a phase where:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The bottleneck is no longer building…&lt;br&gt;
it’s understanding what you built&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that’s where fundamentals and best practices still matter.&lt;/p&gt;

&lt;p&gt;My goal is to help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;self-taught developers&lt;/li&gt;
&lt;li&gt;AI-assisted builders&lt;/li&gt;
&lt;li&gt;beginners who want to go beyond “vibe coding”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…develop stronger engineering intuition and build more sustainable products.&lt;/p&gt;




&lt;h3&gt;
  
  
  What’s next
&lt;/h3&gt;

&lt;p&gt;In the next post, I’ll dive into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the technical setup&lt;/li&gt;
&lt;li&gt;early architecture decisions&lt;/li&gt;
&lt;li&gt;constraints for keeping this lightweight and accessible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is a sneak peek of the home page in the meantime! &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%2Fg5ipvmmo5g7sy9qxqs6p.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%2Fg5ipvmmo5g7sy9qxqs6p.png" alt=" " width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Discussion
&lt;/h3&gt;

&lt;p&gt;I’d love to hear your perspective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How are you currently learning or improving your coding skills?&lt;/li&gt;
&lt;li&gt;What’s your setup when building with AI tools?&lt;/li&gt;
&lt;li&gt;Would you use something like this? Why or why not?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Data Sources: GitHub Octoverse 2025, Gartner, JetBrains Developer Ecosystem, Course Report, Second Talent Vibe Coding Statistics, McKinsey AI Survey. Report generated with Perplexity on March 18, 2026.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>beginners</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Why hiring junior developers pays off more than you think (I’ve lived it firsthand)</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Wed, 25 Mar 2026 12:56:27 +0000</pubDate>
      <link>https://forem.com/javz/why-hiring-junior-developers-pays-off-more-than-you-think-ive-lived-it-firsthand-1lg2</link>
      <guid>https://forem.com/javz/why-hiring-junior-developers-pays-off-more-than-you-think-ive-lived-it-firsthand-1lg2</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wecoded-2026"&gt;2026 WeCoded Challenge&lt;/a&gt;: Echoes of Experience&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A trip down memory lane
&lt;/h3&gt;

&lt;p&gt;I still remember my final interview.&lt;/p&gt;

&lt;p&gt;It wasn’t a coding challenge or another algorithm question.&lt;/p&gt;

&lt;p&gt;It was just a conversation.&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%2Fmsz4as6xhnm0acp7qh08.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%2Fmsz4as6xhnm0acp7qh08.png" alt=" " width="784" height="1094"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We talked about my background in business and finance.&lt;br&gt;
The internships I had done.&lt;br&gt;
The projects I had built, including a drone media company and a project management app I had sold to an architecture firm in Belgium.&lt;br&gt;
My short experience as a product manager in a startup.&lt;/p&gt;

&lt;p&gt;Compared to the previous rounds that were full of logical tests, coding exercises, and pair programming, this one felt different.&lt;/p&gt;

&lt;p&gt;I wasn’t trying to prove I could code but just talking about my life.&lt;br&gt;
I was showing how I think, how I learn, and how I approach problems through my past experiences.&lt;/p&gt;

&lt;p&gt;A week later, I got the offer.&lt;/p&gt;

&lt;p&gt;Not for a standard role, but for an engineering graduate program.&lt;/p&gt;

&lt;p&gt;And looking back, that moment changed everything...&lt;/p&gt;




&lt;h3&gt;
  
  
  The fast track wasn’t accidental
&lt;/h3&gt;

&lt;p&gt;I went from coding bootcamp to senior software engineer in just over 5 years.&lt;/p&gt;

&lt;p&gt;I worked hard.&lt;br&gt;
I built side projects.&lt;br&gt;
I kept learning constantly and found great mentors.&lt;/p&gt;

&lt;p&gt;But the biggest accelerator early on?&lt;/p&gt;

&lt;p&gt;The structure and exposure from that graduate program.&lt;/p&gt;

&lt;p&gt;It gave me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;exposure to different teams and problem spaces&lt;/li&gt;
&lt;li&gt;hands-on experience across technologies&lt;/li&gt;
&lt;li&gt;a safe environment to learn fast and make mistakes&lt;/li&gt;
&lt;li&gt;a cohort of peers growing at the same pace&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Over the following years, I noticed something interesting.&lt;/p&gt;

&lt;p&gt;Many of the highest-performing engineers in the company came from that same graduate track.&lt;/p&gt;

&lt;p&gt;Not just technically, but in how they contributed to culture, collaboration, and leadership.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why junior engineers outperform (when given the chance)
&lt;/h3&gt;

&lt;p&gt;From what I observed, graduate engineers tend to overperform for a few key reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;They’re hungry&lt;/strong&gt;&lt;br&gt;
We were eager to prove ourselves. Every task mattered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;They learn fast&lt;/strong&gt;&lt;br&gt;
Coming from bootcamps or self-taught paths, learning was already part of our identity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;They bring different perspectives&lt;/strong&gt;&lt;br&gt;
Many of us didn’t come from traditional CS backgrounds.&lt;br&gt;
We approached problems more practically, often with product or user context in mind.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That mix created strong synergies within teams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;theoretical depth from experienced engineers&lt;/li&gt;
&lt;li&gt;practical execution and fresh thinking from juniors&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  And the ROI for companies is real
&lt;/h3&gt;

&lt;p&gt;Investing in junior developers is a healthy strategy.&lt;/p&gt;

&lt;p&gt;Here’s what I saw:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;High employee retention&lt;/strong&gt;&lt;br&gt;
When a company invests in you early, you stay. Trust goes both ways.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stronger leadership pipeline&lt;/strong&gt;&lt;br&gt;
Training juniors forces senior engineers to mentor and that builds leadership skills fast.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;More diversity in hiring&lt;/strong&gt;&lt;br&gt;
In my experience, graduate programs brought in more women and more diverse backgrounds than traditional hiring pipelines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stronger engineering culture&lt;/strong&gt;&lt;br&gt;
A company known for growing talent attracts better people over time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  What helped me go from junior to senior
&lt;/h3&gt;

&lt;p&gt;On a more personal level, here are a few learnings that made a big difference for me in the last years:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Leverage your non-technical strengths&lt;/strong&gt;&lt;br&gt;
My background in business and product helped me early on.&lt;br&gt;
I contributed through communication, organization, and initiative, not just code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Adopt a T-shaped development approach&lt;/strong&gt;&lt;br&gt;
Go deep in one area, but stay curious across others.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Be visible&lt;/strong&gt;&lt;br&gt;
Share your work. Communicate progress. Talk about impact.&lt;br&gt;
Silence slows your growth.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Document your journey&lt;/strong&gt;&lt;br&gt;
I kept a developer journal to track what I learned and achieved.&lt;br&gt;
This helped massively with confidence, reflection and arguing my case at promotion rounds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build relationships&lt;/strong&gt;&lt;br&gt;
Inside and outside of work. Your network compounds just like your skills.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Get involved beyond your team&lt;/strong&gt;&lt;br&gt;
During my time at the company I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;spoke at internal conferences&lt;/li&gt;
&lt;li&gt;contributed to the engineering blog&lt;/li&gt;
&lt;li&gt;joined hackathons&lt;/li&gt;
&lt;li&gt;participated in threat modeling sessions&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  The human side of growth
&lt;/h3&gt;

&lt;p&gt;When I left the company, what struck me the most wasn’t the projects, nor the crazy amount of merch I had accumulated over the years...&lt;/p&gt;

&lt;p&gt;It was the people.&lt;/p&gt;

&lt;p&gt;At my farewell drinks, many of those who showed up were from my original graduate cohort.&lt;/p&gt;

&lt;p&gt;We had all grown not just as engineers, but as people.&lt;/p&gt;

&lt;p&gt;And that’s when it really hit me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real ROI of investing in juniors isn’t just technical output.&lt;br&gt;
It’s the humans you nurture and the culture you foster over time.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Why I’m sharing this
&lt;/h3&gt;

&lt;p&gt;Two reasons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) For companies&lt;/strong&gt;&lt;br&gt;
Cutting junior roles because of AI-driven productivity gains is a short-term decision.&lt;/p&gt;

&lt;p&gt;From what I’ve witnessed, it’s a mistake.&lt;/p&gt;

&lt;p&gt;The long-term ROI of investing in junior engineers, especially through structured programs, is massive.&lt;/p&gt;

&lt;p&gt;And much of that value is human, not just technical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) For those on non-traditional paths&lt;/strong&gt;&lt;br&gt;
If you’re coming from a bootcamp, self-taught journey, or an “irregular” background suffering from imposter syndrome:&lt;/p&gt;

&lt;p&gt;That’s not a weakness.&lt;br&gt;
It’s your edge.&lt;/p&gt;

&lt;p&gt;We live in a time where different perspectives are more valuable than ever.&lt;/p&gt;

&lt;p&gt;Lean into them. Keep building. Keep learning.&lt;/p&gt;




&lt;p&gt;None of this happens alone.&lt;/p&gt;

&lt;p&gt;This is also a &lt;strong&gt;thank you to everyone who helped me along the way&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mentors
&lt;/li&gt;
&lt;li&gt;managers
&lt;/li&gt;
&lt;li&gt;teammates
&lt;/li&gt;
&lt;li&gt;fellow builders
&lt;/li&gt;
&lt;li&gt;friends and family
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💬 Discussion
&lt;/h3&gt;

&lt;p&gt;I’m curious to hear your thoughts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Have you seen junior developers outperform expectations in your teams?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Are companies underinvesting in junior talent today?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How has AI changed (or not changed) the value of hiring juniors in your experience?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you’ve gone through a graduate program, did it accelerate your growth?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For senior engineers: how has mentoring juniors impacted your own development?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>wecoded</category>
      <category>dei</category>
      <category>career</category>
    </item>
    <item>
      <title>A 1-hour experiment: vibe-coding an app to break the ice at a networking event</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Fri, 20 Mar 2026 13:45:50 +0000</pubDate>
      <link>https://forem.com/javz/a-1-hour-experiment-vibe-coding-an-app-to-break-the-ice-at-a-networking-event-2721</link>
      <guid>https://forem.com/javz/a-1-hour-experiment-vibe-coding-an-app-to-break-the-ice-at-a-networking-event-2721</guid>
      <description>&lt;p&gt;It’s 5pm. My event starts in an hour.&lt;/p&gt;

&lt;p&gt;Plenty of time to build an app, right? &lt;/p&gt;




&lt;p&gt;I’m currently exploring a new project idea. Still early, still messy.&lt;/p&gt;

&lt;p&gt;One of the most common pieces of advice when building a product is to validate early by talking to potential users.&lt;/p&gt;

&lt;p&gt;So I thought: why not use this networking event to start?&lt;/p&gt;

&lt;p&gt;The problem is, walking up to people and asking them to answer questions about your idea can feel awkward.&lt;/p&gt;

&lt;p&gt;I wanted something lighter. Something that would make the interaction feel natural instead of forced.&lt;/p&gt;

&lt;p&gt;So I built a simple app.&lt;/p&gt;

&lt;p&gt;A spin-the-wheel game where people could either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;win a prize&lt;/li&gt;
&lt;li&gt;or answer a short survey&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It may or may not have been slightly rigged 🤫&lt;/p&gt;

&lt;p&gt;But the goal wasn’t the prize.&lt;/p&gt;

&lt;p&gt;It was to create a moment.&lt;/p&gt;

&lt;p&gt;A small interaction that lowers the barrier, gets a smile, and opens the door to a real conversation.&lt;/p&gt;

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

&lt;p&gt;It made approaching people easier, sparked a few genuinely interesting discussions, and helped me collect my first real signals on the idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quick technical setup
&lt;/h2&gt;

&lt;p&gt;I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ChatGPT for ideation&lt;/li&gt;
&lt;li&gt;Codex for implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expo&lt;/li&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;React Navigation&lt;/li&gt;
&lt;li&gt;AsyncStorage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is me setting the content with Chat:&lt;br&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%2F8n8mjrfk1e0r9l8zil61.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%2F8n8mjrfk1e0r9l8zil61.png" alt=" " width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the ideating, I find it useful to generate the prompts for Codex from Chat so I can just paste them over sequentially:&lt;br&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%2Fx6vj7wll48fgnsj18n8t.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%2Fx6vj7wll48fgnsj18n8t.png" alt=" " width="800" height="530"&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%2Fz5kibd25p9f6zmx0ouai.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%2Fz5kibd25p9f6zmx0ouai.png" alt=" " width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then the implementation happens with Codex:&lt;br&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%2F3fmvu56v5zjt37ga0bae.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%2F3fmvu56v5zjt37ga0bae.png" alt=" " width="757" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app itself was simple: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;wheel screen&lt;/li&gt;
&lt;li&gt;short survey&lt;/li&gt;
&lt;li&gt;responses view&lt;/li&gt;
&lt;li&gt;profile screen with a QR code for LinkedIn&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Expo Go was what made this possible in such a short time. Instead of building a full native app, I ran the Expo dev server locally and opened the project on my phone through Expo Go. &lt;/p&gt;

&lt;p&gt;In practice, Expo Go provides the native container, while my app code is loaded as a JavaScript bundle from the local development server. That meant I could build and test the app on a real device almost instantly, without dealing with native build setup.&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%2Fb91qxlmo5vn1adgzusx5.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%2Fb91qxlmo5vn1adgzusx5.png" alt=" " width="800" height="1126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For a low-stakes prototype like this, that tradeoff was perfect: &lt;br&gt;
fast iteration, real-device testing, and just enough functionality to get the job done.&lt;/p&gt;

&lt;p&gt;Here is a quick visual recording of the app itself:&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%2Fr3ntkive4aullfmf9s83.gif" 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%2Fr3ntkive4aullfmf9s83.gif" alt=" " width="720" height="1559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Learnings from this experience
&lt;/h2&gt;

&lt;p&gt;For me, this is a great use case for vibe coding: building a very low-stakes prototype that solves a simple problem and can be put together quickly.&lt;/p&gt;

&lt;p&gt;It also reminded me that small tools can make everyday situations more interesting. Sometimes the best projects are not the most ambitious ones, but the ones that make a real interaction easier, lighter, or more fun.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discussion
&lt;/h2&gt;

&lt;p&gt;How do you approach networking in a more natural way?&lt;/p&gt;

&lt;p&gt;Do you have any original tactics/stories to collect customer interviews?&lt;/p&gt;

&lt;p&gt;And how are you using vibe coding in your day-to-day?&lt;/p&gt;




&lt;p&gt;I’ll introduce the project I am ideating for in my next post, document the learnings as I go, and eventually open-source the project so others can learn from it, reuse it, or take it further.&lt;/p&gt;

&lt;p&gt;If you had to guess, what do you think this project is about?&lt;/p&gt;

&lt;p&gt;Curious to hear your thoughts 🙂&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>ai</category>
      <category>reactnative</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Autonomous AI Research Does Not Need a Giant Framework</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Thu, 12 Mar 2026 12:45:10 +0000</pubDate>
      <link>https://forem.com/javz/autonomous-ai-research-does-not-need-a-giant-framework-32el</link>
      <guid>https://forem.com/javz/autonomous-ai-research-does-not-need-a-giant-framework-32el</guid>
      <description>&lt;p&gt;A lot of the conversation around AI agents has drifted toward increasingly complex frameworks, orchestration layers, memory systems, and multi-agent abstractions. At the same time, a quieter and more interesting movement is emerging: small, purpose-built loops that optimise for one thing well.&lt;/p&gt;

&lt;p&gt;That is what drew me to &lt;strong&gt;&lt;a href="https://github.com/karpathy/autoresearch" rel="noopener noreferrer"&gt;autoresearch&lt;/a&gt;&lt;/strong&gt;, an open-source repo created by Andrej Karpathy and published very recently, which has drawn a lot of attention this week in the field of AI.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why is autoresearch important?
&lt;/h3&gt;

&lt;p&gt;At its core, &lt;strong&gt;autoresearch&lt;/strong&gt; is a very simple idea: give an agent a real training loop, let it make small changes, run short experiments, evaluate results, and keep iterating in a self-contained setup. No huge platform or any over-engineered agent stack. Just a tight feedback loop around real model training.&lt;/p&gt;

&lt;p&gt;That simplicity is exactly what makes it so appealing. Just a couple hundred lines of Python...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;autoresearch&lt;/strong&gt; is built around three important files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;prepare.py&lt;/code&gt;: handles one-time data preparation, tokenizer setup, and runtime utilities&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;train.py&lt;/code&gt;: the main training file that the agent is allowed to modify&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;program.md&lt;/code&gt;: the instruction file that defines how the agent should behave during the experiment. You define this.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent reads &lt;code&gt;program.md&lt;/code&gt;, modifies &lt;code&gt;train.py&lt;/code&gt;, runs training, checks metrics, and decides what to do next.&lt;/p&gt;

&lt;p&gt;This strips autonomous research down to its essence. Instead of building a huge agent framework first, you start with a minimal loop that already does useful work.&lt;/p&gt;

&lt;p&gt;It is a good reminder that progress in agentic systems may come less from adding more layers and more from building tighter, more disciplined loops. &lt;/p&gt;

&lt;h3&gt;
  
  
  My idea
&lt;/h3&gt;

&lt;p&gt;I wanted to run a real autonomous research experiment locally, on my own machine, with minimal infrastructure and no cloud GPU dependency.&lt;/p&gt;

&lt;p&gt;My constraint was simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run on my MacBook Pro&lt;/li&gt;
&lt;li&gt;use CPU only&lt;/li&gt;
&lt;li&gt;keep it practical&lt;/li&gt;
&lt;li&gt;generate insight, not just raw performance chasing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That led me to an experiment around reflective iteration.&lt;/p&gt;

&lt;p&gt;My experiment question was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does adding a structured self-reflection step help an autonomous agent make better model improvement decisions over time?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The setup compared two loops:&lt;/p&gt;

&lt;p&gt;A: non-reflective loop&lt;br&gt;
B: reflective loop&lt;/p&gt;

&lt;p&gt;The difference was small but important.&lt;/p&gt;

&lt;p&gt;In mode A, the agent simply proposed the next change from a fixed queue and ran it.&lt;/p&gt;

&lt;p&gt;In mode B, the agent first reflected on the previous result in a structured way before choosing the next change.&lt;/p&gt;

&lt;p&gt;The goal was not only to improve validation performance, but to test whether reflection improved the quality of experimental decision-making.&lt;/p&gt;
&lt;h3&gt;
  
  
  How I set up my experiment
&lt;/h3&gt;

&lt;p&gt;If you want to run this on a MacBook like I did, the easiest starting point is &lt;a href="https://github.com/miolini/autoresearch-macos" rel="noopener noreferrer"&gt;this fork&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The steps I followed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fork the repo to my own GitHub account and clone it locally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the repo with my coding agent or assistant. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this setup, I used Codex 5.3 with medium reasoning depth. It was especially useful for planning, checking dependencies, repository structure, experiment constraints, and execution.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prepare the experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Verify that all dependencies are installed and that all prerequisite training steps are ready&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define the experiment in &lt;code&gt;program.md&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What worked well for me was not replacing the original file, but enhancing it. I created a standalone experiment definition and combined it with the base repository rules, so I could preserve important constraints from the original setup.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Optimise my execution environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After defining the experiment, I asked Codex to help me refine the setup without changing the actual experiment design.&lt;/p&gt;

&lt;p&gt;The idea was to keep the experiment logic in &lt;code&gt;program.md&lt;/code&gt;, and use setup prompts only for execution environment and setup discipline.&lt;/p&gt;

&lt;p&gt;This approach kept the repo simple and prevented setup conversations from contaminating the actual experiment logic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run the experiment loop itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once everything was ready, the experiment loop was straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the agent edits &lt;code&gt;train.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;the run executes&lt;/li&gt;
&lt;li&gt;results get logged&lt;/li&gt;
&lt;li&gt;the next run is chosen&lt;/li&gt;
&lt;li&gt;the loop repeats&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What mattered most was keeping each change small and isolated so the outcomes stayed interpretable.&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%2Ff8jf7y2qw0u28uy6ltux.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%2Ff8jf7y2qw0u28uy6ltux.png" alt=" " width="747" height="367"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Some practical tips
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;For longer experiments, I strongly recommend hardening the execution environment a bit.
My practical setup for a long-running experiment was:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tmux&lt;/code&gt; to protect against terminal closure&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;caffeinate&lt;/code&gt; to prevent the Mac from sleeping&lt;/li&gt;
&lt;li&gt;log files for crash visibility&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;nice&lt;/code&gt; to slightly reduce CPU priority&lt;/li&gt;
&lt;li&gt;laptop plugged into power&lt;/li&gt;
&lt;li&gt;heavy apps closed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a setup I will reuse for local long-running agent experiments going forward.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Explicitly tell your coding assistant that you want the full experiment to continue automatically without manual input. In my case, it set up a runner script so I could let the experiment continue while I worked on other things.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also tell it to provide regular status updates. That makes the process much easier to monitor over time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fq9jsq3fgbi6xewr4rpac.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%2Fq9jsq3fgbi6xewr4rpac.png" alt=" " width="794" height="670"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Experiment results
&lt;/h3&gt;

&lt;p&gt;Here are the results from the experiment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Baseline:
val_bpb = 1.622929
lower is better

Comparison outcomes:
Best A (non_reflective): 1.623505
Best B (reflective): 1.621094

Runs to beat baseline:
A: never beat baseline
B: beat baseline on B01

Improvement ratio:
A: 0/5 = 0%
B: 3/5 = 60%

Average runtime:
A: 501.38s
B: 478.14s

Iteration quality trend:
A: flat at 0.50 every run
B: consistently high at 0.93-1.00, average 0.944
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fea0a107grezhyfro7ogk.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%2Fea0a107grezhyfro7ogk.png" alt=" " width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was a small experiment but it showed something meaningful.&lt;/p&gt;

&lt;p&gt;Under this CPU-constrained local setup, structured reflection improved the quality of the agent’s decisions. The reflective loop not only produced better validation outcomes, it also got there faster and with a much cleaner iteration pattern.&lt;/p&gt;

&lt;p&gt;So the takeaway is not just that reflection helped performance. &lt;br&gt;
It helped reasoning quality and efficiency. And it produced a more coherent experimental trajectory.&lt;/p&gt;

&lt;p&gt;The best reflective run converged on a small set of parameter changes that outperformed baseline:&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%2Ftcwrto6nk7d192q218zc.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%2Ftcwrto6nk7d192q218zc.png" alt=" " width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reflection is a habit I have been practicing as an engineer which has helped me with my career and personal growth. Agents seem to agree with this...&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I think this matters
&lt;/h3&gt;

&lt;p&gt;The most interesting thing about this experiment is not the absolute performance gain. It is the fact that a lightweight, local, interpretable agent loop was able to produce measurable differences in research behavior so quickly.&lt;/p&gt;

&lt;p&gt;That suggests a useful direction for agentic AI work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;less framework overhead&lt;/li&gt;
&lt;li&gt;tighter loops&lt;/li&gt;
&lt;li&gt;better constraints&lt;/li&gt;
&lt;li&gt;clearer reasoning&lt;/li&gt;
&lt;li&gt;more emphasis on experiment quality, not just experiment quantity&lt;/li&gt;
&lt;li&gt;more focus on setting up an optimised evaluation function&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If that direction holds up in larger studies, it could become a more practical path for real-world autonomous research systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I want to try next
&lt;/h3&gt;

&lt;p&gt;The next obvious step is scale.&lt;/p&gt;

&lt;p&gt;I want to rerun this experiment with a much larger run budget, probably around 80+ runs, to see whether the signal strengthens or weakens over longer search trajectories.&lt;/p&gt;

&lt;p&gt;That would make the conclusion much more robust.&lt;/p&gt;

&lt;p&gt;This was a small pilot, not a definitive benchmark. The comparison used 5 runs per mode on a single local machine, so I treat the outcome as directional evidence rather than proof. Still, the signal was clear enough to justify running a larger follow-up.&lt;/p&gt;




&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;p&gt;If you want to explore the setup of my experiment or run your own version, here are the two key repos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MacBook-friendly fork: &lt;a href="https://github.com/miolini/autoresearch-macos" rel="noopener noreferrer"&gt;https://github.com/miolini/autoresearch-macos&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My own experiment repo: &lt;a href="https://github.com/JulienAvezou/autoresearch-macos" rel="noopener noreferrer"&gt;https://github.com/JulienAvezou/autoresearch-macos&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Discussion
&lt;/h3&gt;

&lt;p&gt;Have you tinkered with &lt;strong&gt;autoresearch&lt;/strong&gt; yet? What do you think of the approach? What would be some useful experiments to run with this setup?&lt;/p&gt;

&lt;p&gt;Also, what does your agentic setup look like today? I am curious to know.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Turning Community Event Downtime Into Interaction With a Live Heatmap App</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Sun, 01 Mar 2026 23:12:39 +0000</pubDate>
      <link>https://forem.com/javz/turning-community-event-downtime-into-interaction-with-a-live-heatmap-app-4mg8</link>
      <guid>https://forem.com/javz/turning-community-event-downtime-into-interaction-with-a-live-heatmap-app-4mg8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’m travelling this weekend, so this post is shorter than I would have liked.&lt;/p&gt;

&lt;p&gt;To get this challenge on time, I leaned heavily on Codex 5.3 for the heavy lifting. Realistically, I would not have had enough time to complete it otherwise.&lt;/p&gt;

&lt;p&gt;I am overall happy how this app landed (no pun intended).&lt;/p&gt;

&lt;p&gt;Here is a photo of me building on the plane if you don't believe me!&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%2F3fm8syeego7u5rvm0eju.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%2F3fm8syeego7u5rvm0eju.jpeg" alt=" " width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;This idea is inspired by the local tech communities I attend in Toronto.&lt;/p&gt;

&lt;p&gt;At many events, there’s a window of time where people are arriving, getting seated, and waiting for things to begin.&lt;/p&gt;

&lt;p&gt;Nothing is happening yet, but everyone is physically there. &lt;/p&gt;

&lt;p&gt;I feel that is a missed opportunity.&lt;/p&gt;

&lt;p&gt;I wanted to build something simple that gives event guests a reason to participate immediately. With this app, organizers can put a live prompt on screen and let attendees answer a short set of questions from their phones. The responses roll up into a live “heatmap” view for the room.&lt;/p&gt;

&lt;p&gt;It gives people something lightweight and interactive to do while they wait, and it naturally creates conversation. If the room can see how other people are feeling about a topic, that often becomes an easy social entry point before the event even starts.&lt;/p&gt;

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

&lt;p&gt;The app is intentionally simple.&lt;/p&gt;

&lt;p&gt;First, the organizer creates a session and adds a short title plus a few questions.&lt;/p&gt;

&lt;p&gt;Those questions can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;yes/no&lt;/li&gt;
&lt;li&gt;a rating from 1 to 5&lt;/li&gt;
&lt;li&gt;a single-choice question with a few options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the session is created, the organizer gets a host screen with a QR code and a join link.&lt;/p&gt;

&lt;p&gt;Attendees scan the QR code, answer the questions on their phones, and submit their responses.&lt;/p&gt;

&lt;p&gt;As responses come in, the host screen shows the number of participants. When the organizer is ready, they hit Reveal, and the results appear as simple charts for everyone to see.&lt;/p&gt;

&lt;p&gt;So the flow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a session.&lt;/li&gt;
&lt;li&gt;Share the join link or QR code.&lt;/li&gt;
&lt;li&gt;Collect responses.&lt;/li&gt;
&lt;li&gt;Reveal the aggregate results live.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No accounts, no logins, no personal data collection. Just quick participation.&lt;/p&gt;

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

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

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

&lt;p&gt;The code can be found &lt;a href="https://github.com/JulienAvezou/community-event-heatmap" rel="noopener noreferrer"&gt;here&lt;/a&gt; &lt;br&gt;
Instructions are provided on how to run the app locally to try it out.&lt;/p&gt;

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

&lt;p&gt;I built this with &lt;strong&gt;Remix&lt;/strong&gt;, &lt;strong&gt;Cloudflare Pages&lt;/strong&gt;, a separate &lt;strong&gt;Cloudflare Worker&lt;/strong&gt;, and a &lt;strong&gt;Durable Object&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On the UI side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remix handles the pages and form actions&lt;/li&gt;
&lt;li&gt;Recharts renders the result charts&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;qrcode.react&lt;/code&gt; renders the QR code on the presenter screen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the backend side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Cloudflare Worker exposes the session API&lt;/li&gt;
&lt;li&gt;A Durable Object stores each live session’s state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This stack was chosen because of the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The product itself is event-oriented: short-lived sessions, lightweight state, and fast interaction. Durable Objects are a strong fit for that because each session can map cleanly to a single stateful object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloudflare keeps the deployment model simple. Pages is a good fit for the frontend, Workers are a good fit for the API, and the integration between them is straightforward.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The app doesn’t need a traditional database or a complicated backend architecture. I only needed:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;session creation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;response counting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;reveal state&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;aggregate results&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That made a Worker + Durable Object model much more appealing than spinning up a heavier stack.&lt;/p&gt;

&lt;p&gt;The app has two parts.&lt;/p&gt;

&lt;p&gt;The first part is the Remix frontend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a page to create a session&lt;/li&gt;
&lt;li&gt;a page for attendees to join and answer&lt;/li&gt;
&lt;li&gt;a presenter page to monitor and reveal results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second part is the backend Worker, which owns session state through a Durable Object.&lt;/p&gt;

&lt;p&gt;Each session gets its own Durable Object instance.&lt;/p&gt;

&lt;p&gt;That Durable Object stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the session title&lt;/li&gt;
&lt;li&gt;the questions&lt;/li&gt;
&lt;li&gt;the participant count&lt;/li&gt;
&lt;li&gt;whether results have been revealed&lt;/li&gt;
&lt;li&gt;aggregate answer counts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A key design choice is that the app does not store raw individual submissions long-term. When someone submits answers, the backend validates them, increments the correct aggregate counters, increments the participant count, and discards the raw response payload.&lt;/p&gt;

&lt;p&gt;That keeps the system intentionally lightweight and privacy-friendly.&lt;/p&gt;

&lt;p&gt;The presenter screen uses polling every two seconds to refresh:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;participant count&lt;/li&gt;
&lt;li&gt;reveal status&lt;/li&gt;
&lt;li&gt;aggregate results (once revealed)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So there are no websockets here. The screen simply asks the backend for the latest snapshot on a fixed interval.&lt;/p&gt;

&lt;p&gt;The backend routes are simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create a session&lt;/li&gt;
&lt;li&gt;fetch session metadata&lt;/li&gt;
&lt;li&gt;submit answers&lt;/li&gt;
&lt;li&gt;reveal results&lt;/li&gt;
&lt;li&gt;fetch aggregate results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s enough to support the full experience without adding unnecessary complexity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;If I had more time, I’d probably add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;better visualizations&lt;/li&gt;
&lt;li&gt;themed event templates&lt;/li&gt;
&lt;li&gt;question packs for different types of events&lt;/li&gt;
&lt;li&gt;smoother host controls&lt;/li&gt;
&lt;li&gt;a save function of the final heatmap snapshot for the presenter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But for a weekend build, especially one assembled while travelling, I’m happy with where it landed (this pun was too good not to be used twice)!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>The Increasing Need for Human Connection in the Age of AI</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Tue, 24 Feb 2026 12:02:47 +0000</pubDate>
      <link>https://forem.com/javz/the-increasing-need-for-human-connection-in-the-age-of-ai-43cd</link>
      <guid>https://forem.com/javz/the-increasing-need-for-human-connection-in-the-age-of-ai-43cd</guid>
      <description>&lt;p&gt;Is it just me, or are tech events and communities on the rise?&lt;/p&gt;

&lt;p&gt;I’ve been thinking about this lately, and I’d genuinely love to hear your experience too.&lt;/p&gt;

&lt;p&gt;I recently moved to a new city and started attending local tech events. My motivations were simple: I wanted to build a network, connect and exchange ideas with people who share similar interests (and maybe the occasional free pizza…).&lt;/p&gt;

&lt;p&gt;As I’ve been going through this process, I’ve noticed something interesting. Event attendance seems to be increasing, especially tech-related ones.&lt;/p&gt;

&lt;p&gt;It made me wonder: could this be connected to the rapid rise of AI adoption?&lt;/p&gt;

&lt;p&gt;Here are a few thoughts I’ve been reflecting on.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lower barriers, broader audiences
&lt;/h2&gt;

&lt;p&gt;AI has dramatically lowered the barrier to building software.&lt;/p&gt;

&lt;p&gt;People from different backgrounds and skill sets can now prototype and ship ideas faster than ever before. That naturally attracts a more diverse group of builders such as designers, operators, marketers, students, domain experts etc. All curious to experiment.&lt;/p&gt;

&lt;p&gt;More builders lead to more curiosity, which in turn leads to more demand for spaces to connect.&lt;/p&gt;

&lt;p&gt;Tech events become natural gathering points.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rise of “build and demo” culture
&lt;/h2&gt;

&lt;p&gt;AI enables extremely fast execution.&lt;/p&gt;

&lt;p&gt;I attended an open build event last weekend where we had just under a 2 hours to create and demo working products! A few years ago, that kind of turnaround would have been unrealistic for most people.&lt;/p&gt;

&lt;p&gt;“Vibe coding” and AI-assisted development make it possible.&lt;/p&gt;

&lt;p&gt;But here’s the interesting part: speed creates output, yet output still needs validation.&lt;/p&gt;

&lt;p&gt;When you build fast and mostly solo, you still need others to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;react&lt;/li&gt;
&lt;li&gt;challenge&lt;/li&gt;
&lt;li&gt;validate&lt;/li&gt;
&lt;li&gt;question&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those in-person interactions build trust in a way that’s hard to replicate alone behind a screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shared meaning in a hyper-fast world
&lt;/h2&gt;

&lt;p&gt;AI allows individuals to ship at incredible speed.&lt;/p&gt;

&lt;p&gt;But meaning is rarely created in isolation.&lt;/p&gt;

&lt;p&gt;If everything becomes hyper-efficient and personalized through AI tooling, we may paradoxically crave shared experiences even more. Community events might be a reaction to that acceleration as a way to ground our work in something social and collective.&lt;/p&gt;

&lt;p&gt;We don’t just want to ship.&lt;br&gt;
We want to feel that what we’re building matters to someone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fear, identity, and uncertainty
&lt;/h2&gt;

&lt;p&gt;There’s also a more emotional layer.&lt;/p&gt;

&lt;p&gt;AI is reshaping jobs, workflows, and even professional identity. That creates uncertainty, fear and questions about long-term relevance.&lt;/p&gt;

&lt;p&gt;In times of rapid change, humans naturally move toward connection.&lt;/p&gt;

&lt;p&gt;We seek reassurance, belonging and perspective.&lt;/p&gt;

&lt;p&gt;Communities provide psychological stability in unstable times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Empathy as a competitive advantage
&lt;/h2&gt;

&lt;p&gt;Building sophisticated AI systems isn’t just about logic.&lt;/p&gt;

&lt;p&gt;Empathy, human judgment, and vulnerability matter deeply.&lt;/p&gt;

&lt;p&gt;If we want AI systems that align with human values, we need rich human experiences feeding into them. Pure rationality isn’t enough. Understanding nuance, context, and emotion requires exposure to real people.&lt;/p&gt;

&lt;p&gt;Connecting with others doesn’t just make us better professionals, it might also help us shape more human-centered AI in the long term.&lt;/p&gt;

&lt;p&gt;AI may democratize cognitive power.&lt;br&gt;
Human connection contextualizes it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The remote work effect
&lt;/h2&gt;

&lt;p&gt;And of course, we can’t ignore the post-pandemic shift.&lt;/p&gt;

&lt;p&gt;With the rise of remote and hybrid work, many of us spend more time physically isolated. Even if we’re constantly “connected” online, it’s not the same.&lt;/p&gt;

&lt;p&gt;There’s something uniquely energizing about eye contact, spontaneous conversations, shared ideas and laughter.&lt;/p&gt;




&lt;p&gt;I want to say that online communities, such as dev.to (which I genuinely cherish) create amazing connection. However physical presence adds another layer that’s harder to replicate digitally.&lt;/p&gt;

&lt;p&gt;Personally, I feel lucky to experience both.&lt;/p&gt;

&lt;p&gt;I’m curious:&lt;/p&gt;

&lt;p&gt;Do you notice similar trends where you live?&lt;br&gt;
Do you see increasing value in local tech communities?&lt;/p&gt;

&lt;p&gt;And if you happen to be in Toronto, where I’m currently based, I’d love to hear your recommendations or even meet up at an event sometime!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>community</category>
      <category>career</category>
      <category>growth</category>
    </item>
    <item>
      <title>I Tried Coding With AI Glasses. Here’s What Actually Happened.</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Tue, 17 Feb 2026 13:16:09 +0000</pubDate>
      <link>https://forem.com/javz/i-tried-coding-with-ai-glasses-heres-what-actually-happened-27fh</link>
      <guid>https://forem.com/javz/i-tried-coding-with-ai-glasses-heres-what-actually-happened-27fh</guid>
      <description>&lt;p&gt;I was recently gifted a pair of AI glasses. This is not the kind of purchase I would make for myself. But since I now own a pair, I saw this as an interesting opportunity to assess whether these glasses could improve my daily life as a developer. &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%2Fckghbiieq58lkdrirfxv.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%2Fckghbiieq58lkdrirfxv.jpeg" alt=" " width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Initial experiments
&lt;/h2&gt;

&lt;p&gt;The first thing I tried was using the integrated AI to ask me to explain code on my screen. The results were… disappointing. I tried different situations: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explaining a simple HTML file&lt;/li&gt;
&lt;li&gt;Debugging a specific line of code&lt;/li&gt;
&lt;li&gt;Providing context-aware explanations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It couldn’t reliably identify what I was looking at. It lacked precise understanding of the visual context.&lt;/p&gt;

&lt;p&gt;I started thinking about a better pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Capture frame from glasses camera&lt;/li&gt;
&lt;li&gt;Apply OCR to extract visible text&lt;/li&gt;
&lt;li&gt;Feed image + extracted context into a capable vision model&lt;/li&gt;
&lt;li&gt;Send result to an LLM&lt;/li&gt;
&lt;li&gt;Return explanation as audio through the glasses&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In theory, this could turn the glasses into a real-time coding assistant. However this felt like too much work, complex and expensive. And less reliable than simply prompting an assistant directly inside the editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  A different idea: Life commits
&lt;/h2&gt;

&lt;p&gt;That’s when I realized something. &lt;/p&gt;

&lt;p&gt;Maybe AI glasses aren’t useful because they help you code better. Maybe they’re useful because they help you understand yourself better.&lt;/p&gt;

&lt;p&gt;So I tried something different.&lt;/p&gt;

&lt;p&gt;What if I used my glasses to capture my life? I call them life commits. Just like Git commits capture the evolution of code, life commits capture the evolution of your day.&lt;/p&gt;

&lt;p&gt;It is very seamless to take photos with your glasses on the fly, unlike a phone which you need to take out of your pocket, creating friction. &lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;p&gt;Every hour, the app prompts you to capture a moment.&lt;/p&gt;

&lt;p&gt;The captured image is automatically classified using Apple's Vision framework:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VNClassifyImageRequest()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows categorization of environments like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workspace&lt;/li&gt;
&lt;li&gt;outdoors&lt;/li&gt;
&lt;li&gt;social&lt;/li&gt;
&lt;li&gt;exercise&lt;/li&gt;
&lt;li&gt;indoors&lt;/li&gt;
&lt;li&gt;screen time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, I associate an emotional score with each moment.&lt;/p&gt;

&lt;p&gt;This can be done in two ways:&lt;/p&gt;

&lt;p&gt;Hand gestures, detected using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VNDetectHumanHandPoseRequest()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or manually, through the app.&lt;/p&gt;

&lt;p&gt;Over time, this creates a timeline of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;where you spend your time&lt;/li&gt;
&lt;li&gt;what environments you inhabit&lt;/li&gt;
&lt;li&gt;how those environments correlate with your emotional state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The insights and patterns could be interesting to look at over time to improve your daily life and improve your emotional state.&lt;/p&gt;

&lt;p&gt;Here is a demo of the flow I built:&lt;br&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%2Fpdlwldk3nf2ypksaoux2.gif" 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%2Fpdlwldk3nf2ypksaoux2.gif" alt=" " width="600" height="1299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the working prototype to test this idea: &lt;a href="https://github.com/JulienAvezou/ai-glasses" rel="noopener noreferrer"&gt;https://github.com/JulienAvezou/ai-glasses&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Would I recommend buying AI glasses?
&lt;/h2&gt;

&lt;p&gt;I surprisingly enjoy listening to music through my glasses. While it doesn’t replace a comfy headset, it’s nice to hear music clearly without having anything on or above your ears. &lt;/p&gt;

&lt;p&gt;Prompting the AI to provide simple explanations while coding is nice too, as it’s very convenient to just have a conversation on the go whether at the desk or moving around.&lt;/p&gt;

&lt;p&gt;The ease of taking photos or videos on the fly is nice too.&lt;/p&gt;

&lt;p&gt;But right now, AI glasses still feel like early hardware.&lt;/p&gt;

&lt;p&gt;Not useless. But not essential.&lt;/p&gt;

&lt;p&gt;They don’t fundamentally change how I code.&lt;/p&gt;

&lt;p&gt;But they do change how I capture and reflect on my life.&lt;/p&gt;

&lt;p&gt;That might be their real potential.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;So what do you think? Gadget or useful?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Curious to know if someone out there is actively using AI glasses.&lt;/p&gt;

&lt;p&gt;How do you incorporate them into your daily routine? (exercising, coding, …)&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Using AI to Build a Tool That Stops Me From Blindly Using AI</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Fri, 13 Feb 2026 21:04:23 +0000</pubDate>
      <link>https://forem.com/javz/using-ai-to-build-a-tool-that-stops-me-from-blindly-using-ai-2dh7</link>
      <guid>https://forem.com/javz/using-ai-to-build-a-tool-that-stops-me-from-blindly-using-ai-2dh7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;I vibe coded &lt;strong&gt;ReflectCLI&lt;/strong&gt;! A tool to promote thoughtful coding through structured reflection. Before each commit, answer reflective questions to build your personal developer knowledge dataset.&lt;br&gt;
I fully leaned into Github Copilot CLI to build this tool so I could assess its capabilities fully. It's also a tool I wanted to build for a while but didn't have the time due to other ongoing projects. This was a perfect opportunity to make it a reality!&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Language&lt;/strong&gt;: TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime&lt;/strong&gt;: Node.js 18+&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI Framework&lt;/strong&gt;: inquirer.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt;: Jest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linting&lt;/strong&gt;: ESLint 8 + Prettier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD&lt;/strong&gt;: GitHub Actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt;: TypeScript compiler&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why I built this?
&lt;/h3&gt;

&lt;p&gt;AI-assisted development is powerful, but it can encourage cognitive offloading, letting tools do the thinking instead of developing deeper understanding. &lt;code&gt;git-reflect&lt;/code&gt; interrupts this pattern by making reflection part of your workflow.&lt;/p&gt;

&lt;p&gt;Each answer becomes part of your personal knowledge base, documenting not just what you built, but &lt;strong&gt;why&lt;/strong&gt; you built it that way and what you learned. Over time, this dataset reveals patterns in your thinking and helps you grow as a developer.&lt;/p&gt;

&lt;p&gt;One could argue that good engineers already reflect when writing PR descriptions. But PR descriptions happen after the decisions are made.&lt;br&gt;
&lt;code&gt;git-reflect&lt;/code&gt; happens while those decisions are still fluid. It’s the difference between explaining your thinking and improving it.&lt;/p&gt;

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

&lt;p&gt;The process is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the hook:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git-reflect install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Make changes and commit:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
git commit -m "Your commit message"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Answer reflection questions — You'll be prompted with 7 thoughtful questions before the commit completes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;View your reflections:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat .git/git-reflect/log.json | jq .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the full flow in action:&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%2Fzy2ak31101dvh9vizpli.gif" 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%2Fzy2ak31101dvh9vizpli.gif" alt=" " width="2302" height="1248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here is the stored reflection log:&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%2Fpiinjbcfusx3mdnrhnjm.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%2Fpiinjbcfusx3mdnrhnjm.png" alt=" " width="645" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ease of setup.&lt;/strong&gt; I was ready to go in just a few minutes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The plan mode was particularly impressive.&lt;/strong&gt; It helped establish a clear, structured plan with distinct phases, which made the implementation phase much easier. The clarifying questions Copilot asked to define the scope were thoughtful and helped sharpen the direction of the project.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fxwd7atvwcz8v14l0w6wc.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%2Fxwd7atvwcz8v14l0w6wc.png" alt=" " width="646" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;During implementation, the level of control and transparency stood out.&lt;/strong&gt; Permissions were granular, and the execution steps were very transparent, allowing me to follow along closely and ensure the right changes were being made.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;I appreciated the PROJECT_SUMMARY generated at the end.&lt;/strong&gt; It included useful metrics such as lines of code, files created, number of commits, and total implementation time. This made the process feel tangible and measurable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fzeug0cbo36qs8j9oxnsd.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%2Fzeug0cbo36qs8j9oxnsd.png" alt=" " width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Troubleshooting was also a very positive experience.&lt;/strong&gt; When I realized parts of the hook were not working correctly, I resumed the Copilot session and described the issue. Copilot resolved multiple problems on the first attempt and provided clear explanations of what went wrong, which made it a valuable learning experience.&lt;/li&gt;
&lt;/ul&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%2Fezcj8036v7fbuse7feyo.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%2Fezcj8036v7fbuse7feyo.png" alt=" " width="800" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Having everything happen directly from the CLI felt seamless&lt;/strong&gt;. It allowed me to stay in flow and complete the project from start to finish without constantly switching contexts or windows.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Overall, a fun experience that made me realize (again) how efficient coding assistants are becoming. I was able to plan and execute on this idea in just a few hours!&lt;/p&gt;

&lt;p&gt;If you are interested in the code and want to try it out on your own machine, check out my repository on Github.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/JulienAvezou/ReflectionCLI/blob/master/README.md" rel="noopener noreferrer"&gt;https://github.com/JulienAvezou/ReflectionCLI/blob/master/README.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you have any questions or can think of areas for improvement/feature ideas, do share!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Why Learning Basic Robotics Made Me a Better Software Engineer in the Age of AI</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Tue, 10 Feb 2026 13:41:01 +0000</pubDate>
      <link>https://forem.com/javz/why-learning-basic-robotics-made-me-a-better-software-engineer-in-the-age-of-ai-fdh</link>
      <guid>https://forem.com/javz/why-learning-basic-robotics-made-me-a-better-software-engineer-in-the-age-of-ai-fdh</guid>
      <description>&lt;p&gt;I recently bought a starter kit for Arduino to learn robotics. I was curious to learn some basic concepts and get inspired by what's possible to build, not just in software but also in the physical world. I want to emphasize that my current goal is not to pursue robotics at a deep level, it's simply to expose myself to the basic concepts so I can develop my intuitions for the field.&lt;/p&gt;

&lt;p&gt;As I wrap up the course, I wanted to share my thoughts on how learning robotics has been valuable for my developer journey, especially in this age of AI.  &lt;/p&gt;

&lt;p&gt;Before I share my thoughts, some context for those interested in what the kit is about. The course included in the kit consists of a series of Arduino projects that gradually build upon each other with clear explanations, schematics, and code examples. The projects ranged from powering a single LED to setting up more complex systems involving motors and IR sensors.&lt;/p&gt;

&lt;p&gt;Here is a photo of me tinkering away. In my head, I felt like Tony Stark. The reality was far more humble... But hey, you have to start somewhere!&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%2Fqj96f9mckf7xnhyozgrc.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%2Fqj96f9mckf7xnhyozgrc.png" alt=" " width="800" height="642"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My thoughts after completing this course:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It strengthens core foundations.&lt;/strong&gt; &lt;br&gt;
Pursuing robotics requires you to engage with mathematics, physics, and electronics in a concrete manner. These foundations build thinking patterns that are useful for software engineering.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It helps build intuitions for working with non-deterministic systems just like AI systems.&lt;/strong&gt; &lt;br&gt;
Robotic systems don't always behave predictably. Sensors introduce noise. Motors behave inconsistently. Timing matters. Multiple variables interact simultaneously. Continuous feedback loops (observe, decide, act) are central for robotic systems. We are increasingly seeing these feedback loops in AI systems, especially agentic workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It develops systems-level thinking.&lt;/strong&gt; &lt;br&gt;
An increasingly valued skill for software engineers in the age of AI is the ability to reason with systems such as control systems, embedded systems, feedback systems. Robotics helps develop intuitions around building systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It feels very tangible.&lt;/strong&gt;&lt;br&gt;
The software you write translates into physical movement, sound, light. This is very satisfying to experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It's simply fun.&lt;/strong&gt; Maybe I should have just started with this point. If you like building things you will find this entertaining. Sometimes that's all you need to pursue something.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Robotics reminded me that great engineers don’t just understand code. They understand systems. And in the age of AI, systems thinking is becoming one of the most valuable skills we can develop.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discussions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Have you explored robotics as a software engineer?&lt;br&gt;
Did it change how you think about systems, software, or AI?&lt;/p&gt;

&lt;p&gt;Curious to hear from both robotics engineers and software engineers who have explored this path.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>ai</category>
      <category>robotics</category>
      <category>programming</category>
    </item>
    <item>
      <title>Build Your Own ChatGPT App (Run It Locally)</title>
      <dc:creator>Julien Avezou</dc:creator>
      <pubDate>Wed, 04 Feb 2026 14:07:48 +0000</pubDate>
      <link>https://forem.com/javz/build-your-own-chatgpt-app-run-it-locally-2ehp</link>
      <guid>https://forem.com/javz/build-your-own-chatgpt-app-run-it-locally-2ehp</guid>
      <description>&lt;p&gt;ChatGPT recently opened submissions for their Apps feature to developers, which is a way to display interactive widgets from third-party apps directly into conversations. This opens up interesting opportunities to enhance user experience directly within ChatGPT by offering more than just text interactions. &lt;/p&gt;

&lt;p&gt;In this article, I will share my experience exploring this feature so you can easily test and create your own ChatGPT App locally to get started. &lt;/p&gt;

&lt;p&gt;I will start by outlining the basics of what a ChatGPT App is and how it works. I will then offer a step-by-step tutorial on how to quickly get started with your own ChatGPT App locally for quick prototyping and experimentation.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is a ChatGPT App?
&lt;/h2&gt;

&lt;p&gt;A ChatGPT App is an interactive widget that appears directly within the chat from the conversation context or manual triggering.&lt;/p&gt;

&lt;p&gt;It can be broken down into 3 main components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP Server&lt;/strong&gt; - The backend that defines &lt;strong&gt;tools&lt;/strong&gt; which you can think of as functions the model can call (in this case ChatGPTs), and &lt;strong&gt;resources&lt;/strong&gt; (UI templates that ChatGPT renders).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Widget&lt;/strong&gt; - HTML that runs in a sandboxed iframe with its own state, event handling, and direct communication with your backend through the &lt;code&gt;window.openai&lt;/code&gt; object that ChatGPT injects. This object offers different interaction options such as direct tool calls (&lt;code&gt;window.openai.callTool()&lt;/code&gt;) or a follow-up message (&lt;code&gt;window.openai.sendFollowUpMessage()&lt;/code&gt;) which sends a message back into the chat to keep the conversational loop going.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt; - The host which orchestrates the tool calling, rendering of the widget and the conversation state.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An example of a tool definition is as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tool: find_houses

# Description used by ChatGPT to decide when to trigger the tool
Description: "Finds houses by location and number of rooms"

# Inputs schema outlines the parameters
Inputs: location (required), number_rooms (optional)

# Outputs defines which resource to render with the data as UI
Output: → ui://widget/list.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is useful to visualize the full flow as a diagram:&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%2Fm6d6len6fugq7lu2ehkc.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%2Fm6d6len6fugq7lu2ehkc.png" alt=" " width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Let's now build our own ChatGPT App
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/JulienAvezou/reflect-buddy-chatgpt-app" rel="noopener noreferrer"&gt;Here&lt;/a&gt; is a simple example of a ChatGPT App I built for local testing. It's open source so you can use the repo as a template as we move along this tutorial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's create the App&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repo structure will look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chatgpt-app/
├─ public/
│  └─ widget.html
├─ server.js
├─ package.json
└─ README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create your files and adapt your own logic for the widget and server. For the server, register the tools and resources you want. For the widget add the UI elements, state and event handling you want. Please refer to the files in my open source repo for inspiration if needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's run the App&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ChatGPT needs an HTTPS URL to reach our local server. For this tutorial we will use ngrok to provide us with an HTTPS URL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 1) create repo + install
npm install

# 2) run local MCP
npm run dev

# 3) in another terminal
ngrok http 8787
# copy https://....ngrok.app and add /mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Let's connect this App to ChatGPT&lt;/strong&gt;&lt;br&gt;
You first need to enable developer mode for ChatGPT. This allows you to add unverified connectors. Memory is disabled in this mode.&lt;br&gt;
&lt;strong&gt;Settings &amp;gt; Apps &amp;gt; Advanced settings &amp;gt; Developer mode (toggle)&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;You can then create your App (ie. establish the connection between your MCP server and the ChatGPT host)&lt;br&gt;
&lt;strong&gt;Settings &amp;gt; Apps &amp;gt; Create App&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the form, the connector needs to point to the HTTPS URL from ngrok with &lt;code&gt;/mcp&lt;/code&gt;, for eg. &lt;code&gt;https://abcd-1234.ngrok.app/mcp&lt;/code&gt;&lt;br&gt;
For this demo we will choose 'no authentication'.&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%2F0niac7grm5geajh9xwnz.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%2F0niac7grm5geajh9xwnz.png" alt=" " width="500" height="739"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's trigger the App&lt;/strong&gt;&lt;br&gt;
ChatGPT can surface an App based on context or explicit tagging.&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%2Fh38kftevhtc3o9v2ptca.gif" 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%2Fh38kftevhtc3o9v2ptca.gif" alt=" " width="2302" height="1320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And there you go! You should now have your own ChatGPT App running locally. 👏👏👏&lt;/p&gt;




&lt;p&gt;Before we end, here are a couple of learnings based on personal experience developing my App:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;due to caching, I often found it faster to delete the connector entirely and establish the connection again instead of trying ot figure out which parts of the UI or metadata were cached&lt;/li&gt;
&lt;li&gt;I caused unnecessary re-renders and behavior that was hard to debug when I leaned heavily on tool calls for state updates. Moving more state locally to the widget made the setup more reliable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tutorial is intentionally limited to local development and fast prototyping. It therefore doesn't cover important aspects such as security, authentication, in-depth state management and privacy which are necessary before moving to production. So I strongly advise you to read the official documentation and implement best practices to mitigate any risks before going live. A few considerations on top of mind include idempotent calls, rate limiting and robust error handling.&lt;/p&gt;




&lt;p&gt;With over 800 million weekly active users on ChatGPT, ChatGPT Apps could be a huge opportunity for developers to tap into. &lt;/p&gt;

&lt;p&gt;What do you think? Is this just another feature or do you see potential in developing your own ChatGPT App?&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
