A modern flashcard web application built with Next.js, TypeScript, and Tailwind CSS. Create word sets, practice with flashcards, quizzes, and fun games!
- Word Input & Set Creation - Paste or type word-meaning pairs with auto-parsing
- Flashcards Mode - Flip cards with smooth animations, track "Known" vs "Still Learning"
- Matching Quiz - Connect terms with definitions, timed with best score tracking
- Multiple Choice Quiz - Select correct definitions with instant feedback
- Speed Match - 60-second rapid-fire matching with combo multipliers
- Typing Practice - Type the term from the definition, tracks accuracy
- Local Storage - All data persists in your browser
- Import/Export - Backup and share your sets as JSON
- Demo Sets - Pre-loaded Korean, Japanese (JLPT N5), GRE, and Spanish vocabulary
- Beautiful, responsive design with Tailwind CSS
- Smooth animations with Framer Motion
- Dark mode support (follows system preference)
- Stats dashboard with performance tracking
- Node.js 18+
- npm or yarn
# Navigate to the flashcard-app directory
cd flashcard-app
# Install dependencies
npm install
# Start development server
npm run devOpen http://localhost:3000 in your browser.
npm run build
npm startsrc/
โโโ app/
โ โโโ layout.tsx # Root layout with navbar
โ โโโ page.tsx # Dashboard home page
โ โโโ stats/page.tsx # Statistics page
โ โโโ sets/
โ โโโ new/page.tsx # Create new set
โ โโโ [id]/
โ โโโ page.tsx # Set detail & practice selector
โ โโโ edit/page.tsx
โ โโโ practice/
โ โโโ flashcards/page.tsx
โ โโโ matching/page.tsx
โ โโโ mcq/page.tsx
โ โโโ games/page.tsx
โโโ components/
โ โโโ Navbar.tsx # Navigation bar
โ โโโ Flashcard.tsx # Flip card component
โ โโโ MatchingGrid.tsx # Matching game grid
โ โโโ MCQQuestion.tsx # Multiple choice component
โ โโโ GameSpeedMatch.tsx # Speed match game
โ โโโ GameTyping.tsx # Typing practice game
โ โโโ WordSetEditor.tsx # Word pair editor
โ โโโ SetCard.tsx # Set preview card
โ โโโ PracticeSelector.tsx # Practice mode picker
โโโ lib/
โโโ types.ts # TypeScript interfaces
โโโ storage.ts # LocalStorage utilities
โโโ parseWords.ts # Word parsing & helpers
โโโ demoData.ts # Demo vocabulary sets
The app supports multiple input formats:
term: definition
term - definition
term = definition
term definition (tab-separated)
์ฌ๊ณผ: apple
์ค๋ ์ง: orange
๊ณต๋ถํ๋ค: to study
| Mode | Description | Min Words |
|---|---|---|
| Flashcards | Flip cards, mark known/learning | 1 |
| Matching | Connect terms to definitions | 4 |
| Multiple Choice | Select correct answer from 4 options | 4 |
| Speed Match | 60s timed matching with combos | 4 |
| Typing | Type term from definition | 1 |
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Animations: Framer Motion
- Icons: Lucide React
- Storage: Browser LocalStorage
- Total practice sessions per set
- Flashcard mastery percentage
- MCQ accuracy (running average)
- Matching best time
- Speed Match high score
- Typing best WPM
- Last practiced date
The app uses CSS custom properties for theming. Modify src/app/globals.css to customize:
- Colors (primary, accent, success, danger, etc.)
- Shadows
- Gradients
- Border radius
- Animations
Dark mode automatically follows your system preference. Custom variables are defined for both light and dark themes.
Load demo sets with one click from the dashboard:
- Korean Basics ๐ฐ๐ท - 12 essential words
- GRE Vocabulary ๐ - 10 advanced English words
- JLPT N5 ๐ฏ๐ต - 12 basic Japanese verbs/adjectives
- Spanish Essentials ๐ช๐ธ - 10 common phrases
# Run development server
npm run dev
# Build for production
npm run build
# Start production server
npm start
# Run linter
npm run lintSynapse can use Google AI (Gemini) to automatically generate short descriptions for your study sets based on the words they contain.
Create a .env.local file in the project root (next to package.json) and add:
GOOGLE_API_KEY=your_google_ai_key_hereRestart the dev server after adding or changing this file.
- New Set: On the โCreate New Setโ page, use the Generate with AI button next to the Description field to auto-fill a description from the words youโve entered.
- Edit Set: On the โEdit Setโ page, use the same button to regenerate or improve the description for an existing set.
All AI calls are made through a server-side API route (/api/generate-description), so your API key is never exposed to the browser.
MIT License - feel free to use and modify for your own projects!
Built with โค๏ธ using Next.js and Tailwind CSS