<?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: yizheng</title>
    <description>The latest articles on DEV Community by yizheng (@yizheng_f9ce51e8416445700).</description>
    <link>https://dev.to/yizheng_f9ce51e8416445700</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%2F3004769%2F8914e9e7-e81d-4882-8c27-de7bb9851953.png</url>
      <title>DEV Community: yizheng</title>
      <link>https://dev.to/yizheng_f9ce51e8416445700</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yizheng_f9ce51e8416445700"/>
    <language>en</language>
    <item>
      <title>I Made an App Where You Pet a Cat Before Opening Instagram</title>
      <dc:creator>yizheng</dc:creator>
      <pubDate>Tue, 21 Jul 2026 04:10:07 +0000</pubDate>
      <link>https://dev.to/yizheng_f9ce51e8416445700/i-made-an-app-where-you-pet-a-cat-before-opening-instagram-287a</link>
      <guid>https://dev.to/yizheng_f9ce51e8416445700/i-made-an-app-where-you-pet-a-cat-before-opening-instagram-287a</guid>
      <description>&lt;p&gt;I love cats. My life has two things: cats and AI. So I made an app that puts cats between you and social media.&lt;/p&gt;

&lt;p&gt;That's it. That's the whole story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Exists
&lt;/h2&gt;

&lt;p&gt;I kept opening Instagram at weird times. 2 AM, during meetings, while cooking. The usual app blockers felt wrong. Opal made me feel like I was in digital jail. One Sec's breathing exercises annoyed me. Forest's virtual trees were stupid.&lt;/p&gt;

&lt;p&gt;None of them understood something basic: I don't want to fight the urge to scroll. I just want a moment to think about whether I actually want to scroll right now.&lt;/p&gt;

&lt;p&gt;Cats are good at making you pause. They don't rush. They judge you first. Then maybe they let you proceed.&lt;/p&gt;

&lt;h2&gt;
  
  
  How CatGate Works
&lt;/h2&gt;

&lt;p&gt;You pick which apps get gated. When you tap Instagram or TikTok or whatever, instead of the app opening, you get a cat. The cat is sitting with its back to you.&lt;/p&gt;

&lt;p&gt;You have to pet the cat gently. Too fast and the cat gets annoyed. Too slow and nothing happens. Get it right and the cat does a slow blink, then your app opens.&lt;/p&gt;

&lt;p&gt;Sometimes after petting the cat I realize I don't actually want to open Instagram. Sometimes I do, but I'm more aware of it. Either way works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technical Stuff
&lt;/h2&gt;

&lt;p&gt;Built in Swift. Uses the Screen Time API to intercept app launches. Apple doesn't let you actually block apps, which was annoying at first. But redirecting through our interface turned out to be better anyway.&lt;/p&gt;

&lt;p&gt;Making the petting feel right took forever. Real cats are particular about touch. We tried different haptic patterns until we found something that felt natural. Turns out cat purr frequencies are 25-35 Hz, so we matched that.&lt;/p&gt;

&lt;p&gt;Eight breeds now. People keep requesting specific cats so I add them monthly. No free version - ads would kill the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  No Startup Story Here
&lt;/h2&gt;

&lt;p&gt;I'm not trying to revolutionize productivity or fix humanity's relationship with technology. I just made something I wanted to use.&lt;/p&gt;

&lt;p&gt;The app just launched. I can't tell you about retention rates or MRR because I don't have meaningful data yet. It's $12.99 a week or $59.99 a year. Some people think that's expensive. Maybe it is.&lt;/p&gt;

&lt;p&gt;Taiwan users like it more than US users so far, which surprised me. Americans seem to prefer the Ragdoll cats. Taiwanese mostly keep mixed-breed cats — we call them "mixed" here — so I made sure there's one in the lineup.&lt;/p&gt;

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

&lt;p&gt;Cats don't try to motivate you. They don't give you breathing exercises or inspirational quotes. They just exist and judge you slightly. That's weirdly effective.&lt;/p&gt;

&lt;p&gt;I spent years in publishing. The whole industry talks about "user engagement" and "sticky features." Cats taught me something different: sometimes the best user experience is the one that lets you leave.&lt;/p&gt;

