# Tonguewright > A constructed-language workbench at https://tonguewright.skillsafe.ai/ for conlang hobbyists, worldbuilders, writers, and linguistics students and teachers. You build a language's sound system on clickable IPA charts, the browser enforces it, and a model drafts grammar, glossed sentences and etymologies that the browser re-checks form by form. Built on two SkillSafe skills by @jwynia: @jwynia/conlang (phonologically consistent constructed languages for fiction) and @jwynia/language-evolution (language families, dialects and linguistic history). ## What runs free in the browser - Inventory: the IPA pulmonic consonant chart (place by manner, voiceless left / voiced right) and the vowel trapezoid (height by backness, unrounded left / rounded right) are clickable; affricates, labial-velars and custom phonemes (pʰ, aː, kʷ) are added as chips. Charts export as SVG. - Classes: C, V, P (plosives), F (fricatives), A (affricates), N (nasals), R (rhotics), L (laterals), G (glides), O (obstruents), S (sonorants) are derived from features; any other capital letter can be defined (K = p t k). - Syllable template: slots of class letters, ( ) optional, [NL] unions - for example (C)(L)V(N). - Constraints: banned sequences with # for word edges (K K, # ŋ), coda and onset limits, word-final and word-initial sets, no doubled segments, word length in syllables. A live validator syllabifies any form (maximal onset) and names the rule it breaks. - Spelling: a romanisation table with defaults (ʃ sh, ŋ ng, t͡ʃ ch), clash detection, a separator wherever letters would run together, and reading spellings back to IPA. - Word generator: seeded (the same seed always gives the same words), honours the template and every constraint, skips words already in the lexicon. - Lexicon: word, IPA, syllables, gloss, part of speech, notes; search, sort, CSV import and export (a CSV with only spellings is read back through the spelling table). - Sound changes: ordered rules like p > f / _V, p t k > b d ɡ / V_V, K > G / V_V (class onto class), e > ∅ / _#, ∅ > ə / #_s, k > t͡ʃ / _{i,e}; each rule applies simultaneously to its input; a per-word trace, gained and lost phonemes, new homophones; the daughter opens as its own language. - Frequencies: phoneme counts and shares, entropy in bits per segment, a Zipf slope, a word-length histogram. - Exports: lexicon CSV, the reference grammar as Markdown, a printable booklet (print stylesheet), the IPA charts as SVG, and the whole language as JSON (opens again with Open file). ## The model lanes (metered, sign-in) One system prompt, routed on the `task` field: - `sketch` - one section of a reference grammar (word order and alignment, noun morphology, verb morphology, pronouns, numerals, a sample paradigm) with prose, paradigm tables, interlinear examples and the forms it coins. - `gloss` - interlinear glossed sentences in four lines (spelling, morphemes, Leipzig glosses, free translation), composed on a topic or translated from English. - `etym` - etymologies for ticked lexicon entries (compound, derivation, root, semantic shift, borrowing) plus comments on the ordered sound changes; reflexes in the daughter language are computed by the browser, not the model. - `recoin` - after the inventory or rules change, replacements for every lexicon or grammar form that no longer fits, keeping the meaning and the consonant skeleton where possible. Every form the model writes is re-validated against the inventory, the template and the constraints. Legal coinages appear as ghosted lexicon rows with Accept; illegal ones carry the rule they break and cannot be added. Spellings are always recomputed from the IPA. Glosses are checked for Leipzig alignment (one gloss piece per morpheme) and every morpheme must be in the lexicon or the reply's coinages. ## Input contract The run input is a JSON object of string fields: `task`; `language` (a JSON string: name, feel, culture, purpose, consonants, vowels, classes, template, readable constraints, romanisation, a lexicon sample of [ipa, gloss, pos] rows capped at 60 with function words and affixes first, and lexicon_total); `request` (a JSON string, per lane); optional `clipped` (what was left out) and `retry_note`. The API is documented at https://tonguewright.skillsafe.ai/api.html. ## History Each language is one record in the account's `languages` collection (one record per language; later runs update it). The stored lexicon is capped at 400 entries to fit the 64 KB document limit, and a restored language says when it was trimmed. A copy is mirrored in the browser. ## Typography IPA is set in Charis SIL, Doulos SIL or Gentium when installed, falling back to Noto Serif, then Times New Roman / DejaVu Serif; spellings use the system monospace.