Kevin O'Connell · Product Designer
ascendwave.com →One rainy day in late 2025 I was walking down a street in Bologna, Italy when I noticed a shop window displaying decks of tarot cards. That got me thinking about the origins of tarot. It turns out some of the earliest decks originated in that part of Italy. I bought a deck known as the "Thoth Deck." When I got back to my hotel, I noticed the deck was in Italian. "One more thing to learn," I thought.
Designed by Aleister Crowley and painted by Lady Frieda Harris between 1938 and 1943, the deck not only contains rich symbology but is also highly structured.
I didn't know much about the subject. Reading further about the Thoth deck, I discovered that it draws on numerous traditions including alchemy, Kabbalah, Greek and Roman mythology, astrology, numerology, and color theory. Also, the cards are beautiful.
Lying in bed one night, I envisioned the deck mapped to a 3D sphere. I've done some 3D animation, and I got to wondering — what if I could harness AI to create an entirely new experience, one that allows the participant to learn about the deck?
The deck has an inherent information architecture. It consists of 78 cards organized into a hierarchy of 22 Major Arcana and 56 Minor Arcana, the minor cards further subdivided by suit and rank. I thought about how I could organize and interpret all these cards, each containing dense symbology. Also, how do you present a "spread" or a "reading?"
The Tarot Sphere is a fully interactive 3D experience built in a single HTML file. It places the cards on a rotating sphere, procedurally illustrated in canvas, with AI-generated card readings, physically based rendering (PBR) lighting, and fluid animation. The sphere is rendered in WebGL via Three.js, running entirely in the browser with no plugins or downloads. It runs live at ascendwave.com.
The Tarot Sphere — ascendwave.com
The project was built entirely through directed conversation with Claude over seven sessions over a month — no IDE, no codebase, no local dev environment. I directed the outcomes; Claude determined much of the architecture and generated the code that implemented them.
This case study is about what I learned directing that process.
The project had no client. The brief I gave myself: build an interactive system for exploring the Thoth deck that makes the cards' symbolic relationships navigable, surfaces their lore through AI, and does something visually that couldn't be done with a static page.
I gave Claude one sentence to start:
"Take the Crowley Thoth deck. Map the cards onto a 3D sphere. The cards and the sphere should be semi-translucent. Illuminate the sphere from within coming from an invisible light source. Enable dragging to spin the sphere."
No wireframes. No references. No technical specification. That sentence became the north star for everything that followed.
In the first iteration, I had Claude draw a simple sphere and map the cards onto it. The result was garish — colors were blown out, text was hard to read, the cards looked flat and harsh against the dark background. I thought back to my days as a 3D animator and directed it to use Phong shading, a lighting model that responds to surface normals and gives objects a sense of depth and material. The cards immediately became more legible and the scene gained the atmospheric quality I was after. That kind of cross-discipline retrieval — drawing on knowledge from a completely different context to solve a rendering problem — became a recurring pattern in how we worked together.
Something else became clear once the sphere was interactive: the Fibonacci spiral distribution Claude had chosen for placing the cards was genuinely elegant mathematically — cards spread evenly with no clumping. But that perfection was itself a problem. The cards looked too regular, too grid-like, more like a diagram than a deck of cards strewn across a celestial surface. I iterated on the placement, introducing controlled randomness to the positions and orientations until the cards felt organically scattered — close enough to even that the sphere reads as complete, loose enough that it feels discovered rather than constructed.
The first output was a functional Three.js sphere with canvas-textured card planes distributed via Fibonacci spiral. Cards showed suit colors, Roman numerals, and astrological glyphs. The sphere rotated. There was a visible light source inside the sphere, but it looked artificial. It was primitive but it got the basics right — the Fibonacci distribution spread cards evenly across the surface with a mathematical precision I hadn't specified, and that decision held for the entire project.
Lady Frieda Harris's paintings are copyrighted and could not be used. That meant every card had to be generated from scratch. The card textures are created procedurally from the card data, drawn onto canvas elements, and fed directly into the WebGL renderer. No downloads, no image assets, all runtime generation.
Since the imagery in the deck isn't licensed, I guided the generation of the cards according to the proper iconography, colors, Hebrew and astrological symbols. Every card had to be illustrated from scratch, programmatically, in canvas.
I also tested Gemini for card illustration. The results were visually stronger out of the box — richer, more painterly. But the output was bitmap files. Loading 78 bitmaps would have been far too heavy for a browser-based experience. I tried tracing the Gemini bitmaps as vectors to reduce the file size, but the traced output was not significantly smaller than the originals. The canvas approach won on performance grounds, even though it required considerably more iterative prompting to achieve acceptable visual quality.
Each major arcana card needed a recognizable figurative illustration — the Hanged Man, Death with scythe, The Universe dancing. The approach that worked best was treating the figures as layered flat vector shapes — torso, limbs, symbolic objects — each drawn as connected bezier paths. I iterated relentlessly:
"The head is floating. Connect it to the neck. The Hanged Man is inverted — his head must be at the bottom of the card."
"The Tower needs masonry texture. Stone courses, arrow-slit windows, crenellations. It needs to feel like a medieval tower being struck by lightning."
The model learned my shorthand quickly. By the third session I was saying things like "same limb approach as the Chariot" and getting good results.
An early problem was the rendering of the Hebrew letters. Canvas rendering defaults to system fonts, and Hebrew characters were either missing, malformed, or displaying as fallback boxes depending on the browser. The fix was to explicitly load the Noto Serif Hebrew font and specify it in the canvas drawing call for each badge. Each major arcana card carries two corner badges: the Hebrew letter and the astrological symbol corresponding to that card's Kabbalistic attribution. I added a popover tooltip on hover giving a definition of each — wanting to provide an affordance to learn the meaning of the symbol at a glance, using progressive disclosure.
The Star — XVII · Aquarius, with astrological badge tooltip
The Thoth deck has a precise color system derived from Liber 777 — Crowley's table of Kabbalistic correspondences. Queen Scale colors govern the major arcana. Suit elements govern the minor. These are not aesthetic choices; they are part of the system's meaning.
Initially the colors were wrong — the cards read as generic rather than symbolically correct. I directed that the precise color system from Liber 777 be applied to each card individually. The Fool is bright pale yellow — the color of Air. The High Priestess is silver-blue — the color of the Moon. Death is a specific blue-green, and so on.
Rather than bringing pre-existing expertise in the symbolic systems, I worked with Claude to understand and correctly apply them — cross-referencing attributions, verifying color correspondences, ensuring the iconography was accurate to the tradition. AI became a research tool, as well as a tool for creation. The process has enabled me to learn not only about AI, but also the systems embedded in the Thoth deck.
The "Draw Cards" feature pulls three random cards from the sphere using eccentric arc animations — flyers that launch from the sphere's surface, follow unpredictable cubic bezier paths, and land in a three-card spread overlay. The spread generates an AI reading via a secure server-side proxy connected to Claude Haiku, Anthropic's fastest and most compact model.
At first versions were linear. The cards flew in straight lines at constant speed. This looked mechanical and lifeless. I iteratively directed Claude to introduce easing and have the cards follow unpredictable paths. The result is that each card follows a different unpredictable arc, as though being swept by an unseen current before settling into place.
The reading prompt was refined over multiple iterations. The final version:
"Read this combination precisely — the subject may be anything or anyone, internal or external, personal or impersonal, abstract or concrete. Let the specific symbolism of these three cards determine everything... Do not soften difficult combinations. Do not resolve ambiguity."
A three-card spread — Adjustment, Queen of Cups, Prince of Swords — with AI-generated reading
Early readings defaulted to warm, encouraging language. That is not the tone of the Thoth deck, which is known for being direct.
At one point I asked Claude to assess the project from various standpoints. Crowley showed up unexpectedly, and his critique changed the prompt. He approved of the instruction not to resolve ambiguity, but questioned whether the model understood why — whether it had grasped the initiatory purpose of the tension, or was merely following a rule. His distinction: an oracle that withholds resolution because it was told to is not the same as one that withholds because it understands that the querent must do the work themselves.
With that observation I changed the prompt. I added context explaining that the Thoth deck is an initiatory system, a profound, often hidden process of transformation, not one which is built to be comfortable. Productive tension is the point. Resolving the reading too early ends the querent's engagement prematurely. This gave the model a reason rather than just a rule that it must follow.
I've learned to use the power of AI to generate lightweight web interfaces that previously would have taken weeks or months to create. Entirely new interaction models and experiences are now possible.
Early on, Claude asked me about how I wanted to present the text input box for the user to ask a question. It naturally assumed that the user would be manually entering their query. I told Claude it should intuit the participant's question telepathically. It didn't balk at the idea.
Perhaps the most interesting thing I learned is that models have innate biases — and that this is inevitable rather than incidental. It is not possible to exist without a point of view, a framework, a reference for the world. Claude made assumptions that were reasonable, but not always in the right direction. Claude's biases became evident in the card readings. The initial tone of the readings assumed the questions would be personal — love, career, the concerns of an individual life — rather than broader questions about the world or current events. Adjusting the prompt, I was able to eliminate many of those biases.
I also discovered that specificity matters a lot. Vague direction produced vague results. "Make the Death card better" produced mediocre iteration. "The skeleton should occupy the full height of the card, scythe in the right hand crossing diagonally, roses at the bottom left" produced something I could work with. The more precisely I could articulate what I wanted — and what was wrong with what I had — the better the results. When the model suggested fixes that didn't address the root cause, pushing back explicitly — "this didn't work, why did you think it would?" — consistently improved the diagnosis. Productive AI collaboration requires the designer to be a skeptical critic, not just a requestor.
Another thing I noticed is that AI becomes a learning amplifier. Claude made use of certain technologies I wasn't well versed in, or even aware of, such as physically based rendering. Once I understood what it was doing and why, I was able to mold those technologies to achieve my goals. PBR has since become part of my toolkit that I can bring to bear on future projects.
I wanted to add a dynamic lighting effect. My first idea was an invisible light source orbiting the sphere every few seconds, illuminating the cards as it passed. This required converting the cards to a mesh and applying a PBR (physically based rendering) shader. At first the metalness was too high — the cards looked washed out, more mirror than card. Dialing it back brought the effect closer to what I wanted: a subtle sheen that catches the light without overwhelming the illustration.
Getting the light source to be truly invisible while still casting light took some trial and error. Once solved, the orbiting light created a satisfying sweep across the cards as it passed.
For additional visual interest I told Claude the sphere should be lit as though by flickering fire in a cave. That spiced things up considerably. The system uses four invisible point lights at fixed positions around the sphere, each flickering at its own independently randomized rate using irrational-ratio sine waves — so they never fall into sync with each other.
A background in painting and art history proved useful — not only in interpreting the iconography and symbology of the cards, but in shaping the overall aesthetic of the experience. As I iterated on the lighting, layering different types of lights and materials, the sphere began to suggest the luminous colors of oriental rugs, of thangkas illuminated in the flickering lamps of a Buddhist monastery, or the jewel-like tones of Netherlandish paintings of the 15th century.
I then added two lights at opposite color temperatures — a warm amber and a cool blue — breathing independently at different rates. As the balance between them shifts, the whole scene undergoes a slow, subtle color temperature cycle. The sphere began to feel like a virtual movie set: camera, 3D model, and lights all working together.
As a final touch, I created a ripple effect when the user spins the sphere. Using the nearest-neighbor method, each card flashes in turn until the final card fades out. To accentuate this effect, since it was getting washed out on Android due to how gamma is handled, I decided to programmatically dim the ambient lighting during this sequence, then fade the lights back up when it ends.
The sphere runs on desktop, tablet, and phone — the same single file, no separate builds. On desktop the experience is mouse-driven: drag to spin, hover to identify cards, click to zoom. On mobile the interaction shifts to touch, the spread stacks vertically and scrolls as a single full-screen panel, and the wide arc animations are replaced with straight zoom transitions that read more cleanly on a narrow viewport.
The sphere is live at ascendwave.com. It uses one file to deliver a consistent experience across web, mobile, and tablet. Of course, it is up to you to decide if the reading is accurate!
The combination of creative direction, interest in a wide variety of domains, and close collaboration with an AI model produced something I could not have built any other way. It came together in weeks rather than the months a conventional development process would have required.
The Thoth deck sits within the same Western esoteric tradition as Theosophy. Viewed through that lens, the Tarot Sphere could be considered a thought-form — a physical or virtual manifestation of a concept from the human mind.
mediaferret@gmail.com
Additional case studies are available on request.