&lt;p&gt;People started calling them "their" cat. Sending screenshots of different breeds. Getting annoyed when the cat ignores them. That relationship dynamic is something you can't design directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Reality Check
&lt;/h2&gt;

&lt;p&gt;This might not work. I don't know if people will keep paying for an app that makes their phone slightly less convenient. The market might be tiny.&lt;/p&gt;

&lt;p&gt;I'm not quitting my day job. I'm not raising funding. I'm not building a team or writing a manifesto about digital wellness. I made a thing I like and put it in the App Store.&lt;/p&gt;

&lt;p&gt;If enough people want it, great. If not, I still have cats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building in Public, Sort Of
&lt;/h2&gt;

&lt;p&gt;Since this is dev.to, here's what building CatGate actually looked like:&lt;/p&gt;

&lt;p&gt;Revenue so far: nothing meaningful. The app just launched. I'll update when there's something worth reporting.&lt;/p&gt;

&lt;p&gt;Core Animation handles the cat interactions. Everything stays local for privacy. No backend, no user accounts, no analytics beyond what Apple provides.&lt;/p&gt;

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

&lt;p&gt;Version 1.2 adds cat moods. Grumpy cats need more patience. Sleepy cats are easier. Halloween cats next month.&lt;/p&gt;

&lt;p&gt;Long term, I want to try this pattern with other apps. Email maybe. News apps. Anything where a moment of pause might help.&lt;/p&gt;

&lt;p&gt;The core idea stays the same: you don't need to fight your habits. You just need better gatekeepers.&lt;/p&gt;




&lt;p&gt;Try CatGate: &lt;a href="https://apps.apple.com/app/id6787296878" rel="noopener noreferrer"&gt;App Store&lt;/a&gt; | &lt;a href="https://catgate.fork.work" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My cats don't care if you download it. But they'd probably judge you less if you learned to pet properly.&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>cats</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>I Built an AI Search Visibility Checker — and Found Out My Own Site Was Invisible</title>
      <dc:creator>yizheng</dc:creator>
      <pubDate>Wed, 15 Jul 2026 03:08:56 +0000</pubDate>
      <link>https://dev.to/yizheng_f9ce51e8416445700/i-built-an-ai-search-visibility-checker-and-found-out-my-own-site-was-invisible-di0</link>
      <guid>https://dev.to/yizheng_f9ce51e8416445700/i-built-an-ai-search-visibility-checker-and-found-out-my-own-site-was-invisible-di0</guid>
      <description>&lt;h1&gt;
  
  
  I Built an AI Search Visibility Checker — and Found Out My Own Site Was Invisible
&lt;/h1&gt;

&lt;p&gt;I launched my first Apify Actor a few weeks ago. Spent time on SEO, structured data, the whole checklist.&lt;/p&gt;

&lt;p&gt;Then I asked ChatGPT: "What's the best tool for X in my space?"&lt;/p&gt;

&lt;p&gt;My product wasn't mentioned. Claude didn't know I existed. Gemini had the wrong description.&lt;/p&gt;

&lt;p&gt;Not because my site was bad. Because I had no idea what AI "sees" when it looks at a page.&lt;/p&gt;

&lt;p&gt;So I built something to find out.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem Nobody's Talking About Yet
&lt;/h2&gt;

&lt;p&gt;Most SEO tools measure Google rankings. Keyword positions, backlinks, domain authority. The usual stuff.&lt;/p&gt;

&lt;p&gt;But more people are asking ChatGPT directly instead of typing keywords into Google. And LLMs don't evaluate your site the same way search engines do.&lt;/p&gt;

&lt;p&gt;A site can have perfect Google rankings, great Core Web Vitals, strong backlinks — and still be invisible to AI. Broken structured data, a misconfigured robots.txt, or the LLM simply never heard of you.&lt;/p&gt;

&lt;p&gt;I found this out the hard way. My own site scored 45/100 on the first audit I ever ran.&lt;/p&gt;




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

&lt;p&gt;GEO Auditor runs two things in one pass:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical audit&lt;/strong&gt; — crawlability, robots.txt, sitemap, structured data, social meta, performance. Standard stuff, automated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM probes&lt;/strong&gt; — sends targeted queries to ChatGPT, Claude, and Gemini (via OpenRouter) and checks if each one knows your site exists, and whether it gets the facts right.&lt;/p&gt;

&lt;p&gt;The output is a report with scores. JSON, Markdown, or a self-contained HTML page with radar charts if you want the visual version.&lt;/p&gt;

&lt;p&gt;Honestly, the hardest part wasn't building the crawler or hooking up the APIs. It was deciding what a "good" score even means when nobody has defined what AI visibility looks like yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Things I Learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;robots.txt is the silent killer.&lt;/strong&gt; The first site I tested was my own blog. The culprit? An old robots.txt I'd copied from a template years ago that blocked &lt;code&gt;/api/&lt;/code&gt;. I'd forgotten it was even there. AI crawlers treated the whole site as lower priority because of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured data parsers are stricter than you think.&lt;/strong&gt; One beta tester ran the audit and found their JSON-LD had a syntax error that Google's validator didn't catch, but Claude silently failed on. Their products were invisible to AI because the data was technically there but unparseable for some models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM responses vary wildly.&lt;/strong&gt; I ran the same URL through the tool 10 times over 3 days. ChatGPT found it 8/10 times. Claude 6/10. Gemini 3/10. A single manual check is essentially meaningless. You need a sample size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most people don't know they're invisible.&lt;/strong&gt; I shared the tool with a few indie hacker friends. Everyone thought their site was fine. Most weren't. Nobody checks for this.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'd Do Differently
&lt;/h2&gt;

&lt;p&gt;If I were starting this over:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test with real users earlier. I spent too long polishing the HTML report before validating that anyone actually wanted LLM probes&lt;/li&gt;
&lt;li&gt;Ship a simpler MVP first. Could have launched with just the technical audit and added LLM probes in v2&lt;/li&gt;
&lt;li&gt;Price it properly. Every LLM probe costs OpenRouter credits. At what I'm charging, it barely breaks even. I'm eating the cost for now to see if people actually use it&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How to Check Your Own Site
&lt;/h2&gt;

&lt;p&gt;If you're curious where your site stands, it's on the &lt;a href="https://apify.com/yizheng/geo-auditor" rel="noopener noreferrer"&gt;Apify Store&lt;/a&gt;. You paste your URL and your OpenRouter API key, wait about 8 minutes (the LLM probes take time), and get a report.&lt;/p&gt;

&lt;p&gt;A few honest limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need your own OpenRouter key — I didn't want shared rate limits to mess with results&lt;/li&gt;
&lt;li&gt;~8 minute runtime, not real-time&lt;/li&gt;
&lt;li&gt;Single page per run right now&lt;/li&gt;
&lt;li&gt;One run is a snapshot, not a definitive verdict&lt;/li&gt;
&lt;li&gt;Only works on public pages&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;I'm still figuring out what "AI visibility" should look like as a metric. A few ideas I'm playing with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tracking visibility over time with weekly scans&lt;/li&gt;
&lt;li&gt;Adding Perplexity and Grok probes&lt;/li&gt;
&lt;li&gt;A simple checklist for non-technical founders who don't want to run a tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've built something similar or have thoughts on how AI citation should work — I'd genuinely like to hear.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built in public. I'm also on &lt;a href="https://blog.fork.work/" rel="noopener noreferrer"&gt;fork.work&lt;/a&gt; where I write about building things with Apify.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>apify</category>
      <category>seo</category>
      <category>ai</category>
      <category>indiehackers</category>
    </item>
    <item>
      <title>Neumorphism Profile Card UI Design</title>
      <dc:creator>yizheng</dc:creator>
      <pubDate>Tue, 07 Oct 2025 01:03:35 +0000</pubDate>
      <link>https://dev.to/yizheng_f9ce51e8416445700/neumorphism-profile-card-ui-design-41l4</link>
      <guid>https://dev.to/yizheng_f9ce51e8416445700/neumorphism-profile-card-ui-design-41l4</guid>
      <description></description>
    </item>
  </channel>
</rss>
