Flash-xp is a flashcard learning platform that implements a spaced repetition learning system, enhanced with gamification elements to make studying more engaging and effective. The platform supports AI-assisted content generation to help users create flashcards effortlessly and includes community features to share and collaborate on learning materials. Available primarily on iOS for now, Android and Web require optimisation.
- Spaced repetition learning system
- Multiple question types including multiple-choice and self assessment
- AI-generated flashcards to quickly create study materials
- Progress tracking and detailed statistics to monitor learning performance
- Gamification elements to motivate users
- Cross-device synchronization TBD
- Flutter for the frontend application
- NestJS for the backend API
- PostgreSQL as the primary database
- Firebase for Authentication and Cloud Functions
- OpenAI API for AI-generated flashcard content
Requirements:
- docker
- flutter v3
- node 24 for the server
- node 22 for the cloud functions.
I suggest using fnm or nvm for running multiple node versions.
-
Clone the repository
git clone https://github.com/yourusername/flash-xp.git cd flash-xp -
Install dependencies for client, server and cloud functions
# Client (cd client && flutter pub get) # Server (cd server && pnpm i) # Cloud functions (cd functions && pnpm i)
-
Install the firebase cli tools globally
pnpm i firebase-tools -g
-
Setup environment variables
- Create
.envfiles in both server and functions directories with necessary keys and configuration following the.env.examplepovided
- Create
-
Run the database a docker container using the provided docker-compose.
(cd server && docker compose up --d) # add the --d to run the container in detached mode
-
Init the database by running migrations and seeds.
(cd server && pnpm db:migration:up) (cd server && pnpm db:seed)
-
Run the server
(cd server && pnpm start:dev) -
From a new terminal run the cloud functions emulator
(cd functions && pnpm serve) -
From a new terminal run the client app
(cd client && flutter run)