<?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: hideki</title>
    <description>The latest articles on DEV Community by hideki (@hidekiryu).</description>
    <link>https://dev.to/hidekiryu</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%2F4044467%2F802574cd-3cfe-4840-af30-52adb501e565.jpg</url>
      <title>DEV Community: hideki</title>
      <link>https://dev.to/hidekiryu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hidekiryu"/>
    <language>en</language>
    <item>
      <title>I Built a CLI That Finds Me Clients on Reddit Using AI</title>
      <dc:creator>hideki</dc:creator>
      <pubDate>Thu, 23 Jul 2026 20:53:19 +0000</pubDate>
      <link>https://dev.to/hidekiryu/i-built-a-cli-that-finds-me-clients-on-reddit-using-ai-55dc</link>
      <guid>https://dev.to/hidekiryu/i-built-a-cli-that-finds-me-clients-on-reddit-using-ai-55dc</guid>
      <description>&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; — I got tired of manually scrolling Reddit for people asking "who can build me a landing page?" so I built a Rust CLI that scans subreddits, uses AI to score buying intent, and hands me a ranked list of leads. Open source, runs locally, works with Ollama or any cloud AI provider.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I'm a freelancer. Half my clients come from Reddit — someone posts in r/SaaS or r/startups asking for help, and I reply. Simple.&lt;/p&gt;

&lt;p&gt;Except it's not simple. The workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Reddit&lt;/li&gt;
&lt;li&gt;Scroll through 6 subreddits&lt;/li&gt;
&lt;li&gt;Read every post&lt;/li&gt;
&lt;li&gt;Ignore 95% of them&lt;/li&gt;
&lt;li&gt;Maybe find 1-2 posts where someone is actually looking to hire&lt;/li&gt;
&lt;li&gt;By the time you find them, 3 other freelancers already replied&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's a full-time job just to find leads. And the signal-to-noise ratio is terrible — most posts are people venting, sharing links, or asking questions they don't need help with.&lt;/p&gt;

&lt;p&gt;I wanted a tool that does the scrolling for me and only shows me posts where someone is ready to spend money.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Cypher Does
&lt;/h2&gt;

&lt;p&gt;Cypher is a terminal tool that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scans subreddits you're watching&lt;/li&gt;
&lt;li&gt;Filters posts by keyword match first (cheap, fast)&lt;/li&gt;
&lt;li&gt;Sends matching posts to AI for signal extraction (intent, budget, urgency)&lt;/li&gt;
&lt;li&gt;Scores each lead 0-100&lt;/li&gt;
&lt;li&gt;Shows you a ranked table in the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You tell it what you do in one sentence. It suggests subreddits to watch and keywords to filter by. Then you just run &lt;code&gt;cypher scan&lt;/code&gt; when you're ready to find leads.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Language:&lt;/strong&gt; Rust — because I wanted it fast and I wanted a single binary I could &lt;code&gt;cargo install&lt;/code&gt; and forget about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reddit data:&lt;/strong&gt; &lt;a href="https://sylvia-api.com" rel="noopener noreferrer"&gt;Sylvia API&lt;/a&gt; — a Reddit data proxy that handles rate limits, parsing, and anti-bot measures. I didn't want to build a scraper. I just wanted an API key and clean JSON. Sylvia does that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI layer:&lt;/strong&gt; Hybrid — local Ollama for speed, cloud fallback (OpenAI, Groq, Gemini, OpenRouter) for when the local model isn't confident enough. You set a &lt;code&gt;cloud_threshold&lt;/code&gt; score and anything above it gets re-analyzed by a stronger model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database:&lt;/strong&gt; SQLite — stores leads locally at &lt;code&gt;~/.local/share/cypher/leads.db&lt;/code&gt;. No cloud, no accounts, no tracking.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works Under the Hood
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Profile Setup
&lt;/h3&gt;

&lt;p&gt;You run &lt;code&gt;cypher init&lt;/code&gt; and describe what you do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I build landing pages for SaaS startups
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cypher takes that sentence, sends it to your configured AI provider, and gets back:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A list of subreddits where your clients hang out&lt;/li&gt;
&lt;li&gt;Keywords to filter posts by&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For "landing pages for SaaS startups," it might suggest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;r/SaaS, r/startups, r/webdev, r/Entrepreneur, r/smallbusiness&lt;/li&gt;
&lt;li&gt;Keywords: "landing page," "need a website," "looking for designer," "conversion"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Scan Pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;cypher&lt;/span&gt; &lt;span class="k"&gt;scan&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the core loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fetch recent posts from watched subreddits (Sylvia API)
    ↓
Keyword filter (cheap, fast — throws out 80% of posts)
    ↓
AI analysis on remaining posts
    ↓
Extract signals: intent, budget, urgency, service needed
    ↓
Score 0-100 based on signal strength
    ↓
Store in local SQLite
    ↓
Display ranked table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The keyword filter is important — it saves API calls and AI tokens. If a post doesn't contain any of your keywords, it never touches the AI layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Lead Scoring
&lt;/h3&gt;

