Ejo App - Complete Documentation

Version: 1.0.0 | Last Updated: January 2025

1. Overview

Ejo is a polyglot language learning application designed to help users learn Kinyarwanda, French, and Spanish through interactive quizzes and flashcards. The app features instant feedback, scoring, leaderboards, and a beautiful, responsive UI—all without requiring a backend server.

2. Technologies Used

HTML5

Semantic markup, accessibility features

CSS3

Custom properties, Grid, Flexbox, animations

JavaScript (ES6+)

Modules, async/await, classes

LocalStorage API

Client-side data persistence

JSON

Question and flashcard data storage

Font Awesome

Icon library for UI elements

3. Architecture

3.1 File Structure

ejo-app/
├── index.html              # Landing page
├── shared.css              # Brand colors & CSS variables
├── components.css          # Reusable UI components
├── landing.css/js          # Landing page specific
├── quiz/                   # Quiz module
│   ├── quiz.html
│   ├── script.js           # Quiz logic & confetti
│   ├── styles.css
│   └── leaderboardManager.js
├── flashcards/             # Flashcard module
│   ├── flashcards.html
│   ├── flashcards.js       # Flashcard & quiz logic
│   ├── flashcards.css
│   └── flashcards.json     # Kinyarwanda vocabulary
├── questions/              # Quiz questions
│   ├── french.json
│   ├── spanish.json
│   └── ikinyarwanda.json
├── survey/                 # Feedback form
│   ├── survey.html         # JS inlined
│   └── survey.css
└── images/                 # Assets
            

3.2 Design Patterns

4. Features

4.1 Quiz Mode

4.2 Flashcards

4.3 Leaderboard

5. Navigation Guide

Desktop Navigation:
  • Use the header navigation bar to switch between pages
  • Click logo to return to home page
  • All links open in the same window
Mobile Navigation:
  • Tap the hamburger menu (☰) to open navigation
  • Menu collapses automatically after selection
  • Optimized for touch interactions

5.1 Keyboard Shortcuts

Flashcards:

6. Data Management

6.1 LocalStorage Keys

6.2 JSON Data Format

Quiz Questions:

{
  "id": 1,
  "name": "French Quiz",
  "questions": [
    {
      "id": 1,
      "question": "How do you say 'Hello' in French?",
      "choices": ["Bonjour", "Gracias", "Ciao", "Hola"],
      "correctAnswer": "Bonjour",
      "explanation": "Bonjour is the French word for Hello"
    }
  ]
}

Flashcards:

{
  "flashcards": [
    {
      "id": 1,
      "kinyarwandaWord": "Muraho!",
      "meaning": "Hello!",
      "category": "greetings",
      "phonetics": "mu-ra-ho",
      "example": "Muraho! Aba hano?"
    }
  ]
}

7. Customization

7.1 Brand Colors

Edit shared.css to change colors globally:

:root {
    --ejo-primary: #FF6B6B;    /* Red */
    --ejo-secondary: #4ECDC4;  /* Teal */
    --ejo-accent: #FFE66D;     /* Yellow */
    --ejo-dark: #2A2A2A;       /* Dark gray */
    --ejo-light: #F7F7F7;      /* Light gray */
}

7.2 Adding Questions

  1. Open the appropriate JSON file in questions/
  2. Add new question object with unique ID
  3. Follow the existing format
  4. Questions 1-10: Easy, 11-35: Medium, 36+: Hard

7.3 Adding Languages

  1. Create new JSON file: questions/language.json
  2. Update quiz/script.js loadQuestions() method
  3. Add option to language selector in quiz.html

8. Limitations

Known Limitations:
  • No Backend: All data stored locally, no cloud sync
  • Browser-Specific: Data doesn't transfer between browsers
  • No Authentication: Anyone can change player names
  • Limited Storage: LocalStorage has ~5-10MB limit
  • No Audio: No pronunciation audio files
  • Static Content: Questions must be manually updated
  • Single User: No multi-user support or profiles

9. Browser Compatibility

Browser Minimum Version Status
Chrome 90+ ✅ Fully Supported
Firefox 88+ ✅ Fully Supported
Safari 14+ ✅ Fully Supported
Edge 90+ ✅ Fully Supported

10. Accessibility

11. Performance

12. Troubleshooting

Quiz not loading questions?

Leaderboard not saving?

Flashcards not flipping?

13. Future Enhancements

14. Credits & License

Developer: Benjamin Niyodusenga

Year: 2025

License: All rights reserved

Icons: Font Awesome (Free License)

Fonts: System fonts (Segoe UI, Roboto, etc.)

15. Contact & Support

For questions, feedback, or bug reports:

📚 Quick Start: New to the app? Start with Flashcards to learn vocabulary, then test yourself with the Quiz!