Quietude transforms how you learn by combining artificial intelligence with thoughtful design. Upload any study material, and watch as it becomes an interactive learning journey with AI-generated quizzes, personalized study notes, and progress tracking β all wrapped in a calming, adaptive interface that shifts with the time of day.
Getting Started Β· Features Β· Architecture Β· Documentation Β· Contributing
"In the midst of movement and chaos, keep stillness inside of you." β Deepak Chopra
Modern learning tools often overwhelm with notifications, gamification, and visual noise. Quietude takes a different path β one of intentional simplicity and focused calm. The application adapts to your natural rhythm, shifting its visual atmosphere from morning mist to midnight study, ensuring your environment supports rather than distracts from deep learning.
|
Upload PDFs, images, audio files, or paste text directly. Quietude's AI engine analyzes your material, identifies topics, and automatically structures a personalized study plan. Supported Formats:
|
Three question types tailored to your content:
Pass at 75% to unlock the next topic, or Dig Deeper for advanced challenges. |
||||||||||||||||||
|
The interface naturally transitions through five time-based themes:
Plus five mood overrides: Sage, Storm, Sand, Plum, and Ink. |
When you score below 75%, Quietude generates comprehensive study notes featuring:
Notes are cached for 24 hours to minimize API usage. |
||||||||||||||||||
|
Study anywhere, even without internet:
|
Track your progress with detailed statistics:
|
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β QUIETUDE ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Landing β β Dashboard β β Learn β β Quiz β β
β β Page βββββΆβ Page βββββΆβ Page βββββΆβ Page β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β β β β β
β βΌ βΌ βΌ βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ZUSTAND STATE LAYER β β
β β βββββββββββ βββββββββββ βββββββββββ βββββββββββ βββββββββββ β β
β β β Auth β β Quiz β β Notes β βSessions β β Paths β ... β β
β β β Store β β Store β β Store β β Store β β Store β β β
β β ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ β β
β βββββββββΌβββββββββββΌβββββββββββΌβββββββββββΌβββββββββββΌββββββββββββββββββ β
β β β β β β β
β βΌ βΌ βΌ βΌ βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β PERSISTENCE & SYNC LAYER β β
β β βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ β β
β β β localStorage β β IndexedDB β β Firebase β β β
β β β (Zustand) β β (idb-keyval) β β (Firestore) β β β
β β βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β GEMINI AI ENGINE β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Multi-Key Pool Manager β β β
β β β β’ 6 API keys with automatic rotation β β β
β β β β’ 24-hour exhaustion cooldown β β β
β β β β’ Instant failover on quota errors β β β
β β β β’ Smart retry with key switching β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ β β
β β β Analysis β β Quiz β β Notes β β β
β β β Prompts β β Prompts β β Prompts β β β
β β βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ
β β β β β β
β User Upload βββββββΆβ Gemini Analyze βββββββΆβ Topic Map β
β (PDF/Image/ β β (content β β β Generated β
β Audio/Text) β β topics) β β β
β β β β β β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββ¬ββββββββββ
β
βΌ
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ
β β β β β β
β Study Notes ββββββββ Score < 75% ββββββββ Take Quiz β
β Generated β β β β (10 questions) β
β β β β β β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ
β
β Score β₯ 75%
βΌ
ββββββββββββββββββββ
β β
β Next Topic β
β Unlocked β
β β
ββββββββββββββββββββ
| Category | Technology | Purpose |
|---|---|---|
| Framework | React 18 + TypeScript | Component architecture with type safety |
| Build Tool | Vite 5 | Lightning-fast HMR and optimized builds |
| Styling | TailwindCSS + CSS Variables | Utility-first with dynamic theming |
| UI Components | Radix UI + shadcn/ui | Accessible, unstyled primitives |
| Animation | Framer Motion | Declarative animations and gestures |
| State Management | Zustand | Lightweight stores with persistence |
| AI Integration | Google Gemini 2.5 Flash | Content analysis, quiz generation, notes |
| Backend | Firebase (Firestore) | Database, auth infrastructure, sync |
| EmailJS | OTP delivery for passwordless auth | |
| Offline Storage | idb-keyval (IndexedDB) | Client-side persistence |
| PWA | vite-plugin-pwa + Workbox | Service worker and caching |
| Charts | Recharts | Statistics visualization |
| Forms | React Hook Form + Zod | Form handling with validation |
| Testing | Vitest + Testing Library | Unit and integration testing |
- Node.js 18.x or higher
- pnpm (recommended) or npm
- Firebase project (free tier works)
- Google AI Studio API keys
- EmailJS account (for OTP emails)
# Clone the repository
git clone https://github.com/Ns81000/quietude.git
cd quietude
# Install dependencies
pnpm install
# Copy environment template
cp .env.example .envCreate a .env file with the following variables:
# Firebase Configuration
VITE_FIREBASE_API_KEY=your-firebase-api-key
VITE_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your-project-id
VITE_FIREBASE_STORAGE_BUCKET=your-project.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your-sender-id
VITE_FIREBASE_APP_ID=your-app-id
# Gemini API Keys (supports up to 6 for load balancing)
VITE_GEMINI_KEY_1=your-gemini-key-1
VITE_GEMINI_KEY_2=your-gemini-key-2
VITE_GEMINI_KEY_3=your-gemini-key-3
VITE_GEMINI_KEY_4=your-gemini-key-4
VITE_GEMINI_KEY_5=your-gemini-key-5
VITE_GEMINI_KEY_6=your-gemini-key-6
# EmailJS Configuration
VITE_EMAILJS_SERVICE_ID=your-service-id
VITE_EMAILJS_TEMPLATE_ID=your-template-id
VITE_EMAILJS_PUBLIC_KEY=your-public-key
# Security
VITE_OTP_SALT=your-random-salt-string# Start development server
pnpm dev
# Run tests
pnpm test
# Build for production
pnpm build
# Preview production build
pnpm previewDetailed documentation for each system component:
| Document | Description |
|---|---|
| Architecture Overview | System design, component relationships, data flow |
| Gemini AI Mechanism | Key pool management, prompts, parsers, caching |
| Theme System | Time-based themes, mood overrides, CSS variables |
| Quiz Mechanism | Learning phases, question types, answer matching |
| State Management | Zustand stores, persistence, selectors |
| Authentication | OTP flow, session management, security |
| Sync Mechanism | Offline-first sync, queue processing, conflict resolution |
| PWA Features | Service worker, caching strategies, offline storage |
| Database Schema | Tables, relationships, RLS policies |
quietude/
βββ public/ # Static assets
β βββ robots.txt
β βββ site.webmanifest
βββ src/
β βββ components/ # React components
β β βββ auth/ # Authentication components
β β βββ dashboard/ # Dashboard widgets
β β βββ layout/ # Shell, navigation, theming
β β βββ learn/ # Study plan, topic roadmap
β β βββ notes/ # Note cards, viewer
β β βββ quiz/ # Quiz components
β β βββ stats/ # Charts, calendar, tables
β β βββ ui/ # shadcn/ui components
β β βββ upload/ # Drop zone, paste area
β βββ hooks/ # Custom React hooks
β βββ lib/ # Core utilities
β β βββ gemini/ # AI integration
β β βββ pwa/ # Service worker, offline
β β βββ firebase/ # Firestore client, sync
β βββ pages/ # Route pages
β βββ store/ # Zustand state stores
β βββ test/ # Test utilities
β βββ types/ # TypeScript definitions
βββ docs/ # Documentation
βββ package.json
Quietude implements a sophisticated state machine for the learning journey:
IDLE βββΆ UPLOADING βββΆ ANALYSING βββΆ TOPIC_MAP_READY
β
βΌ
TOPIC_COMPLETE βββ NOTES_READY βββ QUIZ_RESULT_FAIL
β β
β QUIZ_RESULT_PASS
β β
βΌ βΌ
DIG_DEEPER_ACTIVE NOTES_GENERATING
β β
ββββββββββββββββββββββββββββββββββββββ
β
βΌ
TOPIC_SELECTED βββΆ CONFIGURING βββΆ QUIZ_GENERATING
β
βΌ
QUIZ_ACTIVE
β
βΌ
QUIZ_SUBMITTING
Quietude implements production-grade API key rotation:
// Key Pool Features:
β’ Supports 1-6+ API keys
β’ Automatic rotation based on usage
β’ Instant failover on quota errors
β’ 24-hour cooldown for exhausted keys
β’ Smart retry with key switching
β’ Usage tracking per key
β’ Health monitoringWhen all keys are exhausted, the system gracefully falls back to demo mode with mock data.
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow TypeScript strict mode
- Use conventional commits
- Write tests for new features
- Update documentation as needed
This project is licensed under the MIT License β see the LICENSE file for details.