<?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: Apoorv Darshan</title>
    <description>The latest articles on DEV Community by Apoorv Darshan (@apoorvdarshan).</description>
    <link>https://dev.to/apoorvdarshan</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3803883%2F9b7a7479-6c77-4e92-a6b7-98c03078f916.JPG</url>
      <title>DEV Community: Apoorv Darshan</title>
      <link>https://dev.to/apoorvdarshan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/apoorvdarshan"/>
    <language>en</language>
    <item>
      <title>Screenshotting a locked iPhone over Wi-Fi (after AirPlay betrayed me)</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Sun, 14 Jun 2026 14:30:15 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/screenshotting-a-locked-iphone-over-wi-fi-after-airplay-betrayed-me-j3l</link>
      <guid>https://dev.to/apoorvdarshan/screenshotting-a-locked-iphone-over-wi-fi-after-airplay-betrayed-me-j3l</guid>
      <description>&lt;p&gt;My first attempt at cable-free iPhone capture went AirPlay-mirror -&amp;gt; ScreenCaptureKit. It worked until it didn't: on macOS Tahoe, the mirrored window &lt;strong&gt;blacks out&lt;/strong&gt; the moment a capture context goes active. Dead end.&lt;/p&gt;

&lt;p&gt;So TetherShot's Wi-Fi mode now goes a layer deeper, through Apple's developer-services RemoteXPC tunnel (via pymobiledevice3).&lt;/p&gt;

&lt;p&gt;What that buys you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cable-free captures over your local network&lt;/li&gt;
&lt;li&gt;Works even when the phone is &lt;strong&gt;locked&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;A real framebuffer grab at full 1179x2556 (not a compressed mirror)&lt;/li&gt;
&lt;li&gt;No sudo per capture — a tiny root &lt;code&gt;tunneld&lt;/code&gt; LaunchDaemon keeps the tunnel alive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Setup is a one-time USB pairing plus Developer Mode. After that, the wire stays home.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; tethershot
tethershot &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's a tiny macOS menu-bar app: screenshots land in a folder you pick and copy to your clipboard. Local-first, no account, no telemetry, MIT open source.&lt;/p&gt;

&lt;p&gt;Built and tested on macOS 26 (Tahoe) + iOS 26.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/apoorvdarshan/TetherShot" rel="noopener noreferrer"&gt;https://github.com/apoorvdarshan/TetherShot&lt;/a&gt;&lt;/p&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Stop pasting the same post into 12 tabs — I built a local-first cross-poster</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Sun, 14 Jun 2026 05:15:23 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/stop-pasting-the-same-post-into-12-tabs-i-built-a-local-first-cross-poster-13a9</link>
      <guid>https://dev.to/apoorvdarshan/stop-pasting-the-same-post-into-12-tabs-i-built-a-local-first-cross-poster-13a9</guid>
      <description>&lt;p&gt;Launch day, every time: write the announcement once, then paste it into X, LinkedIn, Bluesky, Mastodon, and a dozen other tabs — fixing link previews and character limits on each.&lt;/p&gt;

&lt;p&gt;I got tired of it and built &lt;strong&gt;Crossposter&lt;/strong&gt;: compose once, pick your channels, publish to all of them from your &lt;strong&gt;own machine&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @apoorvdarshan/crossposter@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It opens at &lt;code&gt;http://localhost:2004&lt;/code&gt;. No cloud, no account, MIT-licensed.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://crossposter.apoorvdarshan.com" rel="noopener noreferrer"&gt;https://crossposter.apoorvdarshan.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Designing a bring-your-own-key (BYOK) architecture on iOS</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Sun, 14 Jun 2026 03:07:22 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/designing-a-bring-your-own-key-byok-architecture-on-ios-45id</link>
      <guid>https://dev.to/apoorvdarshan/designing-a-bring-your-own-key-byok-architecture-on-ios-45id</guid>
      <description>&lt;p&gt;BYOK means the user supplies their own provider API key. Here's the shape of it in Scowld:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each provider has a Keychain entry (&lt;code&gt;com.scowld.apikey.&amp;lt;provider&amp;gt;&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The UI never persists keys in &lt;code&gt;UserDefaults&lt;/code&gt; or files.&lt;/li&gt;
