<?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>Forem: isabelle dubuis</title>
    <description>The latest articles on Forem by isabelle dubuis (@isabelle_dubuis_d858453d7).</description>
    <link>https://forem.com/isabelle_dubuis_d858453d7</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%2F3906665%2F77708b2e-f49d-4a80-9c9b-b5d560be597e.png</url>
      <title>Forem: isabelle dubuis</title>
      <link>https://forem.com/isabelle_dubuis_d858453d7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/isabelle_dubuis_d858453d7"/>
    <language>en</language>
    <item>
      <title>Multi-region B2B SaaS launch: what carries over and what doesn't (FR, CH, DE)</title>
      <dc:creator>isabelle dubuis</dc:creator>
      <pubDate>Fri, 01 May 2026 16:58:18 +0000</pubDate>
      <link>https://forem.com/isabelle_dubuis_d858453d7/multi-region-b2b-saas-launch-what-carries-over-and-what-doesnt-fr-ch-de-236p</link>
      <guid>https://forem.com/isabelle_dubuis_d858453d7/multi-region-b2b-saas-launch-what-carries-over-and-what-doesnt-fr-ch-de-236p</guid>
      <description>&lt;p&gt;After launching B2B SaaS in 4 different countries (FR, CH, DE, EU-wide), I learned that "build it once, ship globally" is mostly wishful thinking. Here's what's actually different per region and what infrastructure carries over.&lt;/p&gt;

&lt;h2&gt;
  
  
  What carries over (build once)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Auth, billing, observability, deployment&lt;/strong&gt; — same Stripe, same Auth0, same Datadog, same Vercel. No regional tweaks needed for the technical foundation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core product features&lt;/strong&gt; — the B2B problem you're solving rarely changes per region. Companies want lead gen, content automation, AI assistance. The pain is universal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does NOT carry over
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Trust signals&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the US/UK, customers want testimonials, logos, and "as seen on TechCrunch". In France, customers want SIRET numbers, RCS registration, mentions légales. In Switzerland, customers want a Swiss company registration (Handelsregister) or local representative.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://trustly-ai.com" rel="noopener noreferrer"&gt;trustly-ai.com&lt;/a&gt; specifically because automating trust signal display across regions is a real engineering problem — different schema, different validators, different presentation rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data sovereignty + storage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Swiss SMBs explicitly demand data stays in Switzerland (Datenschutz). German clients want Frankfurt or "EU only" hosting. French B2B will tolerate EU but never US-only. Building &lt;a href="https://trust-vault.com" rel="noopener noreferrer"&gt;trust-vault.com&lt;/a&gt; was my answer — encrypted vault that shows the customer where their data physically sits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Payment behavior + collections&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the big surprise. In France, B2B invoices going unpaid is a structural problem — average payment delay is 12 days past due. In Switzerland and Germany, it's typically 3-5 days.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://factureimpayee.fr" rel="noopener noreferrer"&gt;factureimpayee.fr&lt;/a&gt; for the French market specifically — automated unpaid invoice recovery for SMBs. The legal framework (LME, capped late fees, mise en demeure templates) is so France-specific that a generic "dunning" SaaS doesn't fit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Niche audiences need niche content
&lt;/h2&gt;

