Roots is a family salon in Riga. The page solves the problem a salon actually has:
the person in the chair does not know what they want, and the stylist finds out
four minutes in. So you pick one of nine cuts, upload one photo, and 13 seconds
later you see yourself wearing it. Booking is the last step, not the first.
The page itself calls nothing that costs money. Every paid request and every
message runs through n8n, which holds the keys and enforces the caps: two tries
per session, 25 a day, 250 total. When the ceiling is reached the page shows a
real prepared result instead of an error, because the person who hits that
moment is judging the product.
The automation is a chain, not one trick. Photo and cut become a result, the
result buys a contact, the contact attaches the picture to a booking so the
stylist sees it before the person sits down, and three weeks later the same
workflow emails the person their own photo with one line: your roots are
showing. Then it deletes both pictures, because the page promised it would.
That promise is why storage moved to an EU bucket mid-build: the first choice
could not delete files at all.
Built with Base44, n8n, fal.ai Nano Banana and Supabase.
Crenaly: a booking SaaS I designed and built end-to-end for appointment-based businesses in France: salons, barbers, beauty and wellness.
The core idea: when a client cancels, the freed slot is automatically offered to clients who asked for an earlier time. The first to accept gets it, their appointment moves in place, and the slot they leave is offered next. No double booking, no manual work.
Around it, a full product:
→ Branded booking page for each business, embeddable on their own site
→ Mobile-first booking flow, no account needed
→ Agenda, client management, team roles & permissions
→ Verified reviews, analytics, Stripe billing
Automatically offering a cancelled slot to the next client is such a practical feature for salons and barbers. Designing and building Crenaly end to end must have made those flows much tighter.
What happens when you hold down the delete button for too long?
Well, I made sure your entire website finds out. 🔥💀
Built this little Framer component.
For studio and portfolio work pages, we made Pigeonhole, a filterable project grid for Framer.
Pick a category and every cover that changes flips in place like a departure board flap, in a wave across the grid, while the rest keep still. The page below eases into place as the grid changes, and a card can open a full screen preview or go to its own link.
It fits studio portfolios and agency project archives. Projects can come straight from your CMS or be filled in by hand, and on phones it gets its own layout.