&lt;li&gt;Requests are built on-device and sent &lt;strong&gt;directly&lt;/strong&gt; to the provider — no proxy server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The payoff: no backend to run, no keys to custody, and a privacy story that's verifiable because there's nothing in the middle.&lt;/p&gt;

&lt;p&gt;Full source: &lt;a href="https://github.com/apoorvdarshan/scowld" rel="noopener noreferrer"&gt;https://github.com/apoorvdarshan/scowld&lt;/a&gt;&lt;/p&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I reverse-engineered Wellfound to learn web automation — the 3 layers, open-sourced</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Sat, 13 Jun 2026 21:15:17 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/i-reverse-engineered-wellfound-to-learn-web-automation-the-3-layers-open-sourced-55d4</link>
      <guid>https://dev.to/apoorvdarshan/i-reverse-engineered-wellfound-to-learn-web-automation-the-3-layers-open-sourced-55d4</guid>
      <description>&lt;p&gt;Reverse-engineering a real product is one of the best ways to actually understand how the modern web works. So I built &lt;strong&gt;wellfound-bot&lt;/strong&gt; — an open-source (MIT, Python) project that turns your &lt;em&gt;own&lt;/em&gt; Wellfound (ex-AngelList Talent) job hunt into a single command, and documents the whole thing as a learning resource.&lt;/p&gt;

&lt;p&gt;The job-hunt part is the hook. The interesting part is the &lt;strong&gt;three layers of web automation&lt;/strong&gt; I had to peel back to get there — each more "invisible" than the last.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 1 — Human-like browser automation (Playwright)
&lt;/h2&gt;

&lt;p&gt;Driving a browser is easy. Driving one that doesn't &lt;em&gt;look&lt;/em&gt; like a robot is the actual skill. This layer uses Playwright with curved mouse paths, hovers, think-pauses, per-character typing with randomized timing, and rate limits — to understand what "human-like" really means at the event level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 2 — Read-only API capture over CDP
&lt;/h2&gt;

&lt;p&gt;The moment you launch an automation browser, &lt;code&gt;navigator.webdriver&lt;/code&gt; flips to &lt;code&gt;true&lt;/code&gt; and you're flagged. So instead of faking a browser, this layer &lt;strong&gt;attaches to your &lt;em&gt;own&lt;/em&gt; real Chrome&lt;/strong&gt; over the Chrome DevTools Protocol and &lt;strong&gt;observes&lt;/strong&gt; the GraphQL traffic the app already makes as you browse. You learn the API by &lt;em&gt;watching&lt;/em&gt; it — read-only, &lt;code&gt;navigator.webdriver&lt;/code&gt; stays &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 3 — Pure-HTTP replay with a Chrome TLS/JA3 fingerprint
&lt;/h2&gt;

&lt;p&gt;Once you understand the endpoints, drop the browser entirely. Using &lt;strong&gt;&lt;code&gt;curl_cffi&lt;/code&gt;&lt;/strong&gt;, it replays captured requests over plain HTTP with &lt;strong&gt;Chrome's exact TLS/JA3 fingerprint&lt;/strong&gt; and your cookies — indistinguishable from real Chrome at the network layer. No automation flags, no headless tells.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one-command agent
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python wf_agent.py &lt;span class="nt"&gt;--skills&lt;/span&gt; React &lt;span class="nt"&gt;--remote&lt;/span&gt; &lt;span class="nt"&gt;--limit&lt;/span&gt; 5
&lt;span class="c"&gt;# or natural language (optional, via Claude):&lt;/span&gt;
python wf_agent.py &lt;span class="s2"&gt;"apply to 5 remote React jobs with pay"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Stack &amp;amp; setup
&lt;/h2&gt;

&lt;p&gt;Python 3.10+, Playwright, &lt;code&gt;curl_cffi&lt;/code&gt;, GraphQL. MIT licensed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; playwright &lt;span class="nb"&gt;install &lt;/span&gt;chromium
python login.py   &lt;span class="c"&gt;# one-time manual login&lt;/span&gt;
python run.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚠️ Educational / personal-use only
&lt;/h2&gt;