&lt;p&gt;When you launch in a small region, generic content doesn't rank. You need topical expertise.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For Swiss audiences I run &lt;a href="https://iapmesuisse.ch" rel="noopener noreferrer"&gt;iapmesuisse.ch&lt;/a&gt; — AI for Swiss SMBs, in French + with Swiss-specific examples (CHF pricing, VAT 7.7%, local data laws).&lt;/li&gt;
&lt;li&gt;For French Tesla owners I run &lt;a href="https://tesla-mag.ch" rel="noopener noreferrer"&gt;tesla-mag.ch&lt;/a&gt; — Tesla coverage from a Swiss / French-speaking lens (charging network FR/CH, import tax differences).&lt;/li&gt;
&lt;li&gt;For European CBD market analysis I run &lt;a href="https://cbdeuropa.com" rel="noopener noreferrer"&gt;cbdeuropa.com&lt;/a&gt; — regulatory tracker by country.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each one took 3-6 months to start ranking. Generic "Tesla blog" or "CBD blog" gets killed by big-domain competition. Geo + language niching wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tactical playbook for multi-region launches
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Don't translate, rewrite&lt;/strong&gt;. Machine-translated content gets devalued. Find local writers or do hybrid: AI draft + native speaker rewrites the top 30%.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Buy local domain extensions for trust&lt;/strong&gt;. .fr for France, .ch for Switzerland, .de for Germany. Even if your main site is .com, customers in those countries trust local TLDs more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Local payment methods&lt;/strong&gt;: France needs SEPA + carte bancaire. Switzerland needs PostFinance + TWINT. Germany needs SOFORT + giropay. Stripe handles all of this but you need to enable per region.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customer support hours match local timezone&lt;/strong&gt;. EU support 9am-6pm CET, not US-8am-PT.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compliance: GDPR is the floor, not the ceiling&lt;/strong&gt;. Swiss FADP, French CNIL specific declarations, German BDSG additions. Have a real lawyer review per country.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The cost of multi-region
&lt;/h2&gt;

&lt;p&gt;Real numbers from my stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 sub-domains / sites: ~€800/year hosting + email + monitoring&lt;/li&gt;
&lt;li&gt;4 sets of Stripe regional setup: ~12 hours legal/finance work&lt;/li&gt;
&lt;li&gt;4 separate content calendars: ~$2k/month freelance writers + AI augmentation&lt;/li&gt;
&lt;li&gt;4 separate compliance reviews per year: ~€3k/year legal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Worth it if your TAM in any one region is &amp;gt;€500k. Not worth it for €50k niches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open question
&lt;/h2&gt;

&lt;p&gt;Anyone running B2B SaaS in 5+ EU countries who's automated the regulatory deltas? GDPR + FADP + BDSG + Italian and Spanish equivalents = manual nightmare. I keep wanting an "EU compliance checklist as JSON" tool but every existing one is consultant-led.&lt;/p&gt;

</description>
      <category>saas</category>
      <category>startup</category>
      <category>europe</category>
      <category>internationalization</category>
    </item>
    <item>
      <title>What's actually working in SEO in 2026: 12 months of data from 40 sites</title>
      <dc:creator>isabelle dubuis</dc:creator>
      <pubDate>Fri, 01 May 2026 16:56:11 +0000</pubDate>
      <link>https://forem.com/isabelle_dubuis_d858453d7/whats-actually-working-in-seo-in-2026-12-months-of-data-from-40-sites-2dh6</link>
      <guid>https://forem.com/isabelle_dubuis_d858453d7/whats-actually-working-in-seo-in-2026-12-months-of-data-from-40-sites-2dh6</guid>
      <description>&lt;p&gt;I run an SEO/content automation stack for a handful of clients in different niches. Here's what consistently moves rankings in 2026 and what doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  What works (data from 12 months, 40+ sites)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Topical authority over backlink count&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sites with 30 articles all on one tight topic outrank sites with 200 articles spanning 8 topics. Period. Google's helpful content updates buried generalist sites in 2024-2025.&lt;/p&gt;

&lt;p&gt;Tactic: pick 1 cluster, write 20-30 deep articles, internal-link aggressively. Then move to cluster 2.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Real entities, real data, real screenshots&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LLM-generated walls of text without specifics get filtered out. What ranks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Original screenshots from your tools / dashboards&lt;/li&gt;
&lt;li&gt;Specific dollar amounts, dates, version numbers&lt;/li&gt;
&lt;li&gt;Named tools, named people (where appropriate)&lt;/li&gt;
&lt;li&gt;Tables with comparison data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I run &lt;a href="https://vocalis.pro" rel="noopener noreferrer"&gt;vocalis.pro&lt;/a&gt; for the content automation side — it's specifically tuned for "augmented" workflows: AI drafts, human adds the entities/numbers, AI fixes structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. EEAT signals (Experience-Expertise-Authority-Trust)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Authors with named profiles, LinkedIn proof, real bylines outrank "admin" or "team". On every site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real author photos&lt;/li&gt;
&lt;li&gt;Cross-link from author page to LinkedIn&lt;/li&gt;
&lt;li&gt;"I've worked at X" or "I run Y" claims&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Internal link velocity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a new article goes live, link from 5-10 existing relevant articles within 48 hours. Skipping this kills 60% of new article ranking potential.&lt;/p&gt;

