Skip to content
davthecoder
ElTarot.es: Astro app screenshot
Web

ElTarot.es

Free, privacy-first Tarot de Marsella reading web app and PWA with a daily card, 3-card spreads, and Claude-powered AI readings. Bilingual, no registration, offline-ready.

AstroTypeScriptClaude AIPWASEOi18nWebTarot

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. This is the web product, distinct from the earlier Flutter “Tarot Marsella” mobile app.

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 AI reading endpoint validates the question and three drawn cards, builds a prompt, then calls Claude (model claude-sonnet-4-6, configurable via TAROT_MODEL) with a system prompt that channels a Jodorowsky-informed reader persona. Responses are constrained to symbolic, emotional guidance in Spanish (180 to 280 words), explicitly forbidding predictions and diagnoses, and every result is shown alongside a disclaimer that it is emotional accompaniment, not fortune-telling.

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. This is the web product, distinct from my earlier Flutter “Tarot Marsella” mobile app.

What platform does it run on?

The web, and it is installable as 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).

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.