<?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: Admin Supafast</title>
    <description>The latest articles on DEV Community by Admin Supafast (@supafast-tech).</description>
    <link>https://dev.to/supafast-tech</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%2F4070835%2F7bb80f27-3cd6-4956-b120-81fb8db32588.png</url>
      <title>DEV Community: Admin Supafast</title>
      <link>https://dev.to/supafast-tech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/supafast-tech"/>
    <language>en</language>
    <item>
      <title>AskAiRank Review: An Honest, Founder-Written Look at My Own AEO Tracker</title>
      <dc:creator>Admin Supafast</dc:creator>
      <pubDate>Mon, 17 Aug 2026 15:37:10 +0000</pubDate>
      <link>https://dev.to/supafast-tech/askairank-review-an-honest-founder-written-look-at-my-own-aeo-tracker-50nm</link>
      <guid>https://dev.to/supafast-tech/askairank-review-an-honest-founder-written-look-at-my-own-aeo-tracker-50nm</guid>
      <description>&lt;p&gt;I built AskAiRank, so this isn't a neutral third-party review. It's the review I wish someone had written before I sank a few weekends into building this thing: what it actually does well, where it falls short, and who should probably wait before signing up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I run a handful of small SaaS products (a translator app, an AI text tool, a couple of others), and I kept noticing something in the traffic logs: people showing up on a pricing page with zero referrer, zero search query, just a cold visit that converted anyway. Eventually I connected the dots. They'd asked ChatGPT or Perplexity something like "best AI translator for Mac" and got a name dropped straight into the answer.&lt;/p&gt;

&lt;p&gt;That's a problem you can't debug the normal way. Google Search Console tells you your ranking for a keyword. Nothing tells you whether Claude mentioned you yesterday, whether it mentioned a competitor instead, or which page it pulled that recommendation from. So I built the tool I wanted for my own products first, then opened it up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually does
&lt;/h2&gt;

&lt;p&gt;The mechanics are simple on purpose. You set up a list of buyer-intent prompts, things a real person would type when they're shopping for something in your category, not generic keywords. Those prompts get run against the models on a schedule instead of once, because a single check tells you almost nothing. Ask the same question twice and you can get a different answer, a different order, different sources cited. You need to sample over time to see a real pattern, not a coin flip.&lt;/p&gt;

&lt;p&gt;Every response gets parsed for brand mentions, position in the list, and any source links the model cites. That rolls up into a visibility score you can compare against competitors you add manually.&lt;/p&gt;

&lt;p&gt;On the free plan you get one brand, 10 prompts, and coverage across ChatGPT and DeepSeek. The paid tiers add more prompts, more brands, and the rest of the model lineup, Claude, Perplexity, Gemini, Grok, Llama, Mistral, all the way up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's genuinely good
&lt;/h2&gt;

&lt;p&gt;The prompt-and-schedule approach was the right call. In my own testing across our products, I noticed swings from one day to the next that would have looked like noise if I'd only checked once. Watching it over two or three weeks is what actually tells you something.&lt;/p&gt;

&lt;p&gt;It's also cheap by category standards. Most of the AEO tools I looked at before building this one start around $100/month and climb fast. I priced this the way I'd want to pay for a tool as a solo founder: a real free tier, then $19 and $39/month steps before you hit anything resembling an "enterprise" price.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it falls short, honestly
&lt;/h2&gt;

&lt;p&gt;Mention detection in free-form text is genuinely hard, and I'm not going to pretend it's solved. Models write prose, not structured data. They use aliases, partial product names, "you might also check out X" asides buried mid-paragraph, citations that live in a footnote instead of the sentence itself. I'm still iterating on the parsing logic, and I expect I'll be iterating on it for a while. If your brand name is generic or overlaps with a common word, expect the occasional miss.&lt;/p&gt;

&lt;p&gt;It also doesn't currently track Google AI Overviews or AI Mode, only the standalone chat assistants. If a chunk of your traffic comes through Google's AI summary box specifically, this tool won't see that yet. It's on my list, not on the product today.&lt;/p&gt;

&lt;p&gt;And it's a young product built by one small team, not a funded company with a research arm. If you need a dozen locations tracked daily with a dedicated customer success rep, that's a different price bracket and a different company.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should use it, who shouldn't
&lt;/h2&gt;