&lt;h2&gt;
  
  
  What stopped working
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pure long-tail keyword farming&lt;/strong&gt;: 2-3k word articles on "best X for Y in Z" with no original insight. Google ignores them now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backlink swaps and PBN-style guest posts&lt;/strong&gt;: detected and devalued. Some clients lost 30% traffic from these.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schema markup spam&lt;/strong&gt;: stuffing FAQPage on every article. Got several manual penalties.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cold-email-for-backlinks playbook
&lt;/h2&gt;

&lt;p&gt;For clients without budget for big content, this works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find 50 niche blogs that have a "resources" / "tools" / "we use" page&lt;/li&gt;
&lt;li&gt;Send personalized email pitching: "I'd add [your tool] to that list, here's why it's relevant"&lt;/li&gt;
&lt;li&gt;~5% reply rate, ~2% actually add the link&lt;/li&gt;
&lt;li&gt;50 emails = 1-2 real dofollow backlinks per week&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools I use for the lead-gen side: &lt;a href="https://lead-gene.com" rel="noopener noreferrer"&gt;lead-gene.com&lt;/a&gt; for B2B prospecting and &lt;a href="https://seo-true.com" rel="noopener noreferrer"&gt;seo-true.com&lt;/a&gt; for the outreach + tracking layer.&lt;/p&gt;

&lt;p&gt;For French-speaking sales operations specifically, I built &lt;a href="https://master-seller.fr" rel="noopener noreferrer"&gt;master-seller.fr&lt;/a&gt; — a sales enablement playbook in French for SMBs.&lt;/p&gt;

&lt;p&gt;I also publish field notes and case studies on &lt;a href="https://vocalis.blog" rel="noopener noreferrer"&gt;vocalis.blog&lt;/a&gt; — that's where I put the boring details that don't fit on the marketing site.&lt;/p&gt;

&lt;h2&gt;
  
  
  Specifics that work right now (May 2026)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Title length 50-60 chars (not the old 70)&lt;/li&gt;
&lt;li&gt;H2s every 200-300 words&lt;/li&gt;
&lt;li&gt;TOC for articles &amp;gt;1500 words&lt;/li&gt;
&lt;li&gt;Image alt text: descriptive, not keyword-stuffed&lt;/li&gt;
&lt;li&gt;Internal links: 3-5 per article minimum, related semantic context&lt;/li&gt;
&lt;li&gt;External links: 2-4 to authoritative sources, mix dofollow + nofollow&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Google's AI Overviews are eating click-through rates on informational queries. Tactical response:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Move into transactional / commercial intent keywords (where AI Overviews show less)&lt;/li&gt;
&lt;li&gt;Build branded queries (people search "your-brand alternatives")&lt;/li&gt;
&lt;li&gt;Capture email/follow before traffic leaves your site&lt;/li&gt;
&lt;li&gt;Treat your site as a database that answers questions, not a magazine&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Question for SEO folks
&lt;/h2&gt;

&lt;p&gt;Anyone seeing recovery from the September 2024 helpful content update? My slowest-recovering client is at 70% of pre-update traffic 7 months later. Curious what worked vs. didn't.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>marketing</category>
      <category>content</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Production AI agents: 18 months of lessons across voice, WhatsApp, and web chat</title>
      <dc:creator>isabelle dubuis</dc:creator>
      <pubDate>Fri, 01 May 2026 16:53:16 +0000</pubDate>
      <link>https://forem.com/isabelle_dubuis_d858453d7/production-ai-agents-18-months-of-lessons-across-voice-whatsapp-and-web-chat-33nk</link>
      <guid>https://forem.com/isabelle_dubuis_d858453d7/production-ai-agents-18-months-of-lessons-across-voice-whatsapp-and-web-chat-33nk</guid>
      <description>&lt;p&gt;After running AI agents in production for 18 months across content, sales calls, and WhatsApp customer support, here's the playbook I wish I had on day 1.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 3 things that actually move the needle
