<?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: Marvin Munos</title>
    <description>The latest articles on DEV Community by Marvin Munos (@marvinmunos).</description>
    <link>https://dev.to/marvinmunos</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%2F4021497%2F7f0e653e-f442-4edb-adf0-b26698042512.png</url>
      <title>DEV Community: Marvin Munos</title>
      <link>https://dev.to/marvinmunos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marvinmunos"/>
    <language>en</language>
    <item>
      <title>I built a WhatsApp-to-book pipeline with Make.com, OpenAI and Lulu.com — here's the full stack</title>
      <dc:creator>Marvin Munos</dc:creator>
      <pubDate>Wed, 08 Jul 2026 14:06:25 +0000</pubDate>
      <link>https://dev.to/marvinmunos/i-built-a-whatsapp-to-book-pipeline-with-makecom-openai-and-lulucom-heres-the-full-stack-3oni</link>
      <guid>https://dev.to/marvinmunos/i-built-a-whatsapp-to-book-pipeline-with-makecom-openai-and-lulucom-heres-the-full-stack-3oni</guid>
      <description>&lt;p&gt;&lt;a href="https://minhahistoria.pt" rel="noopener noreferrer"&gt;Minha Historia&lt;/a&gt; turns your parents' voice notes into a hardcover memoir book. The French version is &lt;a href="https://monlivredevie.fr" rel="noopener noreferrer"&gt;Mon Livre de Vie&lt;/a&gt;. Here's how the entire pipeline works, with no custom backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  The concept
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;We send one question per week via WhatsApp&lt;/li&gt;
&lt;li&gt;Parents answer with a voice note (60 seconds average)&lt;/li&gt;
&lt;li&gt;We transcribe, edit, and compile 36 answers into a hardcover book&lt;/li&gt;
&lt;li&gt;Every chapter has a QR code that plays the original voice recording&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The stack (zero custom backend)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shopify&lt;/strong&gt; (Dawn theme) — storefront, payments, order management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp Business Cloud API&lt;/strong&gt; — question delivery and voice note collection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make.com&lt;/strong&gt; — 10 scenarios orchestrating the entire pipeline (question scheduling, response collection, transcription triggers, relance sequences, PDF generation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI API&lt;/strong&gt; — transcription (Whisper) + editing (GPT-4o for grammar and flow without changing the person's voice)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Airtable&lt;/strong&gt; — client database, response tracking, progress dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brevo&lt;/strong&gt; — transactional emails and marketing sequences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare R2&lt;/strong&gt; — audio file storage (cheap, fast, S3-compatible)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Workers&lt;/strong&gt; — PDF interior generation (custom worker iterating through chapters)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lulu.com&lt;/strong&gt; — print-on-demand hardcover books, ships worldwide&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why WhatsApp and not an app
&lt;/h2&gt;

&lt;p&gt;The target user is a 70-80 year old parent in a small Portuguese village. They don't install apps. They don't create accounts. But they send WhatsApp voice notes to their grandchildren every single day.&lt;/p&gt;

&lt;p&gt;WhatsApp is the only interface. No app, no login, no dashboard for the parent. They just receive a question and talk.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Make.com architecture
&lt;/h2&gt;

&lt;p&gt;10 scenarios handle everything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S1: Order webhook from Shopify → create client in Airtable&lt;/li&gt;
&lt;li&gt;S2: Weekly question scheduler → send via WhatsApp Business API&lt;/li&gt;
&lt;li&gt;S3: Response receiver → transcribe via Whisper → store in Airtable&lt;/li&gt;
&lt;li&gt;S4-S5: Relance sequences (gentle reminders if no response after 48h)&lt;/li&gt;
&lt;li&gt;S6: Progress tracking → dashboard updates&lt;/li&gt;
&lt;li&gt;S7: Transcription editing → GPT-4o polishes grammar without changing voice&lt;/li&gt;
&lt;li&gt;S8: PDF generation trigger → Cloudflare Worker builds the interior&lt;/li&gt;
&lt;li&gt;S9: Print order → Lulu.com API&lt;/li&gt;
&lt;li&gt;S10: QR code generation → links each chapter to its audio file on R2&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cloning to a second market
&lt;/h2&gt;

&lt;p&gt;The French version (&lt;a href="https://monlivredevie.fr" rel="noopener noreferrer"&gt;Mon Livre de Vie&lt;/a&gt;) took 2 weeks to clone because the stack is market-agnostic. The only real work was translating the 36 questions, the email sequences, and the Shopify theme. The WhatsApp flows, Make scenarios, and printing pipeline didn't change at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The product
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Portuguese version: &lt;a href="https://minhahistoria.pt" rel="noopener noreferrer"&gt;minhahistoria.pt&lt;/a&gt; — 99€ one-time, no subscription&lt;/li&gt;
&lt;li&gt;French version: &lt;a href="https://monlivredevie.fr" rel="noopener noreferrer"&gt;monlivredevie.fr&lt;/a&gt; — 114€ one-time, no subscription&lt;/li&gt;
&lt;li&gt;No app to install, works on any phone with WhatsApp&lt;/li&gt;
&lt;li&gt;4 hardcover designs (Terra, Mar, Serra, Vinho), gold ornaments, premium typography&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also building &lt;a href="https://siftedtools.com" rel="noopener noreferrer"&gt;SiftedTools&lt;/a&gt;, an independent AI tool comparator for e-commerce in 7 languages.&lt;/p&gt;

&lt;p&gt;Would love feedback from anyone who's built WhatsApp-based products or print-on-demand pipelines.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>nocode</category>
      <category>startup</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How I built a 145-page multilingual site with Astro + Cloudflare Pages (and why I didn't use Next.js)</title>
      <dc:creator>Marvin Munos</dc:creator>
      <pubDate>Wed, 08 Jul 2026 14:01:58 +0000</pubDate>
      <link>https://dev.to/marvinmunos/how-i-built-a-145-page-multilingual-site-with-astro-cloudflare-pages-and-why-i-didnt-use-33e1</link>
      <guid>https://dev.to/marvinmunos/how-i-built-a-145-page-multilingual-site-with-astro-cloudflare-pages-and-why-i-didnt-use-33e1</guid>
      <description>&lt;p&gt;I recently launched &lt;a href="https://siftedtools.com" rel="noopener noreferrer"&gt;SiftedTools&lt;/a&gt;, an independent AI tool comparator for e-commerce, published in 7 languages (FR/EN/ES/DE/IT/PT/NL). Here's the technical stack and why I made these choices.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Astro&lt;/strong&gt; for static site generation (145 pages, builds in under 2 seconds)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Pages&lt;/strong&gt; for hosting (free tier, drag-and-drop deployment)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown&lt;/strong&gt; for all content (65 money pages + 21 guides + 7 homepages)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; for version control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No database&lt;/strong&gt; — everything is flat files&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Astro over Next.js
&lt;/h2&gt;

&lt;p&gt;For a content-heavy site with zero interactivity (no user accounts, no forms beyond a newsletter signup), Astro ships zero JavaScript by default. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Perfect Lighthouse scores out of the box&lt;/li&gt;
&lt;li&gt;Pages that load in under 500ms on any connection&lt;/li&gt;
&lt;li&gt;No hydration cost, no client-side routing overhead&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next.js would have shipped 80-200KB of JS for features I don't use. For a comparison site where SEO is everything, that's unacceptable overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The i18n architecture
&lt;/h2&gt;

&lt;p&gt;7 languages live under subfolders (&lt;code&gt;/fr/&lt;/code&gt;, &lt;code&gt;/en/&lt;/code&gt;, &lt;code&gt;/es/&lt;/code&gt;, etc.) with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Localized slugs (not just translated content, but native URL structures)&lt;/li&gt;
&lt;li&gt;Full hreflang network (8 entries per page: 7 languages + x-default)&lt;/li&gt;
&lt;li&gt;A neutral root language selector at &lt;code&gt;/&lt;/code&gt; with soft browser detection&lt;/li&gt;
&lt;li&gt;Each content page exists as clean &lt;code&gt;.md&lt;/code&gt; by appending &lt;code&gt;.md&lt;/code&gt; to the slug — this is specifically for LLM crawlers who prefer Markdown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The i18n dictionary lives in a single TypeScript file with ~600 keys across 7 languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  The GEO layer (AI search optimization)
&lt;/h2&gt;

&lt;p&gt;Beyond traditional SEO, I optimized for AI search engines (ChatGPT, Gemini, Perplexity):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;robots.txt&lt;/code&gt; explicitly allows GPTBot, ClaudeBot, PerplexityBot, and 7 other AI crawlers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;llms.txt&lt;/code&gt; at the root indexes all 145 pages with descriptions (the emerging standard for LLM discoverability)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;llms-full.txt&lt;/code&gt; contains detailed verdicts for deeper context&lt;/li&gt;
&lt;li&gt;Every content page as &lt;code&gt;.md&lt;/code&gt; endpoint — LLMs parse Markdown better than HTML&lt;/li&gt;
&lt;li&gt;Schema.org with FAQPage, author, Organization on every money page&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;p&gt;Cloudflare Pages free tier with drag-and-drop. No CI/CD, no build pipeline. I run &lt;code&gt;npm run build&lt;/code&gt; locally, drag the &lt;code&gt;dist/&lt;/code&gt; folder to the Cloudflare dashboard, and it's live in 30 seconds. Simple, free, fast.&lt;/p&gt;

&lt;p&gt;The entire site costs $0/month to host.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do differently
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;I'd set up CI/CD from day one (GitHub Actions → Cloudflare Pages) instead of manual drag-and-drop&lt;/li&gt;
&lt;li&gt;I'd use Astro content collections with type-safe schemas earlier (I retrofitted them)&lt;/li&gt;
&lt;li&gt;I'd build the 7-language architecture before writing content, not after&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The site: &lt;a href="https://siftedtools.com" rel="noopener noreferrer"&gt;https://siftedtools.com&lt;/a&gt;&lt;br&gt;
The repo: &lt;a href="https://github.com/MVMStudio34/siftedtools" rel="noopener noreferrer"&gt;https://github.com/MVMStudio34/siftedtools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the Astro i18n setup or the GEO optimization layer.&lt;/p&gt;

</description>
      <category>astro</category>
      <category>webdev</category>
      <category>seo</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
