×
eazy-photo@harders-it: ~
eazy-photo@harders-it:~$ cat README.md

eazy.photo

QR-based photo sharing for events

role Founder & developer
year 2026
status Live
site eazy.photo
stack [Laravel] [Livewire] [Tailwind CSS] [Reverb] [S3] [Laravel AI SDK] [Gemini]

Guests scan a QR code and start shooting. No app to install, no account to create. Every photo lands in one shared gallery that the host can download in full, original quality.

The problem

After a wedding or a birthday the photos are scattered across a dozen phones, and every existing way of collecting them costs something:

  • Shared iCloud albums and AirDrop are elegant right up until half the guests are on Android. Then the neat iOS-only solution is simply not available to them
  • Google Drive and Dropbox work on both platforms, but ask people to sign in to an account before they can hand over a single photo
  • Facebook and Instagram are where the guests already are, but both re-encode hard, so what the host ends up with is a fraction of the original file
  • Chat groups reach everyone, but half the guests never join, and the images that do arrive have been compressed on the way
  • Dedicated event apps solve the collecting part by asking every guest to install something, which is exactly the friction that kills participation

The outcome is the same every time: a fraction of the photos that were actually taken, in a quality nobody would print.

For guests

Scanning the code opens a full camera in the browser. No download, no sign-up, ready in seconds.

  • Camera or gallery: the host decides whether guests shoot on the spot or may also pick from their camera roll
  • Video: short clips alongside photos, switched on per event
  • Photo greetings: a written message attached to a photo, which the host can collect as one formatted PDF afterwards
  • Private photos: a guest can keep a photo out of the live wall and the shared gallery while the host still receives it
  • Guest gallery: fullscreen browsing of everything shared at the event, with the option to delete your own uploads
  • Leaderboard and credits: optional ranking of who contributed most, and optional name credits on photos
  • Reporting: guests can flag content, which lands in the host's moderation queue

For hosts

  • Dashboard across events: create, schedule and run several events, with live counters for storage use, unique guests, photos and video
  • Downloads: single files or the whole event as a ZIP archive in original quality
  • Moderation: review flagged content and remove what does not belong
  • Look and feel: 22 colour themes and 20 fonts with live preview, so the event page matches the party
  • Per event switches: live wall, guest gallery, uploads, leaderboard and video are all toggles
  • Scheduling: the live wall and kiosk turn themselves on and off at set times, so nobody has to stand by with a phone
  • Two factor authentication: authenticator app or email, chosen at login

Live wall and photo booth

The live wall puts the incoming photos on a screen at the venue, updating over websockets with no refresh and no manual steps. Five display modes: slideshow, mosaic, marquee, spotlight and polaroid, each cycling through the collection as it grows during the evening.

The photo booth turns a spare phone or tablet on a stand into a booth. Front or rear camera, countdown sound, opened with a code from the dashboard. No extra hardware and no extra cost.

eazyCreator

The QR code only works if it reaches the guests, which in practice means printed material on the tables. That normally sends the host off to Canva or a designer, and back with a file that has the wrong bleed or a QR code pasted at the wrong size.

eazyCreator is a design studio built into the product instead. No installation, no second subscription, and the event's own QR code is inserted automatically at the right size and contrast.

  • Canvas editor in the browser: text, shapes, images, graphics, layers, guides and snapping, with undo and redo
  • Formats for the table and the wall: table cards, flyers, posters and pocket cards, in A4, A5, A6 and smaller
  • Templates or blank: start from a designed template or from nothing
  • Own material: upload your own photos and logos
  • Print-ready output: high resolution PDF, CMYK, ready to hand to a print shop
  • Saved designs: keep a design and reuse it for the next event

The point is that the whole path from event to printed table card stays inside one product. Nothing has to be exported, re-uploaded or measured by hand.

eazyAI

Most product AI is a chat box attached to the side of an app that can tell you where a feature lives. eazyAI is wired into the platform's own functions, so it can carry the task out instead of describing it. The host writes what they want in ordinary language, without knowing the menu structure or any special commands.

