QR 21: The story behind a scannable QR code watch face packed with 4 concurrent time formats (Free promo codes)
▲ 4 r/WatchFacesWearOS+1 crossposts

QR 21: The story behind a scannable QR code watch face packed with 4 concurrent time formats (Free promo codes)

I know a QR code watch face sounds a little ridiculous, but as an independent developer, I look for unusual technical challenges. I wondered if it was even possible to create an authentic, scannable QR code that updates every single minute, living entirely within the strict limits of the modern Watch Face Format.

Instead of taking the easy path by using a single QR code that routes the phone to a website showing the current time, I wanted the QR code itself to be an actual timepiece and encode the time itself. Getting a Wear OS watch to dynamically render a brand new, scannable code every 60 seconds was a technical and intellectual challenge. Preventing battery drain, memory bloat or lag took a ton of trial, error, and deep optimization.

Once I engineered a way to make it work, the irony hit me. The phone you use to scan it already shows the time, making this watch face rather pointless. I thought about leaving it as a joke watch face, but instead, I decided to lean heavily into the geek factor and see how far down the rabbit hole I could go.

I thought I would share a bit about the engineering and design hurdles behind bringing this watch face to life:

QR Time: Getting that dynamic QR code to serve the exact time payload every minute of the day without melting the watch was the biggest hurdle. It supports both 12H and 24H modes and packs into a lightweight download under 1.5MB.

Unix and Binary Time: I wanted to layer in other unconventional clocks. I added a Unix clock that counts the number of seconds elapsed since January 1, 1970. Then, I added a binary clock. To give humans a fighting chance to read it with less effort, I built an Assist Mode that illuminates the actual numeric bit values (1, 2, 4, 8, 16, and 32) when a circle is active.

Eating My Own Dog Food: I test all my watch faces by living with them, day in and day out. When I took QR 21 into the real world, I have to admit, I found it incredibly frustrating. When you are in a rush, you cannot stop to calculate binary on the fly and I didn't have time to scan the code on my wrist. I tried a few things, including an analog-type mode that used arcs instead of hands. Ultimately, I designed a stacked, ultra-tall digital clock. It looks like graphic framing on the edges of the dial, but it provides instant readability when you need it and it's not the main focus of the watch face on first glance.

AOD Battery Limits: I originally wanted the QR code visible at all times. However, Google has strict power limits for Always On Displays, plus I wasn't convinced that having the QR code visible at all times was worthwhile. To protect battery life, the ambient QR code had to go. Instead, I designed the tall digital numbers to smoothly animate from the edges into the center for a clean, power sipping ambient display.

Hex Battery and Customization: Standard battery percentages were replaced with hexadecimal values. Plus, the QR code itself has 7 different styles (including Grid, Circles, and Hearts) and 28 color themes.

It was a fantastic coding exercise that pushed me to redefine what a functional watch face can be.

Check out QR 21 yourself. To grab a FREE code, head over to the link below. Read the deep dive into QR 21, or simply scroll to the bottom to get your code, while supplies last.

u/SecondHandLabs — 13 hours ago

Need help with workflow from Internal Testing to Production

I have my app in Internal testing. I then promoted it to production. When I do that, it says, "2 of 2 enhancements active. When expanded it shows:

  1. Releases are signed by Google Play
  2. Automatic protection is on

However there is also the following message:

  • "Upload your app bundle again to apply enhancement changes"

If I drop the same bundle in the box and upload it, it comes back and says:

  • "Version code 1000004 has already been used. Try another version code."

So, those two messages are in contradiction with each other. I know that I can remove the bundle I just reuploaded and hit next which presumably won't apply the enhancement changes, but it would seem I want them?

This is my 4th app and I don't recall seeing the message about uploading again.

I did a Google search for the phrase "Upload your app bundle" message and it came up empty. Google hardly ever comes up with nothing, which means it may be a new message. Gemini also wasn't any help and had me do the steps I described above, which don't work.

I can also build the app again and upload directly to the production track, but I feel like I fully tested the build in Internal Testing and would rather not rebuild and upload straight to production.

FYI: I have a business account, which is why I don't need to do testing first.

Any help would be appreciated.

u/SecondHandLabs — 1 month ago
▲ 9 r/WearOS

Samsung Remote Test Lab gave me (a developer) access to test on devices I don't own.

As a developer and Pixel Watch owner, it's easy to test my apps on my Pixel Watch 2 and 3, but I can't test on devices I don't have access to.

I recently discovered Samsung Remote Test Lab which provides you with free, remote access to real Samsung devices located around the world. I found this extremely helpful when troubleshooting an issue earlier this year that appeared to only affect Samsung users (turns out it affected everyone), and again today to test something that appeared broken on my Pixel Watch, only to find out that it seems to work just fine on the Galaxy Watch.

