Sunday, September 20, 2026

100% Working: Apple Time Capsule on macOS 27 Golden Gate


For the last couple of months, my Mac's Time Machine encrypted backups to my 2016 tower Time Capsule haven't been working well. It took nearly the entire month of August to successfully complete a single backup. Additionally, I was getting reminders that the next version of macOS (Golden Gate) wouldn't support Apple Filing Protocol (AFP). AFP was Apple's proprietary file transfer protocol built into Time Capsule for transferring files.

While researching replacement external drives to plug into my Mac for Time Machine backups I came across TimeCapsuleSMB on GitHub. The beauty of Time Capsule is that it runs on NetBSD which is a Unix-like operating system. Running the TimeCapsuleSMB desktop app installs Server Message Block (SMB) to replace AFP on the Time Capsule. 

Simply download the zipped up desktop app and run it against your Time Capsule. The instructions, documentation, and source code is thorough.

The only gotcha I had was that I had to disconnect my previous AFP-mounted volume and reattach it under SMB after rebooting both my Mac and the Time Capsule. Then I manually attached the Time Capsule hard drive:

1. Open TimeCapsuleSMB and run its Checkup. Confirm that SMB connectivity and authentication pass.

2. Connect through SMB in Finder: choose Go → Connect to Server (⌘K), enter smb://YOUR-TIME-CAPSULE-IP, replacing the placeholder with its IP address, and connect using admin and your Time Capsule device password.

3. Check whether your existing backup appears in that share. Look for a file ending in .sparsebundle. If it’s missing, pause here; the project’s default share uses a folder called ShareRoot, and your old backup may be outside it.

4. Once the backup is visible, return to System Settings → General → Time Machine, remove the old destination from Time Machine’s configuration, then add the newly available SMB disk. Choose to reuse the existing backup if offered.

Every backup I've attempted since installing TimeCapsuleSMB has succeeded without any issues. 


Thursday, September 3, 2026

Subtext: From Vibe Coding to Production

AWS vs GCP
Vibe coding is a great way to create web apps if you know what you're doing. But how do you figure out where to deploy your app? AWS or GCP or somewhere else? To make this decision more complicated, each of these cloud providers has many different web services that would all work.

On Monday, I spent about 12 hours creating and deploying a simple web app, called Subtext, from scratch including configuring TLS (SSL) and DNS. My web app is up and running at https://subtext.joemoreno.com

Subtext & Steganography

Subtext lets you send a private message hidden inside an ordinary-looking text message.

Technically, Subtext is a steganographic message drop keyed by hash. Steganography is the technique of hiding a secret message inside another ordinary, non-secret message so that nobody knows a secret message even exists. Unlike cryptography, steganography does not protect data from being read or modified; rather, it conceals the very fact of the secret message's existence.


Creating my web app wasn't difficult, but figuring out where to deploy it took some surprisingly quick research.


Deploying to the Cloud

After I created my app, I needed to figure out where to deploy it so I used AI to create a spreadsheet comparing the different platforms and services. Like most AI conversations, the secret sauce is in the prompt engineering. In other words, asking AI the right questions.


This was my prompt:


Create a spreadsheet showing me the different considerations between deploying my node code on AWS and GCP. 

Column headings to read as follows:


1. Cloud Provider

2. Service Name

3. Scales to Zero (Y/N)

4. Estimate Monthly Cost by service (bandwidth, storage, etc)

5. Time to wake up from cold start

6. Has https

7. Custom Domain Name

8. Deploys to Production from GitHub

9. Degree of Difficulty (1 - 10) to convert code from my current Node to production environment.


The spreadsheet that was generated made the decision a no-brainer: GCP Cloud Run.