Skip to content
Back to endeavors

Aye Pasquale

A dog's recipe newsletter, powered by AI

  • Python
  • OpenAI
  • Neon
  • Cloudflare Workers
  • Cloudflare Pages
  • GitHub Actions

The idea

My grandpa was a heavy, mobster-lookin’ Italian guy who owned a pizza shop. Sundays meant full Italian dinners at his house — him in the kitchen mixing salads, making meatballs, tossing pizza dough over his head. When I’d walk in, he’d shout: “Aye! Pasquale!” I named my dog after that. The newsletter writes recipes in that voice — an Italian grandpa dog who’s way too excited about food.

AI content pipeline

Problem: I wanted to explore how AI actually works by wiring it up to something real — not just a chatbot, but a system that runs on its own and produces something people enjoy.

Solution: Built a Python script that fetches a random recipe from Spoonacular, sends it to OpenAI to rewrite in Pasquale’s voice (Italian grandpa accent, dog perspective), then emails it to subscribers with personalized magic links for managing their subscription.

Outcome: The newsletter runs daily via GitHub Actions at 8 AM. Subscribers are mostly friends and family, but it’s growing.

Airtable + Softr + Windows Task Scheduler

Problem: The first version needed somewhere to store subscribers and a way to run on a schedule. I cobbled together what I knew.

Solution: Airtable for subscriber data, Softr for a management portal with magic links, and Windows Task Scheduler to trigger the Python script daily.

Outcome: It worked, but it was brittle — tied to a Windows machine being on, and Softr’s magic link system was clunky.

Supabase migration

Problem: I wanted a real database, proper auth, and something that wasn’t dependent on my laptop running.

Solution: Migrated subscriber data to Supabase with PostgreSQL, edge functions, and Row Level Security. Set up GitHub Actions to replace the Windows scheduler.

Outcome: Hit Supabase’s free project limit almost immediately.

Neon + Cloudflare Workers

Problem: Needed a new database host that wouldn’t cap out, and a proper API layer for the subscriber portal.

Solution: Moved to Neon for serverless PostgreSQL and built a Cloudflare Workers API for the portal — unsubscribe, magic links, preference management, new sign-ups. The portal lives on Cloudflare Pages at manage.ayepasquale.com. Added RFC 8058 one-click unsubscribe for email compliance.

Outcome: 44 subscribers migrated, daily sends running in production, and an infrastructure stack that costs nothing at current scale. The whole system is self-sustaining — I just watch the logs.