A beautiful, reusable flashcard app for learning any topic. Built with React and Vite.
🌐 Live Demo: https://emckenna.github.io/flash-cards/
- Markdown-based content - Easy to create and edit flashcards
- Beautiful flip animations - Engaging card flip interactions
- Progress tracking - Visual progress bar and card counter
- Navigation controls - Previous/Next, Shuffle, and Reset
- Multiple decks - Switch between different topics
- Responsive design - Works great on mobile and desktop
- Keyboard shortcuts - Space to flip, arrows to navigate
# Install dependencies
npm install
# Validate flashcard format (optional but recommended)
npm run validate-decks
# Generate decks manifest from markdown files
npm run generate-decks
# Start development server
npm run dev
# Build for production
npm run buildAll flashcard content lives in the flashcard-topics directory.
- Create a new
.mdfile inflashcard-topics/(e.g.,design-patterns.md) - Start with
# Your Topic Nameas the first line - Use the Q&A format (see below)
- Run
npm run generate-decksto auto-generate the manifest - Reload the app!
# Your Topic Name
## Category (optional)
### Card 1
**Q:** Your question?
**A:** Your answer.
### Card 2
**Q:** Another question?
**A:** Another answer.See flashcard-topics/README.md for detailed instructions.
- SOLID Principles - Already included!
- Design Patterns - Creational, structural, and behavioral patterns
- JavaScript - Language fundamentals and modern features
- System Design - Scalability and architecture concepts
- Algorithms - Data structures and complexity analysis
- React 19 - UI framework
- Vite - Build tool and dev server
- CSS3 - Animations and styling
- Markdown - Content format
flash-cards/
├── flashcard-topics/ # All your flashcard content
│ ├── decks.json # Registry of available decks
│ ├── solid.md # Example: SOLID principles
│ └── README.md # How to add new topics
├── src/
│ ├── components/ # React components
│ │ ├── FlashCard.jsx # Card with flip animation
│ │ ├── CardNavigation.jsx
│ │ └── DeckSelector.jsx
│ ├── utils/
│ │ └── markdownParser.js # Parses markdown into cards
│ ├── App.jsx # Main application
│ └── main.jsx # Entry point
└── public/ # Static assets
- One concept per card - Keep questions focused
- Review regularly - Spaced repetition works best
- Shuffle often - Don't memorize order
- Think before flipping - Active recall is key
- Add your own cards - Personalize your learning
This project is configured for automatic deployment to GitHub Pages.
The app automatically deploys to GitHub Pages when you push to the main branch. The GitHub Actions workflow handles:
- Building the app
- Deploying to
https://emckenna.github.io/flash-cards/
After pushing to GitHub:
- Go to your repo Settings → Pages
- Under "Build and deployment", select:
- Source: GitHub Actions
- The workflow will automatically deploy on the next push to
main
To build locally:
npm run buildThe built files will be in the dist/ directory.
Want to contribute your own flashcard topics? We'd love to have them! Here's how:
- Fork this repository
- Clone your fork:
git clone https://github.com/YOUR-USERNAME/flash-cards.git cd flash-cards npm install - Create a new branch:
git checkout -b add-topic-name
- Add your flashcard topic:
- Create a new
.mdfile inflashcard-topics/(e.g.,design-patterns.md) - Start with
# Your Topic Nameas the first line - Follow the Q&A format (see flashcard-topics/README.md)
- Create a new
- Validate and test locally:
npm run validate-decks # Check format is correct npm run generate-decks # Generate decks.json npm run dev # Test in browser
- Commit your changes:
git add flashcard-topics/your-topic.md git commit -m "Add [Topic Name] flashcards" git push origin add-topic-name - Open a Pull Request on GitHub
If you're not comfortable with Git:
- Create a new issue
- Title it: "New Topic: [Your Topic Name]"
- Paste your flashcard content in markdown format
- We'll review and add it for you!
- Quality: Cards should be accurate and educational
- Format: Follow the Q&A markdown format
- Scope: Keep topics focused (e.g., "React Hooks" not "All of React")
- Original Content: Ensure your content is your own or properly attributed
- Clear Questions: Questions should be clear and unambiguous
MIT - Feel free to use for your own learning!