thetarot.online

Pick 3 cards
⚠️ interpretation by artificial intelligence. For entertainment only.

Share this reading

🔗

An open source lopecode notebook — the page you are reading is the entire program. Deck: Rider–Waite–Smith (public domain), card data from @triptych/tarot-utilities.

edit
edit

thetarot.online

A three-card tarot reading — past, present, future — interpreted by a language model.

This is the whole application: the 78 Rider-Waite-Smith cards, the interface, and the reading logic all live in this one HTML file. There is no server. The only network call is to a rate-limited proxy that holds the model key, so no key ships in the page.

The reading is written into the share URL, so a shared link replays the exact reading without storing anything anywhere.

edit
MODEL = "xiaomi/mimo-v2.5"
edit
GATEWAY = "https://openrouter-gateway.endpointservices.workers.dev/v1/chat/completions"
edit
NAME_MAX_LENGTH = 50
edit
QUESTION_MAX_LENGTH = 140
edit
palette = Object {ink: "rgba(19, 17, 43, 0.77)", border: "rgb(181, 101, 101)", accent: "rgb(226, 178, 178)", serif: "Georgia, 'Times New Roman', serif", sans: "'Helvetica Neue', Helvetica, Arial, sans-serif"}
edit
deck = Array(78) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, …]
edit
cardById = Map(78) {"m00" => Object, "m01" => Object, "m02" => Object, "m03" => Object, "m04" => Object, "m05" => Object, "m06" => Object, "m07" => Object, "m08" => Object, "m09" => Object, "m10" => Object, "m11" => Object, "m12" => Object, "m13" => Object, "m14" => Object, "m15" => Object, "m16" => Object, "m17" => Object, "m18" => Object, "m19" => Object, …}
edit
cardUrls = Object {m00: "blob:null/8b002ef3-e4d7-4bdd-98ee-90d07f92e606", m01: "blob:null/93bb1fe3-c856-4275-9c50-98d20f205083", m02: "blob:null/cecec65f-b399-406d-9566-fe6a29b99fc4", m03: "blob:null/f70e7f93-698d-4a88-8c27-b36e834e64d0", m04: "blob:null/b89c7898-11f3-4d7d-8217-2912365feea2", m05: "blob:null/e88e7363-6c81-4654-b553-94e1ba4f2786", m06: "blob:null/a157e911-23db-47c7-89db-38f67a9a1f68", m07: "blob:null/87f67401-01de-4870-b493-b8305cb44f8b", m08: "blob:null/2531576a-4a65-4e84-8c4e-e936b14b4002", m09: "blob:null/5360fc73-6484-403e-a771-7f77e8f74b53", m10: "blob:null/77776e58-005f-418a-8456-1708a2c3876a", m11: "blob:null/2e21c4e2-d75f-4926-b754-7f209fce4ee3", m12: "blob:null/e4262e01-d41f-4e94-9014-6cba29d87394", m13: "blob:null/d58cd1a8-2fa3-4dba-866b-2f709367b52c", m14: "blob:null/fcc7455b-7988-4847-a4ec-d25a1b45b938", m15: "blob:null/526bd999-c60a-4fd7-823e-c99c2a3099d6", m16: "blob:null/70eb36bc-4070-4849-8103-e4a638ac771d", m17: "blob:null/a6900a28-bb7b-4cc8-b648-695ba2a1dbbe", m18: "blob:null/afc73482-5ea5-45e4-9ffa-073897286ddf", m19: "blob:null/ef950918-3c38-4dca-98f8-05351000f67d", …}
edit
backUrl = "blob:null/227575bc-95f6-48ac-9e4e-68b170e0cd70"
edit
velvetUrl = "blob:null/daf6ae24-88e4-43ec-81a1-1f0bb446f289"
edit
drawThree = ƒ()
edit
nameInput = ƒ()
edit
questionInput = ƒ()
edit
pickCards = ƒ()
edit
pickCardsStyle = HTMLStyleElement {}
edit
showCards = ƒ(cards)
edit
fortunePanel = ƒ()
edit
restartButton = ƒ()
edit
shareBar = ƒ()
edit
buildPrompt = ƒ(…)
edit
getFortune = async ƒ(…)
edit
encodeReading = async ƒ(reading)
edit
decodeReading = async ƒ(encoded)
edit
sharedReading = null
edit
edit
loadShared = false
edit
transitions = "askName"
edit