<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: John</title>
    <description>The latest articles on DEV Community by John (@johns23424234324234).</description>
    <link>https://dev.to/johns23424234324234</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3804725%2F1a454157-2ebf-4e8a-a57a-f58d812f1cdc.png</url>
      <title>DEV Community: John</title>
      <link>https://dev.to/johns23424234324234</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johns23424234324234"/>
    <language>en</language>
    <item>
      <title>A focus app should treat blocked attempts like product analytics</title>
      <dc:creator>John</dc:creator>
      <pubDate>Thu, 25 Jun 2026 15:23:51 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/a-focus-app-should-treat-blocked-attempts-like-product-analytics-2c84</link>
      <guid>https://dev.to/johns23424234324234/a-focus-app-should-treat-blocked-attempts-like-product-analytics-2c84</guid>
      <description>&lt;p&gt;Most focus apps measure the easy thing.&lt;/p&gt;

&lt;p&gt;They count how long the timer ran.&lt;/p&gt;

&lt;p&gt;That is useful, but it misses the moment that actually matters: the moment you tried to break focus.&lt;/p&gt;

&lt;p&gt;When I started building Monk Mode, I kept coming back to one belief:&lt;/p&gt;

&lt;p&gt;Distraction is not a motivation problem. It is an enforcement problem.&lt;/p&gt;

&lt;p&gt;If a blocker only reminds you to focus, it is basically asking the most distracted version of you to make the responsible decision. That is a bad product assumption.&lt;/p&gt;

&lt;p&gt;The product has to be useful when you are already reaching for the distraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The event I care about most
&lt;/h2&gt;

&lt;p&gt;For a focus app, a blocked attempt is not just a negative event.&lt;/p&gt;

&lt;p&gt;It is signal.&lt;/p&gt;

&lt;p&gt;It tells you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which app or site pulled you first&lt;/li&gt;
&lt;li&gt;what time your focus usually breaks&lt;/li&gt;
&lt;li&gt;whether your schedule is realistic&lt;/li&gt;
&lt;li&gt;whether your rules are too strict or too weak&lt;/li&gt;
&lt;li&gt;whether you are recovering faster over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A normal timer can say, "You focused for 42 minutes."&lt;/p&gt;

&lt;p&gt;A stricter focus tool should also be able to say, "You tried opening Instagram 9 minutes in, then YouTube 18 minutes in, then recovered without ending the session."&lt;/p&gt;

&lt;p&gt;That is a very different product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why reminders are not enough
&lt;/h2&gt;

&lt;p&gt;A reminder assumes the user forgot their intention.&lt;/p&gt;

&lt;p&gt;But most distraction is not forgetting.&lt;/p&gt;

&lt;p&gt;You know exactly what you should be doing. You still open the app.&lt;/p&gt;

&lt;p&gt;That is why soft focus tools often feel good in setup and weak in the moment. They let you design the ideal version of yourself, then they hand control back to the version of you that is tired, bored, stressed, or avoiding a hard task.&lt;/p&gt;

&lt;p&gt;I wanted Monk Mode to handle that second version of the user.&lt;/p&gt;

&lt;p&gt;That means hard iOS app and website blocking, open limits, schedules, strict modes, challenge alarms, focus sessions, streaks, XP, and recovery analytics.&lt;/p&gt;

&lt;p&gt;Not because gamification magically fixes discipline, but because the product should make recovery visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blocked attempts are a recovery loop
&lt;/h2&gt;

&lt;p&gt;The first version of blocked-attempt logging is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User starts a focus session.&lt;/li&gt;
&lt;li&gt;User tries to open a blocked app or site.&lt;/li&gt;
&lt;li&gt;The app blocks it.&lt;/li&gt;
&lt;li&gt;The session continues.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The more interesting version is what happens after that.&lt;/p&gt;

&lt;p&gt;Did the user immediately try another app?&lt;br&gt;
Did they keep trying the same one?&lt;br&gt;
Did they stop after one block?&lt;br&gt;
Did they end the focus session?&lt;br&gt;
Did they come back stronger tomorrow at the same time?&lt;/p&gt;

&lt;p&gt;That is where the product can move from "blocker" to "coach" without becoming preachy.&lt;/p&gt;

&lt;p&gt;A good analytics screen should not shame the user. It should show the pattern clearly enough that the next rule becomes obvious.&lt;/p&gt;

&lt;p&gt;If your blocked attempts cluster at 11:30 PM, maybe the real feature is a sleep schedule.&lt;/p&gt;

&lt;p&gt;If they cluster 15 minutes into deep work, maybe the user needs shorter sessions or stricter early-session rules.&lt;/p&gt;

&lt;p&gt;If the same app keeps appearing, maybe it needs an open limit instead of a full block.&lt;/p&gt;

&lt;h2&gt;
  
  
  The UX challenge
&lt;/h2&gt;

&lt;p&gt;There is a tension here.&lt;/p&gt;

&lt;p&gt;If you show too much data, the focus app becomes another dashboard to procrastinate in.&lt;/p&gt;

&lt;p&gt;If you show too little, the user only gets a vague sense that they are "bad at focus."&lt;/p&gt;

&lt;p&gt;The goal is not to turn distraction into quantified guilt.&lt;/p&gt;

&lt;p&gt;The goal is to make the enforcement loop visible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what pulled you&lt;/li&gt;
&lt;li&gt;when it pulled you&lt;/li&gt;
&lt;li&gt;whether the block worked&lt;/li&gt;
&lt;li&gt;whether you recovered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is enough.&lt;/p&gt;

&lt;p&gt;Everything else should earn its place.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I am building toward
&lt;/h2&gt;

&lt;p&gt;Monk Mode is my attempt to build a stricter Screen Time alternative for people who do not need another gentle reminder.&lt;/p&gt;

&lt;p&gt;The product is built around hard blocking, schedules, strict modes, open limits, challenge alarms, focus sessions, and recovery analytics.&lt;/p&gt;

&lt;p&gt;The thesis is simple:&lt;/p&gt;

&lt;p&gt;If the environment keeps winning, stop treating focus like a personality trait.&lt;/p&gt;

&lt;p&gt;Treat it like enforcement design.&lt;/p&gt;

&lt;p&gt;I am building Monk Mode here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.monk-mode.lifestyle/index.html#pricing" rel="noopener noreferrer"&gt;https://www.monk-mode.lifestyle/index.html#pricing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Still early, still learning, but blocked-attempt logs have become one of the clearest product ideas in the whole app.&lt;/p&gt;

&lt;p&gt;They turn "I got distracted again" into "here is the exact point where the system needs to get stronger."&lt;/p&gt;

&lt;p&gt;That feels like the right direction for a focus tool.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>ios</category>
      <category>ux</category>
      <category>indiehackers</category>
    </item>
    <item>
      <title>Why Screen Time fails developers who need real focus</title>
      <dc:creator>John</dc:creator>
      <pubDate>Thu, 25 Jun 2026 04:57:59 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/why-screen-time-fails-developers-who-need-real-focus-1dm9</link>
      <guid>https://dev.to/johns23424234324234/why-screen-time-fails-developers-who-need-real-focus-1dm9</guid>
      <description>&lt;p&gt;Most focus tools assume distraction is a motivation problem.&lt;/p&gt;