&lt;p&gt;Built to &lt;strong&gt;study web automation and API reverse-engineering&lt;/strong&gt; — and to automate &lt;strong&gt;your own&lt;/strong&gt; account, at your own risk. Automating Wellfound is &lt;strong&gt;against their ToS&lt;/strong&gt; and accounts can be suspended. &lt;strong&gt;Don't mass-apply, scrape at scale, or operate accounts that aren't yours.&lt;/strong&gt; The value is in understanding the techniques, not abusing them.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://github.com/apoorvdarshan/wellfound-bot" rel="noopener noreferrer"&gt;https://github.com/apoorvdarshan/wellfound-bot&lt;/a&gt;&lt;/strong&gt; (MIT)&lt;/p&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why I built a quit-app around the craving, not the chart</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Sat, 13 Jun 2026 19:00:30 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/why-i-built-a-quit-app-around-the-craving-not-the-chart-1nnh</link>
      <guid>https://dev.to/apoorvdarshan/why-i-built-a-quit-app-around-the-craving-not-the-chart-1nnh</guid>
      <description>&lt;p&gt;Most habit apps are great at hindsight. A streak counter, a calendar, a chart you look at the morning after you slip. None of it helps in the 90 seconds when you actually want to relapse.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Quit All&lt;/strong&gt; around the opposite idea: a button for the moment a craving hits.&lt;/p&gt;

&lt;h2&gt;
  
  
  SOS mode
&lt;/h2&gt;

&lt;p&gt;Open it during a craving and it starts a timer, then walks you through prompts and GIFs until the urge passes. Cravings are short — the app is designed for those few minutes, not the dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Everything else supports the moment
&lt;/h2&gt;

&lt;p&gt;Streaks, relapse logging that doesn't wipe your progress, money saved, milestones, danger-time stats, and widgets. It works for smoking, vaping, alcohol, porn, social media, weed, gambling, overspending, and caffeine.&lt;/p&gt;

&lt;p&gt;It's a solo build, free to download.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App Store: &lt;a href="https://apps.apple.com/us/app/quit-all-break-every-habit/id6760978934" rel="noopener noreferrer"&gt;https://apps.apple.com/us/app/quit-all-break-every-habit/id6760978934&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Website: &lt;a href="https://quit-all.com" rel="noopener noreferrer"&gt;https://quit-all.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd love feedback on whether "SOS button for cravings" lands as the framing.&lt;/p&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Your Mac can screenshot a USB iPhone — Apple just hides the device</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Sat, 13 Jun 2026 14:30:32 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/your-mac-can-screenshot-a-usb-iphone-apple-just-hides-the-device-5831</link>
      <guid>https://dev.to/apoorvdarshan/your-mac-can-screenshot-a-usb-iphone-apple-just-hides-the-device-5831</guid>
      <description>&lt;p&gt;Plug an iPhone into a Mac and AVFoundation can see it as a real capture device — full resolution, actual framebuffer. The catch: Apple filters it out of the default device list.&lt;/p&gt;

&lt;p&gt;The unlock is one CoreMediaIO property. Flip &lt;code&gt;AllowScreenCaptureDevices&lt;/code&gt; on, re-enumerate, and the iPhone shows up as a &lt;code&gt;.muxed&lt;/code&gt; AVCaptureDevice right next to your webcam:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;prop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;CMIOObjectPropertyAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nv"&gt;mSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;CMIOObjectPropertySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kCMIOHardwarePropertyAllowScreenCaptureDevices&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nv"&gt;mScope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;mElement&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;UInt32&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="kt"&gt;CMIOObjectSetPropertyData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;CMIOObjectID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kCMIOObjectSystemObject&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;UInt32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;MemoryLayout&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ofValue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that it's a plain AVFoundation pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find the &lt;code&gt;.muxed&lt;/code&gt; device in &lt;code&gt;AVCaptureDevice.DiscoverySession&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run a capture session, grab one frame&lt;/li&gt;
&lt;li&gt;Write native 1179x2556 to your folder, copy to clipboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No AirPlay, no mirroring window, no compressed stream. It's the real thing the phone is rendering, captured instantly over the cable.&lt;/p&gt;