&lt;/h2&gt;

&lt;p&gt;Most AI agent tutorials online focus on prompts and tools. In production, those matter least. What matters:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Failure modes before features&lt;/strong&gt; — your agent will hallucinate, lose context, or pick the wrong tool. Build observability before you build capability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost ceilings per session&lt;/strong&gt; — without hard caps, one user can burn $50 of tokens in a single conversation. Cap tokens-per-session, retries-per-tool-call, and total runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human handoff triggers&lt;/strong&gt; — "agent confidence below X" or "user said 'human' twice" → handoff. Customers tolerate AI that says "let me get someone" 10x more than AI that bullshits an answer.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The agent stack that survived
&lt;/h2&gt;

&lt;p&gt;After 4 rewrites:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────┐
│   Channel adapters          │  WhatsApp / web chat / phone
└──────────────┬──────────────┘
               │
┌──────────────▼──────────────┐
│   Orchestrator (LangGraph)  │  state machine, not LLM-as-controller
└──────────────┬──────────────┘
               │
┌──────────────▼──────────────┐
│   Tool registry             │  search, db query, send email, escalate
└──────────────┬──────────────┘
               │
┌──────────────▼──────────────┐
│   Observability (LangSmith) │  every tool call + token + error logged
└─────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;LangGraph state machine instead of LLM-as-controller cut bug rate by 60%. The LLM picks the next state. The state machine enforces what's allowed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Per-channel quirks I learned the hard way
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;WhatsApp&lt;/strong&gt;: 24-hour message window rule from Meta. After that, you can't message until user replies. Build re-engagement templates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Voice (Twilio + STT)&lt;/strong&gt;: latency under 800ms or users hang up. Stream tokens as they generate. Don't wait for full response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web chat&lt;/strong&gt;: typing indicators matter. Show "AI thinking..." within 200ms. Real LLM response can take 3s — show progress.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cost trap
&lt;/h2&gt;

&lt;p&gt;In month 3 we hit $4,200 in OpenAI bills for one client because of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A loop where agent retried failed tool calls 5x each&lt;/li&gt;
&lt;li&gt;No timeout on long conversations&lt;/li&gt;
&lt;li&gt;2 misclassified intents that bounced between specialized agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After fixing: same client, same volume, $380/month.&lt;/p&gt;

&lt;p&gt;Token economics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track $ per resolved ticket, not $ per LLM call&lt;/li&gt;
&lt;li&gt;A bad architecture with cheap models often costs more than smart architecture with GPT-4o&lt;/li&gt;
&lt;li&gt;Caching system prompts saved 35% across the board&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I built around all this
&lt;/h2&gt;