If you're a developer, check it out. I was able to connect remotely to install my app using both Android Studio and WF Studio. Today, this helped me to find a bug that appears on the Pixel Watch, but not Samsung Galaxy Watch.

Have you ever tried it?

(I have no affiliation with Samsung, just a developer who recently found a useful tool to help with development.)

reddit.com
u/SecondHandLabs — 1 month ago

How do I report a bug to Google as a developer for an issue not reproducible on non Pixel watches?

I developed something for Wear OS and found that on my Pixel Watch 2 and 4, that there's a bug I'm not seeing on a Samsung watch or the Android Studio emulator. What's the best way for a developer to report this issue to Google?

reddit.com
u/SecondHandLabs — 1 month ago

[DISCUSSION] What's the best way to differentiate a free plugin from a paid version

I'm trying to figure out what advantage works best when trying to provide both a free and paid version of a plugin.

My plugin provides a block on a WordPress page that visitors briefly interact with. I recognize that most people would do just fine with the free version.

  1. Add extra features to the paid version that would appeal to larger companies.
  2. Provide email support, or access to a Discord channel for paid version.
  3. Paid version can disable text that links to the plugin's home page.
reddit.com
u/SecondHandLabs — 1 month ago

[DISCUSSION] What should the paid version of a plugin contain that the free version does not?

I created a plugin (no AI features) and have been struggling to decide what the paid/premium version will have that the free version does not. The app is geared towards people who want to distribute unique codes for their app in the Google Play Store, Apple App Store, and others. So it's more for developers, not the average user.

At first, I thought I'd leave out a bunch of features from the free version and started creating a list. The downside of removing features is that those features don't get exercised regularly, and potentially aren't as stable as the other, more used features.

Then I thought about capping how many different projects you could run at once. For instance, one live project at a time. Unlimited for the paid version. This may become more of an annoyance and the people that won't pay, never will and simply live with that limitation.

Then I thought about customization. My plugin lets you pick from about 10 styles or layouts and supporting just 1 could be an option. Maybe more important is to allow customization so brand guidelines could be followed. This was a candidate.

Then I thought about support. Fast vs not as fast. Or email vs community forum. I think this is pretty standard so this too is a candidate.

Google Analytics support. I would think someone that needs this would pay for it although the plugin does show some stats on its own, independent of Google Analytics. A candidate.

Finally I thought the app could display "Powered by..." text that links to my website or plugin so it advertises itself. Again, I've seen others do this. No downside really for the free tier and it only helps me. If you pay, you can remove it. Another candidate.

