A mobile app for learning English through structured lessons, real-life conversations, and hands-on speaking practice.
UpSpoke is a React Native mobile application built with Expo that helps users improve their English language skills. The onboarding flow adapts the experience to each learner's current level, motivation, and interests — so every user gets a personalized path from day one.
The app focuses on three core pillars:
- Lessons — structured content covering grammar, vocabulary, and real-world usage
- Conversations — dialogue-based practice for building confidence in speaking
- Practice — active exercises to reinforce what was learned
- Personalized Onboarding — select your proficiency level (Beginner / Intermediate / Advanced), learning motivation (Travel, Work, Family, Culture, Hobby), and topic interests (Food, Business, Technology, Music, etc.)
- Lessons — browse and complete English lessons organized by difficulty and topic
- Conversations / Dialogues — practice real dialogue scenarios
- Practice Mode — targeted exercises to strengthen speaking and comprehension
- User Profile — track your learning progress and preferences
- Light & Dark Mode — automatic adaptation to system theme
- Haptic Feedback — satisfying tactile response on tab navigation
- Subscription / Premium — paywall for access to advanced content
- Authentication — secure sign-in via Supabase Auth (including OAuth)
| Layer | Technology |
|---|---|
| Framework | Expo 55 + React Native 0.83.4 |
| Language | TypeScript 5.9 |
| Navigation | Expo Router (file-based) |
| Styling | NativeWind v4 (Tailwind CSS) |
| Backend / Auth | Supabase |
| Animations | React Native Reanimated v4 |
| Gestures | React Native Gesture Handler |
| Notifications | Sonner Native |
| Icons | @expo/vector-icons (Ionicons) |
| Font | EB Garamond (Google Fonts) |
| Package Manager | Bun |
UpSpoke-Mobile-App/
└── learning-app/
├── app/
│ ├── (tabs)/
│ │ ├── lessons.tsx # Lessons tab
│ │ ├── conversations.tsx # Conversations tab
│ │ └── profile.tsx # Profile tab
│ ├── onboarding.tsx # Onboarding flow
│ ├── practice.tsx # Practice session screen
│ └── _layout.tsx # Root layout & auth gate
├── components/ # Reusable UI components
├── constants/ # Theme, colors, config
├── context/ # React Context providers (Auth, etc.)
├── hooks/ # Custom hooks
├── lib/ # Utility libraries
├── providers/ # App-level providers
├── supabase/ # Supabase client & migrations
└── utils/ # Helper functions
# Clone the repository
git clone https://github.com/Empty-Developer/UpSpoke-Mobile-App.git
cd UpSpoke-Mobile-App/learning-app
# Install dependencies
bun installCreate a .env.local file in learning-app/ and fill in your Supabase credentials:
EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url
EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key# Start development server
bun start
# Run on iOS simulator
bun ios
# Run on Android emulator
bun android
# Run in web browser
bun web- Push notifications for daily learning streaks
- Lesson completion tracking and progress dashboard
- Expanded conversation scenario library
- Offline mode for downloaded lessons
Note: The AI feature is planned and will be integrated in a future version of UpSpoke. No implementation has been started yet.
The planned AI system will introduce two connected capabilities:
- AI Speaking Assistant — an interactive voice-based AI companion that listens to the user's spoken English, provides real-time pronunciation and grammar feedback, and guides them through structured speaking exercises
- AI Theme Discussion — a conversational AI module where users can choose a topic (e.g., Business, Travel, Technology) and have an open-ended dialogue in English, with the AI adapting difficulty based on the user's level
These features will be powered by a large language model combined with speech-to-text and text-to-speech processing, deeply integrated with the existing lesson and profile personalization system.
This is a private project. Contributions are not open to the public at this time.
Private — all rights reserved.
Built with care by Empty-Developer