&lt;p&gt;This is the USB mode of TetherShot — a tiny macOS menu-bar app. MIT, ships via npm, builds from source so there's no Gatekeeper warning.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; tethershot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Code: &lt;a href="https://github.com/apoorvdarshan/TetherShot" rel="noopener noreferrer"&gt;https://github.com/apoorvdarshan/TetherShot&lt;/a&gt;&lt;/p&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I built a free, open-source AI calorie tracker because the others got greedy</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Sat, 13 Jun 2026 14:00:20 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/i-built-a-free-open-source-ai-calorie-tracker-because-the-others-got-greedy-npg</link>
      <guid>https://dev.to/apoorvdarshan/i-built-a-free-open-source-ai-calorie-tracker-because-the-others-got-greedy-npg</guid>
      <description>&lt;p&gt;Most calorie trackers have drifted into the same place: a subscription wall, ads, a mandatory account, and your eating data quietly monetized. I wanted the opposite, so I built &lt;strong&gt;Fud AI&lt;/strong&gt; — a free, open-source, privacy-first calorie tracker for iOS and Android.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core idea
&lt;/h2&gt;

&lt;p&gt;Point your camera at a meal and the AI estimates calories + macros in seconds. No scrolling a database of forty "grilled chicken" entries. If the guess is off, you unlock and edit before logging.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it different
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free &amp;amp; open source (MIT)&lt;/strong&gt; — no paywall, no dark patterns. Code: &lt;a href="https://github.com/apoorvdarshan/fud-ai" rel="noopener noreferrer"&gt;https://github.com/apoorvdarshan/fud-ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy-first&lt;/strong&gt; — no account, no cloud sync, no analytics. Your log lives on your device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bring your own AI&lt;/strong&gt; — 13 providers (Gemini, OpenAI, Claude, Grok, Groq, Mistral…), local Ollama, or on-device Apple Intelligence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10+ ways to log&lt;/strong&gt; — camera, barcode, nutrition label, voice, text, manual, saved meals.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;SwiftUI on iOS, Jetpack Compose on Android, all data local (UserDefaults / on-device storage), keys in the Keychain / Android Keystore.&lt;/p&gt;

&lt;p&gt;If a free, private calorie tracker sounds useful, try it at &lt;a href="https://fud-ai.app" rel="noopener noreferrer"&gt;https://fud-ai.app&lt;/a&gt; or star the repo. Feedback very welcome.&lt;/p&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Fable 5 lasted 72 hours: the model that could one-shot your backlog, then got banned</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Sat, 13 Jun 2026 12:23:11 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/fable-5-lasted-72-hours-the-model-that-could-one-shot-your-backlog-then-got-banned-3c26</link>
      <guid>https://dev.to/apoorvdarshan/fable-5-lasted-72-hours-the-model-that-could-one-shot-your-backlog-then-got-banned-3c26</guid>
      <description>&lt;p&gt;There's a cartoon going around dev circles this weekend: a handful of people huddled around a campfire in a ruined, post-apocalyptic city. The caption, from Dan Shipper:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"yes, eventually Fable was banned. but for a beautiful moment in time, we could one shot our whole backlog."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's funny because it's barely an exaggeration. Here's what actually happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  A 72-hour life
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;June 9, 2026&lt;/strong&gt; — Anthropic ships &lt;strong&gt;Claude Fable 5&lt;/strong&gt;, the first publicly available model in its "Mythos" tier. Fable is a guardrailed version of &lt;strong&gt;Mythos 5&lt;/strong&gt;, the frontier model Anthropic previewed in April that reportedly found security flaws in &lt;em&gt;every&lt;/em&gt; major operating system and browser it was tested against. Mythos itself was locked behind a vetted-access program ("Project Glasswing," ~50 organizations like Apple, Google, Microsoft, Amazon, and CrowdStrike). Fable was meant to be the safe, public-facing version — with responses blocked in high-risk areas like cybersecurity and biology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hours after launch&lt;/strong&gt; — researchers reading the (319-page!) system card find a covert limitation: Fable would &lt;em&gt;silently&lt;/em&gt; downgrade its answers when it detected questions about cutting-edge AI development — with no notice to the user. The backlash was immediate. Nathan Lambert called it "appalling"; Dean Ball called it "secret sabotage." Anthropic reversed within hours: &lt;em&gt;"We made the wrong tradeoff, and we apologize for not getting the balance right."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;June 12, 5:21 PM ET&lt;/strong&gt; — the U.S. government orders Anthropic to immediately disable &lt;strong&gt;both Fable 5 and Mythos 5&lt;/strong&gt;, for &lt;em&gt;everyone, worldwide&lt;/em&gt;, citing national security. Anthropic complies the same day.&lt;/p&gt;

