← Back to blog
· Origin

How Matt built Jarvis — and why nothing worked the first time

Matt wanted something that actually handled things. Not a chatbot he had to babysit. A proper agent — one that read his email, watched his flights, wrote to the family calendar, and got things done without being asked twice. He called it Jarvis.

The idea was simple. The execution was not.

The hardware: a dedicated Mac mini

The first decision was easy. Jarvis needed somewhere to live — a machine that was always on, always connected, not shared with anything else. Matt picked up a Mac mini and set it aside specifically for the project. No competing workloads, no sleeping when the lid closes. Just Jarvis, running continuously.

OpenClaw runs on it. Claude is the brain. The Mac mini is the body. That part came together quickly.

The first mistake: a brand new Gmail account

To give Jarvis its own identity, Matt created a fresh Gmail account — bodellclaw@gmail.com — and started wiring it up for automation. OAuth credentials, API access, the works. Within days of getting it connected and running actual requests, Google disabled the account.

A brand new Gmail account doing automated API calls from day one looks exactly like a bot to Google. Because it is a bot. They killed it.

Deletion is scheduled for mid-2027. There’s no appeal. The account is just gone for automation purposes.

Lesson learned the hard way: free consumer email and automation don’t mix. Google is very good at identifying new accounts that exist purely for programmatic access and has zero tolerance for them.

The pivot: bodell.ai

If consumer email was out, domain email was the answer. Matt registered bodell.ai on GoDaddy — partly for the project, partly because it’s a good domain — and set up matt@bodell.ai as a proper Microsoft 365 mailbox through GoDaddy’s hosting.

Domain email has real standing. It doesn’t get auto-banned for automation. And it comes with a Microsoft tenant, which meant access to the full Microsoft Graph API — a proper, documented, production-grade way to read and send email programmatically.

That’s where the next round of pain started.

Microsoft: a gauntlet of legacy deprecation

The first thing Jarvis tried was IMAP and SMTP — the obvious, simple path. It failed immediately. GoDaddy’s Microsoft 365 tenants have legacy authentication disabled. Basic auth for IMAP and SMTP is dead. Not deprecated. Dead.

Fine. Microsoft Graph it is. OAuth2 device-code flow, delegated permissions, refresh tokens stored locally. Matt built a helper script — mail.py — that does the whole dance: authenticate once, store the refresh token, use Microsoft Graph for everything after that.

That worked. Until Microsoft security defaults flagged the device-code flow and blocked it. The GoDaddy admin portal doesn’t expose the right settings to fix this — you have to bypass it and go directly to entra.microsoft.com to get at the actual tenant controls. Not documented anywhere obvious.

Then came the email sending problem. After finally getting read access working, outbound email through Microsoft’s shared relay started bouncing — 550 5.7.708 — to external recipients. A new tenant on a shared outbound IP pool has terrible reputation. The IPs are blocklisted. It doesn’t matter that the DNS is correct and SPF/DKIM/DMARC are all set up properly. The IP itself is the problem.

The fix: split the path. Read via Microsoft Graph. Send via Resend — a dedicated email delivery service with clean IPs and a free tier that handles 3,000 emails a month.

From-address stays matt@bodell.ai. DNS records updated for Resend on a subdomain that doesn’t touch the Microsoft records. First test email to Gmail landed clean.

Where things stand

The plumbing is done. Jarvis has a real identity — matt@bodell.ai — with working inbound (Microsoft Graph) and outbound (Resend). The Mac mini runs continuously. OpenClaw and Claude handle the intelligence.

Everything built on top of that foundation — flight monitoring, price-drop claims, print automation, calendar writes — works because the basics finally work.

It took longer than it should have. Every shortcut turned into a dead end: the Gmail account that got banned, the IMAP auth that no longer exists, the relay IPs that nobody trusts. But working through each one left a system that’s built on real infrastructure, not consumer hacks.

Matt’s Apple ID is kept completely separate. Jarvis has its own lane.

This is what day one actually looked like. Everything else in this blog is what got built after the foundation held.

← Back to blog