TryWordy

Rails 8 + Nuxt 4 · Claude · ElevenLabs · Telegram

An English exam and interview prep platform for Turkish cabin-crew candidates, built solo from design to deploy — Claude generates the lessons, stories and tests, ElevenLabs speaks them, a human review queue guards quality, and a Telegram coach grades daily reviews in-chat.

Visit trywordy.com
Role
Solo — product, design, frontend, backend, ops
For
Turkish cabin-crew candidates · airline English exams & interviews
Status
Invite-only closed beta · free full-access membership
Frontend
Nuxt 4 · Vue 3 · TypeScript · Bulma on Vercel
Backend
Rails 8 API-only · PostgreSQL (ULID) · Solid Queue + Solid Cache
AI
Claude (schema-forced tool outputs) · ElevenLabs TTS
Daily coach
Telegram bot · review cards graded in-chat
Deploy
Kamal 2 to DigitalOcean · managed Postgres · GitHub Actions CI/CD

What it is

TryWordy is an English-preparation platform for Turkish-speaking job candidates, launched first for cabin-crew applicants preparing for airline English exams and interviews — THY-style sınav formats and mülakat questions. It began life as "Wordy," a general vocabulary-lookup tool, and pivoted into a structured, profession-focused study product.

It's currently in invite-only closed beta with a free full-access membership. The whole thing is built to feel like a well-made study tool: a clear plan, a dashboard that always tells you where you left off, and one "Çalış" button to continue.

A guided study plan

Members work through a plan organised as stages → categories → konular (lessons). Each lesson chains Kelimeler → Metin → Diyalog → tests, so vocabulary, reading, dialog and assessment reinforce the same material in sequence. The dashboard always spotlights where you left off, and a one-click continue button drops you back in.

Vocabulary drilling uses graded flashcards (Zor / Bildim / Kolay) with per-word audio, spaced repetition and per-word mastery tracking that surfaces the words a member keeps struggling with.

  • Bilingual readings — short CEFR-levelled aviation stories that weave in each lesson's vocabulary, with tap-any-word dictionary popovers
  • Interactive dialogs and choice-based dialog tests
  • Listening questions with server-side TTS, plus cloze and recognition tests
  • Mock exam papers and LLM-graded written interview answers

A daily coach that lives in Telegram

Coming back to review is the hard part, so members can opt into a Telegram Daily Coach that sends review cards straight to their chat. The whole review happens in-chat — each card is graded right there, and the grade advances that word's spaced-repetition schedule exactly as if it happened in the app.

A Telegram bot can't message someone first, so opting in is a deliberate handshake: the app mints a single-use link token and hands back a deep link; only the verified webhook is ever allowed to bind a chat to an account, and the connection is never exposed to the browser.

An AI content pipeline with a human gate

Behind an admin panel is an AI content pipeline that generates the material: Claude drafts dialogs, vocabulary, test items and readings — the story catalog alone spans a weighted set of twenty formats — and everything flows through a human review and approval queue before it can go live. Nothing an LLM writes reaches a member unreviewed.

Around it sit operational dashboards, content-gap digests and audit tooling. The content catalog is treated as source of truth in git: YAML packs of human-approved LLM drafts that are exportable and re-syncable, so the study material is versioned like code.

The stack

The frontend is Nuxt 4 (Vue 3, TypeScript) with Bulma and a custom design-token system, light/dark theming, and SSR with per-route SEO control — a module-generated sitemap and JSON-LD structured data — deployed on Vercel.

The backend is Ruby on Rails 8, API-only, on PostgreSQL with ULID primary keys. Background jobs and cache both run on the database via Solid Queue and Solid Cache — no Redis. Auth is JWT with multi-device sessions and key rotation, with Rack::Attack rate limiting. It deploys with Kamal 2 to a DigitalOcean droplet via GitHub Actions CI/CD, backed by DO Managed Postgres and Spaces (S3-compatible) object storage behind Cloudflare TLS.

AI and integrations

The Claude API drives content generation, dictionary lookups and written-answer grading, always through schema-forced tool outputs so every response has a known shape. ElevenLabs provides TTS with per-language voices and cached audio. Resend handles transactional email with bounce and complaint webhooks, and Telegram Bot API powers the coach. Sentry and structured JSON logging cover observability. Stripe subscriptions are wired in but dormant during the free beta.

Practices worth naming

A few decisions define how the product is run rather than what it does: the content catalog is git-as-source-of-truth (YAML packs of human-approved LLM drafts, exportable and re-syncable); the suite carries 1,400+ Minitest tests; admin operations run through whitelisted, server-defined tasks instead of production shells; and GDPR export and delete flows are built in.

It's the same zero-to-one-hundred pattern as my other products: I own the product decisions, the design, both halves of the codebase, and the operational details that decide whether an AI product is sustainable or just a demo.

Stack

Rails 8Nuxt 4PostgreSQLClaude APIElevenLabs TTSTelegram Bot API

← All selected work