Title: How to Make a Smartphone Smarter: Part 2 Author: Stan Wilson Jr 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 Tags: Apple, productivity, prototypes, shortcuts 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 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. 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. 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 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. --- Original: https://www.stanwilsonjr.com/blog/how-to-make-a-smartphone-smarter-part-2