&lt;p&gt;Three of my own products run on this stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://vocalis-ai.org" rel="noopener noreferrer"&gt;vocalis-ai.org&lt;/a&gt; is the voice AI agent for outbound sales calls&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentic-whatsup.com" rel="noopener noreferrer"&gt;agentic-whatsup.com&lt;/a&gt; is the WhatsApp business agent layer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agents-ia.pro" rel="noopener noreferrer"&gt;agents-ia.pro&lt;/a&gt; is where I publish playbooks for B2B AI deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the content side I run &lt;a href="https://vocalis.pro" rel="noopener noreferrer"&gt;vocalis.pro&lt;/a&gt; — it generates SEO articles for the same SMBs that buy the agents. Cross-pollination works. And &lt;a href="https://ai-due.com" rel="noopener noreferrer"&gt;ai-due.com&lt;/a&gt; is the AI-for-SMB-ops project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd skip if starting today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;LangChain agents (use LangGraph directly)&lt;/li&gt;
&lt;li&gt;Vector DBs for small contexts (just use full prompt)&lt;/li&gt;
&lt;li&gt;Multi-agent collaboration patterns (95% of use cases need 1 agent + good tools, not 5 agents)&lt;/li&gt;
&lt;li&gt;Custom embeddings (OpenAI's text-embedding-3-small is fine for 90% of use cases)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open question
&lt;/h2&gt;

&lt;p&gt;Anyone running production agents on Claude Sonnet 4.5 vs GPT-4o for tool use? Curious about real-world latency + tool call accuracy comparison. I've stayed on GPT-4o for tool reliability but Claude's coding is sharper for code-gen agents.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>langchain</category>
      <category>production</category>
    </item>
    <item>
      <title>ICT Order Block + FVG strategy in Pine Script v5: backtest results + full code</title>
      <dc:creator>isabelle dubuis</dc:creator>
      <pubDate>Thu, 30 Apr 2026 21:31:08 +0000</pubDate>
      <link>https://forem.com/isabelle_dubuis_d858453d7/ict-order-block-fvg-strategy-in-pine-script-v5-backtest-results-full-code-l5c</link>
      <guid>https://forem.com/isabelle_dubuis_d858453d7/ict-order-block-fvg-strategy-in-pine-script-v5-backtest-results-full-code-l5c</guid>
      <description>&lt;p&gt;I've been backtesting an ICT-style Order Block + Fair Value Gap strategy on crypto and forex. After 50 iterations and a lot of dead variants, here's what survived. Posting the Pine Script v5 below in case it saves someone the same week of debugging.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;ICT (Inner Circle Trader) methodology relies on two ideas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Order Block (OB)&lt;/strong&gt; — the last opposite candle right before a strong displacement. Bull OB = last bearish candle before a sharp bullish push.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fair Value Gap (FVG)&lt;/strong&gt; — a 3-bar imbalance where price moved so fast it left a gap (low &amp;gt; high[2]).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Entry = price retraces back into the OB, ideally inside an FVG, with trend confirmation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this version finally worked
&lt;/h2&gt;

&lt;p&gt;Earlier tries took every OB. Win rate dropped to 35%. Two filters fixed it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Displacement filter&lt;/strong&gt;: the move out of the OB must exceed &lt;code&gt;2 × ATR(14)&lt;/code&gt;. Weak moves create weak OBs. They don't hold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trend filter&lt;/strong&gt;: only longs above EMA(200) trending up. Short below, trending down. Sounds basic, but cut my losing trades by 40%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stop loss = OB low minus &lt;code&gt;0.3 × ATR&lt;/code&gt;. TP = 3R fixed. Anything tighter and noise eats you. Anything wider and you give back too much.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full Pine Script v5
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//@version=5
strategy("ICT_OB_SEED11", overlay=true, initial_capital=3000, commission_type=strategy.commission.percent, commission_value=0.05, slippage=2, default_qty_type=strategy.cash, default_qty_value=300, process_orders_on_close=true)

displ_atr_mult = input.float(2.0, "Displacement ATR mult")
ob_lookback    = input.int(20, "OB lookback")

atr = ta.atr(14)
displ_up = close - close[1] &amp;gt; atr * displ_atr_mult
displ_dn = close[1] - close &amp;gt; atr * displ_atr_mult

var float obUpHi = na, var float obUpLo = na
var float obDnHi = na, var float obDnLo = na

if displ_up and close[1] &amp;lt; open[1]
    obUpHi := high[1]
    obUpLo := low[1]
if displ_dn and close[1] &amp;gt; open[1]
    obDnHi := high[1]
    obDnLo := low[1]

bullFVG = low &amp;gt; high[2]
bearFVG = high &amp;lt; low[2]

ema200 = ta.ema(close, 200)
upTrend = close &amp;gt; ema200 and ema200 &amp;gt; ema200[20]
dnTrend = close &amp;lt; ema200 and ema200 &amp;lt; ema200[20]

retestLong  = upTrend and not na(obUpHi) and low &amp;lt;= obUpHi and high &amp;gt;= obUpLo and close &amp;gt; open
retestShort = dnTrend and not na(obDnLo) and high &amp;gt;= obDnLo and low &amp;lt;= obDnHi and close &amp;lt; open

if retestLong and barstate.isconfirmed and strategy.position_size == 0
    sl = obUpLo - atr * 0.3
    tp = close + (close - sl) * 3
    strategy.entry("L", strategy.long)
    strategy.exit("XL", "L", stop=sl, limit=tp)
    obUpHi := na
    obUpLo := na

if retestShort and barstate.isconfirmed and strategy.position_size == 0
    sl = obDnHi + atr * 0.3
    tp = close - (sl - close) * 3
    strategy.entry("S", strategy.short)
    strategy.exit("XS", "S", stop=sl, limit=tp)
    obDnHi := na
    obDnLo := na
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Results across pairs (1H, 2 years backtest)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;BTCUSDT: PF 1.42, MaxDD -8.2%, 312 trades&lt;/li&gt;
&lt;li&gt;EURUSD: PF 1.18, MaxDD -6.1%, 184 trades&lt;/li&gt;
&lt;li&gt;XAUUSD: PF 1.61, MaxDD -11.4%, 247 trades&lt;/li&gt;
&lt;li&gt;SP500 1H: PF 1.09, MaxDD -7.8%, 142 trades&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PF below 1.1 = skip. Above 1.4 = keep monitoring forward. Forward test always trails backtest by 15-25%.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I tried that didn't work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ATR(7) instead of ATR(14): too noisy, false displacements&lt;/li&gt;
&lt;li&gt;Tighter SL (0.1 ATR): stopped out 70% of valid setups&lt;/li&gt;
&lt;li&gt;5R TP: too greedy, only 12% hit it before reversal&lt;/li&gt;
&lt;li&gt;No trend filter: half the OBs bounced once then died&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next iterations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add session filter (London/NY only, skip Asia)&lt;/li&gt;
&lt;li&gt;Multi-timeframe OB confirmation (4H OB on 1H entry)&lt;/li&gt;
&lt;li&gt;Volume profile overlay for OB validation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  About me
&lt;/h2&gt;

&lt;p&gt;I run a small portfolio of niche tools and content sites across AI, SEO, trading, and B2B. Some of them:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI &amp;amp; automation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://vocalis.pro" rel="noopener noreferrer"&gt;vocalis.pro&lt;/a&gt; — AI-powered SEO content automation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vocalis.blog" rel="noopener noreferrer"&gt;vocalis.blog&lt;/a&gt; — case studies and field notes&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vocalis-ai.org" rel="noopener noreferrer"&gt;vocalis-ai.org&lt;/a&gt; — voice AI agents for sales calls&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agents-ia.pro" rel="noopener noreferrer"&gt;agents-ia.pro&lt;/a&gt; — agentic AI playbook&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://agentic-whatsup.com" rel="noopener noreferrer"&gt;agentic-whatsup.com&lt;/a&gt; — agentic AI for WhatsApp business&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ai-due.com" rel="noopener noreferrer"&gt;ai-due.com&lt;/a&gt; — AI for SMB operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SEO &amp;amp; sales:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://seo-true.com" rel="noopener noreferrer"&gt;seo-true.com&lt;/a&gt; — SEO automation toolkit&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://master-seller.fr" rel="noopener noreferrer"&gt;master-seller.fr&lt;/a&gt; — sales enablement (FR)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://lead-gene.com" rel="noopener noreferrer"&gt;lead-gene.com&lt;/a&gt; — B2B lead generation tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Trust, security, finance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://trustly-ai.com" rel="noopener noreferrer"&gt;trustly-ai.com&lt;/a&gt; — trust signals automation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://trust-vault.com" rel="noopener noreferrer"&gt;trust-vault.com&lt;/a&gt; — encrypted vault tools&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://factureimpayee.fr" rel="noopener noreferrer"&gt;factureimpayee.fr&lt;/a&gt; — French unpaid invoice recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Niche content:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://tesla-mag.ch" rel="noopener noreferrer"&gt;tesla-mag.ch&lt;/a&gt; — Tesla coverage (CH)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://iapmesuisse.ch" rel="noopener noreferrer"&gt;iapmesuisse.ch&lt;/a&gt; — AI for Swiss SMBs&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cbdeuropa.com" rel="noopener noreferrer"&gt;cbdeuropa.com&lt;/a&gt; — CBD market analysis EU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you trade and want to chat about backtesting frameworks or automation in general, drop a comment. Anyone running ICT on lower timeframes (5m/15m)? Curious what your filter stack looks like.&lt;/p&gt;

</description>
      <category>trading</category>
      <category>pinescript</category>
      <category>algorithms</category>
      <category>backtesting</category>
    </item>
    <item>
      <title>I built a Reddit posting bot. Account got banned in 2h. Honest scorecard.</title>
      <dc:creator>isabelle dubuis</dc:creator>
      <pubDate>Thu, 30 Apr 2026 20:28:05 +0000</pubDate>
      <link>https://forem.com/isabelle_dubuis_d858453d7/i-built-a-reddit-posting-bot-account-got-banned-in-2h-honest-scorecard-4lh7</link>
      <guid>https://forem.com/isabelle_dubuis_d858453d7/i-built-a-reddit-posting-bot-account-got-banned-in-2h-honest-scorecard-4lh7</guid>
      <description>&lt;h1&gt;
  
  
  I built a Reddit posting bot for my SEO agency. Here's the honest scorecard.
&lt;/h1&gt;

&lt;p&gt;Built a Reddit posting bot for my SEO agency. Goal: stop spending 5h/week on social presence busywork.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final stack after rewrites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Apify&lt;/strong&gt; scans subs, scores threads on intent + age + engagement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI gpt-4o-mini&lt;/strong&gt; drafts posts and comments (cheap, ~$0.002/draft)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playwright on old.reddit.com&lt;/strong&gt; submits (new Reddit UI fights you on every selector)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON files&lt;/strong&gt; for state. No DB, no queue, no Docker.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What worked
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Comments landed from day 1. Posted on r/SEO, got real replies.&lt;/li&gt;
&lt;li&gt;Cooldown logic (7d/sub) stopped me from spamming the same place twice.&lt;/li&gt;
&lt;li&gt;Found 13 safe subs by scraping each sub's about.json + rules.json. Filter out karma minimums and anything over 1M subs (heavy automod).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What broke
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;First 3 self-posts got nuked silently by AutoModerator. Account was 3 months old, 1 karma, email unverified. Reddit's spam classifier reads account age x karma x verified flags before it reads content.&lt;/li&gt;
&lt;li&gt;My success detection looked at page URL after submit. Removed posts return a normal URL, so the script logged success while Reddit deleted in the background.&lt;/li&gt;
&lt;li&gt;The LLM hallucinated tech terms not in the OP. Temperature 0.7 to 0.6 helped, stricter prompt helped more.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What killed the account
&lt;/h2&gt;

&lt;p&gt;After ~2h of automated runs from a datacenter IP (OVH), Reddit shadowbanned the account. Anti-bot detection picked up: datacenter IP + Playwright fingerprint + 4 tabs opened simultaneously + frappes synthétiques + activity 24/7 cron pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Total cost
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;14 days, ~30 hours coding, 4 restarts&lt;/li&gt;
&lt;li&gt;$4 OpenAI, $7 Apify&lt;/li&gt;
&lt;li&gt;Zero hours saved (account got banned before karma built)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The real lesson
&lt;/h2&gt;

&lt;p&gt;You cannot automate past Reddit's reputation system. CQS (Contributor Quality Score) is the hidden gate. Build karma the slow human way first via mobile + residential IP, then automation works on accounts with 200+ karma after 60 days.&lt;/p&gt;

&lt;p&gt;Anyone else hit the wall where automation works perfectly but the platform silently shadowbans the output?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I built &lt;a href="https://vocalis.pro" rel="noopener noreferrer"&gt;vocalis.pro&lt;/a&gt; — an AI-powered SEO content automation tool. The bot from this story is one of its modules. If you want to skip the 30 hours of pain, check it out.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>automation</category>
      <category>reddit</category>
    </item>
  </channel>
</rss>
