# shauryadusht/oppia architecture

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

- Interactive diagram: https://gitdiagram.com/shauryadusht/oppia
- Repository: https://github.com/shauryadusht/oppia

## Overview

Oppia is an online learning platform centered on interactive, tutor-like explorations. A learner enters through the web app, plays an exploration, submits answers, and receives feedback as the exploration advances; authors create and edit activities, while contributors can review and translate content. The tree shows separate controllers, domain services, and persistent models, alongside curriculum, question, and certificate features. The README establishes the product workflow and technology stack, but sampled source is limited, so some subsystem connections are omitted rather than asserted.

Main entry points: [`core/templates/pages/oppia-root/routing/app.routing.module.ts`](https://github.com/shauryadusht/oppia/blob/develop/core/templates/pages/oppia-root/routing/app.routing.module.ts) (App routing), [`core/templates/pages/exploration-player-page/services/exploration-engine.service.ts`](https://github.com/shauryadusht/oppia/blob/develop/core/templates/pages/exploration-player-page/services/exploration-engine.service.ts) (Exploration player), [`core/controllers/editor.py`](https://github.com/shauryadusht/oppia/blob/develop/core/controllers/editor.py) (Activity editor), [`core/domain/exp_services.py`](https://github.com/shauryadusht/oppia/blob/develop/core/domain/exp_services.py) (Exploration services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_router["App routing"]
end

subgraph group_learning["Learning runtime"]
  node_player["Exploration player"]
  node_reader["Exploration endpoint<br/>[reader.py]"]
  node_question_player["Question player"]
  node_question_endpoint["Question endpoint<br/>[questions_list.py]"]
  node_certificate["Certificate assessment"]
end

subgraph group_content["Content authoring"]
  node_editor["Activity editor<br/>[editor.py]"]
  node_topics["Topic curriculum<br/>[topic_services.py]"]
  node_stories["Story curriculum<br/>[story_services.py]"]
end

subgraph group_contribution["Contributions and review"]
  node_contributors["Contributor dashboard"]
  node_contribution_service["Contribution review"]
  node_suggestions["Suggestions"]
end

subgraph group_platform["Domain and persistence"]
  node_exploration_domain["Exploration services<br/>[exp_services.py]"]
  node_exploration_store[("Exploration records<br/>[gae_models.py]")]
  node_question_domain["Question services"]
  node_question_store[("Question records<br/>[gae_models.py]")]
  node_rights["Activity rights"]
  node_certificate_domain["Assessment services"]
end

node_learner(("Learner"))

node_learner -->|"opens web app"| node_router
node_router -->|"routes to"| node_player
node_player -->|"requests exploration"| node_reader
node_reader -->|"uses services"| node_exploration_domain
node_exploration_domain -->|"persists data"| node_exploration_store
node_player -.->|"starts questions"| node_question_player
node_question_player -->|"fetches questions"| node_question_endpoint
node_question_endpoint -->|"uses services"| node_question_domain
node_question_domain -->|"persists data"| node_question_store
node_router -->|"routes to"| node_editor
node_editor -->|"manages activities"| node_exploration_domain
node_editor -->|"manages access"| node_rights
node_router -->|"routes to curriculum"| node_topics
node_topics -->|"organizes stories"| node_stories
node_router -->|"routes to"| node_contributors
node_contributors -->|"supports review"| node_contribution_service
node_contribution_service -->|"reviews suggestions"| node_suggestions
node_router -->|"routes to assessment"| node_certificate
node_certificate -->|"uses services"| node_certificate_domain

click node_router "https://github.com/shauryadusht/oppia/blob/develop/core/templates/pages/oppia-root/routing/app.routing.module.ts"
click node_player "https://github.com/shauryadusht/oppia/blob/develop/core/templates/pages/exploration-player-page/services/exploration-engine.service.ts"
click node_reader "https://github.com/shauryadusht/oppia/blob/develop/core/controllers/reader.py"
click node_exploration_domain "https://github.com/shauryadusht/oppia/blob/develop/core/domain/exp_services.py"
click node_exploration_store "https://github.com/shauryadusht/oppia/blob/develop/core/storage/exploration/gae_models.py"
click node_question_player "https://github.com/shauryadusht/oppia/blob/develop/core/templates/pages/exploration-player-page/services/question-player-engine.service.ts"
click node_question_endpoint "https://github.com/shauryadusht/oppia/blob/develop/core/controllers/questions_list.py"
click node_question_domain "https://github.com/shauryadusht/oppia/blob/develop/core/domain/question_services.py"
click node_question_store "https://github.com/shauryadusht/oppia/blob/develop/core/storage/question/gae_models.py"
click node_editor "https://github.com/shauryadusht/oppia/blob/develop/core/controllers/editor.py"
click node_rights "https://github.com/shauryadusht/oppia/blob/develop/core/domain/exp_rights_domain.py"
click node_topics "https://github.com/shauryadusht/oppia/blob/develop/core/domain/topic_services.py"
click node_stories "https://github.com/shauryadusht/oppia/blob/develop/core/domain/story_services.py"
click node_contributors "https://github.com/shauryadusht/oppia/blob/develop/core/controllers/contributor_dashboard.py"
click node_contribution_service "https://github.com/shauryadusht/oppia/blob/develop/core/templates/pages/contributor-dashboard-page/services/contribution-and-review.service.ts"
click node_suggestions "https://github.com/shauryadusht/oppia/blob/develop/core/domain/suggestion_services.py"
click node_certificate "https://github.com/shauryadusht/oppia/blob/develop/core/controllers/certificate_assessment.py"
click node_certificate_domain "https://github.com/shauryadusht/oppia/blob/develop/core/domain/certificate_assessment_services.py"

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_router toneBlue
class node_player,node_reader,node_question_player,node_question_endpoint,node_certificate toneAmber
class node_editor,node_topics,node_stories toneMint
class node_contributors,node_contribution_service,node_suggestions toneRose
class node_exploration_domain,node_exploration_store,node_question_domain,node_question_store,node_rights,node_certificate_domain,node_learner toneIndigo
```

## Components

### Web experience

- [App routing](https://github.com/shauryadusht/oppia/blob/develop/core/templates/pages/oppia-root/routing/app.routing.module.ts): `core/templates/pages/oppia-root/routing/app.routing.module.ts`

### Learning runtime

- [Exploration player](https://github.com/shauryadusht/oppia/blob/develop/core/templates/pages/exploration-player-page/services/exploration-engine.service.ts): `core/templates/pages/exploration-player-page/services/exploration-engine.service.ts`
- [Exploration endpoint](https://github.com/shauryadusht/oppia/blob/develop/core/controllers/reader.py): `core/controllers/reader.py`
- [Question player](https://github.com/shauryadusht/oppia/blob/develop/core/templates/pages/exploration-player-page/services/question-player-engine.service.ts): `core/templates/pages/exploration-player-page/services/question-player-engine.service.ts`
- [Question endpoint](https://github.com/shauryadusht/oppia/blob/develop/core/controllers/questions_list.py): `core/controllers/questions_list.py`
- [Certificate assessment](https://github.com/shauryadusht/oppia/blob/develop/core/controllers/certificate_assessment.py): `core/controllers/certificate_assessment.py`

### Content authoring

- [Activity editor](https://github.com/shauryadusht/oppia/blob/develop/core/controllers/editor.py): `core/controllers/editor.py`
- [Topic curriculum](https://github.com/shauryadusht/oppia/blob/develop/core/domain/topic_services.py): `core/domain/topic_services.py`
- [Story curriculum](https://github.com/shauryadusht/oppia/blob/develop/core/domain/story_services.py): `core/domain/story_services.py`

### Contributions and review

- [Contributor dashboard](https://github.com/shauryadusht/oppia/blob/develop/core/controllers/contributor_dashboard.py): `core/controllers/contributor_dashboard.py`
- [Contribution review](https://github.com/shauryadusht/oppia/blob/develop/core/templates/pages/contributor-dashboard-page/services/contribution-and-review.service.ts): `core/templates/pages/contributor-dashboard-page/services/contribution-and-review.service.ts`
- [Suggestions](https://github.com/shauryadusht/oppia/blob/develop/core/domain/suggestion_services.py): `core/domain/suggestion_services.py`

### Domain and persistence

- [Exploration services](https://github.com/shauryadusht/oppia/blob/develop/core/domain/exp_services.py): `core/domain/exp_services.py`
- [Exploration records](https://github.com/shauryadusht/oppia/blob/develop/core/storage/exploration/gae_models.py): `core/storage/exploration/gae_models.py`
- [Question services](https://github.com/shauryadusht/oppia/blob/develop/core/domain/question_services.py): `core/domain/question_services.py`
- [Question records](https://github.com/shauryadusht/oppia/blob/develop/core/storage/question/gae_models.py): `core/storage/question/gae_models.py`
- [Activity rights](https://github.com/shauryadusht/oppia/blob/develop/core/domain/exp_rights_domain.py): `core/domain/exp_rights_domain.py`
- [Assessment services](https://github.com/shauryadusht/oppia/blob/develop/core/domain/certificate_assessment_services.py): `core/domain/certificate_assessment_services.py`

### Other components

- **Learner**

## Connections

- Learner → App routing: opens web app
- App routing → Exploration player: routes to
- Exploration player → Exploration endpoint: requests exploration
- Exploration endpoint → Exploration services: uses services
- Exploration services → Exploration records: persists data
- Exploration player → Question player: starts questions
- Question player → Question endpoint: fetches questions
- Question endpoint → Question services: uses services
- Question services → Question records: persists data
- App routing → Activity editor: routes to
- Activity editor → Exploration services: manages activities
- Activity editor → Activity rights: manages access
- App routing → Topic curriculum: routes to curriculum
- Topic curriculum → Story curriculum: organizes stories
- App routing → Contributor dashboard: routes to
- Contributor dashboard → Contribution review: supports review
- Contribution review → Suggestions: reviews suggestions
- App routing → Certificate assessment: routes to assessment
- Certificate assessment → Assessment services: uses services
