---
title: "How to Make a Smartphone Smarter: Part 2"
author: "Stan Wilson Jr"
description: "What if your phone truly understood your context? Using iOS Shortcuts and location data, I built a prototype that adapts apps based on where I am — at work, the gym, or shopping. It’s a glimpse into the future of smarter, context-aware devices."
published: 2025-10-19T13:46:34.000-04:00
updated: 2025-10-19T13:52:05.000-04:00
canonical: https://www.stanwilsonjr.com/blog/how-to-make-a-smartphone-smarter-part-2
url: https://www.stanwilsonjr.com/blog/how-to-make-a-smartphone-smarter-part-2
tags: ["apple", "productivity", "prototypes", "shortcuts"]
---
# How to Make a Smartphone Smarter: Part 2

*By Stan Wilson Jr — OCTOBER 19, 2025*
*Original: https://www.stanwilsonjr.com/blog/how-to-make-a-smartphone-smarter-part-2*

In a previous post, I shared an idea about how to make smartphones truly smarter.

**TL;DR:** We all have countless apps on our phones, but finding or using the right one at the right time can be a hassle. My proposal was that our phones should adapt to our current context.

[Read Part 1 here](https://www.stanwilsonjr.com/blog/how-to-make-a-smart-phone-smarter-part-1?ref=stanwilsonjr.ghost.io)

## **Building a Prototype**

Now that you’re caught up, let me walk you through the prototype I’ve been living with for about a week. These are the core indicators I used to define context:

-   Time
-   Day
-   Date
-   Geolocation

Not everyone realizes this, but all of these indicators are already available on your phone (at least if you’re using an iPhone, sorry Android fam). Each of them can be used to automate actions through the iOS Shortcuts app. Knowing that gave me confidence I could build a working prototype with no code or at least low code.

![](https://storage.ghost.io/c/71/24/7124a364-2c9e-4f0f-8e00-fe6d6cf008dc/content/images/2025/10/context.png)

## **Let’s Get Stateful**

Having these contextual indicators (time, day, date, and location) is great. They’re easy to trigger through automation, but here’s where things get tricky: automations can _react_ to a moment, but they don’t _remember_ it.

For example, your phone might trigger an action when you arrive at Whole Foods, but it doesn’t actually _know_ that you’re still there five minutes later. That gap between triggering an action and maintaining an understanding of your ongoing context is where things start to break down.

To make my prototype more aware and persistent, I needed a way to _capture_ and _store_ these states. For instance, recording that I’m at Whole Foods or that I’ve moved to Trader Joe’s, and then using that information to guide future automations.

This is where I had to get creative. I built a lightweight system to log and recognize shifting contexts so my phone could start to feel genuinely “aware.”

Using the shared iOS/Mac file system (which syncs across Apple devices if you’re signed into iCloud), I created one file to store the current state and another to list all possible states. Each entry includes a state name, display name, and the corresponding shortcut for the menu. This setup also lets me attach other details or “extras” to each state later on, essentially future-proofing the system.

![](https://storage.ghost.io/c/71/24/7124a364-2c9e-4f0f-8e00-fe6d6cf008dc/content/images/2025/10/state.png)

## **Prototype in Action**

Here’s what this looks like in real life. Before you press play, here’s some context: the screencast shows me on my way to Whole Foods, approaching the geo-border I defined in my automation. When I reach that border, the menu automatically switches to a Whole Foods specific set of apps, the ones I typically use while shopping there.

/\* Scoped styles for .geoborder-infographic container \*/ .geoborder-infographic { /\* CSS variables scoped to container, not :root \*/ --color-primary: #3b82f6; --color-secondary: #8b5cf6; --color-accent: #06b6d4; --color-success: #10b981; --color-background: #0f172a; --color-surface: #1e293b; --color-text: #f1f5f9; --color-text-muted: #94a3b8; --animation-duration: 8s; --glow-color: rgba(59, 130, 246, 0.5); width: 100%; max-width: 1000px; margin: 0 auto; padding: 2rem; background: var(--color-background); border-radius: 1rem; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } .geoborder-infographic \*, .geoborder-infographic \*::before, .geoborder-infographic \*::after { box-sizing: border-box; } .geoborder-infographic svg { width: 100%; height: auto; display: block; filter: drop-shadow(0 4px 20px rgba(0, 0, 0, 0.3)); } /\* Map background elements \*/ .geoborder-infographic .map-bg { fill: var(--color-surface); opacity: 0.3; } .geoborder-infographic .street { stroke: var(--color-text-muted); stroke-width: 2; opacity: 0.4; fill: none; } /\* Whole Foods marker \*/ .geoborder-infographic .store-marker { fill: var(--color-success); filter: drop-shadow(0 0 8px var(--color-success)); } .geoborder-infographic .store-label { fill: var(--color-text); font-size: 16px; font-weight: 600; } /\* Geoborder circle with gradient stroke and glow \*/ .geoborder-infographic .geoborder-circle { fill: none; stroke: url(#glow-gradient); stroke-width: 3; stroke-dasharray: 10 5; opacity: 0.9; filter: drop-shadow(0 0 16px var(--glow-color)); animation: geoborder-pulse var(--animation-duration) ease-in-out infinite; } @keyframes geoborder-pulse { 0%, 100% { opacity: 0.9; filter: drop-shadow(0 0 16px var(--glow-color)); } 50% { opacity: 0.6; filter: drop-shadow(0 0 24px var(--glow-color)); } } /\* Phone icon using CSS offset-path for movement \*/ .geoborder-infographic .phone-icon { offset-path: path('M 100,300 Q 250,150 400,300 Q 550,450 700,300'); offset-rotate: auto; animation: geoborder-phone-move var(--animation-duration) linear infinite; } .geoborder-infographic .phone-body { fill: var(--color-text); filter: drop-shadow(0 0 10px rgba(59, 130, 246, 0.8)); } .geoborder-infographic .phone-screen { fill: var(--color-primary); } @keyframes geoborder-phone-move { 0% { offset-distance: 0%; } 100% { offset-distance: 100%; } } /\* Animated path with draw-on effect using stroke-dasharray \*/ .geoborder-infographic .phone-path { fill: none; stroke: var(--color-accent); stroke-width: 3; stroke-dasharray: 1200; stroke-dashoffset: 1200; opacity: 0.7; filter: drop-shadow(0 0 6px var(--color-accent)); animation: geoborder-draw-path var(--animation-duration) linear infinite; } @keyframes geoborder-draw-path { 0% { stroke-dashoffset: 1200; } 100% { stroke-dashoffset: 0; } } /\* Arrow indicators \*/ .geoborder-infographic .arrow { fill: var(--color-accent); opacity: 0; animation: geoborder-arrow-fade var(--animation-duration) ease-in-out infinite; } .geoborder-infographic .arrow-enter { animation-delay: 2.5s; } .geoborder-infographic .arrow-exit { animation-delay: 5.5s; } @keyframes geoborder-arrow-fade { 0%, 10%, 90%, 100% { opacity: 0; } 15%, 85% { opacity: 0.9; } } /\* Callout boxes with proper SVG-compatible animations \*/ .geoborder-infographic .callout-enter { opacity: 0; animation: geoborder-callout-enter var(--animation-duration) ease-in-out infinite; } .geoborder-infographic .callout-exit { opacity: 0; animation: geoborder-callout-exit var(--animation-duration) ease-in-out infinite; } @keyframes geoborder-callout-enter { 0%, 22% { opacity: 0; } 27%, 47% { opacity: 1; } 52%, 100% { opacity: 0; } } @keyframes geoborder-callout-exit { 0%, 57% { opacity: 0; } 62%, 82% { opacity: 1; } 87%, 100% { opacity: 0; } } .geoborder-infographic .callout-bg { fill: var(--color-surface); stroke: var(--color-primary); stroke-width: 2; rx: 8; filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.5)); } .geoborder-infographic .callout-text { fill: var(--color-text); font-size: 14px; font-weight: 500; text-anchor: middle; } /\* Gradient definitions for modern tech aesthetic \*/ .geoborder-infographic .gradient-primary { stop-color: var(--color-primary); } .geoborder-infographic .gradient-secondary { stop-color: var(--color-secondary); } .geoborder-infographic .gradient-accent { stop-color: var(--color-accent); } /\* Mobile responsiveness \*/ @media (max-width: 640px) { .geoborder-infographic { padding: 1rem; } .geoborder-infographic .store-label { font-size: 12px; } .geoborder-infographic .callout-text { font-size: 11px; } } /\* Reduced motion support - accessibility \*/ @media (prefers-reduced-motion: reduce) { .geoborder-infographic \* { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } .geoborder-infographic .phone-path { stroke-dashoffset: 0; opacity: 0.7; } .geoborder-infographic .callout-enter, .geoborder-infographic .callout-exit { opacity: 1; } }

Whole Foods Menu switches to Whole Foods context Reverts to Default Menu

In the second half, you’ll see me leaving Whole Foods. As I exit the geo-border, my phone reverts to the default menu, which includes the apps I use most often when I’m not in a special context.

[stateful_phone](https://player.vimeo.com/video/1128654099?app_id=122963)

**Conclusion**

I’ll admit, I wish the setup process required less effort, and I didn’t love having to rely on tools outside of iOS Shortcuts. That said, whether I’m heading to Whole Foods, Trader Joe’s, the gym, or work, this contextual approach to surfacing the right apps has saved me both time and mental energy.

When I started, I wasn’t sure where this project would lead. But overall, I’m happy with the results and optimistic that Apple will eventually take these ideas further.

Stay tuned for **Part 3**, where I’ll explore what that might look like.
---
*Plain text version: https://www.stanwilsonjr.com/blog/how-to-make-a-smartphone-smarter-part-2.txt*
