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.
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.
- 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.
- 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.
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.
Requirements: Node.js 20+ and npm.
npm installOptional backend configuration:
cp .env.example .envOnly 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.
npm start
npm run web
npm run typecheck
npm run lintThe 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.
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.
- 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.
.envfiles, 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.mdand must be reviewed before production use. - No production credentials or real learner records are included.
- 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.
Copyright © 2026 João Morais. All rights reserved. See LICENSE.
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.
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.
- 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.
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/.
Requisitos: Node.js 20+ e npm.
npm install
npm start
npm run web
npm run typecheck
npm run lintCopie .env.example para .env somente se quiser habilitar o Supabase. Nunca coloque chaves de service role ou segredos de servidor no aplicativo.
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.
- 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.
- 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.
Copyright © 2026 João Morais. Todos os direitos reservados. Consulte LICENSE.