KanaDojo ใใช้ๅ ด
๐ About KanaDojo
KanaDojo is an engaging web-based Japanese learning platform that makes mastering Hiragana, Katakana, Kanji, and Vocabulary fun and intuitive. Built with a focus on aesthetics, customization, and effective learning, KanaDojo provides an immersive training environment for Japanese language learners at all levels.
Whether youโre just starting with the basic kana syllabaries or preparing for the JLPT exams with advanced kanji and vocabulary, KanaDojo offers a streamlined, distraction-free learning experience that adapts to your preferences and learning style.
โจ Key Features
๐ฏ Three Training Dojos
- Kana Dojo - Master Hiragana and Katakana syllabaries with base, dakuon, yoon, and foreign sound groups
- Kanji Dojo - Learn essentโฆ
KanaDojo ใใช้ๅ ด
๐ About KanaDojo
KanaDojo is an engaging web-based Japanese learning platform that makes mastering Hiragana, Katakana, Kanji, and Vocabulary fun and intuitive. Built with a focus on aesthetics, customization, and effective learning, KanaDojo provides an immersive training environment for Japanese language learners at all levels.
Whether youโre just starting with the basic kana syllabaries or preparing for the JLPT exams with advanced kanji and vocabulary, KanaDojo offers a streamlined, distraction-free learning experience that adapts to your preferences and learning style.
โจ Key Features
๐ฏ Three Training Dojos
- Kana Dojo - Master Hiragana and Katakana syllabaries with base, dakuon, yoon, and foreign sound groups
- Kanji Dojo - Learn essential kanji characters organized by JLPT levels (N5, N4, N3, N2)
- Vocabulary Dojo - Build your Japanese vocabulary with curated word collections by proficiency level
๐ฎ Four Dynamic Game Modes
Each dojo supports four engaging training modes to reinforce learning:
- Pick - Multiple choice: Select the correct romanization/translation for the shown character
- Reverse-Pick - Reverse multiple choice: Select the correct character for the given romanization/translation
- Input - Text input: Type the correct romanization/translation
- Reverse-Input - Reverse text input: Type the correct character
๐จ Extensive Customization
- 100+ Themes - Choose from a vast collection of beautiful light and dark themes, or use the random theme feature
- 28 Japanese Fonts - Select from a variety of authentic Japanese typefaces to suit your aesthetic preferences
- Sound Effects - Enjoy satisfying UI feedback sounds that can be toggled on/off
- Display Options - Toggle between Romaji/English and Kana/Kanji displays in selection menus
- Hotkeys - Keyboard shortcuts for efficient training (can be disabled)
๐ Progress Tracking
- Real-time feedback with correct/incorrect counters
- Streak tracking to maintain motivation
- Statistics to monitor your learning progress
๐ Modern Web Experience
- Fully responsive design that works on desktop, tablet, and mobile
- No installation required - train anywhere with an internet connection
- Clean, minimalist interface that keeps you focused on learning
- Smooth animations and transitions powered by Framer Motion
๐ผ๏ธ Screenshots
Home Page
Kanji Selection Menu
Training Page
Customization & Themes
๐จ UI & Design Philosophy
KanaDojo embraces a minimalist aesthetic combined with maximum flexibility. The design philosophy centers around:
Minimalism First
- Clean interfaces with minimal distractions
- Focus on the learning content
- Intuitive navigation and clear information hierarchy
- Purposeful use of whitespace
Aesthetic Customization
- Extensive theme library (100+ options) ranging from soft pastels to vibrant neons
- Support for both light and dark modes
- Carefully curated color palettes that are easy on the eyes during extended study sessions
- Seamless theme transitions
User Experience
- Smooth animations and micro-interactions for delightful feedback
- Responsive design that adapts beautifully to any screen size
- Audio feedback for interactions (optional)
- Consistent visual language across all sections
Japanese Typography
- 28 authentic Japanese fonts covering various styles
- Proper rendering of complex kanji characters
- Clear distinction between similar-looking characters
- Font previews with real Japanese text samples
๐ ๏ธ Tech Stack
KanaDojo is built with modern web technologies for optimal performance and developer experience:
Core Framework
- Next.js 15 - React framework with App Router for server-side rendering and optimal performance
- React 19 - Latest React with concurrent features
- TypeScript - Type-safe development
Styling & UI
- Tailwind CSS - Utility-first CSS framework
- shadcn/ui - High-quality, accessible component library
- Framer Motion - Smooth animations and transitions
- Lucide React - Beautiful, consistent icon library
- FontAwesome - Additional icon support
State Management
- Zustand - Lightweight state management with minimal boilerplate
- Zustand Persist - Local storage persistence for user preferences
Utilities & Features
- use-sound - Audio feedback system
- canvas-confetti - Celebration effects
- react-timer-hook - Timer functionality
- react-markdown - Markdown rendering for educational content
- random-js - Cryptographically strong random number generation
- clsx + tailwind-merge - Conditional styling utilities
Development Tools
- ESLint - Code linting
- next-sitemap - Automatic sitemap generation
Analytics & Performance
- @vercel/analytics - Web analytics
- @vercel/speed-insights - Performance monitoring
๐ Getting Started
Prerequisites
- Node.js 18.x or higher
- npm 10.x or higher (comes with Node.js)
Installation
Clone the repository
git clone https://github.com/lingdojo/kanadojo.git
cd kanadojo
Install dependencies
npm install
Run the development server
npm run dev
Open your browser Navigate to http://localhost:3000
Build for Production
# Create an optimized production build
npm run build
# Start the production server
npm start
Other Commands
# Run ESLint
npm run lint
# Generate sitemap (runs automatically after build)
npm run postbuild
Troubleshooting
If you encounter issues during development, try these solutions:
Clear Next.js Cache
macOS/Linux:
rm -rf .next
npm run dev
Windows (PowerShell):
Remove-Item -Recurse -Force .next
npm run dev
Windows (Command Prompt):
rmdir /s /q .next
npm run dev
Clear Node Modules and Reinstall
macOS/Linux:
rm -rf node_modules package-lock.json
npm install
Windows (PowerShell):
Remove-Item -Recurse -Force node_modules, package-lock.json
npm install
Windows (Command Prompt):
rmdir /s /q node_modules
del package-lock.json
npm install
Clear All Caches (Nuclear Option)
macOS/Linux:
rm -rf .next node_modules package-lock.json
npm cache clean --force
npm install
npm run dev
Windows (PowerShell):
Remove-Item -Recurse -Force .next, node_modules, package-lock.json
npm cache clean --force
npm install
npm run dev
Windows (Command Prompt):
rmdir /s /q .next
rmdir /s /q node_modules
del package-lock.json
npm cache clean --force
npm install
npm run dev
Port Already in Use
If port 3000 is already in use:
macOS/Linux:
# Find process using port 3000
lsof -i :3000
# Kill the process (replace PID with actual process ID)
kill -9 PID
Windows (PowerShell/Command Prompt):
# Find process using port 3000
netstat -ano | findstr :3000
# Kill the process (replace PID with actual process ID)
taskkill /PID PID /F
Or simply run on a different port:
# macOS/Linux/Windows
PORT=3001 npm run dev
๐ Project Structure
kanadojo/
โโโ app/ # Next.js App Router pages
โ โโโ kana/ # Kana dojo pages
โ โ โโโ train/[gameMode]/ # Training pages for each game mode
โ โโโ kanji/ # Kanji dojo pages
โ โ โโโ train/[gameMode]/
โ โโโ vocabulary/ # Vocabulary dojo pages
โ โ โโโ train/[gameMode]/
โ โโโ preferences/ # Settings and customization page
โ โโโ academy/ # Educational content
โ โโโ layout.tsx # Root layout with providers
โ โโโ page.tsx # Home page
โ
โโโ components/ # React components
โ โโโ Dojo/ # Training-specific components
โ โ โโโ Kana/ # Kana selection and cards
โ โ โโโ Kanji/ # Kanji selection and cards
โ โ โโโ Vocab/ # Vocabulary selection and cards
โ โโโ reusable/ # Shared components
โ โ โโโ Menu/ # Navigation and menu components
โ โ โโโ ... # Other reusable components
โ โโโ Settings/ # Preference components
โ โโโ ui/ # shadcn/ui components
โ
โโโ lib/ # Utilities and helper functions
โ โโโ hooks/ # Custom React hooks
โ โ โโโ useAudio.ts # Audio feedback hooks
โ โ โโโ ...
โ โโโ interfaces.ts # TypeScript interfaces
โ โโโ utils.ts # Utility functions
โ
โโโ i18n/ # Translation management system
โ โโโ request.ts # Translated text retrieve helper
โ
โโโ store/ # Zustand state management
โ โโโ useKanaKanjiStore.ts # Kana/Kanji selection state
โ โโโ useVocabStore.ts # Vocabulary selection state
โ โโโ useStatsStore.ts # Statistics and progress
โ โโโ useThemeStore.ts # Theme and preferences
โ
โโโ static/ # Static data and configuration
โ โโโ kana.ts # Kana character data
โ โโโ kanji/ # Kanji data by JLPT level
โ โโโ vocab/ # Vocabulary data
โ โโโ themes.ts # Theme definitions
โ โโโ fonts.ts # Font configurations
โ โโโ info.tsx # Informational content
โ
โโโ translations/ # Translated text content
โ โโโ en.json # English text content
โ โโโ es.json # Spanish text content
โ
โโโ public/ # Static assets
โ โโโ sounds/ # Audio files
โ โโโ wallpapers/ # Background images
โ
โโโ CLAUDE.md # Developer documentation
โโโ next.config.ts # Next.js configuration
โโโ tailwind.config.js # Tailwind CSS configuration
โโโ tsconfig.json # TypeScript configuration
Key Concepts
State Management Flow
- User selects content in menu components
- Selections stored in Zustand stores (
useKanaKanjiStore,useVocabStore) - Training components read from stores to generate questions
- Stats tracked and persisted in
useStatsStore - User preferences saved in
useThemeStorewith localStorage persistence
Component Architecture
- Dojo Components: Handle character/word selection for each content type
- Training Components: Render game modes and handle user interactions
- Reusable Components: Shared UI elements (buttons, cards, modals, etc.)
- Menu Components: Navigation, info sections, and dojo selection
Data Organization
- Kana: Organized by type (hiragana/katakana) and groups (base, dakuon, yoon, foreign)
- Kanji: Organized by JLPT level (N5-N2), with readings and meanings
- Vocabulary: Organized by JLPT level and word type (nouns, verbs, etc.)
Game Mode Implementation
Each game mode is a dynamic route (/[contentType]/train/[gameMode]) that:
- Reads selected content from the appropriate store
- Generates random questions from the selection
- Provides immediate feedback
- Tracks statistics (correct, incorrect, streak)
๐ค Contributing
Contributions are welcome! KanaDojo is an open-source project built by the community, for the community. Check out CONTRIBUTING.md for more detailed information on how to contribute.
How to Contribute
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Development Guidelines
- Follow the existing code style and conventions
- Use TypeScript for type safety
- Test your changes thoroughly
- Update documentation as needed
- Keep components focused and reusable
๐ License
This project is licensed under the AGPL 3.0 License - see the LICENSE.md file for details.
๐ Acknowledgments
- Japanese language data and character information
- Open-source community for the amazing tools and libraries
- All contributors who help make KanaDojo better
Translations
KanaDojo is available in multiple languages thanks to community contributions:
- English (default)
- Espaรฑol
- Franรงais in progress
- Deutsch
- Portuguรชs
- Tรผrkรงe
- ไธญๆ๏ผ็ฎไฝ๏ผ
- ไธญๆ๏ผ็น้ซ๏ผ
- เคนเคฟเคจเฅเคฆเฅ
- ุงูุนุฑุจูุฉ
๐ Contact & Links
- Website: kanadojo.com
- Repository: github.com/lingdojo/kanadojo
- Email: lingdojo.dev@gmail.com
Made with โค๏ธ for Japanese language learners worldwide
ใใใฐใฃใฆ๏ผ (Ganbatte! - Do your best!)