I got sick of missing the train, so I built a solution

I got sick of missing the train, so I built a solution

This edition of Forward Deployed Editor: Announcing my latest production, Commutely! Plus: I’ve adopted two new (to me) tools: Xcode and Telegram, and think you should, too

My favorite thing about vibe coding is that I get to fix my own problems.

My first iOS app, Audio2, solved an issue I had with getting podcasts onto LinkedIn. My new one solves a problem I have had with getting to LinkedIn. Let me explain…

Almost every day — twice a day — I nearly miss my subway. I can’t count the number of times that I’ve strolled for the train only to reach the platform just as the doors are shutting. The issue is even worse on my way home: I have an option of two trains to get back, but each has a different entrance. When I leave work, I have to make a call on which route to choose and I’m constantly getting this Subway Roulette wrong.

Other subway apps can help here, technically. But there’s so much clicking-and-scrolling required, which just adds time to my just-in-time decision making. The answer takes longer than the question.

What I wanted was super simple: To be able to tell an app that I was leaving and have it tell me instantly whether I can walk and run — and which station to head to.

Thanks to the AI revolution, rather than spending another decade complaining about the problem and making excuses to colleagues and family about why I'm late, I’ve built the solution.

Commutely is a free iOS app that solves the problem. Configure your commute stations once, then long-press the app icon and tap "Leaving Home" or "Leaving Work" (or "Leaving Gym," "Leaving Therapy" — it's all customizable and you can make as many "Commutelys" of your routine as you need.) You get a push notification, complete with that NYC subway bing-bong tone, telling you when your trains are coming.

No opening an app, no scrolling or zooming around a map. You don't even have to open your phone. Commutely puts your train times on your lock screen and in the Dynamic Island (that little area near your front cam). This is the app for commuters who just want to know if their train is coming. Nothing less. Nothing more. 

And it has product market fit right out of the gate ... because I’m the market! That’s the beauty of this new era. My days of putting my life in danger as I Frogger across 6th Ave — only to still miss my train — are officially over.

Check it out: https://apps.apple.com/us/app/commutely/id6755789873 (iOS) 

Or visit commutely.io to learn more. Please send feedback!


What I'm learning:

🤖 How to use Telegram to help me multitask

Article content
Article content

I now have run Claude Code run multiple agents at a time, each with a different building task. And each has to a) stop at designated times and run their code by a Review Agent and b) log all of their actions in one file that I can review later. 

The issue is that the agents frequently need permission to carry out actions or to ask questions. With my last few projects, I’ve had to glue myself to my laptop, staring at a spazzing out Terminal window as I wait for Claude to talk to me. I’d rather be doing a million other things.

So I set up Telegram to ping my phone whenever Claude needs input or finishes something. Now I can start a long task, close my laptop, and go live my life. Here's how:

The setup (takes about 5 minutes):

1. Create a bot: Open Telegram, search for @BotFather, send /newbot, and follow the prompts. You'll get a token that you'll want to save that looks like

123456789:ABCdefGHIjklMNOpqrsTUVwxyz        

2. Get your chat ID: First, send any message to your new bot (just say "hi"). Then search for @userinfobot on Telegram and start a chat. It replies with your ID (a number). Save that too.

3. Create the script: Make a file called scripts/notify-telegram.sh in your project:

#!/bin/bash

TELEGRAM_BOT_TOKEN="your-bot-token-here"

TELEGRAM_CHAT_ID="your-chat-id-here"

MESSAGE="*${1}*

${2}"

curl -s --max-time 5 -X POST \

  "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \

  -d "chat_id=${TELEGRAM_CHAT_ID}" \

  -d "text=${MESSAGE}" \

  -d "parse_mode=Markdown" > /dev/null 2>&1 &        

Then run chmod +x scripts/notify-telegram.sh to make it executable.

Tell Claude about it: Add this to your CLAUDE.md:

## Notifications

When you need user input or approval during long-running tasks,

notify via: ./scripts/notify-telegram.sh "🔔 Title" "Message body"        

Test it: Ask Claude to send you a test notification. Should hit your phone in seconds.

Now when I kick off something big — build this new module, fix this issue, etc. — Claude pings me when it needs approval, when tests fail, or when it's done. I can start a task, go make dinner, and just wait for the buzz.

Async vibe coding … highly recommend.

🙅♂️ How to use Xcode to get closer to the real experience

For Audio2, I used Expo, which allows you to build in React while abstracting away most of the native iOS code. You write code, Metro bundles the JavaScript on your computer, and Expo manages the native parts behind the scenes. It was a great way to get started building apps and allowed me to worry just about the design and functionality.

To build Commutely, though, I migrated to bare React Native, which gave me direct access to the native iOS code in Xcode. Huge difference. First, it gave me access to iPhone features I didn't have before. I could have Claude Code write Swift code for features like Live Activities and Dynamic Island that required native code. When I needed to debug native issues, I could use Xcode's debugger directly on my phone instead of relying on JavaScript logs. I also got much more granular control of app settings, which made the App Store process easier.

The biggest difference was it just felt like I was shipping more quickly and had more direct control. I wrote (er, Claude wrote) code, then would build a new version of the app and deploy it to my phone. When something broke, I could dig into the actual native code to understand why — not just hope that Expo's managed layer would handle it. I didn't realize how much capability I'd been trading for convenience until I got it back.


Good luck out there building! Let me know what you're working on...

Daniel Roth would you be willing to talk to a group of high schoolers in NJ about the importance of a LinkedIn presence and needing to innovate and set yourself apart? Could be virtual

Like
Reply

Is it come with LIRR schedule?

Like
Reply

Wow Dan. So great dude.

Like
Reply

To view or add a comment, sign in

More articles by Daniel Roth

Explore content categories