previous
next

Quick note before we start: I built LVX Tarot with a dark GLSL canvas background of animated shooting stars. Months later, Grok launched with the same aesthetic. Then Grokpedia did too. Elon, if you’re stealing my design ideas, at least hire me. I’m sure it’s a coincidence, but considering they probably had a full team speccing that out and I did mine solo first, it made me feel pretty good about my design instincts.
I’ve always been into tarot. Not in a “let me predict your future” way, more in a “these are beautiful cards with centuries of symbolism and storytelling built into them” way. When I started working with AI APIs, a tarot reader was the obvious first project.
The first version was basic. Pick some cards, type a question, get a reading. One page, one flow, mostly just me testing how well I could shape AI responses to feel like genuine interpretations rather than generic chatbot output. The prompt engineering mattered more than the code at that stage.
But people actually liked it. Friends shared it, strangers started using it, and I realized there was something here worth building properly.
The experiment became LVX Tarot. A full web application with user accounts, a freemium subscription model, educational content, a tarot tutor, and a growing community around it.
The product challenge was interesting. The mystical experience had to feel seamless. Nobody pulling a tarot card wants to see loading spinners or feel like they’re interacting with software. The interface needed to get out of the way and let the reading feel meaningful. That meant careful attention to pacing, transitions, atmosphere. The GLSL shooting star background wasn’t decoration. It sets a mood the moment you land on the page, before you’ve clicked anything.
On the business side, I needed to manage API costs without killing the user experience. The solution was a freemium model: two free readings per day for everyone, unlimited for subscribers. This lets casual users get value immediately while heavy users who come back daily convert to paid. Stripe handles the subscription flow, Supabase manages auth and row-level security so user data stays locked down.
The whole stack is mine. Next.js for the frontend and server-side rendering. Supabase for auth, database, and security. Stripe for payments and subscription management. The AI layer handles the reading interpretations, but the real work was in shaping how those responses feel. A tarot reading that sounds like a customer service bot is worthless. Getting the tone right, making each reading feel personal and considered, took more iteration than the infrastructure.
Beyond the core reading experience, there’s an educational layer: card meaning guides covering love, career, health, and spirituality. A tarot tutor feature for people who want to learn to read cards themselves. Blog content that drives organic traffic. This isn’t a demo with one feature. It’s a content-driven product with multiple engagement loops.
Most of my work is Web3 and 3D. This project shows a different muscle: taking an idea from zero to a live product with paying users. No client brief, no protocol requirements. Just identifying something people want, building it, figuring out the monetization, and shipping it.
It also turns out that building something people use for fun teaches you different things than building tools. The bar for “feels right” is higher. Nobody needs a tarot reading. They choose to do one. So the experience has to earn their attention every single time. That kind of design thinking carries over into everything else I build.
Live: lvxtarot.com