<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>A Walking City</title>
  <link>https://frankrobles.com/</link>
  <description>Builder of small internet things: apps, automation, and the occasional walking city.</description>
  <language>en-us</language>
  <atom:link href="https://frankrobles.com/feed.xml" rel="self" type="application/rss+xml"/>
  <atom:link href="https://pubsubhubbub.appspot.com/" rel="hub"/>
  <item>
    <title>Play your vbgnt games online with friends, publish them to itch.io, and see who played</title>
    <link>https://frankrobles.com/blog/play-your-vbgnt-games-online-with-friends-publish-them-to-it/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/play-your-vbgnt-games-online-with-friends-publish-them-to-it/</guid>
    <pubDate>Wed, 09 Sep 2026 13:00:23 GMT</pubDate>
    <description>&lt;p Three things landed in vbgnt this week that change what a generated game can be. Games can now be played online with friends, every game can be exported for Windows, macOS, Linux, Android and iOS f</description>
    <content:encoded><![CDATA[<p>Three things landed in vbgnt this week that change what a generated game can be. Games can now be played online with friends, every game can be exported for Windows, macOS, Linux, Android and iOS from a single pane with a one-click push to itch.io, and every arcade now tells its owner who played. Here is what shipped, with the first game that got all three.</p>

<h2>Online multiplayer, from one sentence</h2>

<p>The test case was a game I already had in the studio: <a href="https://demo.vbgnt.com/#g=1dd4a4606eda">Hockey: Tactics</a>, a turn-based hockey game, X-COM style, where you spend action points to skate, pass, shoot and body-check on a gridded rink. It was single player. I typed one message into its conversation:</p>

<blockquote><p>ok we just added multiplayer module to our system can you add it to this game!</p></blockquote>

<p>Not a great prompt, honestly. It worked anyway. The agent built a lobby in the game's own art style and rewired the match so one player's browser runs the game and the other's sends moves to it. Then it opened two headless browsers, hosted a room in one, joined from the other, and only finished the build when both screens showed the same rink.</p>

<figure class="wp-block-image size-large"><img src="https://games.vbgnt.com/press/2026-09-multiplayer/hockey-1-title.jpg" alt="Hockey: Tactics title screen with a Play Online button" loading="lazy" /><figcaption>The title screen after the turn: Play Online sits next to the solo modes, in the game's own style.</figcaption></figure>

<p>This is how it works for the player. One person presses Host and gets a four-letter room code plus a Copy link button. The other types the code or opens the link. The match runs browser to browser, so there is nothing to install and no account to make. Rooms hold up to eight players, and games built for online play get an Online badge on the arcade.</p>

<figure class="wp-block-image size-large"><img src="https://games.vbgnt.com/press/2026-09-multiplayer/hockey-4-host-with-guest.jpg" alt="The host's lobby showing the room code QPVP and both coaches" loading="lazy" /><figcaption>The host's lobby. The code is what you say out loud; Copy Invite Link is what you paste.</figcaption></figure>

<figure class="wp-block-image size-large"><img src="https://games.vbgnt.com/press/2026-09-multiplayer/hockey-m1-guest.jpg" alt="The guest's view of the rink during an online match, marked Your Turn" loading="lazy" /><figcaption>The guest's rink a few seconds after the host dropped the puck. The camera is flipped so both coaches attack left to right.</figcaption></figure>

<figure class="wp-block-image size-large"><img src="https://games.vbgnt.com/press/2026-09-multiplayer/hockey-8-arcade.jpg" alt="The demo arcade with an Online badge on the Hockey: Tactics tile" loading="lazy" /><figcaption>The arcade marks online games with a badge, and a link with a room code on it joins the match in one step.</figcaption></figure>

<p><strong>Try it:</strong> open <a href="https://demo.vbgnt.com/#g=1dd4a4606eda">Hockey: Tactics on the demo arcade</a> in two tabs, press Host in one and Join with the code in the other. Or send the second tab's link to someone across town. It plays on a phone too.</p>

<p>The platform side of this is deliberately small. Godot already ships a good multiplayer engine; vbgnt adds only the meeting point, a room service that hands out codes and introduces the two browsers to each other, and the agent learns how to use it from a skill document. The hockey game was the first time it had ever seen that document, and it got the lobby, the host and guest split, and the test right on the first turn. This first version is built for playing with people you know: no matchmaking, no accounts, and if the host closes the tab the match ends.</p>

<h2>Export anywhere, publish to itch.io</h2>

<p>The second feature is the one I expect people to use more often. Until now a vbgnt game lived on your arcade as a web build, and getting it anywhere else meant downloading the project and running the engine's exporter yourself. Every game in the studio now has a <strong>Publish</strong> pane, next to Game and Files, that does the whole job on a dedicated build machine.</p>

<figure class="wp-block-image size-large"><img src="https://games.vbgnt.com/press/2026-09-multiplayer/publish-running.png" alt="The studio's Publish pane mid-export with Web and Linux done and Windows exporting" loading="lazy" /><figcaption>The Publish pane mid-export. Each platform reports its own status, and the build log streams into the pane as it goes.</figcaption></figure>

<h3>What you get for each platform</h3>

<ul>
<li><strong>Web</strong>: the same build the arcade plays, zipped with index.html at the root, which is exactly the shape itch.io's upload form wants.</li>
<li><strong>Windows</strong> and <strong>Linux</strong>: single-file binaries with the game data embedded. Download, run.</li>
<li><strong>macOS</strong>: a universal app, ad-hoc signed so it launches on Apple Silicon without the "damaged" error. It is not notarized, so a downloaded copy shows the unidentified-developer prompt until the player right-clicks and opens it.</li>
<li><strong>Android</strong>: an arm64 APK signed with a debug key. Fine for sideloading and for itch.io; Google Play wants your own release keystore.</li>
<li><strong>iOS</strong>: an Xcode project with your Team ID and bundle identifier filled in. Archiving the .ipa needs Xcode on a Mac, which no Linux build machine can do, so this is the one platform the pane exports but never pushes.</li>
</ul>

<p>Tick the platforms you want, press Export, and go back to working on the game. The build machine mirrors the project as last saved, runs the Godot export for each platform in turn, packages the results and lists them with download links in the same pane. A full six-platform job takes about ten to fifteen minutes; web on its own is a couple of minutes. Each export gets a version number the studio increments for you, so the Android version code and the itch.io version string stay in step without anyone thinking about it.</p>

<h3>The itch.io push</h3>

<p>This is the part that turns an export into a release. Save an itch.io API key in the studio settings once. On itch.io, create the project page and note its slug. Then in the Publish pane tick <strong>Push to itch.io</strong>, enter the target as <code>yourname/your-game</code>, and press Export. After each platform finishes, the build machine pushes it to the matching channel on your page with butler, itch.io's own upload tool: <code>html5</code> for the web build, then <code>windows</code>, <code>mac</code>, <code>linux</code> and <code>android</code>. The pane shows each channel's status next to the platform row and gives you an Open on itch.io link when the push is done.</p>

<figure class="wp-block-image size-large"><img src="https://games.vbgnt.com/press/2026-09-multiplayer/publish-done.png" alt="A finished export with downloads for Web, Linux, Windows and macOS and the itch.io push done" loading="lazy" /><figcaption>A finished job: four downloads, and the html5, linux, windows and mac channels pushed to itch.io.</figcaption></figure>

<p>Two things to do on itch.io after the first push, both once. Set the project kind to HTML so the page gets a play button, and tick "This file will be played in the browser" on the html5 upload. After that, every later release is the same click in the studio: ask for a change, wait for the build to land on your arcade, press Export. Because butler pushes only what changed between versions, a re-release of a big game is a small upload.</p>

<p>Multiplayer games export like any other. The web build plays online exactly as it does on the arcade, and the desktop and mobile builds get the native networking library added during the export, so a friend on the Windows download can host a room and you can join from the browser on your phone.</p>

<h3>Where the stores fit</h3>

<p>The export gets you to the store's front door, not through it. Steam wants the desktop builds uploaded through its own pipeline and a $100 Steam Direct fee; Google Play wants the APK signed with a release keystore you own; the App Store wants the Xcode project archived and signed on a Mac. The vbgnt blog has a guide for each. itch.io is the one place the studio can finish for you, which is why it is the one wired into the pane.</p>

<h2>See who played</h2>

<p>The third feature is the one I had wanted for myself the longest. An arcade is a link you send to people, and until this week the only way to know whether anyone opened it was to ask them. Now the studio shows a panel above your games: views of the arcade page, distinct players per day, games started, and total playtime, over the last 7, 30 or 90 days. Under it, a daily chart, your five most played games with playtime each, and a split by where the plays happened. Every game card in the grid carries its own small play count too, which is what finally made reordering my shelf a decision instead of a guess.</p>

<p>The part I care most about is where the numbers come from. Two things report in and they never overlap. The arcade page counts its own views and the games it launches, and when a game closes it sends how long the session ran. Everywhere else, the game counts itself: every build the studio makes now carries a few dozen lines that report one play when the game boots outside the arcade page and a slice of playtime every couple of minutes while it runs. That is how a game opened from a link pasted into a group chat gets counted, and it is how the Windows, macOS, Linux, Android and iOS exports from the Publish pane get counted, each labelled with its platform. Inside the arcade page the game stays quiet, so nothing is counted twice. My own previews in the studio are ignored, and so is the headless browser that tests every build.</p>

<p>Just as important is what it does not do. There is no third-party analytics script, no cookies, and no consent banner. To tell a hundred people from a hundred reloads, each visitor is reduced to a hash of their address and browser that changes every day, so nobody can be followed from one day to the next, and the hashes are discarded within days. There are no per-player profiles and no list of who played. And nothing is public: the arcade page shows no counts and ranks nothing by them. I wrote about why the arcade has no feed when I built it, and a public play count is a feed by another name. The panel is for the maker. The write-up with the full list of what it refuses to collect is on the <a href="https://vbgnt.com/blog/see-who-played-arcade-analytics/">vbgnt blog</a>.</p>

<h2>Why these three together</h2>

<p>Until now a vbgnt game was something you sent to a friend as a link. Now it can be something you play with them, something you put on a store page with a price on it, and something you can watch find its audience. All three features are about the game leaving the studio and you still knowing what happened to it. Everything before this was about getting it built.</p>

<p>More detail on each is on the vbgnt blog: <a href="https://vbgnt.com/blog/export-your-game-for-desktop-and-mobile/">how the export pipeline works</a>, <a href="https://vbgnt.com/blog/publish-your-game-on-itch-io/">publishing on itch.io step by step</a>, <a href="https://vbgnt.com/blog/play-with-friends-online-multiplayer/">how online play works</a>, and <a href="https://vbgnt.com/blog/see-who-played-arcade-analytics/">how the arcade counts plays without tracking anyone</a>. The studio is still invite-only; you can <a href="https://vbgnt.com/#waitlist">ask for an invite here</a>.</p>
]]></content:encoded>
  </item>
  <item>
    <title>The dream console is a product now: meet vbgnt</title>
    <link>https://frankrobles.com/blog/the-dream-console-is-a-product-now-vbgnt/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/the-dream-console-is-a-product-now-vbgnt/</guid>
    <pubDate>Mon, 17 Aug 2026 17:00:00 GMT</pubDate>
    <description>The personal game console I built in July is now a real product at vbgnt.com. Describe a game in a sentence, an agent builds it, playtests it in a headless browser, and publishes it to your own arcade. Sample games are playable at demo.vbgnt.com.</description>
    <content:encoded><![CDATA[<p>Back in July I wrote about
<a href="/blog/i-built-my-own-personal-dream-game-console/">building my own personal dream game console</a>:
think of a game, describe it, and have it playable on my phone, TV, and desktop about
fifteen minutes later. I ended that post by saying it was strictly for personal use and not
something I was going to commercialize.</p>
<p>I&#39;ve changed my mind. It&#39;s a product now: <strong><a href="https://vbgnt.com">vbgnt.com</a></strong>.</p>
<h2>You can play the output right now</h2>
<p>The fastest way to understand it is to go play something. Three games are up on the demo
arcade at <strong><a href="https://demo.vbgnt.com">demo.vbgnt.com</a></strong>. No install, no account, they just
open in your browser:</p>
<ul>
<li><strong>Frostline GP</strong>, two-player split-screen kart racing on a frozen lake under the aurora.
The ice fractures along every line you drive, so the fast groove from lap one is a death
trap by lap three. Drift to charge boost, release to fire.</li>
<li><strong>Static Garden</strong>, a first-person walk through a garden made of light that only rewrites
itself where you are <em>not</em> looking. No combat, no fail state; seven blooms to reach by
deliberately turning away from them.</li>
<li><strong>Ember Hollow</strong>, a pixel-art puzzle-platformer about descending a cavern carrying the
only light. You can hold the lamp or use your hands, never both. Set it down to climb,
pull levers in the dark, then come back for the glow.</li>
</ul>
<p>Each one started as a sentence.</p>
<h2>What changed</h2>
<p>The thing that kept the original build personal was the IP problem. My prompts were all
&quot;what if Mario Kart but with classic movie monsters,&quot; and the models were happy to oblige,
somewhere between refusing outright and handing back a pixel-perfect recreation, with a
detour through calling things &quot;Wobbly Space Bears&quot; to get around their own blocks. That&#39;s a
fun toy and an unshippable product.</p>
<p>So the brief changed. You describe the game you want in your own words: a genre, a feel, an
era, the one mechanic you actually care about. What comes back is an original game
built to that description. A kart racer on a frozen lake. A one-button climber with a
collapsing wall. A puzzle where stacking light is the mechanic. Turns out the interesting
part was never the borrowed characters; it was the fifteen minutes.</p>
<h2>What&#39;s underneath</h2>
<p>Roughly the same machine as the personal version, hardened and pointed at other people:</p>
<ol>
<li><strong>You describe it.</strong> One sentence is a complete brief. A paragraph and a pile of
reference images works too.</li>
<li><strong>The agent builds it.</strong> A cloud microVM boots with the whole toolchain on it: Godot,
the coding agent, generative 2D and 3D asset pipelines. It writes the code, generates the
art and audio, and wires up touch, gamepad, and keyboard input. A real project, not a
snippet.</li>
<li><strong>It plays its own game.</strong> Before you ever see the build, it gets loaded in a headless
browser and driven: does it boot, does it hold framerate, does anything throw. Failures
go back to the agent, not to you.</li>
<li><strong>It ships to your arcade.</strong> The web build publishes to <code>yourname.vbgnt.com</code>. Send anyone
the link and it opens on their phone, their laptop, or the browser on their TV.</li>
</ol>
<p>Step 3 is the one that makes the rest work. The agent isn&#39;t emitting code and hoping. It
opens the game, plays it, and reads its own console errors, so most of the failures never
reach a human.</p>
<h2>Invite-only for now</h2>
<p>It&#39;s invite-only while I build it out. <a href="https://vbgnt.com">Request one</a> and you&#39;ll get a
single email when it&#39;s your turn. In the meantime,
<a href="https://demo.vbgnt.com">go crash a kart into some ice</a>.</p>
]]></content:encoded>
  </item>
  <item>
    <title>I Built My Own Personal Dream Game Console</title>
    <link>https://frankrobles.com/blog/i-built-my-own-personal-dream-game-console/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/i-built-my-own-personal-dream-game-console/</guid>
    <pubDate>Thu, 30 Jul 2026 17:00:09 GMT</pubDate>
    <description>I built my own personal dream game console. I can think of a game concept, “What if Mario Kart but with classic movie monsters” and have a playable version on my phone, tv, and computer in about 15 mi</description>
    <content:encoded><![CDATA[<p>I built my own personal dream game console.  I can think of a game concept, “What if Mario Kart but with classic movie monsters” and have a playable version on my phone, tv, and computer in about 15 minutes.</p>
<p><img src="https://frankrobles.com/media/2026/07/WnETG7af-postero-0.jpg" alt="Game library launcher with a featured Monster Karts title and rows of generated games" style="max-width:100%"></p>
<p>Games are prompted in a simple chat interface and then generated in a cloud development sandbox.</p>
<p><img src="https://frankrobles.com/media/2026/07/eqWeU6XX-postero-1.jpg" alt="Black-and-white silent-film kart racer gameplay with classic movie monsters" style="max-width:100%"></p>
<p>Each game gets what amounts to a disposable game-dev workstation that materializes on demand: a cloud microVM booted from a Docker image containing a full Godot install, the AI coding agent, generative 2d and 3d art asset pipelines, and a headless browser for playtesting.</p>
<p><img src="https://frankrobles.com/media/2026/07/3gH9qtsa-postero-2.jpg" alt="Chat interface prompting changes to a game next to a live playtest preview" style="max-width:100%"></p>
<p>The agent harness makes sure the game works well across all platforms, including providing on screen controls for mobile phones and gamepad support for televisions and desktop.  The game library is presented through a SteamOS/Netflix-esque launcher interface.</p>
<p><img src="https://frankrobles.com/media/2026/07/NJAkOygX-postero-3.jpg" alt="First-person car wash simulator gameplay" style="max-width:100%"></p>
<p>Fable 5 provides the brains of the agent and is the first model I have found that can produce quality games with very little prompting back and forth. (one-shotting as they like to call it).  It is eerily good at creating games based on existing games, it's particularly good at kart racing games and Vampire Survivor-esque games.  It is also surprisingly good at recreating old 90s Bullfrog and Sega-CD FMV games.</p>
<p><img src="https://frankrobles.com/media/2026/07/sp-wh4jN-postero-4.jpg" alt="Side-scrolling arena brawler with on-screen touch controls" style="max-width:100%"></p>
<p>Now as you can see this thing is an absolute trademark and copyright nightmare. Fable 5, gpt-image-2, and Meshy all have varying levels of pushback on generating assets “inspired” by copyrighted materials, from flat out refusing on some IP, to generating pixel perfect recreations for others.  The models also try to get around IP blocks using descriptive language like “Wobbly Space Bears”. For this reason this product is not something I am seeking to commercialize and is fully for personal use!</p>
<p><img src="https://frankrobles.com/media/2026/07/hcD18Ebi-postero-5.jpg" alt="FMV security-camera game with live-action footage of a robot in a CEO office" style="max-width:100%"></p>
<p>But the concept of a personalized entertainment system that can create custom content based on the user’s ideas or interests is closer to reality than we think.</p>
<p><img src="https://frankrobles.com/media/2026/07/nwWS15Zo-postero-6.jpg" alt="Third-person battle royale on a cracked desert island with a pink tank" style="max-width:100%"></p>
<p>This project proved to me that the future of media isn't just curation; it's instant creation. We are rapidly moving toward a world where the line between player and creator completely dissolves. Imagine a streaming platform that doesn't just recommend a sci-fi thriller, but generates a bespoke interactive experience based on your exact mood that evening.</p>
<p><img src="https://frankrobles.com/media/2026/07/LeA4_qaX-postero-7.jpg" alt="Colorful obstacle-course racer starring a teddy-bear character" style="max-width:100%"></p>
<p>The legal frameworks around IP will take years to catch up, but the underlying tech stack is already here.</p>
<p><strong>Update, August 2026:</strong> I said above that this wasn't something I was looking to commercialize. I've changed my mind. I worked out an approach to the copyright and trademark problem, so the dream console is now a real product at <a href="https://vbgnt.com">vbgnt.com</a>. Describe a game, and an agent writes it, draws it, builds it, opens it in a browser to check it actually runs, and publishes it to an arcade that's yours.</p>
]]></content:encoded>
  </item>
  <item>
    <title>Hello again: this blog is back, and it speaks IndieWeb</title>
    <link>https://frankrobles.com/blog/hello-again-indieweb/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/hello-again-indieweb/</guid>
    <pubDate>Mon, 27 Jul 2026 16:00:00 GMT</pubDate>
    <description>The old tech blog is revived as my personal site, CV, and portfolio, rebuilt as a static site on S3 + CloudFront with Webmention, Micropub, IndieAuth, WebSub, microformats, and feeds.</description>
    <content:encoded><![CDATA[<p>After a long hiatus, this site is back, and it&#39;s more than a blog now. It&#39;s my
<a href="/cv/">CV</a>, my <a href="/portfolio/">portfolio</a>, and my home on the independent web.</p>
<p>Inspired by <a href="https://en.andros.dev/blog/0b8e451e/i-joined-the-indieweb-heres-what-i-learned/">Andros&#39;s excellent write-up on joining the IndieWeb</a>,
I implemented the full stack:</p>
<ul>
<li><strong>Microformats2</strong> everywhere: an <a href="https://microformats.org/wiki/h-card">h-card</a> on the homepage, <code>h-entry</code> on every post, and a proper <code>h-feed</code>.</li>
<li><strong>Webmentions</strong>, sent and received. Link to one of my posts from your own site and it shows up below the article.</li>
<li><strong>Micropub + IndieAuth</strong>, so I can publish from any Micropub client by signing in as <code>frankrobles.com</code>.</li>
<li><strong>WebSub</strong>, so feed readers get new posts pushed in near-real-time instead of polling.</li>
<li><strong>RSS + JSON Feed</strong>, because feeds never stopped being great.</li>
<li><strong>rel=&quot;me&quot;</strong> identity links to my other profiles.</li>
</ul>
<p>Under the hood it&#39;s a static site: markdown in S3, a tiny custom generator
running in Lambda, published to S3 behind CloudFront. The dynamic endpoints
(Webmention, Micropub, IndieAuth, and a WordPress-compatible posting API) are a
single Lambda function behind the same domain. No servers to patch, and the
whole thing costs pennies a month.</p>
<p>More on the architecture in an upcoming post. If you have a webmention-capable
site, try linking here and it should appear below.</p>
]]></content:encoded>
  </item>
  <item>
    <title>A month after opening CalendarBridge to AI agents over MCP, a few…</title>
    <link>https://frankrobles.com/blog/a-month-after-opening-calendarbridge-to-ai-agents-over-mcp-a/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/a-month-after-opening-calendarbridge-to-ai-agents-over-mcp-a/</guid>
    <pubDate>Thu, 23 Jul 2026 16:29:13 GMT</pubDate>
    <description>A month after opening CalendarBridge to AI agents over MCP, a few things stand out. The client list is stranger than expected: Claude and ChatGPT, Claude Code and Codex, of…</description>
    <content:encoded><![CDATA[<p>A month after opening CalendarBridge to AI agents over MCP, a few things stand out.</p>
<p>The client list is stranger than expected: Claude and ChatGPT, Claude Code and Codex, of course, but also surprisingly Manus and fully home-built agents, including a custom calendar monitor someone wired up without ever contacting us.</p>
<p>Notably absent: OpenClaw, despite all the noise.</p>
<p>What agents do with a calendar turns out to be mostly watching it, briefings and availability checks, with one agent monitoring calendars around the clock. </p>
<p>When they act, it&#39;s real work: events, syncs, and booking pages created entirely from chat. For some users the dashboard has become optional.</p>
<p>Our favorite pattern: users pointing their chat assistant at our AI scheduling assistant and letting them negotiate. Agents delegating to agents.</p>
<p>Build to the protocol, not the platform. The agents find you.</p>
<p>All paid CalendarBridge users can connect any MCP-capable assistant. </p>
<p>CalendarBridge</p>
<p><em>Originally posted <a href="https://www.linkedin.com/in/fcrobles/">on LinkedIn</a> on 2026-07-23.</em></p>
]]></content:encoded>
  </item>
  <item>
    <title>People search &quot;how to sync Google Calendar with Outlook&quot; like there&#39;s a…</title>
    <link>https://frankrobles.com/blog/people-search-how-to-sync-google-calendar-with-outlook-like/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/people-search-how-to-sync-google-calendar-with-outlook-like/</guid>
    <pubDate>Thu, 16 Jul 2026 18:52:26 GMT</pubDate>
    <description>People search &quot;how to sync Google Calendar with Outlook&quot; like there&#39;s a clever setting they missed. There isn&#39;t. I know because we&#39;ve spent years at CalendarBridge on exactly this…</description>
    <content:encoded><![CDATA[<p>People search &quot;how to sync Google Calendar with Outlook&quot; like there&#39;s a clever setting they missed. There isn&#39;t. I know because we&#39;ve spent years at CalendarBridge on exactly this problem, and the truth is simpler and dumber: the systems just do not agree.</p>
<p>Here&#39;s the usual state of things. One calendar has the real meeting. Another has a manually copied block. A third confidently reports you as free. Then someone sends you a scheduling link offering a slot you booked two days ago. Very productive.</p>
<p>The requirement sounds trivial: change something in one calendar and every other calendar reflects it: quickly, without merging accounts, without exposing meeting details.</p>
<p>Then reality shows up: recurring events, cancellations, time zones, privacy rules, separate tenants, and three vendors who each interpret &quot;calendar standards&quot; a little differently. Congratulations, your productivity hack is now a systems integration problem.</p>
<p>The teams that win at scheduling won&#39;t be the ones with one more calendar app to check. They&#39;ll be the ones whose availability is simply correct inside Google Calendar, Outlook, and Apple Calendar, where they already work. No calendar archaeology required.</p>
<p>That&#39;s the boring problem we&#39;ve spent years solving at CalendarBridge. Boring, of course, until your calendars disagree about where you&#39;re supposed to be.
#CalendarSync #GoogleCalendar #MicrosoftOutlook</p>
<p><em>Originally posted <a href="https://www.linkedin.com/in/fcrobles/">on LinkedIn</a> on 2026-07-16.</em></p>
]]></content:encoded>
  </item>
  <item>
    <title>One year ago we released our AI Email Assistant to the public</title>
    <link>https://frankrobles.com/blog/one-year-ago-we-released-our-ai-email-assistant-to-the-publi/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/one-year-ago-we-released-our-ai-email-assistant-to-the-publi/</guid>
    <pubDate>Thu, 09 Jul 2026 13:20:15 GMT</pubDate>
    <description>One year ago we released our AI Email Assistant to the public. A few months later we embedded it into our Unified Calendar creating the first ever Agentic Calendar. We then…</description>
    <content:encoded><![CDATA[<p>One year ago we released our AI Email Assistant to the public.  A few months later we embedded it into our Unified Calendar creating the first ever Agentic Calendar. We then released the calendar agent with our mobile app before many of the other agent products even considered users would be dispatching tasks on the go (I call it Vibe Calendaring).  After thousands of AI assisted meetings booked, I am excited to announce our latest agentic product.  </p>
<p>Bring Your Own Agent</p>
<p>Between then and now many new agents have sprung up: OpenClaw, Hermes, Codex, and Claude Code have quickly become some of the most adopted agent harnesses on the market.  Everyone has their preference and opinion about which works best and which model work best.  We want to allow our users to harness the latest models and agents to manage their calendars and CalendarBridge accounts, so we are releasing the CalendarBridge MCP server.</p>
<p>The CalendarBridge MCP server lets you manage all of your calendars directly from your agent of choice. Your agent will now have access to all of your Google, Microsoft, ICS, and Apple iCloud calendars. Have your agent find free time across your calendars, create deep work blocker events, and reschedule events.  Have your agents run weekly tasks like sending you your schedule for the week on Monday mornings or look for double bookings.  </p>
<p>CalendarBridge Account Where You Need It</p>
<p>Besides calendar management the server will also let you manage your CalendarBridge account with access to all of our features.  You can sync all of your primary calendars, create one off booking links, and add more calendar accounts, all from your agent.  This unlocks a lot of interesting use cases.  I had Claude build a dashboard of my CalendarBridge account that looked a whole lot like our recent user portal redesign. 🤫 </p>
<p>Agent-To-Agent (Agent Inception)</p>
<p>Our AI assistant is not going anywhere, in fact, it is part of our MCP server.  That&#39;s right, you can now dispatch your AI scheduling agent from your agent of choice.  This unlocks powerful use cases where scheduling tasks get delegated to a more purpose built agent freeing up your general purpose agent to get other tasks done for you (and save money on tokens in the process). </p>
<p>Security</p>
<p>Our MCP server follows all best practices and provides fine grained permissions so your agent can never perform any tasks without your explicit permission.  All tool calls are annotated with their access control levels and provide detailed information to the agent on what the tool call can and can’t do.  </p>
<p>Build it yourself? Build it yourself!</p>
<p>“SaaS is dead.”  “Why not just use OpenClaw?” “We’ll just vibe code it.”</p>
<p>My answer to all of these is GO FOR IT. But if you need a rock solid, secure  calendar syncing and management API for your agents, I recommend using our industry leading platform as a foundation for your calendar integrations.</p>
<p>CalendarBridge</p>
<p><em>Originally posted <a href="https://www.linkedin.com/in/fcrobles/">on LinkedIn</a> on 2026-07-09.</em></p>
]]></content:encoded>
  </item>
  <item>
    <title>A few things I&#39;ve learned for anyone who thinks syncing calendars is as…</title>
    <link>https://frankrobles.com/blog/a-few-things-ive-learned-for-anyone-who-thinks-syncing-calen/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/a-few-things-ive-learned-for-anyone-who-thinks-syncing-calen/</guid>
    <pubDate>Thu, 02 Jul 2026 16:50:57 GMT</pubDate>
    <description>A few things I&#39;ve learned for anyone who thinks syncing calendars is as simple as copying an event from one calendar to another: 1. Recurrence rules will take up more of your time…</description>
    <content:encoded><![CDATA[<p>A few things I&#39;ve learned for anyone who thinks syncing calendars is as simple as copying an event from one calendar to another:</p>
<ol>
<li><p>Recurrence rules will take up more of your time than you expect. A single repeating meeting expands into RRULEs, exceptions, cancellations, and moved instances, and keeping all of that consistent across platforms is where a lot of sync bugs live.</p>
</li>
<li><p>Privacy controls are not as simple as they sound. They turned out to be complex enough that we ended up with a patent for our approach: <a href="https://lnkd.in/eV_RufaN">https://lnkd.in/eV_RufaN</a></p>
</li>
<li><p>Google, Microsoft 365, Outlook, Apple iCloud, and .ics files all share the same core calendar concepts, but they interpret them differently. A lot of it traces back to iCalendar (RFC 2445, published in 1998: ietf.org/rfc/rfc2445.txt) and CalDAV (<a href="https://lnkd.in/eVhrh-MP">https://lnkd.in/eVhrh-MP</a>), and every platform has its own quirks layered on top.</p>
</li>
<li><p>Time zones are still a problem. Daylight saving time is still a problem. Anyone who tells you otherwise has not had to debug calendar sync for real users.</p>
</li>
<li><p>Event ownership matters. If you are not the organizer, there are real limits to what you can change, accept, or decline, and each platform enforces those limits differently.</p>
</li>
<li><p>Tentative meetings are their own category. Whether they block availability depends on how the user, the admin, and the calendar platform are configured, and those three rarely agree.</p>
</li>
<li><p>API rate limits, permission scopes, and third-party service reliability are not theoretical. They decide what your product can actually do at scale, especially once enterprise tenants and security teams get involved. The rate of sporadic failures in services people assume are &quot;just working&quot; is higher than most people realize.</p>
</li>
<li><p>End users will find the edge case you missed, usually within minutes of a new feature launching.</p>
</li>
<li><p>The simple version of calendar sync is easy to demo. The reliable version is a product.</p>
</li>
<li><p>Every new feature means re-running the full regression matrix. With multiple platforms, recurrence patterns, time zones, and permission setups, the number of test cases multiplies fast, and a change that looks isolated can break sync behavior three providers away.</p>
</li>
<li><p>There are a lot of vibe-coded calendar sync solutions out there now, and some of them actually almost work. What they don&#39;t have is years of hardening from real user behavior at scale, and they are certainly not certified for the kinds of secure environments we work in.</p>
</li>
</ol>
<p>If all of this sounds boring, that is the point. The best infrastructure is boring when it works.</p>
<p>And if you just want your client, work, and personal calendars to stop fighting each other, that is what we built CalendarBridge for.</p>
<p>#CalendarSync #SoftwareEngineering #CalendarBridge</p>
<p><em>Originally posted <a href="https://www.linkedin.com/in/fcrobles/">on LinkedIn</a> on 2026-07-02.</em></p>
]]></content:encoded>
  </item>
  <item>
    <title>Proud to be pioneering in personal agentic robotics with the team!</title>
    <link>https://frankrobles.com/blog/proud-to-be-pioneering-in-personal-agentic-robotics-with-the/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/proud-to-be-pioneering-in-personal-agentic-robotics-with-the/</guid>
    <pubDate>Wed, 01 Apr 2026 16:37:32 GMT</pubDate>
    <description>Proud to be pioneering in personal agentic robotics with the team!</description>
    <content:encoded><![CDATA[<p>Proud to be pioneering in personal agentic robotics with the team!</p>
<p><em>Originally posted <a href="https://www.linkedin.com/in/fcrobles/">on LinkedIn</a> on 2026-04-01.</em></p>
]]></content:encoded>
  </item>
  <item>
    <title>Some quick tips for running an OpenClaw (Clawdbot) agent</title>
    <link>https://frankrobles.com/blog/some-quick-tips-for-running-an-openclaw-clawdbot-agent/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/some-quick-tips-for-running-an-openclaw-clawdbot-agent/</guid>
    <pubDate>Wed, 04 Feb 2026 18:39:44 GMT</pubDate>
    <description>Some quick tips for running an OpenClaw (Clawdbot) agent: 1. Sorry, you are going to need to run this on some kind of Apple hardware, whether a Mac mini or an old Apple laptop you…</description>
    <content:encoded><![CDATA[<p>Some quick tips for running an OpenClaw (Clawdbot) agent:</p>
<ol>
<li><p>Sorry, you are going to need to run this on some kind of Apple hardware, whether a Mac mini or an old Apple laptop you have lying around.  It works best out of the box with mac specific CLI programs like peekaboo and is able to do many desktop activities easily via things like applescript and having access to OS level accessibility. Being able to remote desktop into your OpenClaw machine to see what it is doing, as well as help it along when it gets stuck is also necessary. </p>
</li>
<li><p>The only model that can actually accomplish complex tasks right now is Claude Opus 4.5. You are going to want to use an API key from Claude to avoid the rate limiting that the subscription based access gives you.  This is also very expensive!</p>
</li>
<li><p>Create (or have your agent create) its own gmail account.  This way it can sign up for other sites that have email verification and anti-bot measures (which the agent can correctly identify and get around!). This also lets it send emails.</p>
</li>
<li><p>Don&#39;t bother with the chrome tab control extension and just have the agent operate its own browser instance. You can log into whatever accounts you have on this browser instance so it can do various things on your behalf but read 5 first!</p>
</li>
<li><p>Do NOT give your agent access to any sensitive information or accounts you have. This is still experimental software and you should not trust it with access to ANYTHING critical.</p>
</li>
<li><p>Telegram is the easiest messaging channel to set up currently and works across all of your devices, this also lets your send and receive voice messages (tell your agent to reply with a voice message and it will figure it out!)</p>
</li>
<li><p>Any recurring tasks included in the HEARTBEAT.md file will be very expensive so keep these to a minimum.</p>
</li>
<li><p>Enable nano banana support and give it a gemini API key so it can generate images. This is useful for having it create avatars for various services as well as post images to any sites you might want it to.</p>
</li>
<li><p>Set your expectations low for the kind of tasks it can accomplish.  There are a lot of posts claiming amazing results with OpenClaw, some are completely fabricated, some are actually accomplishable with a little effort. Some things I have successfully had it do: sign up for and post on reddit, sign up and post on twitter, generate a voice summary of the days news, send and check emails. Some advanced things I had it do: sign up and post about 80s movies on <a href="https://moltbook.com">https://moltbook.com</a>. Perform a few bounties on <a href="https://shippy.sh/">https://shippy.sh/</a> . See 10 before trying these! </p>
</li>
<li><p>Be wary of any sites that ask you to add a skill.md link to your agent. You are going to want to follow the link and review what exactly the site is trying to instruct your agent to do.</p>
</li>
</ol>
<p>If none of this post makes sense to you, but you would still like to experience what all this agent stuff is about, you can try our secure email based scheduling assistant at <a href="https://lnkd.in/e6B2RKRw">https://lnkd.in/e6B2RKRw</a> ;)</p>
<p><em>Originally posted <a href="https://www.linkedin.com/in/fcrobles/">on LinkedIn</a> on 2026-02-04.</em></p>
]]></content:encoded>
  </item>
  <item>
    <title>I am excited to announce our email-based autonomous scheduling agent…</title>
    <link>https://frankrobles.com/blog/i-am-excited-to-announce-our-email-based-autonomous-scheduli/</link>
    <guid isPermaLink="true">https://frankrobles.com/blog/i-am-excited-to-announce-our-email-based-autonomous-scheduli/</guid>
    <pubDate>Tue, 15 Jul 2025 15:26:32 GMT</pubDate>
    <description>I am excited to announce our email-based autonomous scheduling agent has entered general preview. This is the synthesis of five years of building a product from the ground up that…</description>
    <content:encoded><![CDATA[<p>I am excited to announce our email-based autonomous scheduling agent has entered general preview. This is the synthesis of five years of building a product from the ground up that helps real people and organizations solve their scheduling problems combined with previous experience working on AI virtual assistants.       </p>
<p>The scheduling assistant can tackle any scheduling task simply by cc’ing it on an email thread or emailing it directly.  The agent can handle booking, rescheduling, and cancelling meetings, letting you focus on more important work.  It can also perform more complex tasks like rescheduling entire days of meetings, accepting/declining pending invites, and following up on threads that may have gotten lost in the shuffle.  I have been finding new tasks it can perform almost daily including taking lunch orders and performing user feedback surveys. </p>
<p>Cross platform support 
The assistant supports all major calendar platforms: Google, Microsoft/Outlook, and even iCloud calendar accounts. You can add up to 3 calendars from your other accounts to use for availability.  It also supports video conferencing with Teams, Meets, and Zoom.    </p>
<p>Natural Language Configuration 
You can adjust tone, give it a name, set working days and hours, add meeting types and locations, and give it complex rules for following up all using natural language.  I like to call this feature “normie programming” because of the flexibility it provides. For example, I have my own assistant asking all attendees to answer trivia questions about pirates before being able to schedule a meeting. </p>
<p>Dynamic follow ups 
The assistant will follow up on email threads with anyone who hasn’t reponded.  You can fully configure this behavior with waiting time and frequency, but the assistant will also pick up on things like out of office autoreplies to follow up when the person is available.  </p>
<p>Organization Support 
Every employee in your organization can have their own assistant that knows the availability across your organization and tenants.  Five minutes of configuration is all that is needed to deploy across your organization. Individual employees can also have their own custom configurations.  (Google Workspace, MS O365) 
 
It&#39;s been a long time since I had an experience using a product that legitimately felt like “magic.” Even less frequently with something I have actually written the code for, this product surprises me almost daily with its flexibility and seemingly endless tasks it can perform.  I think people collaborating with agents to get work done will be the norm in a few years, and I am looking forward to what we have planned for the near future to bring that goal closer. </p>
<p><a href="https://lnkd.in/e6B2RKRw">https://lnkd.in/e6B2RKRw</a></p>
<p><em>Originally posted <a href="https://www.linkedin.com/in/fcrobles/">on LinkedIn</a> on 2025-07-15.</em></p>
]]></content:encoded>
  </item>
</channel>
</rss>