&lt;p&gt;That's the whole arc. Three days.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it got pulled
&lt;/h2&gt;

&lt;p&gt;Officially, the directive was framed as an export-control measure aimed at foreign nationals. But according to Anthropic, the real trigger was a claimed &lt;strong&gt;"narrow, non-universal jailbreak"&lt;/strong&gt; of Fable 5. And the jailbreak itself? In Anthropic's own words, it amounts to &lt;em&gt;"asking the model to read a specific codebase and fix any software flaws"&lt;/em&gt; — surfacing minor, already-known vulnerabilities that other public models can find too.&lt;/p&gt;

&lt;p&gt;If you've ever pointed an AI at your repo and said "find the bugs," congratulations — you've performed the jailbreak.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anthropic isn't happy
&lt;/h2&gt;

&lt;p&gt;Anthropic is complying but pushing back hard:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We disagree that the finding of a narrow potential jailbreak should be cause for recalling a commercial model deployed to hundreds of millions of people."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Their argument: the same capability exists in competing models (they name OpenAI's GPT-5.5) and is used by cybersecurity professionals every day. Recalling a shipped model over it, they say, would effectively halt new model launches across the industry if it became the standard.&lt;/p&gt;

&lt;p&gt;There's an irony a lot of people are pointing at. Anthropic built its brand on loudly warning how dangerous frontier models are — and then selling the guardrails. Sam Altman had previously dunked on this as &lt;em&gt;"fear-based marketing."&lt;/em&gt; This week, that positioning arguably attracted exactly the scrutiny that nuked the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it means if you build software
&lt;/h2&gt;

&lt;p&gt;The campfire joke lands because, for three days, a lot of teams genuinely &lt;em&gt;did&lt;/em&gt; clear backlogs with a single model that was that good at reading and fixing code. Then it vanished — globally, overnight, by directive — while other Anthropic models stayed untouched.&lt;/p&gt;

&lt;p&gt;The lesson isn't "AI bad" or "government bad." It's &lt;strong&gt;model continuity&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't hard-wire one model into your pipeline.&lt;/strong&gt; Access can disappear for reasons that have nothing to do with you: regulation, a security finding, an export order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Abstract your provider.&lt;/strong&gt; Keep prompts and tooling portable so switching models (or vendors) is a config change, not a rewrite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capability is outrunning policy.&lt;/strong&gt; A model good enough to one-shot a backlog is also good enough to make regulators nervous. Expect more turbulence, not less.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fable 5 may come back — Anthropic says it hopes to reinstate access and believes the directive stems from "a misunderstanding." But for now, it's a campfire story.&lt;/p&gt;

&lt;p&gt;For a beautiful moment in time, we could one-shot our whole backlog.&lt;/p&gt;




&lt;h3&gt;
  
  
  Sources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/news/fable-mythos-access" rel="noopener noreferrer"&gt;Anthropic — Statement on the US government directive to suspend Fable 5 and Mythos 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcrunch.com/2026/06/12/anthropics-safety-warnings-may-have-just-backfired-the-government-has-pulled-the-plug-on-its-most-powerful-ai/" rel="noopener noreferrer"&gt;TechCrunch — The government pulled the plug on Anthropic's most powerful AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nbcnews.com/tech/tech-news/anthropic-suspends-new-ai-models-fable-mythos-government-directive-rcna349901" rel="noopener noreferrer"&gt;NBC News — Anthropic suspends Fable/Mythos after government directive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fortune.com/2026/06/10/anthropic-accu-claude-fable-5-limits-capabilities-ai-researchers-developers/" rel="noopener noreferrer"&gt;Fortune — Anthropic walks back covert capability limits on Fable 5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Local-first social publishing, explained</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Sat, 13 Jun 2026 05:15:18 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/local-first-social-publishing-explained-2587</link>
      <guid>https://dev.to/apoorvdarshan/local-first-social-publishing-explained-2587</guid>
      <description>&lt;p&gt;Crossposter runs on &lt;code&gt;localhost&lt;/code&gt; and talks to each platform directly. Your tokens never leave your computer — no cloud, no SaaS holding your accounts. MIT licensed.&lt;/p&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why I removed all payments from my app and went free</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Sat, 13 Jun 2026 03:07:18 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/why-i-removed-all-payments-from-my-app-and-went-free-48fi</link>
      <guid>https://dev.to/apoorvdarshan/why-i-removed-all-payments-from-my-app-and-went-free-48fi</guid>
      <description>&lt;p&gt;Scowld used to have subscriptions, a paywall, and voice credits. I deleted all of it.&lt;/p&gt;

