# jiteshck/learnkeep architecture

> Architecture diagram of the GitHub repository jiteshck/learnkeep, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jiteshck/learnkeep
- Repository: https://github.com/jiteshck/learnkeep

## Overview

LearnKeep is an Android learning tracker with a Node.js cloud API. The main user workflow is to capture and organize topics with notes, tags, confidence, links, and attachments; then review topics, practice with generated quizzes, and track study progress. Room provides local topic and quiz-result storage, with reminders scheduled from confidence and optional authenticated cloud sync. The README documents broader UI capabilities than the sampled source shows, so unsampled app wiring is represented cautiously; backend request handling and its external dependencies are grounded in the excerpts.

Main entry points: [`learnkeep-server/server.js`](https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/server.js) (Backend API), [`app/src/main/java/com/example/learnkeep/KnowledgeDao.java`](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/KnowledgeDao.java) (Topic records), [`app/src/main/java/com/example/learnkeep/TopicDetailsActivity.java`](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/TopicDetailsActivity.java) (Topic details), [`app/src/main/java/com/example/learnkeep/MainActivity.java`](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/MainActivity.java) (App navigation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android["Android app"]
  node_main["App navigation<br/>[MainActivity.java]"]
end

subgraph group_learning["Learning workflow"]
  node_topics["Topic library"]
  node_capture["Topic capture"]
  node_details["Topic details"]
  node_attachments["Attachment handling"]
  node_preview["Image preview"]
  node_practice["Practice topics"]
  node_quiz["Quiz session"]
  node_results["Quiz results"]
  node_stats["Study statistics<br/>[StatsFragment.java]"]
  node_reminders["Review reminders"]
  node_worker["Reminder worker"]
  node_chat["AI study chat"]
end

subgraph group_cloud["Cloud services"]
  node_geminiservice["AI client<br/>[GeminiService.java]"]
  node_sync["Cloud sync<br/>[SyncManager.java]"]
  node_api["API client<br/>[ApiClient.java]"]
  node_server["Backend API<br/>[server.js]"]
  node_auth["JWT middleware<br/>[auth.js]"]
end

subgraph group_state["Persistence"]
  node_localdb[("Room database<br/>[AppDatabase.java]")]
  node_knowledge[("Topic records<br/>[KnowledgeDao.java]")]
  node_mcqrecords[("Quiz records<br/>[McqResultDao.java]")]
  node_userstore[("User model<br/>[User.js]")]
  node_knowledgestore[("Cloud topics<br/>[Knowledge.js]")]
  node_resultstore[("Cloud quiz results<br/>[McqResult.js]")]
end

node_learner(("Learner"))
node_mongodb[("MongoDB")]
node_gemini["Gemini API"]
node_email["Email provider"]
node_youtube["YouTube"]

node_learner -->|"opens app"| node_main
node_main -->|"navigates"| node_topics
node_topics -->|"adds topic"| node_capture
node_topics -->|"opens topic"| node_details
node_details -->|"manages files"| node_attachments
node_details -->|"previews image"| node_preview
node_details -.->|"opens links"| node_youtube
node_main -->|"opens practice"| node_practice
node_practice -->|"starts quiz"| node_quiz
node_quiz -->|"shows score"| node_results
node_main -->|"opens insights"| node_stats
node_capture -->|"writes topics"| node_knowledge
node_topics -->|"reads topics"| node_knowledge
node_details -->|"updates topics"| node_knowledge
node_practice -->|"reads topics"| node_knowledge
node_quiz -->|"saves results"| node_mcqrecords
node_results -->|"reads results"| node_mcqrecords
node_stats -->|"reads study data"| node_knowledge
node_stats -->|"reads quiz history"| node_mcqrecords
node_capture -->|"schedules review"| node_reminders
node_reminders -->|"enqueues work"| node_worker
node_chat -->|"sends prompts"| node_geminiservice
node_geminiservice -->|"calls API"| node_api
node_sync -->|"reads topics"| node_knowledge
node_sync -->|"reads results"| node_mcqrecords
node_sync -->|"syncs data"| node_api
node_api -->|"sends requests"| node_server
node_server -->|"checks protected routes"| node_auth
node_server -.->|"generates content"| node_gemini
node_server -->|"reads and writes"| node_userstore
node_server -->|"syncs topics"| node_knowledgestore
node_server -->|"syncs results"| node_resultstore
node_userstore -->|"persists users"| node_mongodb
node_knowledgestore -->|"persists topics"| node_mongodb
node_resultstore -->|"persists results"| node_mongodb
node_server -.->|"sends mail"| node_email

click node_main "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/MainActivity.java"
click node_topics "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/TopicsFragment.java"
click node_capture "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/AddKnowledgeActivity.java"
click node_details "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/TopicDetailsActivity.java"
click node_attachments "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/AttachmentAdapter.java"
click node_preview "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/FullscreenImageActivity.java"
click node_practice "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/PracticeFragment.java"
click node_quiz "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/McqTestActivity.java"
click node_results "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/McqResultActivity.java"
click node_stats "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/StatsFragment.java"
click node_reminders "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/ReminderScheduler.java"
click node_worker "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/ReminderWorker.java"
click node_chat "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/AiChatBottomSheet.java"
click node_geminiservice "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/GeminiService.java"
click node_localdb "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/AppDatabase.java"
click node_knowledge "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/KnowledgeDao.java"
click node_mcqrecords "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/McqResultDao.java"
click node_sync "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/SyncManager.java"
click node_api "https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/api/ApiClient.java"
click node_server "https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/server.js"
click node_auth "https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/auth.js"
click node_userstore "https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/models/User.js"
click node_knowledgestore "https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/models/Knowledge.js"
click node_resultstore "https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/models/McqResult.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main toneBlue
class node_topics,node_capture,node_details,node_attachments,node_preview,node_practice,node_quiz,node_results,node_stats,node_reminders,node_worker,node_chat,node_mongodb toneAmber
class node_geminiservice,node_sync,node_api,node_server,node_auth,node_gemini toneMint
class node_localdb,node_knowledge,node_mcqrecords,node_userstore,node_knowledgestore,node_resultstore toneRose
class node_learner,node_email,node_youtube toneIndigo
```

## Components

### Android app

- [App navigation](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/MainActivity.java): `app/src/main/java/com/example/learnkeep/MainActivity.java`

### Learning workflow

- [Topic library](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/TopicsFragment.java): `app/src/main/java/com/example/learnkeep/TopicsFragment.java`
- [Topic capture](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/AddKnowledgeActivity.java): `app/src/main/java/com/example/learnkeep/AddKnowledgeActivity.java`
- [Topic details](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/TopicDetailsActivity.java): `app/src/main/java/com/example/learnkeep/TopicDetailsActivity.java`
- [Attachment handling](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/AttachmentAdapter.java): `app/src/main/java/com/example/learnkeep/AttachmentAdapter.java`
- [Image preview](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/FullscreenImageActivity.java): `app/src/main/java/com/example/learnkeep/FullscreenImageActivity.java`
- [Practice topics](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/PracticeFragment.java): `app/src/main/java/com/example/learnkeep/PracticeFragment.java`
- [Quiz session](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/McqTestActivity.java): `app/src/main/java/com/example/learnkeep/McqTestActivity.java`
- [Quiz results](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/McqResultActivity.java): `app/src/main/java/com/example/learnkeep/McqResultActivity.java`
- [Study statistics](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/StatsFragment.java): `app/src/main/java/com/example/learnkeep/StatsFragment.java`
- [Review reminders](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/ReminderScheduler.java): `app/src/main/java/com/example/learnkeep/ReminderScheduler.java`
- [Reminder worker](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/ReminderWorker.java): `app/src/main/java/com/example/learnkeep/ReminderWorker.java`
- [AI study chat](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/AiChatBottomSheet.java): `app/src/main/java/com/example/learnkeep/AiChatBottomSheet.java`

### Cloud services

- [AI client](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/GeminiService.java): `app/src/main/java/com/example/learnkeep/GeminiService.java`
- [Cloud sync](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/SyncManager.java): `app/src/main/java/com/example/learnkeep/SyncManager.java`
- [API client](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/api/ApiClient.java): `app/src/main/java/com/example/learnkeep/api/ApiClient.java`
- [Backend API](https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/server.js): `learnkeep-server/server.js`
- [JWT middleware](https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/auth.js): `learnkeep-server/auth.js`

### Persistence

- [Room database](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/AppDatabase.java): `app/src/main/java/com/example/learnkeep/AppDatabase.java`
- [Topic records](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/KnowledgeDao.java): `app/src/main/java/com/example/learnkeep/KnowledgeDao.java`
- [Quiz records](https://github.com/jiteshck/learnkeep/blob/main/app/src/main/java/com/example/learnkeep/McqResultDao.java): `app/src/main/java/com/example/learnkeep/McqResultDao.java`
- [User model](https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/models/User.js): `learnkeep-server/models/User.js`
- [Cloud topics](https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/models/Knowledge.js): `learnkeep-server/models/Knowledge.js`
- [Cloud quiz results](https://github.com/jiteshck/learnkeep/blob/main/learnkeep-server/models/McqResult.js): `learnkeep-server/models/McqResult.js`

### Other components

- **Learner**
- **MongoDB**
- **Gemini API**
- **Email provider**
- **YouTube**

## Connections

- Learner → App navigation: opens app
- App navigation → Topic library: navigates
- Topic library → Topic capture: adds topic
- Topic library → Topic details: opens topic
- Topic details → Attachment handling: manages files
- Topic details → Image preview: previews image
- Topic details → YouTube: opens links
- App navigation → Practice topics: opens practice
- Practice topics → Quiz session: starts quiz
- Quiz session → Quiz results: shows score
- App navigation → Study statistics: opens insights
- Topic capture → Topic records: writes topics
- Topic library → Topic records: reads topics
- Topic details → Topic records: updates topics
- Practice topics → Topic records: reads topics
- Quiz session → Quiz records: saves results
- Quiz results → Quiz records: reads results
- Study statistics → Topic records: reads study data
- Study statistics → Quiz records: reads quiz history
- Topic capture → Review reminders: schedules review
- Review reminders → Reminder worker: enqueues work
- AI study chat → AI client: sends prompts
- AI client → API client: calls API
- Cloud sync → Topic records: reads topics
- Cloud sync → Quiz records: reads results
- Cloud sync → API client: syncs data
- API client → Backend API: sends requests
- Backend API → JWT middleware: checks protected routes
- Backend API → Gemini API: generates content
- Backend API → User model: reads and writes
- Backend API → Cloud topics: syncs topics
- Backend API → Cloud quiz results: syncs results
- User model → MongoDB: persists users
- Cloud topics → MongoDB: persists topics
- Cloud quiz results → MongoDB: persists results
- Backend API → Email provider: sends mail
