Skip to content

Repository files navigation

Mandarin Learning App

A mobile-first learning application for people taking their first steps in Mandarin Chinese. It combines structured lessons, quizzes, flashcards, spaced review, favorites, local progress and an optional Supabase backend in one Expo/React Native codebase.

Project status: active development. The local-first MVP is functional; content, audio coverage and backend integration are still evolving.

Objective and problem

Beginner resources are often fragmented across vocabulary lists, video lessons and isolated flashcard tools. This project explores a single, guided experience where learners can study, practice and review without losing progress when a backend is unavailable.

Features

  • Guided modules and lessons for beginner content.
  • Quizzes, flashcards, favorites and spaced-repetition review.
  • Local progress, preferences, cache and content fallback.
  • Optional authentication and content synchronization with Supabase.
  • Context-aware Longzi mascot states.
  • Shared design tokens and reusable React Native components.
  • Android, iOS and web targets through Expo.

Technology

  • TypeScript, React 19 and React Native.
  • Expo, Expo Router and Expo Audio.
  • Zustand and TanStack Query.
  • Supabase with SQL migrations, seed data and row-level security policies.
  • Zod and React Hook Form.

Architecture

Routes live in app/, reusable UI in src/components/, domain behavior in src/features/, and infrastructure adapters in src/services/. Local content keeps the learning flow available without external services; the Supabase adapter is enabled only when valid public environment values are supplied.

Installation

Requirements: Node.js 20+ and npm.

npm install

Optional backend configuration:

cp .env.example .env

Only the Supabase project URL and anonymous public key belong in the client environment. Never place service-role keys or other server secrets in this application.

Run and validate

npm start
npm run web
npm run typecheck
npm run lint

Demonstration

The repository includes local lesson, quiz and flashcard content. It can therefore be demonstrated without an account or hosted database. Run the web target for a browser preview or use Expo Go/an emulator for the mobile experience.

Directory structure

  • app/: routes and screens.
  • src/components/: reusable interface and learning components.
  • src/features/: authentication, content, progress, review and mascot logic.
  • src/services/: storage, cache, audio, content and Supabase adapters.
  • src/theme/: visual tokens and typography.
  • src/assets/: mascot assets used by the interface.
  • supabase/: schema migrations, policies and fictional seed content.
  • docs/: architecture, content and product decisions.

Limitations

  • The curriculum is an early MVP and is not a substitute for instruction from a qualified teacher.
  • Audio coverage and accessibility validation are incomplete.
  • Cross-device synchronization depends on a separately configured Supabase project.
  • Automated UI and end-to-end tests are planned.

Security and privacy

  • .env files, build output and local caches are excluded from version control.
  • The app works without collecting personal information in local mode.
  • Supabase policies are documented in docs/database/RLS-MVP.md and must be reviewed before production use.
  • No production credentials or real learner records are included.

Next steps

  • Expand beginner modules and native-speaker audio.
  • Add automated unit, component and end-to-end tests.
  • Improve accessibility and offline synchronization.
  • Validate the curriculum with language-learning specialists.

License

Copyright © 2026 João Morais. All rights reserved. See LICENSE.


Aplicativo de Aprendizado de Mandarim

Aplicativo mobile-first para quem esta comecando a estudar mandarim. O projeto reune aulas estruturadas, quizzes, flashcards, revisao espacada, favoritos, progresso local e um backend Supabase opcional em uma unica base Expo/React Native.

Status: em desenvolvimento ativo. O MVP local-first esta funcional; conteudo, cobertura de audio e integracao de backend continuam evoluindo.

Objetivo e problema resolvido

Materiais para iniciantes costumam ficar espalhados entre listas de vocabulario, videoaulas e ferramentas isoladas. Este projeto explora uma experiencia guiada unica, na qual a pessoa pode estudar, praticar e revisar sem perder o progresso quando o backend estiver indisponivel.

Funcionalidades

  • Modulos e licoes guiadas para conteudo iniciante.
  • Quizzes, flashcards, favoritos e revisao com repeticao espacada.
  • Progresso, preferencias, cache e fallback de conteudo locais.
  • Autenticacao e sincronizacao opcionais com Supabase.
  • Mascote Longzi com estados contextuais.
  • Tokens visuais e componentes React Native reutilizaveis.
  • Alvos Android, iOS e web com Expo.

Tecnologias e arquitetura

O aplicativo utiliza TypeScript, React Native, Expo Router, Zustand, TanStack Query, Zod e React Hook Form. As rotas ficam em app/, a interface reutilizavel em src/components/, as regras de dominio em src/features/ e os adaptadores em src/services/. Migracoes, seeds ficticios e politicas RLS ficam em supabase/.

Instalacao, execucao e validacao

Requisitos: Node.js 20+ e npm.

npm install
npm start
npm run web
npm run typecheck
npm run lint

Copie .env.example para .env somente se quiser habilitar o Supabase. Nunca coloque chaves de service role ou segredos de servidor no aplicativo.

Demonstracao

O repositorio inclui aulas, quizzes e flashcards locais ficticios. Assim, a demonstracao funciona sem conta e sem banco hospedado, tanto no navegador quanto em emulador ou Expo Go.

Limitacoes, privacidade e seguranca

  • O curriculo ainda e um MVP e nao substitui acompanhamento de professor qualificado.
  • Audio, acessibilidade e testes ponta a ponta ainda estao incompletos.
  • Arquivos .env, builds e caches locais nao sao versionados.
  • O modo local nao exige coleta de informacoes pessoais.
  • As politicas Supabase devem ser revisadas antes de qualquer uso em producao.
  • Nao ha credenciais de producao nem registros reais de estudantes neste repositorio.

Proximos passos

  • Expandir os modulos iniciais e o audio de falantes nativos.
  • Adicionar testes unitarios, de componentes e ponta a ponta.
  • Melhorar acessibilidade e sincronizacao offline.
  • Validar o curriculo com especialistas em ensino de idiomas.

Licenca

Copyright © 2026 João Morais. Todos os direitos reservados. Consulte LICENSE.

About

Local-first Mandarin learning app built with Expo, React Native and TypeScript.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages