Hi, I'm Ivan

Ivan Morgillo

I make mobile apps, AI agents, and a fool of myself live on Code with the Italians. Speaker, author, father in the Italian countryside, too much coffee.

Personal projects

Products I ship, not just write about

A working shelf of small products, experiments, and apps I keep improving in public.

From the blog

Latest writing

A compact black macropad with two aluminium volume knobs on a wooden desk, a Linux terminal glowing on the monitor behind it FeaturedLinuxTech OpenAI sells a $230 keypad to run AI agents. I built one for $28 on Linux. OpenAI’s first hardware is a $230 keypad for driving AI coding agents. I rebuilt the part that matters — voice dictation and one-press agent commands — for $28, on Linux, with...
Programming / Tech Walking Pad, Controlled by Code: BLE, FTMS, and a Phone Button That Tracks Every Step I have a Mobvoi Home walking pad under my standing desk. BLE, FTMS, Python, and a Home Assistant button: one tap to start, one to stop, every session logged. Dark card reading iPhone screenshots on Linux — one Stream Deck button to clipboard, pymobiledevice3 + a root tunnel AI / Programming iPhone Screenshots on Linux, on a Stream Deck Button How I screenshot my iPhone straight to the Linux clipboard with one Stream Deck button — iOS 17+ needs pymobiledevice3 and a root tunnel, not the classic idevicescreenshot. No... Dark teal card reading Give your screenshots a sound — a Stream Deck trick for the clipboard AI / Programming Give Your Screenshots a Sound — a Stream Deck Button That Dings When the Image Is on the Clipboard A Stream Deck button that plays a ding the instant a phone screenshot lands in the clipboard — no more counting to three. Plus a foldable multi-display gotcha (and the fix),... Celebratory card in Material Design 3 purple gradient reading star 1,000 — Material Design 3 Skill — github.com/hamen/material-3-skill AI / Programming 1,000 Stars: My Material Design 3 Skill Hit a Milestone I’d Never Reached My Material Design 3 skill for AI coding agents just passed 1,000 stars on GitHub — my first repo ever to do so. The story, what it does (30+ MD3 components, Compose-first,... AI assistant robot hand reaching toward a polkit password dialog over a Linux terminal — an AI coding agent requesting root via pkexec AI / Programming How I Let My AI Coding Agent Run sudo on My Linux Box Without Pasting Into a Terminal Letting an AI coding agent run root commands on Linux without pasting sudo into a terminal — a tiny reusable asroot helper built on pkexec and polkit's graphical password dialog. A hand holding a phone streaming memory cards into a glowing brain made of archive drawers, inside a solar-powered home AI / Programming How I Gave the Claude App Access to My Self-Hosted Second Brain I gave the Claude phone app access to my self-hosted memory — a remote MCP server over Tailscale Funnel, OAuth and Qdrant, running on a solar-powered PC at home. Google Drive on Linux — a fast rclone mount with working thumbnails Linux / Tech Google Drive on Linux: A Fast rclone Mount (and Why Your Thumbnails Are Missing) How I finally got Google Drive working as a fast, normal folder on Linux with rclone — and fixed the non-obvious problem of missing image thumbnails on FUSE mounts. Material Design 3 hero illustration — colored shapes representing MD3 tokens and components AI / Programming How to Build, Theme, and Audit Material Design 3 UIs with AI Agents A practical guide to material-3-skill — components, theme generation, the 10-category MD3 audit, and the real Compose bugs it catches in production code. Markdown source of truth for AI coding rules connected to editor-specific adapter files AI / Programming Your AI Coding Rules Should Not Live in Cursor Rules I stopped treating editor-specific AI rule files as the source of truth and moved my Rails and Flutter standards into plain Markdown that Cursor, Claude, Codex, Copilot, and... post-1228-bluetooth AI / Programming A 10 GB Memory Leak Killed My Bluetooth Trackpad: bluetoothd –experimental on Ubuntu How a runaway bluetoothd process — silently leaking memory for three days under the --experimental flag — quietly killed my Apple Magic Trackpad on Ubuntu 25.10, what the... post-1224-standup AI / Programming How I Run My Daily Standup on a Local LLM: Git, Gemma 4, llama.cpp and Telegram A real-world pipeline that scans my Git repos every morning, formats the day's commits with a local Gemma 4 E4B on llama.cpp, and posts the summary to Telegram — no cloud, no... pixel-shelf-rotated-1 AI / Linux Hacking a $15 LED Matrix with an AI Agent, Python, and a Webcam Feedback Loop I was at Action (the European equivalent of a dollar store for nerds) when I spotted a B.K. Light LED Pixel Board — a 32×32 RGB LED matrix with Bluetooth, for about 15 euros.... 1173_mempalace-hero AI / Programming Claude Code Persistent Memory: How I Wired Mempalace Into My Telegram Bot Claude Code forgets everything between sessions. Here's how I added persistent memory across conversations with Mempalace, wired into a Telegram bot. 1150_trackpad-hero Linux Apple Magic Trackpad on Linux: How I Made It Work on Ubuntu XFCE Get the Apple Magic Trackpad working on Linux: a guide for Ubuntu XFCE with BlueZ fixes, libinput tuning, autostart, battery indicator, and troubleshooting. 1151_nvidia-hero Linux When Ubuntu Updates Break NVIDIA… Again Every now and then I update Ubuntu, sip my coffee, install all-the-things… and everything looks fine. Until I suspend. Because of course the moment the PC suspends, NVIDIA... 1152_convert-to-gif-hero Linux How to Add “Convert to GIF” to Thunar on Linux (XFCE) Add a right-click Convert to GIF action to the Thunar file manager on Linux XFCE using FFmpeg and a shell script — turn any video into a GIF in two clicks. 1153_github-actions-hero Programming Run GitHub Actions on Your Own Machine (No Cloud Required… Kinda) $EXISTING 1169_omakub-hero Linux / Tech Bringing DHH’s Omakub to WSL2? Setting up a developer environment on WSL2 with Alacritty, Zellij, Cargo and the Tokyo Night theme inspired by DHH's Omakub. 1170_ngrok-hero Programming / Rails Using Ngrok with Rails When working with Rails, I like to test my web apps with my desktop browser and my mobile browser. I like using my mobile browser, especially to test the PWA setup. To be able... 1171_rails-wsl2-hero Rails Get started with Ruby on Rails on WSL2 Ubuntu Complete guide to installing Ruby on Rails on WSL2 Ubuntu 24.04 using rbenv, including Tailwind CSS setup. Life / Programming New year, old and new challenges 2023 ended with me falling in love with Rails again after 15 years. I have always been a huge fan of 37signals. I like their products in a weird way: I have always wanted... ivan.morgillo_evolving_civilization_from_Stone_Age_to_futuristi_36e5892e-7c84-41d8-9485-d8a6f3ceb48c Life The Power of Flexibility: More Than Just a Mindset In the ever-changing landscape of life and work, adaptability isn’t just a buzzword—it’s a survival skill. As a seasoned software engineer and a human being who’s navigated the... Android You won’t believe how much time you will save with this Git pre-push hook Introduction A significant part of being a successful software developer is refining our workflows to optimize productivity. One method I’ve found incredibly useful is... Programming DigitalOcean Droplets killing your npm install? You need more swap! When your DigitalOcean Droplet runs out of memory during npm install or builds, add swap. Quick commands to grow from 500MB to 1GB and tune swappiness. IDE / Programming Run a IntelliJ/Android Studio configuration with a shortcut If you are like me, you have a few “Run configurations” when you develop an app: Run the app Run the tests Run the static analysis Run the UI tests You can generally only run... Android Show layout bounds from command line Two adb shell aliases to toggle Android's Show layout bounds debug overlay from the terminal — faster than digging through Developer options every time. IDE / Programming Rainbow Brackets for IntelliJ IDEA & Android Studio Rainbow Brackets is the IntelliJ IDEA / Android Studio plugin I use to color-match every parenthesis, brace, and bracket — install, configure, and customize. Android / Kotlin Diventa un Android Dev Dal 1 febbraio 2021, in collaborazione con CGM Consulting, partirà il mio corso di programmazione Android destinato a tutti coloro che si stanno avvicinando al mondo della... 1172_kotlin-sealed-hero Kotlin / Programming Sealed Classes in Kotlin: How to handle the missing .copy() method (2026 Update) Sealed classes in Kotlin don't have a .copy() method like data classes do. Here's how to update them anyway using Arrow Optics Prisms for clean immutability. IDE / Programming IntelliJ IDEA / Android Studio Tricks: “Save Actions” plugin The Save Actions plugin for IntelliJ IDEA / Android Studio runs code-quality fixes (formatting, imports, optimizations) every time you save a file. 1149_kotlin-lenses-hero Kotlin / Programming How to fix the pain of modifying Kotlin nested data classes Using Arrow Lenses to simplify deeply nested data class updates in Kotlin, replacing verbose chained .copy() calls. Android / IDE IntelliJ IDEA / Android Studio Tricks: Surround With IntelliJ IDEA's Surround With wraps selected code in try/catch, if/else, or Kotlin-specific snippets — Mac (⌥⌘T) and Windows (Ctrl+Alt+T) shortcuts. Life On intermittent fasting Lately I’m having a lot of chats about intermittent fasting and I think it’s a good time to write down my whole experience. As I kid I was slim, super slim, a tiny skinny kid.... Life / Tech How to Turn Off Camera and Mic by Default in Google Meet (2026) Start every Google Meet with camera off and mic muted — no plugins needed. Step-by-step guide updated for 2026 with the latest Google Meet settings. IDE / Kotlin My IntelliJ Plugin Collection – Kotlin Fill class Kotlin Fill Class is an IntelliJ / Android Studio plugin that auto-fills data class constructor arguments — stop typing the same parameters by hand. Life / Tech How to Open Bookmarks in a New Tab in Chrome How to open bookmarks in a new tab in Chrome: a one-click bookmarklet trick, the Ctrl/Cmd-click shortcut, and middle-click — so links stop hijacking your current tab. Life / Programming Go to first unread message on Telegram Web How to jump to the first unread message in Telegram Web with a keyboard shortcut — like Slack's Cmd+K but for Telegram. A quick tip for desktop users. Android / Programming ADB Pro: Install and run an Android app on every connected device (2026 Update) adb commands to install or run an Android app on a specific connected device — or every device at once — using device IDs, serial numbers, and helper scripts. Life / Tech What we have now is not “remote working”, it’s “apart working” Today I saw a tweet that resonated a lot with me I could not agree more. The whole COVID-19 lockdown created a weird situation where a lot of companies found themselves... Programming / Tech Uninstall and Run in one shot in Android Studio As an Android developer, I live my life one repetitive task after another: Clean, Run Uninstall, Run Restart Clean, Restart Restart with Debugger Click here, click there. Tap... Tech Push-to-talk on Meet – Part 2 Let’s go physical! A couple of weeks ago, I published a post about adding Push-to-talk to Meet. I love that solution and I’m using all the time… or I was. The problem is that I... Life / Tech Enable Push-to-talk in Google Meet Use the spacebar as a push-to-talk button in Google Meet — keep your mic muted by default and unmute only while speaking. Works in Chrome with no extension. Kotlin / Programming Can I loop over a Kotlin Sealed Class? As an Android developer, I constantly write API clients: 90% of all mobile apps fetch some JSON, parse it and show it in a list ¯\_(ツ)_/¯ To keep a clear separation between... Tech Closing 2019 – Beyond Android Since I started going around for conferences in 2015, I mostly attended Droidcons. Over time, I realized that I was building a weird sort of bubble and patterns started to... Life Gerber E.A.B. – Travel-friendly knife… -ish A small review of the Gerber E.A.B. — the travel-friendly utility knife I carry instead of a full multitool. Why it works and how the safety lock opens. Life About attitude, personal growth and community It’s been quite a long time since I have been writing after a conference I joined as a speaker. Today something clicked and I felt like I had to put my thoughts down while... Life SHIIIIIIIP IIIIIIT!!1!1!! When I joined AsanaRebel, I picked up the project and I started to navigate through the repository, focusing especially on the build.gradle file. Sadly, I had no CI setup to... Kotlin Modules, modules everywhere I have joined asanarebel.com as Senior Android developer at the beginning of February. Asana Rebel is a health and fitness app with workouts for different body and health... Kotlin Kotlin DSL Gradle files, multiple modules and shared variables This doesn’t want to be a real article, but more a crash course about Kotlin DSL for Gradle. The crucial point is the possibility of migrating an existing project to the new... Life Being alone is not being lonely I have started meditating in 2014, thanks to Francesca. I was coming from a very hard year: working in the sport event business is no joke when it comes to stressful... Life Push vs Pull: air conditioning system By Ivan Morgillo, Sasa Sekulic and Fabrizio Chignoli This article has been excerpted from Grokking ReactiveX. After a life of imperative programming, switching to a reactive... Tech GDG Geneva — July event GDG Geneva is a small GDG, but we try hard 😊 Last Monday we had our July event, and, despite the tremendous heat, spent more than one hour talking about MVP on Android. I... Android My week at Droidcon Zagreb and App Builders Last week was quite intense for me. For the first time I had two conferences in two countries in 3 days. I’m definitely too old for this 😜 Droidcon Zagreb Droidcon Zagreb... Android Running Android Unit Tests before Git Push A pre-push Git hook that runs your Android unit tests before pushing — catches typos and broken refactors before they hit CI. Setup script included. Android Android Library AAR and Javadoc As an Android developer, I’m used to ask Android Studio/Intellij Idea for documentation constantly. I have even replaced the shortcut: now, it’s F1, the old-fashion help key.... Tech Installing Git Cola on OSX How to install Git Cola on macOS — the only Git GUI I've found that supports staging individual lines (not just hunks) for fine-grained commits. Tech Text replacement, ASCII emoji and Slack How to use macOS Text Replacement to type ASCII emoticons (¯\_(ツ)_/¯, ಠ_ಠ, etc.) in Slack and elsewhere — set them up once, type them everywhere. Android ADB over WiFi A few days ago, I built a device holder to place as many devices as possible on my desk without losing my sanity... Life First hardware project of 2016: device holder “Ingredients” Old TV/VCR shelf Velcro Scissors 5 minutes /! Rocket science alert /! Flip the shelf. Place velcro on both the shelf and the back of the device. Attach the device. Life 2015: my quantum leap First week of 2016, lots to do, but what about 2015? I’m still working remotely and this helped a lot from a logistic point of view: I relocated in France with my fiancee.... Android Back in Krakow for the Droidcon After almost ten years, I was in Poland again last week. Ten years ago I was an Erasmus student; last week I was a speaker at Droidcon Krakow! The venue Every Droidcon feels... Tech My first Devoxx Last Sunday my first Devoxx journey began, when I landed in the cute Antwerp. First thing in the morning: taxi to the Kinepolis Event Center. 5 minutes in the queue and I had... Life Could you do remote working? When I started working a few years ago, I was a common junior programmer in a common huge open space. It was fun: lots of people hanging around, cool projects, lots to do. It... Life Ricetta per Pancake Da qualche tempo sto facendo colazione con i Pancake. Sono nutrienti e non hanno ingredienti esoterici come le merendine commerciali. Ingredienti per una persona “affamata”...