fr3n: Print-on-Demand, Raffle Animations, and Miniapp Storage

by Oskar Freye

December shipped Printful integration for print-on-demand, animated raffle winner reveals with confetti, and a miniapp storage API.

fr3n Printful and Raffles

December was the month of integrations. Three big ones shipped before the holidays.

Printful: Print-on-Demand for Creators

The full Printful integration went live on Christmas Day (yes, I deploy on holidays). Creators can now sell physical print-on-demand products — merch, posters, apparel — directly through fr3n.

The implementation spans the entire stack:

The OAuth implementation had some fun surprises. Printful uses redirect_url not redirect_uri, returns expires_at instead of expires_in, and Public Apps don’t get stores_list scope. Documentation, meet reality.

Raffle Winner Reveals

Raffles got a major UX upgrade. The draw dialog now has phased states — input, drawing, revealing, complete — with sequential winner reveals showing profile pictures and canvas-confetti celebrations. It’s pure dopamine. Creators love it.

I also added auto-draw scheduling via EventBridge. Set a raffle end date, toggle auto-draw, and the system draws winners automatically when the time comes. The scheduler reschedules gracefully when end dates change.

Miniapp Storage API

The last big feature: a storage API for miniapps. Third-party apps embedded in fr3n can now store and retrieve data through a rate-limited API with JWT authentication. The miniapp bridge SDK got bulk operations in v2.1, the creator hub got a storage admin UI and dev workbench, and the fan app integrates a storage proxy in its sandbox.

MCP Server

A quieter but important addition: an MCP (Model Context Protocol) server with OAuth authentication. It uses our existing OpenAuth instead of a custom OAuth implementation. This opens the door for AI assistants to interact with fr3n data.

Version 0.11.22. The feature velocity this month was absurd.