Tino Project Story

Inspiration

I teach English at a Brazilian high school (CMTO2) and I am a PhD student in variationist sociolinguistics. Every week I read student essays in English that “look” grammatically correct but feel wrong: they read like spoken Portuguese wearing English words. Sentences start with “So, education is very important.” The tag “you know” appears mid-paragraph. The intensifier “very” repeats three times in five lines.

I realized these were not random mistakes but systematic transfers from Brazilian Portuguese: “so” ← “então,” “you know” ← “né,” and “very” carrying the broader distribution of “muito.” Existing tools would silently fix them and label them “informal.” My students accepted the correction and never understood why the slip happened, so they kept reoffending because the underlying mechanism was never named.

The original plan was an app to help with the speaking skill, but I realized the writing skill was also a challenge for the students. Tino does not correct grammar; it calibrates register. The variationist lens is the product.

What it does

Tino is a register calibration assistant for Brazilian learners writing in English. The user pastes 50 to 500 words of English and selects a target context (academic/professional/casual). Tino returns Brazilian Portuguese feedback structured as strict JSON: each flagged segment, the Portuguese pattern likely transferred (e.g., "you know""né"), what register the segment belongs to, why it breaks the target register, and one concrete rewrite suggestion. A closing 2-3 pattern summary helps the learner see recurring habits rather than isolated slips.

The strategic differentiator: Tino refuses to be a grammar checker. If the input contains only grammar errors with no register implication, it returns an empty annotation array and says there is nothing to calibrate. This refusal is what protects Tino's moat against billion-dollar incumbents it cannot beat by correcting.

How we built it

Stack: Python FastAPI backend, single-file HTML frontend using Tailwind via CDN (no build step), OpenAI Python SDK calling gpt-5.6, deployed on Vercel. No database, no auth, no sessions—the MVP is fully stateless.

The variationist lens lives in a structured system prompt that defines three concepts (register, L1 transfer marker, conversational intrusion) and a corpus of 13 Brazilian Portuguese transfer patterns covering pragmatics (you know, liketipo, soentão, just), false cognates (actuallyatualmente, pretendpretender), syntactic calques (for me as dative subject ← para mim, existential havetem), and intensifier transfer (very ← broader muito). GPT-5.6 is the analysis engine.

Codex CLI paired me throughout. I ran it in the terminal iteration after iteration. Codex wrote the FastAPI skeleton, the OpenAI client wiring, and the frontend textarea with context radio buttons, the JSON-fetch-and-render loop, and the deployment config. Each Codex session targeted one milestone: backend skeleton, then frontend layout, then analysis rendering, then production deploy. I pasted my system prompt as a constant, and Codex wired it into the API call. The feedback command in Codex captured a session ID for the submission—the session where the core MVP was assembled is the one I submitted.

Challenges we ran into

The greatest challenge was GPT-5.6's natural pull toward grammar behavior. The model wants to be helpful, and “helpful” in writing tools means correcting. I had to engineer explicit refusal into the prompt: if the input contains only grammar errors with no register implication, Tino returns empty annotations and says there is nothing to calibrate. This refusal IS the moat—once Tino slips into grammar correction, it loses its differentiator and competes head-on with incumbents.

JSON output stability was the second challenge. Early versions of the prompt produced valid analysis but wrapped the response in markdown code fences, which broke the frontend parser. The fix was an explicit instruction: “strict JSON, no markdown fence.”

Calibrating the transfer corpus was the third. Generic “be more formal” feedback is useless. The prompt only works when it carries concrete Brazilian Portuguese examples, not generic English colloquialisms. I had to iterate until the model stopped saying “this is informal” and started saying “this is the Portuguese tag question surfacing as you know in a formal context, where it signals hesitation rather than solidarity.”.

Accomplishments that we're proud of

First consumer-facing operationalization of variationist sociolinguistics—drawing on Labov, Bortoni-Ricardo, and the Jespersenian tradition—into a usable product. Decades of academic theory operationalized in a single API call.

A sharp refusal to be grammatical is worse than being grammatical. The hardest decision in the project was deciding what Tino would not do, and the refusal to correct grammar is what protects the strategic positioning.

And a clean pivot from an overscoped 18-month startup idea to a defensible 72-hour MVP that actually works.

What we learned

Strategic discipline beats feature ambition. My first draft was a speaking app with video analysis, FACS emotion detection, gamification, streaks, badges, and a paid certificate. That scope would have killed the project. Compressing to one defensible feature was the only way to ship.

Prompt engineering IS the product. The FastAPI shell and Tailwind frontend took hours with Codex. The system prompt that primes GPT-5.6 to behave as a variationist instead of a generic grammar checker took the bulk of the design work.

Variationist sociolinguistics has almost no consumer-facing application despite being a profoundly practical framework. AI finally closes the gap between academic knowledge and a usable product.

What's next for Tino Project

  • Expand the corpus of PT→EN transfer patterns beyond the initial 13, anchored in continued classroom observation at CMTO2.
  • Add BNCC context so the target register adapts to the Brazilian curriculum .
  • Text mode for written register calibration, extending the same variationist lens from oral to writing production.
  • Persistent learner profile tracking recurring transfer patterns across multiple submissions.
  • Piloting before scaling to other Brazilian public schools.

Built With

Share this project:

Updates