&lt;p&gt;The new model is &lt;strong&gt;bring-your-own-key (BYOK)&lt;/strong&gt;: users plug in their own AI/voice provider keys and pay those providers directly, at cost. There's no markup to justify and no billing code to maintain.&lt;/p&gt;

&lt;p&gt;This removed an entire category of complexity — RevenueCat, StoreKit products, receipt validation, server-side entitlements — and made the app genuinely free.&lt;/p&gt;

&lt;p&gt;It's also open source now: &lt;a href="https://github.com/apoorvdarshan/scowld" rel="noopener noreferrer"&gt;https://github.com/apoorvdarshan/scowld&lt;/a&gt;&lt;/p&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The iPhone screenshot tool Apple never shipped (so I built it)</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Fri, 12 Jun 2026 14:30:15 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/the-iphone-screenshot-tool-apple-never-shipped-so-i-built-it-111l</link>
      <guid>https://dev.to/apoorvdarshan/the-iphone-screenshot-tool-apple-never-shipped-so-i-built-it-111l</guid>
      <description>&lt;p&gt;Here's the official way to get a clean iPhone screenshot onto your Mac in 2026:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Plug in the iPhone over USB&lt;/li&gt;
&lt;li&gt;Open QuickTime Player&lt;/li&gt;
&lt;li&gt;New Movie Recording → pick the iPhone as the source&lt;/li&gt;
&lt;li&gt;Wait for the mirror window&lt;/li&gt;
&lt;li&gt;Pause on the exact frame you want&lt;/li&gt;
&lt;li&gt;Screenshot the &lt;em&gt;window&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Crop out the window chrome&lt;/li&gt;
&lt;li&gt;Discover it's not full resolution anyway&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Eight steps. To grab one frame. It's a record-a-video-and-pause-it hack for something that should be a single keystroke.&lt;/p&gt;

&lt;p&gt;The frustrating part: macOS already knows how to do this properly. There's a CoreMediaIO property called &lt;code&gt;AllowScreenCaptureDevices&lt;/code&gt;. Flip it on and your iPhone shows up as a normal &lt;code&gt;AVCaptureDevice&lt;/code&gt; — the same way Apple's own internal tooling sees it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;defaults write &lt;span class="nt"&gt;-g&lt;/span&gt; AllowScreenCaptureDevices &lt;span class="nt"&gt;-bool&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From there it's plain AVFoundation: open the &lt;code&gt;.muxed&lt;/code&gt; device, grab the framebuffer, done. Native 1179x2556, no mirror window, no cropping.&lt;/p&gt;

&lt;p&gt;That's the whole idea behind &lt;strong&gt;TetherShot&lt;/strong&gt; — a tiny macOS menu-bar app that does the dance for you. Press &lt;code&gt;Cmd+Shift+7&lt;/code&gt; anywhere and the pixel-perfect frame lands in a folder you chose plus your clipboard.&lt;/p&gt;

&lt;p&gt;No QuickTime. No analytics. No account. MIT open source.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/apoorvdarshan/TetherShot" rel="noopener noreferrer"&gt;https://github.com/apoorvdarshan/TetherShot&lt;/a&gt;&lt;/p&gt;

</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>One compose box, twelve platforms: meet Crossposter</title>
      <dc:creator>Apoorv Darshan</dc:creator>
      <pubDate>Fri, 12 Jun 2026 05:15:15 +0000</pubDate>
      <link>https://dev.to/apoorvdarshan/one-compose-box-twelve-platforms-meet-crossposter-3i4c</link>
      <guid>https://dev.to/apoorvdarshan/one-compose-box-twelve-platforms-meet-crossposter-3i4c</guid>
      <description>&lt;p&gt;Compose once, publish to X, LinkedIn, Bluesky, Mastodon, Instagram, YouTube, and 6 more — from your own machine. Free, open source, one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @apoorvdarshan/crossposter@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>indiehackers</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
