Automating my Codemotion Badge with Antigravity

Full Stack Developer and JavaScript and TypeScript enthusiastic.
Today, I wanna show you how to set up your devices with Antigravity using only the agentic mode, without touching any code.
At the last CodeMotion Rome, I got my special badge. A CM Node, a special hardware board, that you can customise for your conferences.
I'm not a super nerd for this kind of stuff, so I decided to use Antigravity and all its capabilities to build and flash the best board ever for my future conferences.
Small intro about the board
This board has been delivered with a GitHub repository to understand how to flash it and how it works. In Rome, I saw different attendees with awesome badges. For instance, Soumaya had built a badge with a small plastic hand that used a sensor when someone was near her; it started waving to say hi.
Since that day, I have been thinking about what I can build to have a cool badge. Nothing has come to my mind, so today, with this blog, we will build my badge together, and thanks to Antigravity, we will create the best version possible.
Antigravity
If you don't know Antigravity. Antigravity is a set of tools built by Google. We have:
Antigravity 2.0: is a dedicated platform to work with agents. Orchestrate multiple autonomous agents working in parallel across independent projects.
Antigravity CLI: terminal-first surface to interact with Antigravity agents. Stay in your flow without context switching
Antigravity IDE: editor view offers tab autocompletion, natural language code commands, and a configurable, and context-aware configurable agent
Antigravity SDK: build AI agents that autonomously read files, run commands, edit code, and more. The Agent SDK gives you the same tools, agent loop, and context management that power Google Antigravity, programmable in Python.
Today, in this blog post, we will use Antigravity 2.0 to set up the board. You can use this tool to orchestrate many projects from a unique UI. This tool is fully agentic; using natural language, you can spawn agents, plan, and work on your projects. If you want to check the codebase in detail, you must use the Antigravity IDE. I’m not a fan of this decision, I’d prefer one tool for both, but this is what we have, and we must use it as it is.
Let’s start cooking
Okay, after this introduction, let’s see what we can do with Antigravity and the CodeMotion Board.
So, I’m dumb about this board right now, and I want to use Antigravity to figure out what I can do with it and get an idea of what my badge might look like.
I open the Antigravity app, and from the UI, I start a new project, and in the prompt, I type
I want to set up my Codemotion Badge.
It's a CMNode v0 https://www.cmnode.it/en/, and it can be programmed.
I want to create two different screens: the first a classic one with name, surname, heading, and company, and a QR code linking to my website.
The second one must be fantastic, and I want different options to choose from you.I have this repository as an example to set up the badge https://github.com/Codemotion-Official/CMNode; you can use it as an example to create my badge.
Lastly, I don't want to flash the ROM every time, so I'd like a small web page I can access via Wi-Fi to update the information.Can you plan the work to do it?
Include also two or three possible ideas for the second screen. It must be cool and fancy!The badge is already connected to the laptop in case you want to deploy the result.
Now, I press enter and let’s see the result and what it will cook.
The result
CMNode v0 WiFi Configuration & Dual Screen Setup
The goal of this task is to upgrade your CMNode v0 badge by replacing the serial-based configuration with a Wi-Fi-based web interface. We will also save the configured data to flash memory so it persists across reboots, and implement two different display layouts: a "Classic" screen and a "Fantastic" screen.
User Review Required
IMPORTANT
Please review the proposed ideas for the "Fantastic" screen below. Let me know which one you prefer, or if you'd like to combine elements from different ideas!
Ideas for the "Fantastic" Second Screen:
The "Hacker Terminal": A retro command-line interface aesthetic. The screen features a black background with white text, simulating a terminal session (e.g.,
> user@cmnode:~$ whoami, followed by your details). We can use monospace fonts and add some faux hex-dumps or ASCII elements.The "RPG Stats / Gamer Card": Your badge becomes a character stat sheet. It will display you as a "Level 99 Developer" with stats like "INT: 99", "COFFEE: 100%", an energy bar, and your details integrated into a game-like UI.
The "Minimalist Cyberpunk": A bold, modern, and high-contrast design. It uses large vertical typography for your name, heavy geometric shapes, thick red accent lines, and a large barcode aesthetic alongside your QR code.
Let me know which of these three ideas (or a mix!) you want me to build for the second screen.
Proposed Changes
We will modify the firmware to support a captive-like Wi-Fi Access Point and Web Server.
Core Logic Updates
[MODIFY]
src/main.cpp(orNodeV0.ino)
Wi-Fi Access Point: The ESP32-C3 will broadcast an SSID (e.g.,
CMNode-Config). You can connect to it with your phone or laptop.Web Server: A built-in web server will serve a simple, mobile-friendly HTML configuration page at
http://192.168.4.1.Form Submission: The webpage will contain a form to update your Name, Surname, Role, Company, QR Link, and a dropdown to select the active screen layout (Classic vs Fantastic).
Persistent Storage: Integrate the
Preferenceslibrary to save your data to the ESP32's non-volatile storage (NVS). This ensures your badge remembers your details even after turning off.Display Pipeline: Refactor the
drawContent()function to support rendering two completely different layouts based on your selection.Verification Plan
Manual Verification
I will write the updated code and you will flash it to your badge via PlatformIO or Arduino IDE.
We will verify that the badge broadcasts the
CMNode-ConfigWi-Fi network.We will connect to it, open the web page, submit new data, and verify that the E-paper display updates immediately.
We will reboot the badge to confirm the data is preserved.
We will toggle between the Classic and Fantastic screens to verify the layouts.
I commented on the plan, deciding to go with option one and asked for an example design.
Antigravity has started reviewing the plan and updated it in this way
CMNode v0 WiFi Configuration & Dual Screen Setup
The goal of this task is to upgrade your CMNode v0 badge by replacing the serial-based configuration with a Wi-Fi-based web interface. We will also save the configured data to flash memory so it persists across reboots, and implement two different display layouts: a "Classic" screen and a "Fantastic" screen.
Design Choice: "Hacker Terminal"
You've selected the Hacker Terminal idea for the second screen. This layout will simulate a retro command-line interface on the E-ink display:
Background: Black (inverted).
Text: Monospace white font, simulating terminal output (
root@cmnode:~$ whoami).Data: Your name, surname, role, and company will be displayed as the "output" of the terminal command.
Accents: Faux hex-dumps or system logs on the side, and a right-aligned QR code.
Here is a mockup of the design:
![]()
Does this mockup and the updated plan look good to you? If so, I will proceed with the implementation!
Proposed Changes
We will modify the firmware to support a captive-like Wi-Fi Access Point and Web Server.
Core Logic Updates
[MODIFY]
src/main.cpp(orNodeV0.ino)
Wi-Fi Access Point: The ESP32-C3 will broadcast an SSID (e.g.,
CMNode-Config). You can connect to it with your phone or laptop.Web Server: A built-in web server will serve a simple, mobile-friendly HTML configuration page at
http://192.168.4.1.Form Submission: The webpage will contain a form to update your Name, Surname, Role, Company, QR Link, and a dropdown to select the active screen layout (Classic vs Fantastic).
Persistent Storage: Integrate the
Preferenceslibrary to save your data to the ESP32's non-volatile storage (NVS). This ensures your badge remembers your details even after turning off.Display Pipeline: Refactor the
drawContent()function to support rendering two completely different layouts based on your selection.Verification Plan
Manual Verification
I will write the updated code and you will flash it to your badge via PlatformIO or Arduino IDE.
We will verify that the badge broadcasts the
CMNode-ConfigWi-Fi network.We will connect to it, open the web page, submit new data, and verify that the E-paper display updates immediately.
We will reboot the badge to confirm the data is preserved.
We will toggle between the Classic and Fantastic screens to verify the layouts.
As you can see, we now have a clear idea of how the second screen should look and a plan to implement everything, but before spawning the agent work, I'd also like to have a design of the first screen of the badge, so using the chat, I ask to include it also in the plan.
After two iterations of the prompt, this is the result
The implementation
To implement the plan, we just need to press the Proceed button and wait
During the implementation, we can check what is happening through the UI
And if we notice something weird, we can stop the agent and type a new prompt to drive it again on the right path.
If you, like me, prefer to get confirmation before running commands or editing files, you must also approve these actions through the UI.
After 2 minutes, this is the result.
And if I connect my laptop to the badge Wi-Fi, I can configure my badge.
The refine
Now we have a badge working, but we want to improve it a bit: first, I want to change the screen by pressing the button on the back without connecting to the badge's Wi-Fi, and I want to set the Wi-Fi password via Environment Variables.
So I can prompt this
Can we also change the screen view using the button on the rear of the badge without connecting to the badge's Wi-Fi?
And after a minute, the result is ready, and my badge has been flashed.
And lastly, I can ask not to hard-code the password but use an environment variable,
use an environment variable for the wifi password
same here, after one minute and a couple of approvals, the result is again ready and in my badge.
To complete, I want to change the layout by using one of the buttons on the back of the badge. So again I ask Antigravity to do it for me.
Can we change the screen view also by using the button in the rear of the badge without connecting to the badge wifi?
and same here, after some minutes, sometimes the result is happier in the badge.
And the final result is this one
and this one
Conclusion
It's time to wrap up!
So my experience with Antigravity has been great! I love to use it to build new things, or as a teammate to learn new technology, or just to prototype a pet project like this one.
If you are in the agentic development, this tool can be a good one for you!
The experience is great, and if you want to have control over different projects or streams, it can be really helpful. The only pain point for me is the fact that if you want to check the code, you must install another tool, the Antigravity IDE, to check it.
In this era of agent development, what I find great is the ability to plan and review the changes before the agent implements them! This is the game-changer for me in this moment, and then a lot and a lot of code review!
Okay, that's it! I hope you enjoy this introduction to Antigravity and that you now want to test it for your project.
I hope you also like my new super badge 🚀
p.s. to check the code result, you can navigate to this repository
Google Cloud credits are provided for this project.