&lt;p&gt;For developers, I think that is usually wrong.&lt;/p&gt;

&lt;p&gt;The hard part is not knowing that TikTok, X, Reddit, YouTube, or Slack side quests are hurting the session. We know. The hard part is that the failure happens in a 5 second window where your tired brain negotiates with a device designed to win that negotiation.&lt;/p&gt;

&lt;p&gt;That is why basic Screen Time style limits feel good during setup and weak during actual work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Screen Time breaks down
&lt;/h2&gt;

&lt;p&gt;Minute limits sound reasonable, but they are easy to rationalize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I only need 2 minutes to check one thing."&lt;/li&gt;
&lt;li&gt;"I will stop after this video."&lt;/li&gt;
&lt;li&gt;"I already broke the limit, so today is cooked."&lt;/li&gt;
&lt;li&gt;"I need this app for one valid reason, so the whole block has to be softer."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The feature is framed around usage reduction. Deep work needs enforcement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open limits are often better than minute limits
&lt;/h2&gt;

&lt;p&gt;For developer focus, I like open count limits more than time limits.&lt;/p&gt;

&lt;p&gt;Example: instead of "20 minutes of YouTube per day," use "2 opens per day."&lt;/p&gt;

&lt;p&gt;Why it works better:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It targets the impulse loop at the point of entry.&lt;/li&gt;
&lt;li&gt;It makes every unlock feel expensive.&lt;/li&gt;
&lt;li&gt;It avoids the trap where one long session quietly consumes the whole day.&lt;/li&gt;
&lt;li&gt;It is easier to understand during a work sprint.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the app is blocked after two opens, there is no mental math. You either spend an open or you do not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schedules should map to real work contexts
&lt;/h2&gt;

&lt;p&gt;A good blocker should let you think in workflows, not just clocks.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Morning build block: no social apps until the first meaningful commit.&lt;/li&gt;
&lt;li&gt;Client work block: messaging allowed, feeds blocked.&lt;/li&gt;
&lt;li&gt;Night recovery block: no algorithmic feeds after 10 PM.&lt;/li&gt;
&lt;li&gt;Weekend mode: softer limits, but no infinite scroll.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers often need the internet, docs, GitHub, package registries, and sometimes chat. The goal is not to block the web. The goal is to block the parts that hijack attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strict mode matters because future you is not always trustworthy
&lt;/h2&gt;

&lt;p&gt;A focus system is only as strong as its escape hatch.&lt;/p&gt;

&lt;p&gt;If the escape hatch is too easy, it becomes part of the habit loop. You do not need a reminder. You need a rule that still holds when you are bored, stressed, or avoiding the next hard task.&lt;/p&gt;

&lt;p&gt;That can mean challenge alarms, delay before unlock, scheduled strict modes, or a recovery flow that makes you pause before changing the rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logs beat vibes
&lt;/h2&gt;

&lt;p&gt;One underrated feature: blocked attempt logs.&lt;/p&gt;

&lt;p&gt;If you can see that you tried to open X 17 times during a coding block, that is useful data. It shows the actual friction points in your day.&lt;/p&gt;

&lt;p&gt;Recovery analytics are useful too. Not for shame, but because focus is a system. If you keep failing at 3 PM, the answer might be food, sleep, task size, or a different schedule. Without logs, you are guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I am building
&lt;/h2&gt;

&lt;p&gt;I am building Monk Mode, an iOS focus system with hard app and site blocking, open limits, schedules, strict modes, challenge alarms, blocked attempt logs, focus sessions, XP, streaks, and recovery analytics.&lt;/p&gt;

&lt;p&gt;The core idea is simple: distraction is not a motivation problem. It is an enforcement problem.&lt;/p&gt;

&lt;p&gt;If you want to try it, the pricing page is here: &lt;a href="https://www.monk-mode.lifestyle/index.html#pricing" rel="noopener noreferrer"&gt;https://www.monk-mode.lifestyle/index.html#pricing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious how other devs handle this. Do minute limits work for you, or do you need stricter rules too?&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ios</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Your AI coding session needs an exit rule before the first prompt</title>
      <dc:creator>John</dc:creator>
      <pubDate>Thu, 25 Jun 2026 00:25:58 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/your-ai-coding-session-needs-an-exit-rule-before-the-first-prompt-m6g</link>
      <guid>https://dev.to/johns23424234324234/your-ai-coding-session-needs-an-exit-rule-before-the-first-prompt-m6g</guid>
      <description>&lt;p&gt;AI coding tools make it very easy to begin.&lt;/p&gt;

&lt;p&gt;That is the point. Claude Code, Codex, Cursor, and similar tools remove a lot of the friction between a bug and a possible fix. You describe the problem, the agent reads the repo, proposes a patch, runs tests, explains what broke, and tries again.&lt;/p&gt;

&lt;p&gt;The part I keep noticing is that most sessions do not fail because the first prompt was bad.&lt;/p&gt;

&lt;p&gt;They fail because there was no exit rule.&lt;/p&gt;

&lt;p&gt;Without an exit rule, every answer that is almost right becomes an invitation to spend more context.&lt;/p&gt;

&lt;p&gt;One more retry.&lt;br&gt;
One more file search.&lt;br&gt;
One more explanation.&lt;br&gt;
One more patch for the patch.&lt;br&gt;
One more refactor while the agent is already there.&lt;/p&gt;

&lt;p&gt;Each request feels reasonable on its own. The whole session can still drift into a slow, expensive loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  A useful AI coding prompt should define when to stop
&lt;/h2&gt;

&lt;p&gt;The prompt I want to write more often is not just:&lt;/p&gt;

&lt;p&gt;"Fix this bug."&lt;/p&gt;

&lt;p&gt;It is closer to:&lt;/p&gt;

&lt;p&gt;"Find the smallest fix for this bug. Touch the fewest files possible. If the cause is not clear after inspecting the obvious files, stop and tell me what you need next."&lt;/p&gt;

&lt;p&gt;That last sentence matters.&lt;/p&gt;

&lt;p&gt;It gives the session a boundary.&lt;/p&gt;

&lt;p&gt;AI coding agents are helpful because they keep momentum. But momentum is not always progress. If the model is guessing, searching wider, or making the diff larger to recover from uncertainty, I want it to stop before the session becomes a context sink.&lt;/p&gt;

&lt;p&gt;The exit rule turns vague productivity into a concrete check.&lt;/p&gt;

&lt;h2&gt;
  
  
  The third similar prompt is usually the warning sign
&lt;/h2&gt;

&lt;p&gt;My personal warning sign is the third similar prompt.&lt;/p&gt;

&lt;p&gt;If I have asked some version of the same thing three times, the problem is probably no longer "the model needs one more chance."&lt;/p&gt;

