08.12.2025 – 09.01.2026

If the last few weeks were about… cutting things down, finding out what we couldn’t do… then this week? This week has felt more like… filling in the cracks. Or maybe digging up the foundations and pouring the concrete again.

We’ve moved away from the high-level concepts now. We’re in the weeds. The gritty, invisible stuff that—if we get it wrong—is an absolute disaster.

The Pairing Process: A bit of a rethink

I’ve been obsessing over the pairing flow. We had this Version 1.0, and looking back at it… well, it was a bit of a monster, honestly. We were trying to get the user to do everything—notifications, AI permissions, data sharing—before they’d even really used the glasses. It was just… too heavy.

So, we scrapped it. We’ve gone for a Version 2.0.

The intuition here was simple: just let them connect. We’ve decoupled the “connection” from the “setup”. All those permissions—the notifications, the contacts—we’ve pushed them back. Let’s wait until the user actually needs them, or when they enter the Dashboard. It feels… lighter, somehow. Less of a barrier. I think it’s the right call. It gets them to that “magic moment” of connection much faster.

The Invisible Safety Nets

Then there’s the stuff that keeps me up at night. The “infrastructure.”

We spent a ridiculous amount of time on Account Security. It sounds dry, I know. But when you’re dealing with overseas markets… the GDPR stuff is a minefield. We had this whole debate about how to determine a user’s region—IP address versus manual selection. We settled on a mix.

And it gets oddly specific. Like… did you know we have to build specific logic just to stop a teenager in Italy from using the LLM features?. We have to verify their birthday in the backend and silently gate those features if they’re under 18. It’s a lot of logic for something you hope most users never notice.

The Fear of the “Paperweight”

Firmware updates (OTA). This is the one that makes me nervous.

We had a review on the update logic, and the mood was… cautious. Rightly so. We’re basically terrified of “bricking” the device. So we’ve put in these strict gates: battery must be over 50%, network must be stable.

But the big one is the MD5 integrity check. We’re now forcing a local self-check after the download. Basically, the app checks the package hasn’t been corrupted before it even thinks about sending it to the glasses. It’s a necessary safety rail.

We also figured out the Beta channel. I’m quite keen on this. It lets us push updates to the enthusiasts (and ourselves) without risking the general public. But the version sorting logic… making sure a Beta user can slide back to a Stable release without things breaking… that was a headache.

Closing Thoughts

It’s been a week of arguments, honestly. Arguing with Rongke and Jialiang about pop-up logic or error codes. But seeing the PRD evolve from that bloated 1.0 to this sharper, safer 2.0… it’s satisfying. In a quiet way.

It’s like building a road. No one thanks you for the tarmac, do they? They only scream if there’s a pothole. We’re just trying to make sure there aren’t any potholes.

Next week… privacy policies. Joy.

Onwards.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *