Green Hour: Time Outside

Inspiration 🌻

I've always worked on my mental health, and going outside is something that makes a huge difference for me. A walk before work, twenty minutes outside on my lunch break, a wander before dinner. Those days are better days 🌿

Doctors already believe in this. Green social prescribing is a real thing, and health services in a growing number of countries now actually prescribe time in nature!

But the short winter days catch up with you. You don't get out before work, it's dark by the time you finish work, and then suddenly you realise you've been inside for way too long!

I wanted a way to help motivate me to get into a routine of spending a decent amount of time outside every day and to help keep me accountable.

That's why I built Green Hour: Time Outside, a new iOS app available on the App Store now.

What it does 🏔️

Green Hour is a mood tracker for going outside.

How to use it:

  1. Check in before you go - pick how you're feeling on a feelings wheel, and rate yourself 0 to 10
  2. Put your phone away and go outsid. - a walk, a run, a cycle, or jsut sitting in the park
  3. Check in again when you get back - the app shows you how long you spent outside and the shift in how you felt

Cool things (I think) in the app:

  • The whole app tracks the real daylight where the user is, and the interface (e.g. colour, copy, launch screen) changes throughout the day
  • Do a few check-ins and you get a "Nature Delta" calculated - how much time outside lifts you on average, and which feelings it helps with most
  • Apple Health imports
  • Widgets for streaks and deltas
  • Simple push notifications to nudge to get out while the light's still good
  • No account and no backend. Users' emotional data never leaves their phones
  • There's a 'Can't afford it?' link on the paywall that gives you Plus straight away if you don't have the ability to pay for it

Going outside works. Now you can prove it.

Active session screen Recap screen

How I built it 🌿

Green Hour is a native iOS app:

  • SwiftUI
  • Layers SDK for growth measurement and marketing content
  • SwiftData
  • Swift 6 and strict concurrency
  • HealthKit
  • WidgetKit
  • RevenueCat + RevenueCat Paywalls

One part I particularly wanted to keep simple was the daylight system. There’s no weather API running in the background and I don’t users to have to keep their location on. I have a Daylight model that works out where the sun roughly is based on the date and timezone. If needed, it can use a one-off city-level location lookup to get a more accurate sunset.

That feeds into seven different parts of the day, each with its own sky, colours and animations.

So there’s actually a surprising amount of astronomy happening under the hood!

Growth loop with Layers 🚀

I shipped the first version of Green Hour to the App Store on 7 August, leaving the rest of Shipaton to focus on growth.

As a solo developer with a small audience and no advertising budget, I used Layers during Shipaton to find out what actually brings people to Green Hour, instead of just producing more content and hoping for downloads.

I used Layers to test one question: "Can relatable content about spending too much time indoors make strangers stop scrolling and try Green Hour?"

Growth Loop - Audience and Hypothesis

My audience is people who know they feel better after spending time outside, but spend most of the day indoors and don't get outside as often as they'd like.

My hypothesis was that short, relatable videos about spending too much time indoors would make people who recognised that problem stop scrolling, and that some of those viewers would go on to visit the Green Hour App Store listing.

The Growth Loop

Message: Relatable moments from a day spent indoors, followed by Green Hour. Hooks included: “If you get cranky when you stay inside too long, this one is for you.”

Channel and product surface: Instagram and TikTok, plus the monthly recap card people can share from inside Green Hour. Instagram, TikTok and the recap card each had their own Layers tracking link, so I could attribute installs to each source.

Experiment: One Layers autopilot pipeline, five AI-generated personas, and one video a day posted on the same schedule to Instagram and TikTok. I compared non-follower views, App Store taps and attributed installs to see which channel was better at turning strangers into App Store visitors

Intended outcome: Identify the channel that turns strangers into App Store visits, so I can spend my limited time where the signal is strongest

Growth Loop - What happened

Instagram produced 2,251 views, with 97.6% from non-followers, and generated 19 of my 23 App Store taps.

Across all sources, Layers recorded 28 installs in 30 days, with 11 attributed to a source.

I initially thought the fixed daily posting slot (9:00 daily) was holding TikTok back due to getting 0 views on many videos. But three posts in that same slot reached 716, 371 and 250 views in the final week. Views started arriving once the account had around 25 posts behind it, which also matched Layers' research on new accounts.

Growth Loop - SDK and observability

The Layers SDK is installed and verified in the submitted app. It measures completed outdoor sessions, recap opens and shares, paywall views, trials and purchases, giving me visibility into what happens after acquisition. The SDK tracks high-level product behaviour only, no personal or mood logging data is sent with events.

Growth Loop - What I learned

The results gave me two useful lessons.

First, Instagram gave me a stronger signal for reaching new people and driving App Store visits, so that is where I'll focus the next acquisition test.

Second, TikTok challenged my assumption that a fixed daily posting time was the problem. Once the account had built up more content, posts started getting views in the same slot, suggesting there was more going on than timing alone.

The broader lesson was that my assumptions are starting points, not conclusions. Keeping the experiment consistent across both channels gave me a useful comparison, and the response gave me evidence to decide what to change next.

Growth Loop - What I'll try next

Rather than changing several things at once, I'll keep Instagram constant and run a single-variable test of the opening line, with the target set in Layers before posting.

I'll also add a clearer invitation and per-share tracking links to the monthly recap share card inside the app, to test whether existing users can become another source of new users.

Green Hour TikTok

Layers Signal Strength

↗️ Green Hour on Instagram

↗️ Green Hour on TikTok

Challenges I ran into 🍃

  • Encouraging people to log how they feel, and how much they improved, without labelling any emotion as "good" or "bad"
    • I settled on two separate scales: a 0 to 10 number the user sets themselves, and a feelings wheel kept apart from it as labels only
    • The app never scores an emotion. The only number in there is the one you set yourself
  • Finding a fair way to monetise it
    • As a mental health app, I didn't want to push payment too hard
    • Where I ended up: the main flow (check-in sessions, emotion logging) and the basic insights (streaks, headline delta) are free forever, and logging is never behind the paywall. Green Hour Plus adds full history, emotion-level breakdowns, and all the widgets
    • There's a 'Can't afford it?' link on the paywall that gives you Plus straight away. No proof or anything. I know some people will use it even if they can afford to pay, and I'll likely lose some money because of that. But I'd rather that happen than lock people out just because they can't afford it.

Accomplishments that I'm proud of 🦋

  • Social media marketing using Layers
    • Thousands of views on my reels across Instagram and TikTok
    • Tracking links that show those views converting into real App Store downloads
  • Accessibility
    • VoiceOver drives the check-in wheel properly
    • Dynamic Type and Reduce Motion work everywhere
    • It went in as I built each screen, so there was no accessibility work left at the end
  • The "Can't afford it?" link on the paywall
    • The analytics show somebody has already used it, which is the whole point of it being there
  • It's properly local-first
    • No accounts and no backend
    • The privacy label reads "not linked to identity" with nothing under "Data Used to Track You", and that survived adding an analytics SDK (Layers), because no emotion or delta value ever goes into an event

What I learned 🌱

  • Ship early
    • The first version went live pretty early in the Shipaton period, which left me the rest of the time to iterate on the app, and work on the marketing. I'm really happy with this decision.
  • Marketing WAS well outside my comfort zone, but Layers made it approachable
    • I've shipped apps before but always stayed away from doing any marketing. Having Layers as a partner to suggest opportunities, create content and measure growth has been a really enjoyable learning process and I'm excited to learn more1
  • It's worth taking the time to create some dummy data
    • Doing this early meant I could reuse it for marketing videos in Layers, several iterations of App Store screenshots, and this Shipaton submission
    • Getting it to look like somebody's actual patchy, imperfect month was worth every hour

What's next for Green Hour: Time Outside 🌳

  • Getting it in front of the people already being told to go outside
    • Green social prescribing link workers, walking groups and mental health charities hand out the advice every day with no way for anyone to check it worked for them
    • That's who I want using this
  • Keep listening
    • In-app surveys and Layers analysis
    • So the roadmap comes from what comes back rather than from what I feel like building
  • Per-share tracking links on the recap card
    • Shares are attributed today, but through one link so I can see share rate and not installs per share

Thanks! ☀️

Thank you for taking the time to read and I hope you get a chance to get outside today.

Natasha - Developer of Green Hour: Time Outside

Built With

  • healthkit
  • layers
  • revenuecat
  • swiftdata
  • swiftui
  • widgetkit
Share this project:

Updates

Submission history