&lt;p&gt;It is usually one of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I gave the model the wrong context&lt;/li&gt;
&lt;li&gt;The task is too broad&lt;/li&gt;
&lt;li&gt;The failing case is not written down&lt;/li&gt;
&lt;li&gt;The model is solving the symptom, not the cause&lt;/li&gt;
&lt;li&gt;I should read the code myself for five minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not anti-AI. It is just workflow hygiene.&lt;/p&gt;

&lt;p&gt;A good human pair programmer would pause at that point and ask what we are actually trying to prove. An agent will often keep going if the interface keeps inviting another request.&lt;/p&gt;

&lt;p&gt;So the user has to create the pause.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage visibility makes the pause easier
&lt;/h2&gt;

&lt;p&gt;This is one reason I built TokenBar as a Mac menu bar app.&lt;/p&gt;

&lt;p&gt;I wanted AI usage visibility close to the moment where the next decision happens. Not in a provider dashboard after the session is over. Not in a monthly receipt. Not hidden until a reset window becomes painful.&lt;/p&gt;

&lt;p&gt;A small live signal changes the question from:&lt;/p&gt;

&lt;p&gt;"How much did that cost?"&lt;/p&gt;

&lt;p&gt;To:&lt;/p&gt;

&lt;p&gt;"Is the next prompt still worth it?"&lt;/p&gt;

&lt;p&gt;That is a better question because it arrives while you can still change behavior.&lt;/p&gt;

&lt;p&gt;If I can see usage climbing while the quality of answers is not improving, I am more likely to stop, write the failing test, narrow the prompt, or switch from agent mode to manual inspection.&lt;/p&gt;

&lt;p&gt;The goal is not to make developers paranoid about tokens.&lt;/p&gt;

&lt;p&gt;The goal is to stop treating every retry like it is free just because the text box is still open.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boring rule I am trying to follow
&lt;/h2&gt;

&lt;p&gt;Before starting an AI coding session, define one of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the smallest acceptable diff&lt;/li&gt;
&lt;li&gt;the maximum number of files to touch&lt;/li&gt;
&lt;li&gt;the point where the agent should stop and ask&lt;/li&gt;
&lt;li&gt;the test or output that proves the fix worked&lt;/li&gt;
&lt;li&gt;the number of retries before I switch tactics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is it.&lt;/p&gt;

&lt;p&gt;It does not need a giant process. It just needs a boundary.&lt;/p&gt;

&lt;p&gt;AI coding gets more useful when the session has a shape. A prompt starts the work. An exit rule protects the work from turning into a loop.&lt;/p&gt;

&lt;p&gt;TokenBar is the small Mac menu bar utility I built to make that live usage signal easier to notice while coding with AI. It is free to try, and TokenBar Pro is $15 lifetime: &lt;a href="https://tokenbar.site/" rel="noopener noreferrer"&gt;https://tokenbar.site/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If your AI coding sessions keep getting bigger than the bug that started them, try adding the exit rule before the first prompt.&lt;/p&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>The hardest screen in AI food logging is the empty state</title>
      <dc:creator>John</dc:creator>
      <pubDate>Wed, 24 Jun 2026 15:23:44 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/the-hardest-screen-in-ai-food-logging-is-the-empty-state-2ngd</link>
      <guid>https://dev.to/johns23424234324234/the-hardest-screen-in-ai-food-logging-is-the-empty-state-2ngd</guid>
      <description>&lt;p&gt;The hardest part of an AI food logging app is not the model call.&lt;/p&gt;

&lt;p&gt;It is the first empty screen.&lt;/p&gt;

&lt;p&gt;If someone opens a tracker and sees a blank diary, the app is asking them to do three things at once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;remember what they ate&lt;/li&gt;
&lt;li&gt;decide how precise they want to be&lt;/li&gt;
&lt;li&gt;trust that the app will not turn one imperfect meal into admin work&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is a lot for a screen with no data yet.&lt;/p&gt;

&lt;p&gt;I have been building &lt;a href="https://metricsync.download" rel="noopener noreferrer"&gt;MetricSync&lt;/a&gt;, an iPhone AI food logger that can log food from a photo, barcode, or text. The product looks simple on paper, but the UX questions get weird fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first action should not feel like a commitment
&lt;/h2&gt;

&lt;p&gt;A lot of logging products make the first entry feel too formal.&lt;/p&gt;

&lt;p&gt;Search a database. Pick a serving. Adjust grams. Save.&lt;/p&gt;

&lt;p&gt;That flow can be accurate, but it also tells the user: do not start unless you are ready to be precise.&lt;/p&gt;

&lt;p&gt;For AI food logging, I think the first action should feel more like capturing a draft.&lt;/p&gt;

&lt;p&gt;Take a photo. Scan the barcode. Type a messy note like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;chicken bowl, rice, sauce, half avocado&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then the app can give you a starting point.&lt;/p&gt;

&lt;p&gt;Not a final answer. A starting point.&lt;/p&gt;

&lt;p&gt;That distinction matters because food is messy. Leftovers, bowls, restaurant meals, snacks, and partial servings do not behave like neat forms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Empty states should teach recovery
&lt;/h2&gt;

&lt;p&gt;The empty state is usually treated like a marketing screen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log your first meal&lt;/li&gt;
&lt;li&gt;Track your nutrition&lt;/li&gt;
&lt;li&gt;Reach your goals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think it should teach recovery instead.&lt;/p&gt;

&lt;p&gt;The user needs to know what happens if the AI guess is wrong.&lt;/p&gt;

&lt;p&gt;Can they correct the serving?&lt;br&gt;
Can they change the food name?&lt;br&gt;
Can they remove an ingredient?&lt;br&gt;
Can they use barcode when a photo is not enough?&lt;br&gt;
Can they type instead when taking a photo would be awkward?&lt;/p&gt;

&lt;p&gt;If those options are visible early, the app feels safer to try.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multiple inputs are not just features
&lt;/h2&gt;

&lt;p&gt;Photo, barcode, and text input sound like checklist items.&lt;/p&gt;

&lt;p&gt;But in practice, each one solves a different moment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;photo is fastest when the meal is visible&lt;/li&gt;
&lt;li&gt;barcode is better when the package has structured data&lt;/li&gt;
&lt;li&gt;text is best when the meal is already gone or too awkward to photograph&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The UX job is not just offering all three. It is helping the user pick the lowest-friction path in the moment.&lt;/p&gt;

&lt;p&gt;That is especially important on mobile, where logging often happens between other things, not during a calm planning session.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;For AI apps, the first empty screen is where trust starts.&lt;/p&gt;

&lt;p&gt;Do not only explain what the AI can do.&lt;/p&gt;

&lt;p&gt;Explain how the user can recover when it is imperfect.&lt;/p&gt;

&lt;p&gt;That is the difference between a demo and a habit.&lt;/p&gt;

&lt;p&gt;MetricSync is my attempt at that for iPhone food logging: photo, barcode, and text capture, with quick correction before saving.&lt;/p&gt;

