← Work
01
PersonalFull-stack · 2025

AI English Journal

The problem.

English learners write in their second language every day, but the feedback loop is slow — a teacher, if they have one, sees the entry days later, and the correction lands out of context. The gap between writing and understanding what went wrong is where the habit falls apart.

AI can close that loop, but only if the app is careful about two things: bilingual feedback that meets a learner in their first language, and a clean line between the user's private journal and the model. Neither one is optional if this is going to be trusted.

I built AI English Journal as a full-stack Next.js app — Supabase Postgres with row-level security so each user's entries stay theirs, structured JSON responses from Gemini so grammar feedback, prompts, and drafts arrive in a consistent shape, and a per-user toggle that gates whether journal content is shared with the model at all.

The feedback loop is where language learning breaks down. AI can close it — carefully.
ClientSupabase AuthAPI RouteRLS PostgresGemini
Request path — auth → RLS → structured LLM response
Next.js + TypeScript·Supabase Postgres·Row-level security·Gemini structured JSON
Journal entry — bilingual feedback, per-user AI toggle
Journal entry — bilingual feedback, per-user AI toggle

Structured JSON responses were the single decision that made this feel like software instead of a prompt wrapper — grammar feedback in a schema, prompts in a schema, drafts in a schema. Everything downstream became typed. If I rebuilt this, I'd design the schema first and let the UI grow from it.