&lt;p&gt;If you're a solo founder or small team who wants a rough, honest signal on whether AI assistants are recommending you over the competition, and you don't want to pay $99-800/month to find out, this is built for exactly that. Start on the free plan, watch it for two or three weeks, decide from there.&lt;/p&gt;

&lt;p&gt;If you need enterprise-grade coverage across a dozen models and locations, or you specifically need Google AI Overview tracking today, look elsewhere for now, or check back in a few months, because that's roadmap territory for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The parsing engine is the priority. After that: better competitor alerting so you get pinged the moment a rival overtakes you in an answer, instead of noticing it yourself three days later. I'd rather ship those two things solid than pile on features nobody asked for.&lt;/p&gt;

&lt;p&gt;If you want to see where you actually stand, &lt;a href="https://askairank.com" rel="noopener noreferrer"&gt;AskAiRank&lt;/a&gt; has a free plan, no card required. I'd genuinely like to hear where it breaks for your product.&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>reviews</category>
      <category>saas</category>
      <category>startup</category>
    </item>
    <item>
      <title>9 Best Tools to Track Your Brand Mentions in ChatGPT and Other LLMs</title>
      <dc:creator>Admin Supafast</dc:creator>
      <pubDate>Sun, 16 Aug 2026 14:28:34 +0000</pubDate>
      <link>https://dev.to/supafast-tech/9-best-tools-to-track-your-brand-mentions-in-chatgpt-and-other-llms-1455</link>
      <guid>https://dev.to/supafast-tech/9-best-tools-to-track-your-brand-mentions-in-chatgpt-and-other-llms-1455</guid>
      <description>&lt;p&gt;I spent a weekend grepping server logs trying to figure out why a chunk of new signups had no referrer, no UTM params, no search query attached at all. They just appeared, direct traffic with zero context. Tracing a few back through support conversations, the pattern was obvious: people had asked ChatGPT or Perplexity for a recommendation, gotten our product name, and typed the URL in by hand.&lt;/p&gt;

&lt;p&gt;That's not a traffic source any analytics stack is built to catch, because there's no click to attribute. So I went looking for tools that measure, systematically, whether and how often language models mention a given brand. This category (AEO, GEO, "AI visibility," pick your term) turned out to be small, fast-moving, and priced all over the map.&lt;/p&gt;

&lt;h2&gt;
  
  
  How this actually works under the hood
&lt;/h2&gt;

&lt;p&gt;Worth understanding the mechanism first, because it explains the pricing spread and why you should distrust any tool promising a precise "rank."&lt;/p&gt;

&lt;p&gt;There's no API for "what position am I in ChatGPT's answer to X." Every tool here does some version of the same thing: run a bank of representative prompts against model APIs (or automate the consumer chat UIs, riskier and against most providers' terms) on a schedule, parse the completions for brand names and citations, then aggregate that into a visibility score or share-of-voice metric over time.&lt;/p&gt;