&lt;p&gt;It has a 3-day free trial, then it is $5/month.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metricsync.download" rel="noopener noreferrer"&gt;https://metricsync.download&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>ai</category>
      <category>ux</category>
      <category>mobile</category>
    </item>
    <item>
      <title>The best AI coding meter is boring until it saves a session</title>
      <dc:creator>John</dc:creator>
      <pubDate>Wed, 24 Jun 2026 00:36:14 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/the-best-ai-coding-meter-is-boring-until-it-saves-a-session-1dem</link>
      <guid>https://dev.to/johns23424234324234/the-best-ai-coding-meter-is-boring-until-it-saves-a-session-1dem</guid>
      <description>&lt;p&gt;The best AI coding meter is boring until it saves a session.&lt;/p&gt;

&lt;p&gt;That sounds like a weird product principle, but it is how I now think about usage visibility for Claude Code, Codex, Cursor, and every other tool that can keep working after I stop paying attention.&lt;/p&gt;

&lt;p&gt;A good meter should not feel like a dashboard. Dashboards ask you to stop what you are doing, open another page, interpret numbers, and then decide whether anything matters.&lt;/p&gt;

&lt;p&gt;That is too late for AI coding.&lt;/p&gt;

&lt;p&gt;The decision point is not at the end of the month when the bill arrives. It is right before the next prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  The expensive moment is usually quiet
&lt;/h2&gt;

&lt;p&gt;Most AI usage waste does not look dramatic while it is happening.&lt;/p&gt;

&lt;p&gt;It looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ask an agent to refactor something.&lt;/li&gt;
&lt;li&gt;It gets halfway there.&lt;/li&gt;
&lt;li&gt;You ask it to fix one more edge case.&lt;/li&gt;
&lt;li&gt;It retries a failing test.&lt;/li&gt;
&lt;li&gt;You paste another log.&lt;/li&gt;
&lt;li&gt;Suddenly the session feels expensive, slow, or close to a usage wall.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of those steps feel reckless in isolation.&lt;/p&gt;

&lt;p&gt;The problem is that AI coding tools make the marginal prompt feel free. The text box is always sitting there. The agent is always ready. The next attempt feels like the smallest possible action.&lt;/p&gt;

&lt;p&gt;But if you are using AI heavily every day, the next prompt is not just a prompt. It is a budget decision, a timing decision, and sometimes a reset-window decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Billing pages are postmortems
&lt;/h2&gt;

&lt;p&gt;Usage pages are useful, but they are usually postmortems.&lt;/p&gt;

&lt;p&gt;They answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happened this month?&lt;/li&gt;
&lt;li&gt;Which model did I use most?&lt;/li&gt;
&lt;li&gt;Why did the bill jump?&lt;/li&gt;
&lt;li&gt;Where did the credits go?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are good questions.&lt;/p&gt;

&lt;p&gt;They are just not the questions I need while I am in the middle of a coding session.&lt;/p&gt;

&lt;p&gt;During the session, I need smaller questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Am I already deep into this window?&lt;/li&gt;
&lt;li&gt;Is this next prompt worth it?&lt;/li&gt;
&lt;li&gt;Should I split the task before asking again?&lt;/li&gt;
&lt;li&gt;Should I stop the agent and inspect manually?&lt;/li&gt;
&lt;li&gt;Should I wait for a reset instead of forcing one more run?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why I think AI coding usage belongs closer to the work surface.&lt;/p&gt;

&lt;p&gt;For me, that means the Mac menu bar.&lt;/p&gt;

&lt;h2&gt;
  
  
  The menu bar changes the behavior
&lt;/h2&gt;

&lt;p&gt;When usage is visible in the menu bar, it becomes part of the loop.&lt;/p&gt;

&lt;p&gt;You do not need to open a dashboard. You do not need to remember to check later. You glance, then decide.&lt;/p&gt;

&lt;p&gt;That tiny friction matters.&lt;/p&gt;

&lt;p&gt;A visible meter can stop a few bad habits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Asking the same question three different ways because the first answer was close.&lt;/li&gt;
&lt;li&gt;Letting an agent retry blindly instead of reading the failing file yourself.&lt;/li&gt;
&lt;li&gt;Starting a big refactor right before a reset boundary.&lt;/li&gt;
&lt;li&gt;Treating every small annoyance as another AI task.&lt;/li&gt;
&lt;li&gt;Waiting until the monthly usage page tells you what you already felt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point is not to make developers afraid of tokens.&lt;/p&gt;

&lt;p&gt;The point is to make the cost visible at the moment it can still change behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  The useful metric is not just total spend
&lt;/h2&gt;

&lt;p&gt;Total spend matters, but it is not always the best live signal.&lt;/p&gt;

&lt;p&gt;For AI coding, I care about session shape.&lt;/p&gt;

&lt;p&gt;A healthy session has a clear goal. It burns usage in a way that matches the value of the work. It ends when the agent stops being useful.&lt;/p&gt;

&lt;p&gt;An unhealthy session drifts. The agent keeps trying. I keep nudging. The task turns into a fog of patches, retries, test logs, and follow-up prompts.&lt;/p&gt;

&lt;p&gt;That is where a live meter helps most.&lt;/p&gt;

&lt;p&gt;It gives you a small reality check before the session gets weird.&lt;/p&gt;

&lt;p&gt;Not a scary warning. Not a productivity lecture. Just a number in the corner saying, "This is no longer a tiny interaction."&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I built TokenBar around that idea.&lt;/p&gt;

&lt;p&gt;It is a small Mac menu bar app for seeing AI usage while you work, especially if you bounce between Claude Code, Codex, Cursor, and other AI-heavy developer workflows.&lt;/p&gt;

&lt;p&gt;The goal is not to replace the billing page. The goal is to catch the decision earlier.&lt;/p&gt;

&lt;p&gt;If pricing matters: TokenBar is free to try, and TokenBar Pro is $15 lifetime.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tokenbar.site/" rel="noopener noreferrer"&gt;https://tokenbar.site/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The principle I keep coming back to
&lt;/h2&gt;

&lt;p&gt;The best usage UI is not the most detailed one.&lt;/p&gt;

&lt;p&gt;It is the one you actually see before the expensive action.&lt;/p&gt;

&lt;p&gt;For AI coding, that action is usually not a purchase button. It is the next prompt.&lt;/p&gt;

&lt;p&gt;So if you are building developer tools around AI, I would think hard about where your usage information lives.&lt;/p&gt;

&lt;p&gt;If it only appears after the work is done, it is analytics.&lt;/p&gt;

&lt;p&gt;If it appears before the next decision, it is product UX.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>AI food logging onboarding should teach recovery, not magic</title>
      <dc:creator>John</dc:creator>
      <pubDate>Tue, 23 Jun 2026 15:26:04 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/ai-food-logging-onboarding-should-teach-recovery-not-magic-57n0</link>
      <guid>https://dev.to/johns23424234324234/ai-food-logging-onboarding-should-teach-recovery-not-magic-57n0</guid>
      <description>&lt;p&gt;Most AI app onboarding makes the same promise: give us a clean input and watch the magic happen.&lt;/p&gt;

