Waffle is the production-ready tool in the Project Syrup family. No timers. No randomizers. No payment processing. Just a clean, real-time board where buyers claim spots and admins track payments โ€” built to run inside Instagram's in-app browser, where your buyers already are.

v0.1.22 Latest Stable
v0.1.23-beta.3 Beta on dev
MIT License
Go + PG 16 Stack

What is a waffle?

A waffle is a raffle-style drop popular on Instagram. A seller creates a listing with a fixed number of numbered spots at a set price. Buyers claim spots by entering their Instagram handle. The seller collects payments out-of-band (DM, CashApp, Venmo), then draws a winner from the paid spots.

Waffle replaces the copy-paste spot lists, frantic DM management, and manual tracking that sellers previously did by hand โ€” with a real-time, mobile-first web app that works right inside Instagram's browser.

Project Syrup context

Waffle is one of two apps under the Project Syrup umbrella:

AppStatusWhat it does
Waffle โ€” The Waffle Maker Stable Production-ready live spot management for Instagram waffle drops. This wiki.
Wafflerace Experimental Animated waffle boat race tool for dramatic, high-suspense random selection.

Both apps are open source under MIT and self-hosted via Docker. This wiki covers Waffle only.

How it works

  1. Admin creates a waffle โ€” sets title, price per spot, total spots, and links to Instagram posts showing the item.
  2. Buyers claim spots โ€” tap available spots, enter their Instagram handle. Done in under 10 seconds, on mobile, inside the IG app.
  3. Admin marks paid โ€” as payments arrive via DM, CashApp, or Venmo, the admin marks each spot paid from the manage view.
  4. Winner drawn โ€” admin enters the winning spot number after an external drawing.
  5. Everyone sees results โ€” a WebSocket broadcast updates all connected clients instantly. No refresh needed.

Tech Stack

LayerTechnology
FrontendGo server-side templates + Tailwind CSS + DaisyUI (syrup theme)
BackendGo (Gin framework) + WebSocket hub
DatabasePostgreSQL 16 with auto-run migrations (pgx driver)
DevOpsDocker Compose, multi-stage builds, GHCR image registry
PWAWeb App Manifest, service worker, offline caching, installable
SecurityJWT auth, bcrypt passwords, rate limiting, brute-force lockout, audit log

Project Status

PhaseStatusDescription
1โ€“6โœ…Core waffle CRUD, spot claims, WebSocket live updates, admin dashboard, buyer stats, mobile polish
7โœ…Multi-admin RBAC (super_admin / admin / waffle_manager), password reset, admin management
8โœ…PWA service worker, offline caching, installable app shell
9โœ…DaisyUI migration โ€” syrup/Halloween theme, amber primary palette
10โœ…Production hardening โ€” structured logging, health probes, rate limiting, graceful shutdown
11โœ…Security polish โ€” full audit log, bcrypt password policy, login lockout, destructive confirmations
12โœ…Bugfix release โ€” archived filters, buyer stats recalculation, password reset, accessibility
13โœ…Users registry with backfill, duplicate lockout fix
14โœ…Re-theme to projectsyrup.app dark warm aesthetic, embedded migrations, winner dropdown, tag-driven CI
15โœ…Multiple items & multiple winners per waffle (up to 10 items)
16โœ… v0.1.21Random spot selection โ€” public "Pick Random Spots" flow with partial fulfillment, live stats counter updates, mutually-exclusive claim controls
17โœ… v0.1.22Stored payment methods โ€” Venmo/PayPal/CashApp/Zelle pool, admin CRUD, multi-select on waffles, public display with icons. Nav rename: "Admin Tools" โ†’ "Management"
18๐Ÿงช v0.1.23-betaShare to Instagram โ€” downloadable waffle share card PNG (Story 1080ร—1920 / Square 1080ร—1080), admin share message templates, per-waffle message editor on the manage page. Also: shareable buyer stat card with luck rating and trophy case.

Quick Links