PartyLab Timeline
A photo booth that grows week after week: new styles, new themes, new party occasions and features that make PartyLab more complete over time. Here are the main steps, in chronological order.
First public web prototype of the AI photo booth
Launched the first browser page (phase 1) to try the AI photo transformation - the starting point of the entire PartyLab site.
Italian/English multilingual site
Added IT/EN support for event types and client events, with translated previews and watermarks - the foundation for all future site internationalization.
Star ratings and guest comments
Guests can now rate their photo with stars and leave a comment, alongside a debug photo log and per-event time zone.
Photo packages manageable from admin (with Demo)
Photo packages move from hardcoded values to a catalog configurable in admin; the 5-photo Demo package is introduced - the foundation of the sales model.
Home section “From the latest event”
New home section with a mosaic of random photos from the latest event, later expanded with mobile swipe, a lightbox and related galleries.
Drag&drop picker for styles and themes in admin
Admin can now choose the styles/themes available for each client event by dragging them into a dedicated panel, instead of managing them only through a form.
Rebrand from Picoo to PartyLab
The product changes name from Picoo to PartyLab across the whole site, admin included - the first big step in brand identity.
Customizable event page colors
Introduced colors (background, accent, text) configurable globally and overridable per single event/kiosk - the base of a customization later sold as a paid feature.
Custom themes for a single client event
Themes can now be created tailor-made for a specific event, without needing to attach them to an existing event type.
History/timeline for client events in admin
New sub-tab with an event history (kiosk sends, usage stats) for each single client event - the foundation of the future organizer Activity Log.
Self-service organizer account (Google login)
Organizers can now sign up and log in on their own via Google (phase 1, no payment yet), with a dedicated Users panel in admin - the independent organizer role is born.
Photo booth redesign for landscape mobile
The guest experience on a landscape smartphone is redesigned from scratch: side panels, actions for every step, a 4-digit PIN, dynamic social links.
Customizable global text watermark
The text printed on photos becomes live-editable from admin and organizer, with dedicated endpoints - the foundation for later selling its removal as an add-on.
Start of photo migration from Supabase to Cloudflare R2
First phase of migrating image storage to R2 (starting with the public home gallery), to cut bandwidth costs on Supabase.
Public gallery pages for each event
Every client event now has its own public page (/events/{slug}/) with a customizable slug and a gallery hosted on R2, instead of staying visible only internally.
Likes and sharing on public photos
Visitors can like and share individual photos from events' public galleries.
New public pages for event types (Occasions)
Every event type (weddings, parties, corporate...) gets its own public page with a gallery, a colored badge and dedicated SEO.
“Classic” package without artificial intelligence
Introduced a photo package that skips AI generation entirely (bypassing Replicate), for those who just want the shot without a transformation.
Email delivery migrated to Brevo
Transactional emails move from direct SMTP (blocked outbound by Render) to the Brevo API, fixing a structural reliability problem in production.
First automatic nightly backup system on R2
Daily automatic backup of database and storage to Cloudflare R2, with dedicated restore scripts - the first real safety net against data loss.
Configurable final photo format (3:2/1:1/2:3)
Admin can choose the aspect ratio of AI-generated photos, instead of one fixed format for every event.
“Automatic” photo format (follows orientation)
New format that adapts to the guest's actual smartphone orientation, with a dynamic framing guide.
Public organizer dashboard demo
Added a public, read-only demo of the organizer dashboard, useful for showing the product to prospects without real credentials.
C2PA signature on AI-generated photos
Every AI-transformed photo is signed with a self-signed C2PA manifest, the machine-readable marking required by the AI Act (art. 50).
“AI GENERATED” label on guest photos
Photos that went through AI transformation now show a visible label declaring their artificial origin.
Privacy and age consent for the public gallery
Introduced an explicit consent system (privacy popup at capture, age/publication question on the result) that filters which photos make it into the public gallery.
First real backup recovery after an incident
A wrong click on “Delete all” in the admin Log erases real data (jobs and likes): the first real use of the R2 backup to restore production, followed by a mandatory typed confirmation for the action.
Public page “Compare packages” (/pacchetti)
New page with a comparison table generated from real package data, customizations unlocked per tier, and the first catalog of extras/add-ons sold separately.
Launch of the public /stili-temi page
New page showing the public all available Styles and Themes, grouped by event type, generated live from the database.
Kwala B Day: the first real client event
The platform's first real (non-demo) event reveals three genuine UX problems (camera zoom, no save confirmation, ignored consent) that lead to a rework of the guest flow.
“Real Photo” style (with AI mask) goes live
Fixed a native build blocker (libGLESv2) that was preventing deployment of the style that preserves the person's real face via an AI mask - a flagship feature finally online.
AI provider toggle (Replicate/direct OpenAI)
Admin can choose, globally or per single event, whether AI generation goes through Replicate or directly through OpenAI - the first step of a controlled provider transition.
Migration to the gpt-image-2 AI model
Switched the image generation model (from gpt-image-1.5) for better facial detail fidelity at a lower cost.
Stripe payments for the organizer package
Integrated the first Stripe Checkout (sandbox) to have the organizer pay for the chosen package, with a confirmation webhook - the foundation of the future online-payment business model.
3-step wizard for self-service event creation
The organizer creates a new event through a guided wizard (event type, name, summary) instead of the old static “we'll contact you” screen.
Self-service event creation without admin approval
New endpoint letting an authenticated organizer create an active client event entirely on their own, without going through admin - closing the self-service loop.
Organizer-admin messaging channel
New Communications tab in the organizer dashboard: a free-text message per event notifies admin by email and stays visible as a mini history, with the option to reply.
“Sales” section in admin Statistics
New aggregated tables on confirmed payments (packages, photo extensions, add-ons), breaking out the real revenue of individual products even when sold together.
Pre-production Stripe audit and first test suite
Full review of Stripe's official go-live checklist: fixed real bugs (test/live product mismatch, a race condition, expired sessions) and introduced the project's first automated test suite (23 pytest tests).
An organizer can pay for and manage multiple events
Payment control moves from “once per account” to “once per event”: an organizer can now create and pay for a second event with “+ New event”.
Real time zone of the event venue
A self-service event's dates are now interpreted in the real time zone of the chosen location (resolved from coordinates), no longer the time zone of whoever fills in the form.
New admin “Invoices” tab
First administrative view of paid orders (client, package, amount) - the first step toward real invoice generation, completed a few days later.
Organizer dashboard reorganization
The old General tab is split into General, Themes & styles, Guest experience; the History tab becomes Activity Log with a new Guest comments section - a more compact layout.
New “Mini Me” style (collectible action figure)
Added the Mini Me style, Toy category: turns the person into a blister-packed collectible action figure with the PartyLab brand on the packaging.
8 new “TV Shows” themes for Adult Parties
Added 8 themes inspired by iconic TV shows, with generic prompts and no reproduced brands: Upside-Down World, Mother of Dragons, Perfect Heist, Deadly Games and more.
4 new “Superpowers” themes for Corporate Events
Added 4 new superhero-themed items: Flight, Fire Control, Superhuman Strength, Energy Shield.
Categories and chip filters for Styles and Themes
Styles and Themes get a category (e.g. Realistic, Cartoon, Music, TV Shows) with two-level chip filters on /stili-temi and in the admin/organizer drag&drop picker.
“AI GENERATED” label on catalog covers
All Styles and Themes covers (95 images) are reprinted with an attribution label, from then on applied automatically to every new cover uploaded too.
Real “likes” and lightbox on /stili-temi
“Likes” on Styles and Themes become a shared, server-side persistent counter (no longer just local), and cards become zoomable in a dedicated lightbox.
Electronic invoice XML generation (FatturaPA)
Introduced custom-built FatturaPA XML generation (FPR12 format) for every paid order - a concrete first step toward real electronic invoicing.
“Adult Parties” renamed to “Private Parties”
A full rename (internal and public slug, titles, SEO) of the event type, with a data migration that moved 23 Themes and one real client event (Kwala B Day) onto the new row.
English translation of Styles/Themes categories
Styles and Themes categories (e.g. Cartoon, TV Shows) get a dedicated English translation, shown in the filter chips when the site is in English.
Categories added for Lego, Weddings and Kids Parties too
40 more themes get a category (e.g. Adventure, Elegant, Heroes), extending the chip filters already used for Private Parties and Corporate Events to every occasion.