The idea
Confessio is a place where professionals share the mistakes they made at work so that other people can avoid them. Every confession has to include the lesson learned, which keeps the site useful rather than a place to vent. People read, react and recognise themselves, and nobody can tell who wrote what.
What it had to do
- Let anyone post a mistake in under a minute, with no sign-up.
- Never store anything that identifies a person: no accounts, no IP logging.
- Make reading as engaging as posting: a ranked feed, reactions, polls and comments.
- Stay fast with hundreds of thousands of confessions and millions of reactions.
- Be found on Google, one confession at a time.
What was built
Identity without accounts
Each device gets a random 64-character token. Posts, reactions, votes, comments and the private dashboard all hang off that token, and resetting it clears every trace of the old identity. There is no email, no password and no IP address on record.
Posting and the lesson learned
The post form, built in Livewire, asks for a title, the mistake, the lesson, a category, a profession, a severity and tags. A light, keyword-based check spots heated, distressed writing and holds those posts for a 30-minute cooling-off delay before they appear. No AI or external service reads the text.
A feed with a heat score
Confessions are ranked by a heat score that weighs votes, "me too" signals, reactions, comments, views and shares against how old the post is. Readers can also browse the confession wall, ten categories, twenty professions, tags, search and a live stats page.
Reactions, polls and comments
Six reactions (relatable, funny, shocking, lesson, empathy and brave), a "me too" count, a poll asking whether the reader would have made the same mistake, and threaded comments on every confession.
A private dashboard
The dashboard shows your own posts, the ones you liked, a timeline and a writing heatmap. Badges and XP live only there: they are never shown publicly, so nobody performs for a leaderboard.
Generated, not uploaded
Nothing visual is uploaded or stored. Avatars are generated SVG, from fifteen geometric shapes and the twelve zodiac signs. Each confession gets its own "mistake DNA", a deterministic SVG fingerprint, and its own 1200×630 share image, also generated as SVG and cached for a long time once built.
Speed and search
The data set used for testing held hundreds of thousands of confessions and millions of votes and reactions. At that size a few things needed care: composite indexes for the wall and recent views, MySQL full-text search instead of a slow LIKE scan, approximate row counts for headline numbers, and a feed prefetch endpoint so the next page is ready before the reader reaches it. Sitemaps are split into chunks so every confession can be indexed.
Technology
Laravel 11 and PHP with Livewire 3 and Alpine.js for the interactive parts, Tailwind CSS for the interface, MySQL with full-text search, and Redis. Avatars, fingerprints and share images are generated as SVG on request.
- Laravel 11
- PHP
- Livewire 3
- Alpine.js
- Tailwind CSS
- MySQL
- Redis
- SVG generation