&lt;p&gt;That is a tempting demo. It is also a weak product lesson.&lt;/p&gt;

&lt;p&gt;I have been building MetricSync, an iPhone AI food logging app that lets you log food from a photo, barcode, or text. The more I work on it, the more I think onboarding should spend less time proving that AI can guess something and more time teaching the user what to do when the first result is only close.&lt;/p&gt;

&lt;p&gt;For food logging, that matters a lot.&lt;/p&gt;

&lt;p&gt;A clean plate photo is easy. Real usage is leftovers, half packages, restaurant meals, snacks, weird lighting, rushed mornings, and "I know what this is but I do not want to type all of it." If the first screen teaches users that the app is supposed to be perfect, every normal correction feels like a failure.&lt;/p&gt;

&lt;p&gt;A better onboarding lesson is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with the fastest input for this meal.&lt;/li&gt;
&lt;li&gt;Treat the AI result as a draft.&lt;/li&gt;
&lt;li&gt;Fix the one thing that looks off.&lt;/li&gt;
&lt;li&gt;Save and move on.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That makes photo, barcode, and text feel like different paths to the same outcome instead of three unrelated features.&lt;/p&gt;

&lt;p&gt;The product detail I care about is the recovery path. If the photo gets the food right but the portion feels wrong, correction should be obvious. If the barcode is more reliable for packaged food, the app should make that path feel natural. If text is faster for a homemade meal, it should not feel like a fallback for when the "real" AI feature failed.&lt;/p&gt;

&lt;p&gt;This is where a lot of AI UX gets too optimistic. It designs for the impressive first result, not the ordinary second action.&lt;/p&gt;

&lt;p&gt;For MetricSync, I want the app to feel useful even when the first guess needs help. That changes the copy, the empty states, the edit screen, and even the order of the buttons. The interface has to quietly say: close is fine, fixing is normal, do not lose momentum.&lt;/p&gt;

&lt;p&gt;That is especially important for a daily-use app. People do not abandon tracking because one result was imperfect. They abandon it because every small imperfection costs too much attention.&lt;/p&gt;

&lt;p&gt;So the onboarding goal is not "look how smart this is."&lt;/p&gt;

&lt;p&gt;It is "here is the fastest way to get a good enough log, even when the meal is messy."&lt;/p&gt;

&lt;p&gt;That is a less flashy promise, but I think it is the one that keeps the product usable after the demo.&lt;/p&gt;

&lt;p&gt;I am building MetricSync around that idea: iPhone AI food logging from photo, barcode, or text, with correction treated as part of the normal flow. It has a 3-day free trial, then it is $5/month.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metricsync.download" rel="noopener noreferrer"&gt;https://metricsync.download&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ios</category>
      <category>ux</category>
      <category>mobile</category>
    </item>
    <item>
      <title>AI coding usage limits are now part of the developer UX</title>
      <dc:creator>John</dc:creator>
      <pubDate>Tue, 23 Jun 2026 00:23:15 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/ai-coding-usage-limits-are-now-part-of-the-developer-ux-22cg</link>
      <guid>https://dev.to/johns23424234324234/ai-coding-usage-limits-are-now-part-of-the-developer-ux-22cg</guid>
      <description>&lt;p&gt;AI coding tools used to feel like text editors with autocomplete.&lt;/p&gt;

&lt;p&gt;Now they feel more like cloud services that happen to live inside the editor. Claude Code, Codex, Cursor, API calls, model swaps, long agent runs, retry loops, context windows, reset windows, rate limits, and monthly bills are all part of the workflow.&lt;/p&gt;

&lt;p&gt;That changes the job of a developer tool.&lt;/p&gt;

&lt;p&gt;A good coding environment should not only answer "did the code compile?" It should also help answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how expensive is this session getting?&lt;/li&gt;
&lt;li&gt;am I near a reset window?&lt;/li&gt;
&lt;li&gt;is this agent loop still worth running?&lt;/li&gt;
&lt;li&gt;did I just burn half my usable context on a bad direction?&lt;/li&gt;
&lt;li&gt;should I switch models, stop, or tighten the prompt?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The annoying part is that most of those signals arrive too late.&lt;/p&gt;

&lt;p&gt;You notice the limit after the tool slows down. You notice the spend after the invoice. You notice the bad loop after the agent has already retried five times.&lt;/p&gt;

&lt;p&gt;That is backwards.&lt;/p&gt;

&lt;p&gt;For AI coding, usage is not accounting data. It is runtime feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  The old mental model was wrong
&lt;/h2&gt;

&lt;p&gt;When I first started using AI heavily for coding, I treated token usage like a backend metric.&lt;/p&gt;

&lt;p&gt;Something to check later. Something for a dashboard. Something I would review when I was being disciplined.&lt;/p&gt;

&lt;p&gt;That worked badly.&lt;/p&gt;

&lt;p&gt;The moment that matters is not after the work session. It is right before I ask the agent to continue, retry, inspect the whole repo again, or generate another version of the same solution.&lt;/p&gt;

&lt;p&gt;At that moment, usage changes the decision.&lt;/p&gt;

&lt;p&gt;If I am early in a session, I might let the agent explore.&lt;/p&gt;

&lt;p&gt;If I am near a limit, I might ask for a smaller diff.&lt;/p&gt;

&lt;p&gt;If a run is already expensive and not converging, I should stop sooner.&lt;/p&gt;

&lt;p&gt;If reset is close, I might defer the task instead of grinding through a worse experience.&lt;/p&gt;

&lt;p&gt;None of that is about guilt. It is about having enough context to make the next call.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI coding needs a preflight check
&lt;/h2&gt;

&lt;p&gt;Before starting a real agent task, I now want a tiny preflight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;current usage&lt;/li&gt;
&lt;li&gt;remaining headroom&lt;/li&gt;
&lt;li&gt;reset timing&lt;/li&gt;
&lt;li&gt;whether this task deserves a long run&lt;/li&gt;
&lt;li&gt;what stop condition I will use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That sounds boring, but it prevents a lot of waste.&lt;/p&gt;

&lt;p&gt;A vague task like "clean this up" can turn into a huge repo-wide search. A specific task like "fix this one failing test and show the diff" stays bounded.&lt;/p&gt;

&lt;p&gt;The same developer can get very different usage patterns depending on whether the tool nudges them toward scope.&lt;/p&gt;

&lt;p&gt;This is why I think usage limits are no longer just pricing mechanics. They are part of the UX.&lt;/p&gt;

&lt;h2&gt;
  
  
  The best signal is the one you see before the mistake
&lt;/h2&gt;

&lt;p&gt;A dashboard is useful for review.&lt;/p&gt;

&lt;p&gt;A receipt is useful for accounting.&lt;/p&gt;

