MoraSpirit 360 logo
Back to Digital Solutions

Automation Platform

Birthday Flyer Bot

Automated MoraSpirit birthday flyer generator. Reads crew birthdays from Google Sheets, downloads private Drive photos, face-corrects and crops them, composites personalized Canva flyers, and delivers them daily via email, Discord, and Telegram — with a Next.js admin panel for status and manual triggers.

Birthday Flyer Bot

Birthday flyers used to be made by hand: find today’s birthdays, open each photo, crop it, drop it on a template, type the name and title, then send it out. That workflow doesn’t scale for a large crew — and it’s easy to miss someone.

At a Glance

Project
Birthday Flyer Bot
Purpose
Automatically generate and deliver personalized MoraSpirit birthday flyers every day.
Audience
MoraSpirit crew, pillar heads, and operations admins
Automation
GitHub Actions cron + manual workflow dispatch
Delivery
Email (SMTP), Discord webhooks, Telegram Bot API
Technology
Node.js, Sharp, smartcrop-sharp, face-api.js, Google Sheets/Drive OAuth, Nodemailer, Next.js admin panel

The Challenge

Manual birthday flyer creation depended on someone noticing the date, hunting for the right photo, cropping faces carefully, placing them on a branded template, and posting to every channel. With Members and Board tabs full of people, that process was slow, inconsistent, and easy to forget.

The Solution

Flyer Bot runs on a daily schedule. It checks Google Sheets for today’s birthdays, downloads private Drive photos via personal Google OAuth, auto-rotates and smart-crops faces, composites them onto the official Canva-style template, and sends the finished AVIF flyer to the configured channels. An admin panel lets the team check status and trigger a run manually.

Flyer Bot admin dashboard with Generate Now controls

Admin dashboard — birthday flyer automation status and manual Generate Now controls.

How the pipeline works

  • Daily automatic birthday detection from Members + Board sheet tabs
  • Private Google Drive photo download via personal Google OAuth (no public sharing needed)
  • Face detection for rotation correction and smart square crop
  • Circle photo plus name/title compositing on a Canva template
  • Delivery via email (SMTP attachment), Discord webhook, and Telegram
  • Marks “sent this year” back on the sheet to avoid duplicates
  • Alerts when a birthday person is missing a photo
  • Compact AVIF flyer output for smaller file size

Admin panel

A password-protected Next.js admin panel (Vercel-ready) gives operators a live status view and on-demand controls. From the dashboard, the team can review automation status and press Generate Now when a same-day run is needed outside the cron schedule.

The templates editor lets admins update Head, Member, and Other flyer designs with a live preview. HTML/CSS templates use placeholders such as photo, name, and category — so design changes can ship without rewriting the generation engine.

Flyer Templates editor with live preview for Head, Member, and Other designs

Flyer Templates editor — edit HTML/CSS on the left and preview sample data live on the right.

Tech stack

  • Engine: Node.js, Sharp, smartcrop-sharp, face-api.js
  • Data: Google Sheets API, Google Drive API (OAuth 2.0)
  • Delivery: Nodemailer (SMTP), Discord webhooks, Telegram Bot API
  • Automation: GitHub Actions (cron + manual workflow dispatch)
  • Admin: Next.js, Vercel-ready, password-protected dashboard
  • Design: Canva-exported template + configurable geometry

Outcome

Birthday celebrations for the MoraSpirit crew now run on autopilot. Personalized flyers go out on the right day, with consistent branding, fewer missed birthdays, and an admin escape hatch when someone needs a manual regenerate.