(And no, I don't want the plugin UI to contain ads.)

So I ended up with four items:

  1. Allow full customization, rather than only preconfigured templates

  2. Faster support

  3. Google Analytics support

  4. Ability to remove the banner/text promoting the plugin from appearing in the block placed on webpages.

Is this a reasonable list?

reddit.com
u/SecondHandLabs — 1 month ago

[FREE CODES] We're giving away free codes for PEEK HOUR, our highly-readable watch face (while supplies last)

Peek Hour features a highly-readable, clean design and focus on high-contrast, large elements so you can easily check the time at glance, even if you are not wearing your glasses, contacts, etc.

This promo uses a brand new WordPress Plugin that I developed specifically for distributing promo codes, quick and easy. I am trying it out for the very first time with this promo, so fingers crossed!

To grab your free code (there are only 65 of them!), head over to the link below to learn more about Peek Hour, and then scroll to the bottom to get your code.

https://www.secondhandlabs.com/watch-face-peek-hour/

u/SecondHandLabs — 2 months ago

[DISCUSSION] Dogfooding my own plugin seems like the best way to make it a whole lot better

I had a specific need and couldn't find a plugin to do the job as I wanted. So, I took things into my own hands and created my own WordPress plugin over the past 2 months. I stopped adding features about 2 weeks ago and it got a lot harder to find things to fix.

That is until I started using my own plugin for real on my WordPress site. Now I'm finding all sorts of things to fix and plan to continue doing this over the next several months. I'll be able to try out each feature, and scrutinize every decision I've made during development. Once I'm convinced I've got a bug-free, rock solid project, I hope to find a few people to help test my plugin and prove me wrong by finding issues I've overlooked.

I have to say, it has been a rewarding and fun project. Best of all, I really need this plugin so I'm happy I can start using it.

reddit.com
u/SecondHandLabs — 2 months ago

Things Antigravity likes to say. A lot.

Have you noticed that when using Gemini 3.5 Flash, lots of the thinking text contains words like this: "This is targeted. Like a surgeon. Let's do it! This is very precise. Like a laser."

It feels great when it uses it sparingly but for me, I see some or all of these lines said almost every time while it's thinking out loud.

reddit.com
u/SecondHandLabs — 2 months ago

[PROMOTION] Testing the SHL Promo Engine: A new plugin to handle limited-supply, unique code distribution

I’m an independent developer and I recently hit a frustration point with distributing promo codes for my Wear OS projects. Pasting a block of promo codes is easy for the developer but it can be difficult for an end-user to find a code that wasn't already redeemed. I also tried managing a spreadsheet, but that too had its difficulties, mostly for the end-user. I decided to build a custom WordPress plugin to handle code distribution for me.

The plugin is called SHL Promo Engine. It’s designed to provide a low-friction, automated, and secure way to deliver a unique code to each visitor.

I’m looking for 30 seconds of your time to interact with the promo engine by clicking a button to retrieve a code. You can interact with a live test instance of the engine here:

What's going on behind the scenes:

  • I generated 5,000 random "codes" which are strictly for functional testing purposes and are not redeemable.
  • The codes were uploaded to the Engine into a "Campaign."
  • Requesting a code pulls one from the campaign's pool and displays it. Unique codes are distributed one time until the pool is depleted.
  • The campaign provides many options, including styling for the distribution block, invisible reCAPTCHA v3 to prevent bot abuse, and adjustable claim limits (I set this to 2 per user).
  • For this test, I set the promo type to "Custom," but platforms like Google Play, Apple, Bandcamp, and more are supported for easy, automated redemption flows.

What I’m looking for:

  • Try it out! Click the button to retrieve a code. Did it work?
  • Does the distribution feel fast and reliable on your end?
  • Is it obvious what you need to do? (Real codes will have a button you can press to redeem them. I didn't activate the redeem button for this test.)
  • Is the flow intuitive for a visitor claiming a code?

If you’re a fellow plugin dev, I would appreciate any technical feedback on the implementation.

I look forward to sharing more about this project soon. Until then, I appreciate any feedback or critique you’re willing to share so that I know I'm heading in the right direction.

reddit.com
u/SecondHandLabs — 2 months ago

Numbers are increasing but sales remain at zero

I released a paid app (phone companion app and Wear OS watch face) a month ago. Normally $1.99, I ran a $0.00 launch promo which received over 500 installs.

As expected, once the promo ended, installs flattened but I still see the numbers slowly climbing.

Screenshot shows last week (left) vs today (right). Numbers are climbing slowly but sales are still zero. How is this possible? Should I be looking at a different stat?

u/SecondHandLabs — 2 months ago

First time I saw Antigravity get into an endless loop: Let's wait. Ready. Let me know. Bye! 😊 Let's wait. Ready. Let me know. Bye! 😊

I've seen it happen to others, and now I saw it for the first time myself. Antigravity going into an endless loop. I'm using Gemini 3.5 Flash (Medium). At least it was extremely pleasant before it glitched out.

u/SecondHandLabs — 2 months ago

Peek Hour: I designed a watch face to solve a real-world problem affecting me and (possibly) millions of others (Plus it's 100% FREE for a limited time!)

I wear glasses. Like many people, the last thing I do before going to sleep is take them off. But when I wake up in the middle of the night to check the time, standard watch faces are just an unreadable blur to me.

I didn’t need to know the second or even the exact minute. I realized that reading a precise digital number like "12:42" forced my brain to do a little math, engaging my mind just enough to actually wake me up. I wanted the "analog intuition" of just glancing at a shape and instantly knowing if I had time to go back to sleep using near-zero brain power.

I wanted a design that solves a specific problem, so I built Peek Hour. It is purpose built to be readable without corrective lenses. I've been using Peek Hour for almost a year. Bringing this watch face to life was incredibly rewarding, and now it's time to make it available to others:

  • Huge Hour Display: The hour displays in a huge, thick and high contrast color making it as visible as possible.
  • Designing "Fuzzy" Time: Because shapes matter more than numbers when your vision is a blur, I built a visual gauge into the background. The color "drains" from top to bottom as the hour progresses. Full color means it's the top of the hour. Color in the bottom half means it’s 30 minutes past. Even if you can't read the screen, the color ratio tells you the approximate minutes past the hour, which is "good enough" for telling the time at night.
  • The "Peek" Mechanic: I still wanted digital precision for daytime use, so the exact minutes are neatly tucked right inside the giant hour digit. Even if those smaller numbers are a blur without your glasses, the secondary background gauge is always there to guide you.
  • Extreme Battery Optimization: A massive hour digit normally uses too much power on an Always-On Display (AOD), even if the entire digit is dim. To solve this, I modified the vectors of the font to design a custom outline font with no fill. This allows the brightness to remain higher so it's very readable, even though it only uses a maximum of 3.8% of the screen's pixels (and a minimum of 1.5%). This is well under Google's 15% limit. It keeps the screen highly visible without lighting up a dark room.

Peek Hour is my daily driver, day or night. While it keeps the display uncluttered, it hides plenty under the hood. Along with 19 color themes and a step tracker that turns progress dots into hearts for each 10% past your original goal, a battery indicator is also included right on-screen as well as the date. All options are tappable to get more info. It also features 3 complication slots (Long Text, Short Text, and an App Shortcut) that are hidden by default to preserve the minimalist aesthetic.

Normally priced at $1.99 USD, I am making Peek Hour 100% FREE for a limited time to celebrate its launch.

If you wear glasses, have contacts, or just appreciate incredibly clean, simple, yet powerful design, this may be the watch face you're looking for.

Get it on Google Play:
https://play.google.com/store/apps/details?id=com.secondhandlabs.peekhour

u/SecondHandLabs — 2 months ago
▲ 2 r/67LOVE

The Six Seven watch face for Wear OS will help you celebrate 6/7 day on both June 7 and July 6!

This watch face recognizes June 7th as a special day, and will also celebrate on July 6. In addition, it doesn't go to :00 after hitting :59 seconds. Instead, it counts all the way up to :67 seconds (or 7 minutes past the hour) and celebrates the event hourly

Here's the 10 second countdown to this hourly celebration, on June 7.

Get it FREE on Google Play for a limited time.
https://play.google.com/store/apps/details?id=com.secondhandlabs.six6seven7

Happy 6/7 day!

u/SecondHandLabs — 2 months ago
▲ 11 r/wearosfaces+3 crossposts

Announcing Six Seven: The Watch Face that Fully Embraces the Worldwide Phenomenon. Now in Production and 100% FREE for a LIMITED TIME.

You know the number. You know the vibe. Now you can wear it too! Second Hand Labs has released a new watch face just in time for 6/7 Day! Built specifically for 6-7 fans, the Six Seven watch face forces Wear OS to live by 6-7 rules. If you want to gear up for 6/7 Day (June 7th in the US and July 6th internationally), embrace the madness and become a hero to kids everywhere with the ultimate wearable badge of honor. As a special Launch Day celebration, the app is 100% FREE for a LIMITED TIME, so grab it at no cost while you can!

  • The 8-Minute Shift: Why should :59 minutes roll over to :00 when :67 is SO CLOSE? This watch face hijacks the internal clock, with minutes counting up as follows: :58, :59, :60, :61... all the way to the legendary :67 before snapping back to reality at :08.
  • The "Six Seven" Dance: Anytime the numbers "67" appears in your step count, heart rate, or battery level, those digits do a little back-and-forth dance.
  • The Celebration Countdown: Like watching the ball drop on New Year's Eve, but every hour. A dynamic tracker displays the exact minutes and then seconds remaining until the next 6-7 shift.
  • Year-Round Celebrations: The watch face recognizes special 6-7 related dates throughout the year, dynamically triggering unique alerts like celebrating the 67th day of the year.
  • 12 Color Themes: High-contrast palettes built to pop on AMOLED screens.
  • 10 Backgrounds: Distinct neon-inspired backdrops to match your style.
  • 2 Custom Complication Slots: Launch two of your favorite apps with your favorite custom shortcuts, or hide them completely to focus purely on the time.

Not a fan of the 6-7 trend? That is okay! Check out my other watch faces, guaranteed not to make any 6-7 references.

Get it on Google Play:

u/SecondHandLabs — 3 months ago

Update on my θ = t⁰⁵ non-linear watch face (Now finished and free)

A few months ago, I shared a prototype of a Wear OS watch face I designed, driven by a square root power curve (θ = 46.48 * t⁰⁵). The goal was to visualize a non-linear deceleration curve on a standard 60-unit dial to see if it could function as a legible, practical timepiece on the wrist.

As a quick refresher on the mechanics from the original thread:

  • The 46.48 constant perfectly maps the square root of 60 units to a full 360° circle.
  • Because of the square root property, each hand covers the first 50% of the dial (180°) in the first 15 units of time, and the remaining 50% over the next 45 units.

Officially named Radical Time, this project is finished, fully live and completely free on the Google Play Store:

If you have a Wear OS watch, feel free to check it out.

u/SecondHandLabs — 3 months ago

My first watch face is now in production, followed by my second just two days later

I'm an indie watch face developer and I ran a few watch faces run through closed testing. Rather than making them available through my personal account I waited while I set up a business account. It's been a long road but I'm glad to say that my first app (free) got posted to production two days ago and my first paid watch face got published today.

Three reviews on the free watch face, all 5 stars! It has been a lot of work, but very rewarding!

reddit.com
u/SecondHandLabs — 3 months ago