DEV Community

Leo Pechnicki
Leo Pechnicki

Posted on

Type 'frio na barriga' and get the same sourced answer as 'butterflies in my stomach'

Human Atlas: the Portuguese idiom

In Portuguese, a nervous stomach is frio na barriga: "cold in the belly". In Polish it is motylki w brzuchu, in German Schmetterlinge im Bauch, and in Mandarin 七上八下.

Every one of them describes the same body feeling. Type any of them into Human Atlas (https://human-atlas.fly.dev) and you land on that same feeling, "butterflies in my stomach". You get the same ranked, sourced causes and the same "when to see a doctor" red flags, and the idiom itself links to the dictionary page that backs it.

The idiom atlas

  • 89 phrases in 21 languages, reaching 11 body signals. Examples: Gänsehaut, 鳥肌 and pelle d'oca (goosebumps), and mrowienie (pins and needles).
  • Every phrase has a source. Each one is a translation listed on an English Wiktionary entry, pinned to the exact page revision (oldid=) it was checked against, and stored as an evidence row. No row is inserted without that source. Translations Wiktionary marks as unchecked ({{t-check}}) are skipped.
  • Idioms add no medicine. An idiom can only point at a signal that already exists. It never creates a cause, and it never removes the red flags.
  • Red flags stay readable. The red-flag lines are in English for now. So when you arrive through an idiom, a short notice tells you to see a doctor, or to call your local emergency number in an emergency. It's in your language for Portuguese, Polish, German, French, Spanish, Italian and Dutch so far, not yet reviewed by native speakers. Other languages get the English version.
  • "Also said this way in 14 languages." Each signal lists its equivalents in the other languages, and every phrase links to its dictionary revision.
  • False friends get flagged, not mapped. "I got cold feet" is an English idiom for nerves before a commitment. Human Atlas says so and cites Wiktionary. It still offers the literal reading ("my feet feel cold") underneath, in case your feet really are cold. Portuguese pé frio ("cold foot" = bad luck) is only a note: there are no causes for bad luck.
  • Only whole phrases match. "frio" alone matches nothing, and neither does "barriga". Matching ignores case and accents, and it also works inside a sentence ("estou com frio na barriga").

Why I couldn't find this anywhere else

Before building it, I checked what already exists. My research agent and a separate adversarial reviewer were both told to find an app that already does this. Here is the narrowest claim that survived:

I couldn't find any symptom checker (WebMD, Mayo Clinic, NHS 111, Ada, Symptomate, Buoy, Isabel, Healthily, Ubie, Symptoma, Mediktor, MedlinePlus), phenotype ontology (HPO, Monarch) or genetics site (SNPedia, GWAS Catalog, Open Targets) that treats an everyday idiom such as 'frio na barriga', 'motyle w brzuchu' or 'Schmetterlinge im Bauch' as a named alias of one body signal, shows its equivalents in other languages, and links the dictionary page that backs each alias.

To be fair: Symptoma accepts free text in 36 languages and will take an idiom as input. The difference is what happens next. Human Atlas treats the idiom as a named, sourced alias of one signal, shows you the same feeling in other languages, and cites the dictionary for each alias. Research datasets of idioms (LIDIOMS, for example) and Wiktionary's own translation tables exist too. What I couldn't find is an app that links a sourced lay idiom to a sourced list of causes with red flags.

If you know an app that does, tell me in the comments and I'll correct this post.

The rest of the app

It has two halves.

Body signals. Type a feeling in your own words. You get back the possible causes, ranked. Each cause shows:

  • an evidence badge (strong / medium / weak) and the source behind it: a PubMed review, an NHS page or a GWAS record
  • the mechanism (hormones, nerves, blood vessels)
  • the genes known to be involved, kept only if the association is genome-wide significant (p < 5e-8)
  • the red flags that mean you should see a doctor

Life learnings. What people learned at each age, in their original language, including dead ones. v0 ships public-domain texts only: Seneca, Confucius, Laozi, the Hávamál, Qohelet, Montaigne, Kochanowski. Each one is checked against its source page, then grouped into books by age band ("Written at 60-69") and by theme.

Not medical advice. It's an educational research index, not a diagnosis.

The rules live in the database, not in good intentions

  • Every link between a signal, cause, mechanism, gene or idiom has evidence_id NOT NULL. No source means the fact is not inserted.
  • Every signal must have red flags. That's a SQL CHECK constraint.
  • A trigger rejects machine translations into extinct, ancient or historic languages unless they're labelled experimental. No fake Latin passed off as real.
  • Facts that don't resolve get skipped and reported, never guessed. The build log lists them (for example, FOXE1 ↔ hypothyroidism was dropped because GWAS Catalog had no genome-wide hit). The idiom build is offline too: it reads a committed cache of pinned Wiktionary revisions.

Ranking

cause score = match × weight × evidence factor

Weight is how typical the cause is for that feeling. Evidence is how solid the source is. The UI keeps them apart, as a fit bar and an evidence badge, because "common" and "well proven" are different questions.

An idiom typed as the whole query counts as an exact match (1.0). An idiom found inside a longer sentence scores lower (0.6 + 0.35 × the share of the query it covers).

Stack

  • Python, FastAPI, SQLite with FTS5. One file, no external DB.
  • Free, keyless data sources: Europe PMC, NHS, GWAS Catalog, HGNC, Open Targets, Wikisource, Wiktionary (CC BY-SA 4.0), Project Gutenberg, Sefaria, and all 7,927 ISO 639-3 language codes from SIL.
  • Runs on fly.io: one 256 MB machine that sleeps when idle, plus a 1 GB volume at about $0.15/month.
  • There's a public JSON endpoint for the idioms: GET /api/idioms?language=por.

You can add to it

Submit what you learned at your age, in any language. Submissions are anonymous, PII-stripped (names, emails, phone and ID numbers), licensed CC BY-SA, and hidden until a moderator approves them. Spam protection is free: a rate limit, a honeypot field, a fill-time check, and a ban on links. The privacy page says exactly what is stored: https://human-atlas.fly.dev/privacy

The idiom list grows the same way it was built. If your language has its own word for a feeling and Wiktionary lists it, it can go in.

Try it: https://human-atlas.fly.dev. Feedback is welcome, especially from clinicians about the red flags, from native speakers about the idioms and the translated notices, and from anyone who reads a dead language.

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.