&lt;p&gt;But neither helps much when the next prompt is the expensive one.&lt;/p&gt;

&lt;p&gt;For live AI coding, the signal needs to be close to the behavior. If the risky behavior happens in the editor, terminal, or agent loop, the usage signal should be visible while that loop is happening.&lt;/p&gt;

&lt;p&gt;That is the idea behind TokenBar, a small Mac menu bar app I built for keeping AI token usage visible during the day.&lt;/p&gt;

&lt;p&gt;It is intentionally not a giant analytics product. The goal is simple: make Claude Code, Codex, Cursor, and other AI coding usage harder to ignore while you are still able to change course.&lt;/p&gt;

&lt;p&gt;You can try it here: &lt;a href="https://tokenbar.site/" rel="noopener noreferrer"&gt;https://tokenbar.site/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TokenBar is free to try, and TokenBar Pro is $15 lifetime.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would track in any AI coding workflow
&lt;/h2&gt;

&lt;p&gt;Even if you do not use my app, I think these are the signals worth making visible:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Session burn&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;How much has this current task consumed?&lt;/p&gt;

&lt;p&gt;This matters more than monthly totals during active work. It tells you whether a task is staying controlled or drifting.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reset timing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Many tools now have practical usage windows. Knowing where you are in that window changes whether you start a large task now or later.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Retry count&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The third retry is often a product smell. The model may need better constraints, smaller context, or a human decision.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model choice&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not every task needs the most expensive model. A visible cost or usage cue makes it easier to downshift when the task is simple.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Stop condition&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before starting an agent run, decide what failure looks like. For example: stop after one failing test remains, stop after two bad diffs, stop if it starts editing unrelated files.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger point
&lt;/h2&gt;

&lt;p&gt;AI coding is moving fast, but the surrounding UX is still catching up.&lt;/p&gt;

&lt;p&gt;The tools are powerful enough to create real leverage and real waste in the same session.&lt;/p&gt;

&lt;p&gt;That means the interface has to show more than output. It has to show cost, limits, drift, and timing while the developer is still making decisions.&lt;/p&gt;

&lt;p&gt;Usage visibility is not a finance feature anymore.&lt;/p&gt;

&lt;p&gt;It is part of the coding loop.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Food logging UX should preserve momentum, not demand precision</title>
      <dc:creator>John</dc:creator>
      <pubDate>Mon, 22 Jun 2026 15:22:42 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/food-logging-ux-should-preserve-momentum-not-demand-precision-2d0g</link>
      <guid>https://dev.to/johns23424234324234/food-logging-ux-should-preserve-momentum-not-demand-precision-2d0g</guid>
      <description>&lt;p&gt;Most food logging apps fail in a very boring moment.&lt;/p&gt;

&lt;p&gt;Not when the AI model is wrong. Not when the barcode scanner misses. Not when the user has a meal with three ingredients mixed together.&lt;/p&gt;

&lt;p&gt;They fail when the app asks for too much precision before the user has saved anything.&lt;/p&gt;

&lt;p&gt;That is the moment where a quick log turns into admin work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first job is capture
&lt;/h2&gt;

&lt;p&gt;If someone opens a food logging app on an iPhone, they are usually in motion.&lt;/p&gt;

&lt;p&gt;They might be standing in a kitchen, eating at a desk, scanning a snack, or trying to remember what was in leftovers from yesterday.&lt;/p&gt;

&lt;p&gt;The first job is not perfect nutrition math. The first job is getting the meal into the system while the context is still fresh.&lt;/p&gt;

&lt;p&gt;That is why I like giving users multiple capture paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;photo for a plate or bowl&lt;/li&gt;
&lt;li&gt;barcode for packaged food&lt;/li&gt;
&lt;li&gt;text for leftovers, homemade meals, and quick corrections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each one is best in a different moment.&lt;/p&gt;

&lt;p&gt;A photo is great when the food is visible. A barcode is great when the package has already done the identifying work. Text is great when the user already knows what they ate and does not want to fight a camera angle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Precision can come after momentum
&lt;/h2&gt;

&lt;p&gt;The mistake is treating every log like a form.&lt;/p&gt;

&lt;p&gt;If the app asks for brand, serving size, ingredients, cooking method, and exact quantity before anything is saved, the user has to switch from eating mode into database mode.&lt;/p&gt;

&lt;p&gt;That is a bad trade.&lt;/p&gt;

&lt;p&gt;A better flow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Capture the best available signal&lt;/li&gt;
&lt;li&gt;Show a reasonable draft&lt;/li&gt;
&lt;li&gt;Make the obvious correction easy&lt;/li&gt;
&lt;li&gt;Let the user save and move on&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The draft does not need to pretend it is magic. It needs to be editable.&lt;/p&gt;

&lt;p&gt;For messy meals, the correction loop matters more than the first guess. If the AI thinks the bowl has rice but it was quinoa, the fix should be one tap or one short edit, not a full restart.&lt;/p&gt;

&lt;h2&gt;
  
  
  Barcode, photo, and text are not competing features
&lt;/h2&gt;

&lt;p&gt;I used to think of input modes as separate features.&lt;/p&gt;

&lt;p&gt;Now I think of them as recovery paths.&lt;/p&gt;

&lt;p&gt;Photo helps when the user has visual context. Barcode helps when the product identity matters. Text helps when the app needs human context.&lt;/p&gt;

&lt;p&gt;The best food logging UX is not the one with the flashiest AI demo. It is the one that lets the user recover quickly when the first path is not enough.&lt;/p&gt;

&lt;p&gt;That is the thinking behind MetricSync, an iPhone AI food logging app I am building around photo, barcode, and text capture. It has a 3-day free trial, then it is $5/month: &lt;a href="https://metricsync.download" rel="noopener noreferrer"&gt;https://metricsync.download&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main product lesson for me is simple: if the user is trying to build a habit, do not make the first save feel like paperwork.&lt;/p&gt;

&lt;p&gt;Preserve momentum first. Improve precision second.&lt;/p&gt;

</description>
      <category>ios</category>
      <category>ai</category>
      <category>mobile</category>
      <category>ux</category>
    </item>
    <item>
      <title>AI coding needs observability before the bill arrives</title>
      <dc:creator>John</dc:creator>
      <pubDate>Mon, 22 Jun 2026 00:24:04 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/ai-coding-needs-observability-before-the-bill-arrives-o9b</link>
      <guid>https://dev.to/johns23424234324234/ai-coding-needs-observability-before-the-bill-arrives-o9b</guid>
      <description>&lt;p&gt;AI coding tools have a weird UX problem: the most important feedback often arrives too late.&lt;/p&gt;

&lt;p&gt;You find out you burned through a limit after the agent stalls. You notice the subscription was worth it after a full month of usage. You discover a session got expensive after the work is already done.&lt;/p&gt;

&lt;p&gt;That is accounting. It is not observability.&lt;/p&gt;

&lt;p&gt;For AI-heavy coding, I think the useful question is not only "how much did this cost?" It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is happening right now, while I can still change the session?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The hidden cost is not always money
&lt;/h2&gt;