&lt;p&gt;Each lead gets a score based on:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;th&gt;What it measures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intent&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;How clearly they're looking to hire (vs. just asking a question)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Budget&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;Whether they mention money, or it's implied&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Urgency&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;Time pressure ("need this done by Friday" vs. "someday")&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fit&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;How well the post matches your profile description&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A post like "Need a landing page done, budget $3k, launching next week" scores high. "Anyone know a good landing page builder?" scores low — they're probably looking for a tool, not a person.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The AI Layer
&lt;/h3&gt;

&lt;p&gt;This is where it gets interesting. Cypher supports two modes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local (Ollama):&lt;/strong&gt; Runs &lt;code&gt;qwen3:4b&lt;/code&gt; locally. Fast, free, private. Good enough for most lead scoring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud fallback:&lt;/strong&gt; When the local model's confidence is below &lt;code&gt;cloud_threshold&lt;/code&gt;, Cypher sends the post to your first configured cloud provider (OpenAI, Groq, Gemini, or OpenRouter). If that fails, it tries the next one.&lt;/p&gt;

&lt;p&gt;The config looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[ai]&lt;/span&gt;
&lt;span class="py"&gt;local_model&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"qwen3:4b"&lt;/span&gt;
&lt;span class="py"&gt;ollama_url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"http://127.0.0.1:11434"&lt;/span&gt;
&lt;span class="py"&gt;cloud_threshold&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;
&lt;span class="py"&gt;openai_api_key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"sk-..."&lt;/span&gt;
&lt;span class="py"&gt;openai_model&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"gpt-4o-mini"&lt;/span&gt;
&lt;span class="py"&gt;groq_api_key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"gsk_..."&lt;/span&gt;
&lt;span class="py"&gt;groq_model&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"llama-3.3-70b-versatile"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don't need all of them. Just one cloud provider works. Ollama is optional — if you don't have it, everything goes through cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Daemon Mode
&lt;/h3&gt;

&lt;p&gt;If you want continuous monitoring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cypher daemon &lt;span class="nt"&gt;--interval&lt;/span&gt; 60
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scans every 60 seconds. Good for leaving running while you work — new leads pop up in your terminal as they appear.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Commands
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cypher init          &lt;span class="c"&gt;# Setup profile, API keys, subreddits&lt;/span&gt;
cypher scan          &lt;span class="c"&gt;# One-shot scan&lt;/span&gt;
cypher leads         &lt;span class="c"&gt;# List all leads&lt;/span&gt;
cypher leads &lt;span class="nt"&gt;--min-score&lt;/span&gt; 80 &lt;span class="nt"&gt;--status&lt;/span&gt; new
cypher lead &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;     &lt;span class="c"&gt;# Detailed view of one lead&lt;/span&gt;
cypher watch r/SaaS  &lt;span class="c"&gt;# Add subreddit to watchlist&lt;/span&gt;
cypher unwatch r/SaaS
cypher watchlist     &lt;span class="c"&gt;# List all watched subreddits&lt;/span&gt;
cypher daemon        &lt;span class="c"&gt;# Background scan loop&lt;/span&gt;
cypher &lt;span class="nb"&gt;export &lt;/span&gt;csv    &lt;span class="c"&gt;# Export to CSV&lt;/span&gt;
cypher &lt;span class="nb"&gt;export &lt;/span&gt;json   &lt;span class="c"&gt;# Export to JSON&lt;/span&gt;
cypher status        &lt;span class="c"&gt;# Config and status check&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install&lt;/span&gt;
cargo &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--path&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Setup&lt;/span&gt;
cypher init

&lt;span class="c"&gt;# First scan&lt;/span&gt;
cypher scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rust 1.70+&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://sylvia-api.com" rel="noopener noreferrer"&gt;Sylvia API&lt;/a&gt; key (free tier works)&lt;/li&gt;
&lt;li&gt;At least one AI provider (Ollama local, or any cloud key)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;A few things I'd change if I rebuilt this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Webhook alerts&lt;/strong&gt; — instead of just terminal output, send high-score leads to Slack or Telegram. I'm building this next.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reply templates&lt;/strong&gt; — store pre-written responses per subreddit. When you find a lead, one key to copy a tailored reply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historical scoring&lt;/strong&gt; — track how your lead quality changes over time. Are you getting better at finding clients, or just finding more noise?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-profile&lt;/strong&gt; — right now it's one profile per config. If you offer multiple services, you need separate configs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why Open Source
&lt;/h2&gt;

&lt;p&gt;I built this because I needed it. I'm not trying to turn it into a SaaS — it runs locally, on my machine, with my API keys. If you find it useful, use it. If you want to add features, open a PR.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/hidekiryuuga/cypher" rel="noopener noreferrer"&gt;hidekiryuuga/cypher&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Cypher is built with &lt;a href="https://sylvia-api.com" rel="noopener noreferrer"&gt;Sylvia API&lt;/a&gt; — a Reddit data proxy that handles rate limits, parsing, and anti-bot measures. If you're building anything that needs Reddit data, check it out.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cli</category>
      <category>rust</category>
      <category>sideprojects</category>
    </item>
  </channel>
</rss>
