Learn English with the 5x5x5 method: 15 minutes per session, 5 repetitions, 3 times a day, for 5 days.
Fluent5 is not a classic spaced repetition app. It focuses on short, intense immersion.
- โฑ๏ธ 15 minutes: One focused block per period (morning, afternoon, night).
- ๐ 5 repetitions: In each session you repeat the same cycle 5 times in a row:
- ๐ Read: Read the text and understand the context.
- ๐ง Listen: Listen closely to the pronunciation.
- โ๏ธ Write: Write down what you heard (dictation).
- ๐ฃ๏ธ Speak: Say it out loud to practice speaking.
- ๐ Loop: Final pass to lock the session in.
- ๐ 5 day cycle: Repeat the whole process with the same text for 5 days straight.
Short narrative stories, about 2 minutes each, grouped by level:
- ๐ฅ Basic: Thanksgiving Day, The Perfect Gift, A Morning in the Park
- ๐ฅ Intermediate: Online Classes, The Job Interview, The Lost Dog
- ๐ฅ Advanced: The Entrepreneur's Dream, The Climate Crisis, Dale Carnegie style inspiration
- Plays the text sentence by sentence.
- Voice picker with a quality ranking (๐ฅ๐ฅ๐ฅ).
- Works with multiple voices (Google, Microsoft, Apple).
- Playback speed tuned for learning.
- Sign in with Supabase (Google or email).
- A display name is required at sign up.
- Avatar from your Google photo, or a default icon.
- Protected routes for signed in users.
- Premium dark mode with glassmorphism, plus a light mode.
- Smooth animations and micro interactions with Framer Motion.
- Fully responsive, mobile first.
- Lucide icons for a consistent look.
- Installable as a PWA.
- Node.js 18 or newer
- npm
# Clone the repository
git clone https://github.com/tgmarinho/fluent-five.git
cd fluent-five
# Install dependencies
npm install
# Start the dev server
npm run devOpen http://localhost:3000 to see the app. ๐
To enable sign in, set your Supabase keys in a .env.local file.
| Route | Description |
|---|---|
/ |
Landing page with the method, plans, and sign up |
/phrases |
Main app: phrase practice with the 5x5x5 loop |
/stories |
Narrative stories with the audio player |
/login |
Sign in and sign up |
| Tech | Purpose |
|---|---|
| Next.js 16 | React framework with App Router |
| React 19 | UI library |
| TypeScript | Type safety |
| Tailwind CSS 4 | Utility first styling |
| shadcn/ui | Accessible components (Radix UI) |
| Framer Motion | Animations |
| Lucide React | SVG icons |
| Supabase | Auth and sessions |
| next-themes | Light and dark mode |
| next-pwa | Progressive Web App support |
| Web Speech API | Native text to speech |
| localStorage | Progress persistence |
src/
โโโ app/ # Next.js App Router
โ โโโ page.tsx # Landing page
โ โโโ phrases/ # Main practice app
โ โโโ stories/ # Storytelling page
โ โโโ login/ # Sign in and sign up
โ โโโ auth/callback/ # Supabase auth callback
โ โโโ manifest.ts # PWA manifest
โโโ components/
โ โโโ StoryCard.tsx # Story preview card
โ โโโ StoryPlayer.tsx # Story player
โ โโโ mode-toggle.tsx # Theme switch
โ โโโ ui/ # shadcn components
โโโ data/
โ โโโ stories.ts # Grammar stories
โ โโโ narrative-stories.ts # Narrative stories
โโโ hooks/
โโโ useSRS.ts # Repetition logic
โโโ useTextToSpeech.ts # Text to speech hook
- ๐ณ Billing and subscriptions (Stripe or Lemon Squeezy)
- ๐๏ธ Move progress from localStorage to Supabase Postgres
- ๐ต Pre recorded audio for premium stories
- ๐ Learning analytics and streaks
- ๐ More interface languages
- ๐งช Automated tests (unit and end to end)
Contributions are welcome. Check the issues to get started.
MIT ยฉ Thiago Marinho
Made with ๐ for English learners