&lt;p&gt;When people talk about token tracking, they usually frame it as spend control. That matters, especially if you use API-based tools or run agents often.&lt;/p&gt;

&lt;p&gt;But the bigger workflow cost is decision blindness.&lt;/p&gt;

&lt;p&gt;A normal coding session has signals everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tests getting slower&lt;/li&gt;
&lt;li&gt;CPU fans spinning&lt;/li&gt;
&lt;li&gt;build errors repeating&lt;/li&gt;
&lt;li&gt;logs getting noisy&lt;/li&gt;
&lt;li&gt;a PR diff getting too wide&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI coding needs the same kind of live signals.&lt;/p&gt;

&lt;p&gt;If Claude Code, Codex, Cursor, or an agent loop is quietly chewing through context, you should know before the session becomes hard to reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple rule I use
&lt;/h2&gt;

&lt;p&gt;If I cannot see a metric while I am working, I usually do not act on it.&lt;/p&gt;

&lt;p&gt;Dashboards are fine for review, but they are bad at changing behavior mid-session. By the time I open a dashboard, I am already in cleanup mode.&lt;/p&gt;

&lt;p&gt;For AI coding, the useful signal has to be ambient:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;visible without opening a web app&lt;/li&gt;
&lt;li&gt;updated during the session&lt;/li&gt;
&lt;li&gt;close enough to the work that I notice it&lt;/li&gt;
&lt;li&gt;boring enough that it does not become another distraction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why menu bar style visibility makes sense for this category. It is not trying to replace logs, billing pages, or provider dashboards. It is a tiny status light.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want to catch early
&lt;/h2&gt;

&lt;p&gt;The best AI usage signal is not "you spent $12 this month."&lt;/p&gt;

&lt;p&gt;It is more like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;this session is getting unusually large&lt;/li&gt;
&lt;li&gt;you are near a reset window&lt;/li&gt;
&lt;li&gt;one provider is carrying more usage than expected&lt;/li&gt;
&lt;li&gt;a background agent is still running&lt;/li&gt;
&lt;li&gt;this task might be cheaper to finish manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those require a giant analytics product. They require timely feedback.&lt;/p&gt;

&lt;p&gt;That changes how you work. You stop treating AI usage as something mysterious and start treating it like any other development resource.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build tools should show consequences sooner
&lt;/h2&gt;

&lt;p&gt;Developers already understand this pattern.&lt;/p&gt;

&lt;p&gt;We do not wait until production to learn the build is broken. We do not wait until the end of the quarter to learn tests are slow. We do not wait until the invoice to learn an AI workflow is wasteful.&lt;/p&gt;

&lt;p&gt;The earlier the signal appears, the cheaper the correction is.&lt;/p&gt;

&lt;p&gt;That is the main idea behind TokenBar, a small macOS menu bar app I built for live AI usage visibility across coding workflows. It is free to try, and TokenBar Pro is $15 lifetime: &lt;a href="https://tokenbar.site/" rel="noopener noreferrer"&gt;https://tokenbar.site/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The broader point is simple: AI coding tools are becoming part of the development environment. They need the same kind of observability we expect from the rest of our stack.&lt;/p&gt;

&lt;p&gt;Not after the bill. During the work.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AI food logging should optimize for the second tap</title>
      <dc:creator>John</dc:creator>
      <pubDate>Sun, 21 Jun 2026 15:22:56 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/ai-food-logging-should-optimize-for-the-second-tap-2kap</link>
      <guid>https://dev.to/johns23424234324234/ai-food-logging-should-optimize-for-the-second-tap-2kap</guid>
      <description>&lt;p&gt;The first tap in a food logging app is obvious.&lt;/p&gt;

&lt;p&gt;Take a photo. Scan a barcode. Type what you ate.&lt;/p&gt;

&lt;p&gt;The second tap is where the product either feels fast or annoying.&lt;/p&gt;

&lt;p&gt;That is one of the lessons I keep running into while building MetricSync, an iPhone AI food logging app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first input is not the whole workflow
&lt;/h2&gt;

&lt;p&gt;A lot of AI food logging demos focus on the capture moment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;point the camera at food&lt;/li&gt;
&lt;li&gt;get a result&lt;/li&gt;
&lt;li&gt;save it&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is clean, but real usage is less tidy.&lt;/p&gt;

&lt;p&gt;Sometimes the photo is good but the portion needs fixing. Sometimes the barcode identifies the item but the serving size needs a quick check. Sometimes text is faster because the meal already happened and the photo is gone.&lt;/p&gt;

&lt;p&gt;So the core UX question is not only, "Can AI make a guess?"&lt;/p&gt;

&lt;p&gt;It is, "What does the user do right after the guess?"&lt;/p&gt;

&lt;h2&gt;
  
  
  The second tap should be predictable
&lt;/h2&gt;

&lt;p&gt;If the app thinks the next step is always save, it will feel wrong whenever the AI is close but not exact.&lt;/p&gt;

&lt;p&gt;A better flow is to make the likely second tap obvious:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;adjust portion&lt;/li&gt;
&lt;li&gt;change item&lt;/li&gt;
&lt;li&gt;add a missing ingredient&lt;/li&gt;
&lt;li&gt;confirm and save&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The user should not have to hunt for the correction path. If editing feels hidden, the AI result starts to feel brittle.&lt;/p&gt;

&lt;p&gt;For food logging, close is useful only when fixing close is cheap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Photo, barcode, and text create different second taps
&lt;/h2&gt;

&lt;p&gt;The input mode changes what the user is probably checking next.&lt;/p&gt;

&lt;p&gt;A barcode scan usually needs a serving-size check.&lt;/p&gt;

&lt;p&gt;A photo estimate usually needs a portion or ingredient check.&lt;/p&gt;

&lt;p&gt;A text entry usually needs confirmation that the app understood the wording.&lt;/p&gt;

&lt;p&gt;Those are different follow-up moments. Treating them all as the same screen makes the app simpler internally, but slower for the person using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I am building
&lt;/h2&gt;

&lt;p&gt;MetricSync is my attempt at this kind of flow: iPhone AI food logging from photo, barcode, or text, with a quick correction loop before saving.&lt;/p&gt;

&lt;p&gt;It has a 3-day free trial, then it is $5/month: &lt;a href="https://metricsync.download" rel="noopener noreferrer"&gt;https://metricsync.download&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The broader product lesson: AI products should not only optimize the impressive first action. They should optimize the next tap, because that is where trust is either gained or lost.&lt;/p&gt;

</description>
      <category>ios</category>
      <category>ai</category>
      <category>ux</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Give your AI coding session a token budget before it starts</title>
      <dc:creator>John</dc:creator>
      <pubDate>Sun, 21 Jun 2026 00:23:42 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/give-your-ai-coding-session-a-token-budget-before-it-starts-13ib</link>
      <guid>https://dev.to/johns23424234324234/give-your-ai-coding-session-a-token-budget-before-it-starts-13ib</guid>
      <description>&lt;p&gt;AI coding tools are easiest to misuse when they feel like a normal chat box.&lt;/p&gt;

