A free, privacy-first Tarot de Marsella reading web app that runs entirely in the browser, with no registration and no accounts. ElTarot.es offers four reading modes (a daily card, a 3-card spread from the 22 Major Arcana, a 3-card spread from the full 78-card deck, and an AI-powered reading), all wrapped in card flip and shuffle animations that mirror a native experience. It is bilingual (Spanish/English with auto-detect) and installable as a PWA for full offline use.
Mobile apps
The native companion is Tarot Marsella, a Flutter app on Google Play and the App Store. Same deck family, daily card, and 3-card spreads, built for the phone rather than the browser.
Features
- Four Reading Modes: Daily card (one card per calendar day with rotating messages), a 3-card spread over the 22 Major Arcana, a 3-card spread over the full 78-card deck, and an AI-powered reading (Spanish only, one per day)
- AI-Powered Interpretations: Write a custom question and receive a Claude-generated reading of a 3-card spread, gated to one per device per day and exportable to a branded A4 PDF
- Animated Card Mechanics: Multi-phase shuffle (collect, riffle, deal) and a 600ms card flip animation, with swipe-down and a floating refresh button to redraw spreads
- 22 Major Arcana Library: Dedicated card detail pages with image, name, essence, and per-card sections for Meaning, Advice, and reflection questions
- Share as Image: Generates a branded PNG of a completed spread with logo, all three card faces, and Past/Present/Future position labels
- Bilingual & Offline-First: Full Spanish/English UI and interpretations, language switching with auto-detect, and a service-worker PWA that precaches all 78 card images and the card data for offline reading
- Privacy-First by Design: No registration, no accounts, consent-gated analytics off by default, and a first-launch disclaimer and responsibility acceptance flow
Tech Stack
- Astro 6 with the @astrojs/node adapter (standalone); static output with on-demand SSR for the reading API route
- Vanilla TypeScript app layer with no UI framework (no React, Vue, or Svelte)
- Hand-rolled Store class for state management, persisted via localStorage
- Claude via the @anthropic-ai/sdk for AI readings, served from an /api/reading POST endpoint
- jsPDF for PDF export and the Marcellus font (Fontsource) for typography
- Service worker with a hashed precache version stamped by a postbuild step
- Schema.org JSON-LD, hreflang alternates, Open Graph/Twitter cards, and an llms.txt endpoint for SEO and LLM discovery
AI-Powered Readings
The reading endpoint validates before it spends anything. A request must carry the Spanish locale, a question of one to five hundred characters, and exactly three integer card ids inside the deck range, or it is rejected with a 400 before the model is ever called. The three drawn cards are resolved server-side against the real card data and passed in as structured context, so the model interprets the cards that were actually drawn instead of inventing its own.
The system prompt is modelled on a named practitioner’s voice rather than a generic mystic, and it carries its limits in the prompt itself: no deterministic verdicts, no fatalism, no medical, legal, or financial advice, and an invitation to seek professional support on serious topics. Output is bounded to Spanish prose of 180 to 280 words. The API key is read at runtime on the server and never reaches the bundle, the model id is configurable through an environment variable, and the free reading is gated to one per device per day on the client.
Compared with the Paglipat concierge on paglipat.com, this is deliberately small. A single shot generation behind strict input validation is the right amount of machinery for one reading a day. The judgement is knowing which of the two a feature needs.
The same applied AI portfolio includes the site assistant on davthecoder.com (Worker backed chat with curated grounding and contact handoff). Paglipat is depth. The personal site chat is a live demo. ElTarot is contained scope. All independent products, not client AI work. See applied AI product features.
Frequently Asked Questions
What is ElTarot.es?
It is a free, privacy-first Tarot de Marsella reading web app that runs entirely in the browser with no registration and no accounts. It offers four reading modes: a daily card, a 3-card spread over the 22 Major Arcana, a 3-card spread over the full 78-card deck, and an AI-powered reading. Native apps are Tarot Marsella on Google Play and the App Store.
What platform does it run on?
The website is a PWA. A service worker precaches all 78 card images and the card data, so it works fully offline once installed. The UI is bilingual (Spanish/English with auto-detect). Native Android and iOS apps are on Google Play and the App Store.
What is it built with?
Astro 6 with the @astrojs/node adapter (static output with on-demand SSR for the reading API route), a vanilla TypeScript app layer with no UI framework, and a hand-rolled Store class persisted via localStorage. The AI readings call Claude through the @anthropic-ai/sdk from an /api/reading endpoint, and PDF export uses jsPDF.
How do the AI readings work?
You write a custom question and get a Claude-generated reading of a 3-card spread, gated to one per device per day and exportable to a branded A4 PDF. The endpoint calls Claude (model claude-sonnet-4-6, configurable via TAROT_MODEL) with a Jodorowsky-informed reader persona, constrained to symbolic guidance in Spanish (180 to 280 words). It forbids predictions and diagnoses, and shows a disclaimer that it is emotional accompaniment, not fortune-telling.
