No updates detected yet. GitHub releases will appear here.
Turkish coffee cup fortune reading with image (shape) recognition model and voice (character) design.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Turkish coffee reading, reimagined as a web app. Photograph the inside of your
drained cup. The grounds get read, and you get a fortune written in a voice that
does not sound like a horoscope.
Tasseography is a social ritual: you finish the coffee, turn the cup onto the
saucer, wait for it to cool, and somebody who claims to know how tells you what
is in the grounds. Destiny is that, on a phone, in about thirty seconds.Read the full README ↗Tasseography is a social ritual: you finish the coffee, turn the cup onto the saucer, wait for it to cool, and somebody who claims to know how tells you what is in the grounds. Destiny is that, on a phone, in about thirty seconds.
One screen to start on, then read → reveal → share, plus one in-voice state for when the cup cannot be read at all. The opening screen holds the whole setup: add one to four photographs of the same cup, pick what you are asking about, and say anything else in your own words.
No accounts, no database, no history. You get a reading and a card to send to someone, and that is the whole product.
Five roles in a chain, running as two model calls, and only one of them ever speaks to you.
you → Fortune Teller → The Eye → Searcher → Fortune Teller → you
(the Fortune Teller's own call does the narrowing and the warmth)
triage shapes meanings three themes warmth the reading
The Fortune Teller is the character, and the only voice. Its first act is not to read the cup but to check on the person holding it: anything you typed is triaged for genuine distress before a fortune is ever built, running alongside the Eye so care costs nothing in wall-clock time. If it fires, the mystic voice stops entirely and you get a plain, warm human instead.
The Eye looks at the photographs and names what is visible, with a confidence for each shape and the region it sits in. Several photographs are read as one cup from several angles, never as several cups. It is the one agent allowed to be uncertain out loud, which is what lets everything downstream lean on a doubtful shape lightly rather than confidently.
The Searcher looks each shape up in a bundled symbol dictionary, 205
entries of traditional kahve falı meaning kept in
docs/SYMBOLS.md. It is the one role that is not a model
call: the dictionary ships with the app, so the lookup is instant, cannot fail,
and every meaning in a reading is one you can point at in a file. A shape the
list has never heard of comes back empty rather than stretched to fit a
neighbouring entry.
The Context Queen picks exactly three themes from what is left, weighing relevance to your chosen focus, how connected the shapes are to each other, and how sure the Eye was. Three, never four.
The Fairy never writes a word you read. She hands the Fortune Teller a supportive throughline, a reframe per theme, and the closing line, leaning quietly on agency and self-compassion without ever naming them. She runs before the reading rather than after, because warmth applied afterwards reads as an apology.
Splitting them is what keeps the voice stable. A single call that both looks and writes drifts toward describing the photograph instead of reading the cup.
Six focuses: love, career, general, friendships, health and money. They change which way the same shapes are read, never the voice. Two are written defensively. Health is barred from naming a condition, diagnosing, predicting an illness or a recovery, or telling anyone to seek or avoid care. Money is barred from financial advice. A fortune teller can be wrong about a job; it should not be wrong about a diagnosis.
The whole thing is documented in docs/AGENTS.md, and the cards and knowledge base it was built from are vendored in docs/AGENT-CARDS.md and docs/KNOWLEDGE-BASE.md.
Where a shape falls changes what it means, and every agent that touches a shape speaks the same dialect:
| Region | Reads as |
|---|---|
rim | the present, happening now |
middle | the near future, weeks to months |
bottom | the past, home, deep feeling |
handle | love, family, the people already close |
right-of-handle | things entering your life |
left-of-handle | things leaving, debts being paid |
The Fortune Teller is a warm matriarch, in the lineage of a reader like Melahat: she pours out what she sees rather than analysing it, calls you canım, names the feeling behind a shape and then comforts it, and closes on a blessing. She takes one image and opens it deeply rather than listing five shallowly. canım is the only Turkish word she uses: no proverbs, no sayings, because the warmth has to come from the tone rather than from a foreign phrase dropped in for flavour. Her full spec is in docs/VOICE.md, along with the ten reference readings that serve as demo mode and as the regression bar.
Readers in that tradition also predict illness, inheritance and marriage as fact. Destiny takes the warmth and the rhetoric and leaves that behind: every image stays a possibility, and the prompt says so explicitly rather than hoping the model infers it.
The app is built to a written design system, kept in the repo as docs/DESIGN-SYSTEM.md. It is the source of truth, and the build follows it rather than improvising around it.
The same system is built as a Figma library, so the tokens exist in both places
and neither one is a screenshot of the other. Colour, spacing, radius, type and
motion are Figma variables matching styles/tokens.css one to one; Colour
carries a Light and a Dark mode. The component pages are Icon, Button, Chip,
Topic tag, Card, Photo tile, Input bar, Chat bar, Tab bar and Meta & divider,
plus the share card as an artefact. Each set carries its description in Figma,
including the accessibility contract it has to be built to.
Warm and quiet. One warm neutral family from near-white to near-black plus a
single espresso brown, and no accent hue at all. Emphasis comes from weight,
size, and ink against espresso. styles/tokens.css is the system's :root
block pasted verbatim; nothing downstream hardcodes a colour.
This is the beginning of the README. Read the rest at the original. Read the full README ↗