&lt;p&gt;Two implications worth knowing before you buy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model coverage drives cost almost linearly.&lt;/strong&gt; Every extra model (GPT class, Claude, Gemini, Perplexity's retrieval layer, DeepSeek) means a separate API contract, separate rate limits, and separate parsing logic, since citation formats differ per model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sampling is inherently noisy.&lt;/strong&gt; Same prompt, same model, different day (or the same minute at nonzero temperature) can produce different brand mentions. Good tools sample repeatedly and report trends; weak ones show a single run and call it a score. Treat any number here like a flaky test suite: one red run doesn't mean the build is broken.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With that context, here's what I found after testing or reading through the pricing and docs of about a dozen tools. Full disclosure: I built the first one, AskAiRank. Included on merit, but weigh accordingly.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. AskAiRank (I built this one)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://askairank.com" rel="noopener noreferrer"&gt;AskAiRank&lt;/a&gt; runs your buyers' actual prompts against ChatGPT, Claude, Perplexity, Gemini, and a handful of other models, then scores how often and how favorably your brand shows up versus competitors.&lt;/p&gt;

&lt;p&gt;Free plan covers one brand across 10 prompts on ChatGPT and DeepSeek, no card required, which is enough to sanity-check whether you're worth tracking at all. Paid starts at $19/month; $39/month unlocks all 8 models we support. No enterprise-gated features hiding behind a "contact sales" wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Otterly.ai
&lt;/h2&gt;

&lt;p&gt;Otterly has been in this space longer than most and keeps its pricing genuinely accessible. The Lite plan is around $29/month for 15 prompts across four engines, with unlimited team seats included, which is unusually generous for the price point.&lt;/p&gt;

&lt;p&gt;Good first tool if you've never measured AI visibility before and want a clean dashboard without a lot of configuration overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Waikay
&lt;/h2&gt;

&lt;p&gt;Waikay ships a free tier and keeps the UI opinionated: instead of a wall of charts, it surfaces a short list of concrete fixes. Less raw data, more "do this next."&lt;/p&gt;

&lt;p&gt;Fits founders who'd rather get a to-do item ("add a comparison page") than interpret a graph themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Nightwatch
&lt;/h2&gt;

&lt;p&gt;Nightwatch started as a conventional rank tracker and bolted AI visibility onto its existing local SEO stack as an add-on module. Base plan runs about $32/month; the AI visibility layer pushes the total to roughly $131/month.&lt;/p&gt;

&lt;p&gt;Makes sense if you're already inside Nightwatch for regular SEO tracking and want one bill instead of two subscriptions covering adjacent things.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Peec AI
&lt;/h2&gt;

&lt;p&gt;Peec is built for SMBs and agencies, with guided onboarding and roughly $95-99/month for 50 prompts and a choice of three out of six supported models, unlimited seats included. Decent middle ground between the cheap tier's narrow coverage and the enterprise tools' everything-included pricing.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Profound
&lt;/h2&gt;

&lt;p&gt;Profound is the name that comes up constantly in AEO conversations right now. It closed a large Series C in early 2026 and lists hundreds of enterprise customers. Pricing starts at $99/month (Starter), climbs to $399/month (Growth), and goes custom above that for enterprise contracts.&lt;/p&gt;

&lt;p&gt;Overkill for a bootstrapped project, but worth knowing about since it's the tool your investors or advisors are most likely to have heard of.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Scrunch
&lt;/h2&gt;

&lt;p&gt;Scrunch targets mid-market teams and explicitly covers every major model, including Claude, which a few competitors either skip or gate behind a higher tier. Starter pricing sits around $250-300/month.&lt;/p&gt;

&lt;p&gt;Makes sense once you're past the bootstrap stage and need broad, uniform model coverage without stitching together multiple vendors.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Semrush AI Toolkit
&lt;/h2&gt;

&lt;p&gt;If you already have a Semrush subscription, the AI Visibility Toolkit adds brand tracking across ChatGPT, Gemini, Perplexity, and Google AI Overviews for about $99/month per domain on top of your existing plan. It pairs share-of-voice tracking with content recommendations aimed at the kinds of pages that tend to get pulled into AI answers.&lt;/p&gt;

&lt;p&gt;A reasonable bolt-on if you're already living in the Semrush ecosystem. A harder sell as a standalone purchase.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Ahrefs Brand Radar
&lt;/h2&gt;

&lt;p&gt;Ahrefs added AI visibility as an add-on to its suite, and it's the most expensive option here by a wide margin: $199/month per AI platform index, or $699/month for all six bundled, stacked on top of an active Ahrefs subscription. Realistic full-coverage cost lands north of $800/month.&lt;/p&gt;

&lt;p&gt;The tradeoff for that price is breadth: it also tracks Reddit, YouTube, and TikTok mentions alongside the AI engines, something nothing else on this list does.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd actually pick
&lt;/h2&gt;

&lt;p&gt;If you're a solo dev or small team validating whether this matters at all, start with a free tier (AskAiRank or Waikay) or a cheap tool (Otterly) before evaluating anything in the $99-800/month range. You don't need six models sampled daily at launch. You need a repeatable signal: are you showing up when someone asks a model about your category, and is that trend moving up or down over a few weeks.&lt;/p&gt;

&lt;p&gt;Once that signal is worth acting on, and once a few hundred dollars a month is a rounding error rather than a real line item, the mid-market and enterprise tools make more sense. Until then, treat this like any other noisy-signal monitoring problem: sample cheaply, sample often, and don't overbuild instrumentation before you know the thing you're instrumenting is worth the attention.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>marketing</category>
      <category>tools</category>
    </item>
    <item>
      <title>Controlling a treadmill from an iPhone over Bluetooth LE</title>
      <dc:creator>Admin Supafast</dc:creator>
      <pubDate>Mon, 10 Aug 2026 16:06:32 +0000</pubDate>
      <link>https://dev.to/supafast-tech/controlling-a-treadmill-from-an-iphone-over-bluetooth-le-101k</link>
      <guid>https://dev.to/supafast-tech/controlling-a-treadmill-from-an-iphone-over-bluetooth-le-101k</guid>
      <description>&lt;p&gt;Most treadmills have a Bluetooth chip and a companion app nobody enjoys using. I wanted to drive the treadmill - speed, incline, live stats - from a clean SwiftUI app instead. That became &lt;a href="https://treadmillpro.app" rel="noopener noreferrer"&gt;Treadmill Pro&lt;/a&gt;, an iOS app that talks to the treadmill directly over Bluetooth Low Energy with CoreBluetooth. Here's what building a BLE hardware controller actually involves.&lt;/p&gt;

&lt;h2&gt;
  
  
  BLE in one paragraph
&lt;/h2&gt;

&lt;p&gt;A BLE device exposes &lt;em&gt;services&lt;/em&gt;, each containing &lt;em&gt;characteristics&lt;/em&gt; you can read, write, or subscribe to. Fitness equipment often speaks FTMS (the Fitness Machine Service), a standard set of characteristics for treadmills, bikes and rowers. In practice, support is uneven - some machines follow the spec, some ship their own quirks - so you discover services at runtime and adapt.&lt;/p&gt;

&lt;h2&gt;
  
  
  The connection lifecycle
&lt;/h2&gt;

&lt;p&gt;The unglamorous truth of BLE is that most of the work is state management:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scan&lt;/strong&gt; for peripherals advertising the right service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect&lt;/strong&gt; and &lt;strong&gt;discover&lt;/strong&gt; services and characteristics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subscribe&lt;/strong&gt; to the ones that stream data (speed, distance, time).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write&lt;/strong&gt; to the control characteristic to change speed or incline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handle disconnects&lt;/strong&gt; - devices drop, users walk out of range, sessions end.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every one of these steps can fail or stall, so the app is really a state machine with a treadmill on the other end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading stats vs sending commands
&lt;/h2&gt;

&lt;p&gt;Two directions, two different concerns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reading&lt;/strong&gt; is a subscription: the treadmill pushes notifications and you decode the bytes into speed, distance, time, calories. The decoding has to match the characteristic's data layout exactly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writing&lt;/strong&gt; is a control request: you send a command to set speed or incline. Many machines require a "take control" handshake before they accept commands, and you have to respect their allowed ranges.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons from talking to hardware
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Assume the spec is a suggestion.&lt;/strong&gt; Real devices deviate. Log raw packets and be defensive when decoding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make the state machine explicit.&lt;/strong&gt; Scanning, connecting, connected, reconnecting - model them directly instead of juggling booleans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never trust the connection.&lt;/strong&gt; Design for the treadmill vanishing mid-run; recover gracefully instead of hanging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the UI responsive during BLE work.&lt;/strong&gt; Connection and discovery are async; the interface should always show what's happening.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;p&gt;BLE hardware apps are less about the flashy UI and more about robust connection handling and correct byte decoding. Get the state machine and the parsing right and the rest is easy.&lt;/p&gt;

&lt;p&gt;The app is at &lt;a href="https://treadmillpro.app" rel="noopener noreferrer"&gt;https://treadmillpro.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've worked with CoreBluetooth or FTMS, I'm curious how you handle devices that ignore the standard - do you maintain per-device quirks, or try to stay generic?&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>bluetooth</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Rendering a live 3D earthquake globe on iOS from the USGS feed</title>
      <dc:creator>Admin Supafast</dc:creator>
      <pubDate>Mon, 10 Aug 2026 15:53:44 +0000</pubDate>
      <link>https://dev.to/supafast-tech/rendering-a-live-3d-earthquake-globe-on-ios-from-the-usgs-feed-55ch</link>
      <guid>https://dev.to/supafast-tech/rendering-a-live-3d-earthquake-globe-on-ios-from-the-usgs-feed-55ch</guid>
      <description>&lt;p&gt;I wanted to see earthquakes the way they actually happen: as points lighting up on a spinning planet, in near real time. That became &lt;a href="https://earthquakes.site" rel="noopener noreferrer"&gt;Earthquake: Live Seismic Monitor&lt;/a&gt;, an iOS app that renders a 3D globe of recent quakes straight from the USGS feed. No backend of my own - just the public data and the device. Here's how it comes together.&lt;/p&gt;

&lt;h2&gt;
  
  
  The data source
&lt;/h2&gt;

&lt;p&gt;The USGS publishes earthquake data as GeoJSON feeds, updated continuously, at several time/magnitude cutoffs (past hour, past day, 2.5+, 4.5+, etc). Each feature has coordinates, magnitude, depth and time. That's everything you need to place a quake on a globe - no custom API required.&lt;/p&gt;

&lt;p&gt;The app polls the appropriate feed, diffs against what it already has, and updates the scene. Because USGS does the heavy lifting, the whole thing is effectively serverless from my side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting quakes on a globe
&lt;/h2&gt;

&lt;p&gt;The core mapping problem is turning (latitude, longitude) into a point on a sphere. Once you have that, each earthquake becomes a marker whose size and color encode magnitude and depth, so a glance tells you "big and shallow" vs "small and deep".&lt;/p&gt;

&lt;p&gt;Design decisions that mattered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Encode magnitude visually.&lt;/strong&gt; Radius and color do more than any label. A magnitude 6 should &lt;em&gt;look&lt;/em&gt; like a magnitude 6.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cluster sensibly.&lt;/strong&gt; Active regions produce swarms; markers need to stay readable when dozens land in one area.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the globe interactive.&lt;/strong&gt; Rotate, zoom, tap a quake for details. It should feel like an object, not a chart.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-time without a server
&lt;/h2&gt;

&lt;p&gt;Every network-dependent app has to answer: what happens offline, and how fresh is "live"? My rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache the last good feed so the globe still renders with no connection.&lt;/li&gt;
&lt;li&gt;Refresh on foreground and on an interval, and show the data's own timestamp so "live" is honest.&lt;/li&gt;
&lt;li&gt;Never block the UI on the network - render what you have, then update.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why no backend
&lt;/h2&gt;

&lt;p&gt;It's tempting to proxy the feed through your own server "for control". But USGS is reliable, public, and built for exactly this. Skipping a backend meant no servers to run, no scaling to worry about, and no place for me to introduce staleness. The device talks to the source directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Great public datasets (USGS here) can carry an entire app - look for them before building infrastructure.&lt;/li&gt;
&lt;li&gt;Encode the important variable (magnitude) into shape and color, not text.&lt;/li&gt;
&lt;li&gt;Be honest about "real time": show the source timestamp instead of implying instant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app is at &lt;a href="https://earthquakes.site" rel="noopener noreferrer"&gt;https://earthquakes.site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've built globe or map visualizations, I'd love to hear how you handle dense clusters of points without the map turning to mush.&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>dataviz</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Generating daily horoscopes and zodiac videos with an automated AI pipeline</title>
      <dc:creator>Admin Supafast</dc:creator>
      <pubDate>Mon, 10 Aug 2026 15:47:33 +0000</pubDate>
      <link>https://dev.to/supafast-tech/generating-daily-horoscopes-and-zodiac-videos-with-an-automated-ai-pipeline-1b83</link>
      <guid>https://dev.to/supafast-tech/generating-daily-horoscopes-and-zodiac-videos-with-an-automated-ai-pipeline-1b83</guid>
      <description>&lt;p&gt;Astrology content has a brutal property: it has to be fresh &lt;em&gt;every single day&lt;/em&gt;, for every sign, ideally in a few languages, forever. Writing that by hand doesn't scale. For &lt;a href="https://astrozodify.com" rel="noopener noreferrer"&gt;AstroZodify&lt;/a&gt; I built a pipeline that generates daily horoscopes and short zodiac videos on a schedule, with humans reviewing rather than writing. Here's the shape of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The content problem
&lt;/h2&gt;

&lt;p&gt;Per day you need: 12 signs x N content types (daily horoscope, love, career) x M languages. That's hundreds of pieces of copy a day that all have to feel written, not templated, and stay consistent with each sign's "voice".&lt;/p&gt;

&lt;p&gt;Templating alone reads robotic. Free-form generation drifts. The trick is constraining an LLM enough to stay on-brand while still sounding human.&lt;/p&gt;

&lt;h2&gt;
  
  
  The generation pipeline
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Structured prompts per sign.&lt;/strong&gt; Each sign has a persona and constraints (tone, themes, length). The model fills the daily specifics, not the whole thing from scratch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduled batch runs.&lt;/strong&gt; A cron job kicks off generation ahead of time so content is ready before it's needed, never on the critical path of a page request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation.&lt;/strong&gt; Output is checked for length, banned phrasing, and structure before it's allowed near the site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store, then serve.&lt;/strong&gt; Everything lands in Postgres. Pages are SSR and just read pre-generated rows, so the LLM is never in the user's request path.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keeping generation &lt;em&gt;offline&lt;/em&gt; from serving is the single most important decision - it keeps pages fast and costs predictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding video
&lt;/h2&gt;

&lt;p&gt;Text was step one. Short vertical zodiac videos (for social) are step two, and that's a heavier pipeline: script -&amp;gt; imagery -&amp;gt; voiceover -&amp;gt; render. That part runs on Cloud Run as a separate job so a slow render never touches the web app, and we pilot one item before any batch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost and safety rails
&lt;/h2&gt;

&lt;p&gt;Anything that calls a paid API in a loop is a footgun. The rules I follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always pilot on 1-10 items before a full batch.&lt;/li&gt;
&lt;li&gt;Never an unbounded loop against a paid API.&lt;/li&gt;
&lt;li&gt;Cache and pre-generate so serving is basically free.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Separate &lt;em&gt;generation&lt;/em&gt; from &lt;em&gt;serving&lt;/em&gt;. Pre-generate on a schedule, serve static rows.&lt;/li&gt;
&lt;li&gt;Constrain the model with per-entity personas instead of free-form prompts.&lt;/li&gt;
&lt;li&gt;Treat video as its own isolated pipeline, not an extension of the text one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can see the output at &lt;a href="https://astrozodify.com" rel="noopener noreferrer"&gt;https://astrozodify.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're generating large volumes of scheduled content, I'd love to compare notes on validation - how do you catch a bad generation before it ships?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>automation</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building an AI translator that lives everywhere on macOS, iOS and Chrome</title>
      <dc:creator>Admin Supafast</dc:creator>
      <pubDate>Mon, 10 Aug 2026 15:43:24 +0000</pubDate>
      <link>https://dev.to/supafast-tech/building-an-ai-translator-that-lives-everywhere-on-macos-ios-and-chrome-36jf</link>
      <guid>https://dev.to/supafast-tech/building-an-ai-translator-that-lives-everywhere-on-macos-ios-and-chrome-36jf</guid>
      <description>&lt;p&gt;Most translation tools make you leave what you're doing: copy text, switch to a tab or app, paste, read, copy back. I wanted translation to sit &lt;em&gt;inside&lt;/em&gt; whatever I was already using. That turned into &lt;a href="https://linguin.app" rel="noopener noreferrer"&gt;Linguin&lt;/a&gt;, an AI translator with a native Mac app, an iPhone app, and a Chrome extension. Here's how I think about building the "same" product across three very different surfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  One idea, three surfaces
&lt;/h2&gt;

&lt;p&gt;The product promise is identical everywhere: select text, get a fast, context-aware translation in 100+ languages. But the &lt;em&gt;interaction&lt;/em&gt; has to be native to each platform, or it feels wrong:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;macOS&lt;/strong&gt;: a menu-bar app plus a global hotkey. Select text anywhere, hit the shortcut, get an overlay. The whole point is that you never switch apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;iOS&lt;/strong&gt;: a share-sheet extension and keyboard, so translation is one tap from any app instead of a context switch to a separate screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome&lt;/strong&gt;: an extension that translates selections and full pages in place, keeping layout intact.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same core, three genuinely different UX shells.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping the core in one place
&lt;/h2&gt;

&lt;p&gt;The translation logic - language detection, prompt construction, tone handling, caching - is the part you never want to fork. If Mac and iOS drift, you get subtly different translations for the same input, which erodes trust fast.&lt;/p&gt;

&lt;p&gt;So the model-facing logic lives behind one small service contract, and each client is a thin shell that owns only its platform UX. A translation request looks the same whether it comes from the menu bar, the share sheet, or a browser selection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "AI" translation instead of a classic API
&lt;/h2&gt;

&lt;p&gt;Classic MT is great at literal accuracy but blind to context. "Book" in a travel app and "book" in a library app should not translate the same way. Passing the surrounding context and a tone hint (formal, casual, technical) to an LLM produces translations that read like a human wrote them, not a dictionary.&lt;/p&gt;

&lt;p&gt;The tradeoffs I had to design around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt;: users expect near-instant results, so caching and streaming matter a lot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: same input should give the same output, so requests are normalized and cached aggressively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt;: batching and caching keep per-translation cost sane.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons so far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ship the platform-native interaction first. A technically perfect translation behind a clunky flow loses to a decent translation that's one keystroke away.&lt;/li&gt;
&lt;li&gt;Centralize the model logic early, before the clients diverge.&lt;/li&gt;
&lt;li&gt;Context and tone are where AI translation actually beats the old tools - lean into that, not raw language count.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to try it, the Mac app, iOS app and Chrome extension are all at &lt;a href="https://linguin.app" rel="noopener noreferrer"&gt;https://linguin.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious how others structure a shared core across native + web clients - do you go with a shared service, a shared package, or just accept some duplication?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>macos</category>
      <category>swift</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I track whether ChatGPT, Claude and Perplexity recommend my product</title>
      <dc:creator>Admin Supafast</dc:creator>
      <pubDate>Mon, 10 Aug 2026 15:41:37 +0000</pubDate>
      <link>https://dev.to/supafast-tech/how-i-track-whether-chatgpt-claude-and-perplexity-recommend-my-product-4969</link>
      <guid>https://dev.to/supafast-tech/how-i-track-whether-chatgpt-claude-and-perplexity-recommend-my-product-4969</guid>
      <description>&lt;p&gt;When people look for software today, a growing share of them never touch Google. They ask ChatGPT, Claude, Perplexity or Gemini "what's the best tool for X?" and take the answer at face value. If your product isn't in that answer, you're invisible to those users, and you have no idea it's happening.&lt;/p&gt;

&lt;p&gt;I kept running into this with our own products, so I built &lt;a href="https://askairank.com" rel="noopener noreferrer"&gt;AskAiRank&lt;/a&gt; to measure it. This post is about the problem and how the tracking actually works under the hood.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: AI answers are a black box
&lt;/h2&gt;

&lt;p&gt;Classic SEO gives you rank trackers, Search Console, backlinks. For AI assistants there's almost nothing. You can't see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether a model mentions your brand when asked about your category&lt;/li&gt;
&lt;li&gt;Where you land relative to competitors in that answer&lt;/li&gt;
&lt;li&gt;Which sources the model cites to justify its recommendation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the answers aren't deterministic. Ask the same question twice and you can get different tools, different ordering, different citations. So a single manual check tells you nothing, you need to sample over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the tracking works
&lt;/h2&gt;

&lt;p&gt;The core loop is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompts.&lt;/strong&gt; You define a set of buyer-intent prompts for your category, e.g. "best AI translation app for Mac" or "tools to monitor earthquakes".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run across models.&lt;/strong&gt; Each prompt is sent to ChatGPT, Claude, Perplexity and Gemini on a schedule, so we sample the distribution rather than a single roll.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parse the response.&lt;/strong&gt; For each answer we extract brand mentions, their position in the list, sentiment, and any cited source URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Score and compare.&lt;/strong&gt; Mentions and positions roll up into a visibility score per model, and you can add competitors to see share of voice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert on drift.&lt;/strong&gt; When your visibility drops or a competitor overtakes you, you get notified.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The parsing is the hard part. Model output is prose, not JSON, so mention detection has to handle aliases, partial names, "also worth checking out X" asides, and citations that live in footnotes or inline links. It's the piece I'm still iterating on the most.&lt;/p&gt;

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

&lt;p&gt;Nothing exotic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js&lt;/strong&gt; frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted Postgres + PostgREST&lt;/strong&gt; for data and API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python workers&lt;/strong&gt; that call the four model APIs and do the parsing/scoring&lt;/li&gt;
&lt;li&gt;Scheduled runs so the sampling happens without anyone clicking a button&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters (AEO / GEO)
&lt;/h2&gt;

&lt;p&gt;People are starting to call this AEO (Answer Engine Optimization) or GEO (Generative Engine Optimization). The name matters less than the shift: recommendation is moving from ranked blue links to a single synthesized answer. If you ship a product, it's worth knowing where you stand in that answer, the same way you'd check your Google rank.&lt;/p&gt;

&lt;p&gt;If you want to try it on your own product, there's a free plan (no credit card): &lt;a href="https://askairank.com" rel="noopener noreferrer"&gt;https://askairank.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd genuinely love feedback, especially from anyone who has tackled mention-detection in free-form LLM output. Where does your approach break?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>saas</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