&lt;p&gt;You ask Claude Code, Codex, Cursor, or another agent to make a change. It reads files, proposes edits, runs commands, hits an error, retries, reads more files, tries again, and suddenly the session is much larger than the task deserved.&lt;/p&gt;

&lt;p&gt;The fix is not to stop using AI coding tools. The fix is to give each session a tiny token budget before it starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  My preflight check
&lt;/h2&gt;

&lt;p&gt;Before I start an AI coding session, I try to answer three questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is this task allowed to cost?&lt;/li&gt;
&lt;li&gt;What would make me stop and rethink the prompt?&lt;/li&gt;
&lt;li&gt;What signal tells me the agent is looping instead of progressing?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That takes less than a minute, but it changes the way I use the tool.&lt;/p&gt;

&lt;p&gt;For example, a small UI copy change should not turn into a project-wide exploration. A focused bug fix should not need five repeated attempts that all inspect the same files. A quick refactor should not quietly become a long architecture session unless I chose that on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  The useful signal is live, not monthly
&lt;/h2&gt;

&lt;p&gt;Monthly usage dashboards are good for accounting. They are not great for behavior.&lt;/p&gt;

&lt;p&gt;By the time you check a monthly bill, the habit already happened.&lt;/p&gt;

&lt;p&gt;A live token meter is more useful because it sits inside the decision moment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should I let the agent keep trying?&lt;/li&gt;
&lt;li&gt;Should I narrow the prompt?&lt;/li&gt;
&lt;li&gt;Should I stop and inspect the code myself?&lt;/li&gt;
&lt;li&gt;Should I split the task into a smaller session?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those decisions happen while coding, not later in a billing page.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stop rules I use
&lt;/h2&gt;

&lt;p&gt;I like simple rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the agent reads a lot of unrelated files, stop and give it a narrower path.&lt;/li&gt;
&lt;li&gt;If it retries the same failing command twice, stop and inspect the failure directly.&lt;/li&gt;
&lt;li&gt;If context grows faster than the diff, stop and restate the task.&lt;/li&gt;
&lt;li&gt;If the session starts feeling vague, stop and create a smaller prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point is not to obsess over every token. The point is to notice when the session stops matching the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built this into the menu bar
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://tokenbar.site/" rel="noopener noreferrer"&gt;TokenBar&lt;/a&gt; because I wanted this signal somewhere I would actually see it while working.&lt;/p&gt;

&lt;p&gt;A browser dashboard was too far away. A monthly usage page was too late. A menu bar counter was close enough to glance at before sending the next prompt.&lt;/p&gt;

&lt;p&gt;TokenBar is free to try, with TokenBar Pro at $15 lifetime if you want the full version.&lt;/p&gt;

&lt;h2&gt;
  
  
  The habit is the real feature
&lt;/h2&gt;

&lt;p&gt;The real win is not knowing an exact number after the fact.&lt;/p&gt;

&lt;p&gt;The win is catching the moment where a useful AI coding session turns into an expensive blur.&lt;/p&gt;

&lt;p&gt;Give the session a budget before it starts. Watch the live signal. Stop earlier when the agent drifts.&lt;/p&gt;

&lt;p&gt;That one habit has saved me more than any clever prompt template.&lt;/p&gt;

</description>
      <category>macos</category>
      <category>ai</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>AI food logging needs a confidence handoff, not a magic result</title>
      <dc:creator>John</dc:creator>
      <pubDate>Sat, 20 Jun 2026 15:23:55 +0000</pubDate>
      <link>https://dev.to/johns23424234324234/ai-food-logging-needs-a-confidence-handoff-not-a-magic-result-2m8e</link>
      <guid>https://dev.to/johns23424234324234/ai-food-logging-needs-a-confidence-handoff-not-a-magic-result-2m8e</guid>
      <description>&lt;p&gt;The clean demo for an AI food logger is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;take a photo&lt;/li&gt;
&lt;li&gt;get a perfect meal log&lt;/li&gt;
&lt;li&gt;move on&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is not the product I trust in real life.&lt;/p&gt;

&lt;p&gt;Real meals are messy. A bowl has hidden ingredients. A package has a barcode but the serving size still needs checking. A homemade plate might be easier to describe with text than photograph. The useful UX is not pretending the first answer is magic. It is handing the user a good draft and making the next action obvious.&lt;/p&gt;

&lt;p&gt;That is the product lesson I keep coming back to while building MetricSync, an iPhone AI food logging app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result should explain how it got there
&lt;/h2&gt;

&lt;p&gt;A food log created from a barcode should feel different from a food log created from a blurry dinner photo.&lt;/p&gt;

&lt;p&gt;Not with a big warning modal. Just small product cues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;this came from a barcode scan&lt;/li&gt;
&lt;li&gt;this came from a photo estimate&lt;/li&gt;
&lt;li&gt;this came from text you typed&lt;/li&gt;
&lt;li&gt;this is easy to adjust before saving&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That context changes how much the user trusts the result.&lt;/p&gt;

&lt;p&gt;If the app hides the source, every result looks equally confident. That sounds clean, but it is not honest UX. A barcode match, a photo guess, and a text parse are different kinds of information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Correction is part of the happy path
&lt;/h2&gt;

&lt;p&gt;A lot of AI products treat editing as failure.&lt;/p&gt;

&lt;p&gt;For food logging, I think editing is normal. The app should assume the user may need to fix the portion, swap an ingredient, or rename a meal.&lt;/p&gt;

&lt;p&gt;The important part is speed. If the correction step feels like starting over, the app loses. If the correction step feels like tapping the one thing that was slightly off, the AI still saved time.&lt;/p&gt;

&lt;p&gt;That is the handoff:&lt;/p&gt;

&lt;p&gt;AI gets the user close. The UI makes the last correction cheap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Photo, barcode, and text are not competing features
&lt;/h2&gt;

&lt;p&gt;The more I test this, the more I think the input modes solve different moments.&lt;/p&gt;

&lt;p&gt;Photo is best when the food is in front of you.&lt;br&gt;
Barcode is best when the food is packaged.&lt;br&gt;
Text is best when you remember it later or the photo would be useless.&lt;/p&gt;

&lt;p&gt;The mistake is forcing one input mode to be the hero every time. The better product is one where the user can choose the lowest-friction path for the situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I am building
&lt;/h2&gt;

&lt;p&gt;MetricSync is my attempt at that model: iPhone AI food logging from photo, barcode, or text, with a quick correction loop instead of pretending every first guess is final.&lt;/p&gt;

&lt;p&gt;It has a 3-day free trial, then it is $5/month: &lt;a href="https://metricsync.download" rel="noopener noreferrer"&gt;https://metricsync.download&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The broader product lesson: if AI output needs user trust, do not only optimize the first answer. Optimize the handoff after the first answer.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ux</category>
      <category>ios</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