What it can do on the host's behalf:

  • Create an event, or find one that already exists, and fetch the links belonging to it
  • Report photo, guest and storage numbers for an event
  • Turn the live wall, kiosk and photo booth on or off, and change how the live wall displays
  • Schedule any of that for a point in the evening, then list or cancel what is scheduled
  • Restyle the guest page: colours, fonts and overall expression
  • Estimate storage need, look up the current upgrade options and produce a payment link
  • Generate a design and hand it over to eazyCreator as editable elements
  • Pull up the relevant guide when something is not working

Steps chain together inside one conversation. A question like "how much storage do I need for a wedding with 120 guests where people will shoot a fair bit of video" is answered with an estimate first, then, if the estimate calls for it, the current upgrade options, and then a payment link. The host never has to translate a need into features and menu items along the way.

Estimates from real events, not from the model

A language model guessing at gigabytes is worth nothing. The estimate is computed from historical data on comparable events, weighted by event type, guest count and whether video is expected, and it comes back in plain language with a sensible buffer instead of a decimal. When an event falls outside the data, the assistant says the estimate is uncertain rather than presenting a guess as a fact.

Storage already bought for the event is subtracted before an upgrade is suggested, the same credit rule the pricing model uses. That keeps eazyAI from being a sales channel with a friendly voice: it works out the real need first.

Designs that stay editable

Given a description such as "elegant and romantic for our wedding, light colours, room for the QR code", eazyAI produces a starting point in eazyCreator. What comes back is not a flat AI image but the same editable layers as any other design, so the host can move, restyle and rewrite it afterwards. It shortens the path from idea to draft without taking the draft away from the user.

Live data, guardrails and a visible trail

Anything that can change is fetched from the platform when it is needed: event links, current prices, payment status, statistics, and the state of the live wall, kiosk and photo booth. The assistant does not recall or reconstruct values that have to be correct, and when a lookup or an action fails it says so instead of filling the gap itself. Prices and links are only used when they came from the platform, and the assistant is hardened against attempts to talk it out of its own rules.

Access is scoped tightly. eazyAI works with the signed-in user's own name and own events, plus content that is already public on eazy.photo such as guides and help pages. It cannot look up another host's events through the chat, and personal data is not passed to the model unless the user writes it themselves or it is already part of the title or description of their own event. Data minimisation and GDPR are properties of the integration rather than a policy bolted on afterwards.

While it works, the host can follow along: a short status while a lookup or a change is running, confirmation when it completes, and responses streaming in as they are generated. It stays obvious when the assistant is answering a question and when it is actually changing something.

Technical notes

Laravel and Livewire for the application, Reverb for the realtime live wall. It runs on a Hetzner box, and the photos live in OVH Object Storage, which speaks S3. Keeping the storage off the machine is what makes the upload path work: uploads are streamed straight to object storage so the web servers never hold a full-size image, with resumable uploads for interrupted transfers and file sizes up to 10 GB. Downloads are streamed as ZIP archives without temporary files, which is why laravel-zipstream exists.

eazyAI runs on the Laravel AI SDK with Gemini as the model, and Livewire plus realtime updates for the chat itself. The model choice matters less than the wiring: the value sits in the connection between the assistant and the data and functions that already exist in the platform.

Pricing model

Hosts pay once per event. No subscription, no seats, no monthly bill for something that happens on a single Saturday. The dimensions are storage volume and retention: six tiers from a free 500 MB up to unlimited, each paid tier giving three months to upload and three months of storage.

The interesting part is what happens when a host guesses wrong. Storage need is hard to estimate before the party, and a package that runs out mid-event is exactly the wrong moment to hit a wall. So every purchase is credited toward the next one: upgrading costs the difference between the tiers, not the full price of the new one. A host can start on the small package, upgrade twice during the evening as the uploads pile up, and end up paying the same as if they had bought the large package from the start.

That removes the incentive to over-buy up front, and it means the cost follows the actual load an event creates instead of the load someone predicted a month earlier.

eazy-photo@harders-it:~$ ls screenshots/
The eazy.photo front page with a QR code table card at a wedding
# Front page
The eazyAI assistant open on a phone, offering to create events and design QR codes
# eazyAI, opened from anywhere in the host dashboard
Pricing page showing storage packages from 500 MB to unlimited
# Storage packages, priced per event