# mehedi-hasan-raju/langauge-learning-website architecture

> Architecture diagram of the GitHub repository mehedi-hasan-raju/langauge-learning-website, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mehedi-hasan-raju/langauge-learning-website
- Repository: https://github.com/mehedi-hasan-raju/langauge-learning-website

## Overview

This is a German-learning backend API. Clients call the mounted HTTP routes; feature controllers handle requests and delegate domain operations to services, with authentication and shared infrastructure supporting those operations. The product spans structured lessons and exercises, user progress, subscriptions, and supporting content such as Ausbildung, visa checklists, and blogs. The README is empty, and many source excerpts are incomplete or unavailable, so the graph preserves documented-by-tree capabilities while omitting unverified internal links.

Main entry points: [`src/modules/learning/controller`](https://github.com/mehedi-hasan-raju/langauge-learning-website/tree/main/src/modules/learning/controller) (Learning controllers), [`src/server.ts`](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/server.ts) (HTTP server), [`src/modules/auth/auth.service.ts`](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/auth/auth.service.ts) (Authentication), [`src/modules/auth/auth.routes.ts`](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/auth/auth.routes.ts) (Auth routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and identity"]
  node_server["HTTP server<br/>[server.ts]"]
  node_authroutes["Auth routes<br/>[auth.routes.ts]"]
  node_authcontroller["Auth controller<br/>[auth.controller.ts]"]
  node_authservice["Authentication<br/>[auth.service.ts]"]
  node_authmiddleware["JWT middleware<br/>[auth.middleware.ts]"]
end

subgraph group_learning["Learning experience"]
  node_learningroutes["Learning routes"]
  node_learningcontrollers["Learning controllers"]
  node_lessonstructure["Books and chapters"]
  node_grammar["Grammar practice"]
  node_listening["Listening practice"]
  node_speaking["Speaking practice"]
  node_writing["Writing practice<br/>[writing.service.ts]"]
  node_vocab["Vocabulary practice"]
  node_sentences["Sentence practice"]
end

subgraph group_accounts["User and access"]
  node_progress["Study and progress"]
  node_subscriptions["Subscriptions"]
end

subgraph group_content["Content and services"]
  node_ausbildung["Ausbildung resources"]
  node_blog["Blog publishing<br/>[blog.service.ts]"]
  node_visa["Visa checklist"]
end

subgraph group_infra["Shared infrastructure"]
  node_prisma[("PostgreSQL access<br/>[prisma.ts]")]
  node_email["Email delivery<br/>[email.ts]"]
  node_bruteforce["Login throttling"]
  node_cloudinary["Cloudinary uploads"]
end

node_client(("API client"))

node_client -->|"sends requests"| node_server
node_server -->|"mounts routes"| node_authroutes
node_server -->|"mounts routes"| node_learningroutes
node_authroutes -->|"routes requests"| node_authcontroller
node_authroutes -->|"applies guards"| node_authmiddleware
node_authservice -->|"queries users"| node_prisma
node_authservice -->|"sends codes"| node_email
node_authservice -->|"records login failures"| node_bruteforce
node_learningroutes -->|"dispatches requests"| node_learningcontrollers
node_learningcontrollers -->|"delegates chapter operations"| node_lessonstructure
node_learningcontrollers -->|"delegates questions"| node_grammar
node_learningcontrollers -->|"delegates exercises"| node_listening
node_learningcontrollers -->|"delegates practice"| node_speaking
node_learningcontrollers -->|"delegates practice"| node_writing
node_learningcontrollers -->|"delegates exercises"| node_vocab
node_learningcontrollers -->|"delegates exercises"| node_sentences
node_learningcontrollers -->|"checks identity"| node_authmiddleware
node_server -->|"mounts user routes"| node_progress
node_server -->|"mounts subscription routes"| node_subscriptions
node_server -->|"mounts resource routes"| node_ausbildung
node_server -->|"mounts blog routes"| node_blog
node_server -->|"mounts checklist routes"| node_visa
node_blog -->|"uses database"| node_prisma
node_ausbildung -->|"uses image uploads"| node_cloudinary
node_learningcontrollers -->|"uploads listening audio"| node_cloudinary

click node_server "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/server.ts"
click node_authroutes "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/auth/auth.routes.ts"
click node_authcontroller "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/auth/auth.controller.ts"
click node_authservice "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/auth/auth.service.ts"
click node_authmiddleware "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/middlewares/auth.middleware.ts"
click node_learningroutes "https://github.com/mehedi-hasan-raju/langauge-learning-website/tree/main/src/modules/learning/route"
click node_learningcontrollers "https://github.com/mehedi-hasan-raju/langauge-learning-website/tree/main/src/modules/learning/controller"
click node_lessonstructure "https://github.com/mehedi-hasan-raju/langauge-learning-website/tree/main/src/modules/learning/service"
click node_grammar "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/grammer/grammar-question.service.ts"
click node_listening "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/listening/listening.service.ts"
click node_speaking "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/speaking/speaking.service.ts"
click node_writing "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/writing/writing.service.ts"
click node_vocab "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/vocabulary/vocabulary.service.ts"
click node_sentences "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/sentence/sentence.service.ts"
click node_progress "https://github.com/mehedi-hasan-raju/langauge-learning-website/tree/main/src/modules/user/service"
click node_subscriptions "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/subscription/service/subscription.service.ts"
click node_ausbildung "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/ausbildung/service/ausbildung.service.ts"
click node_blog "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/blog/service/blog.service.ts"
click node_visa "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/visa-checklist/service/visa-checklist.service.ts"
click node_prisma "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/lib/prisma.ts"
click node_email "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/lib/email.ts"
click node_bruteforce "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/middlewares/bruteForce.middleware.ts"
click node_cloudinary "https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/lib/cloudinary-image.ts"

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_server,node_authroutes,node_authcontroller,node_authservice,node_authmiddleware,node_client toneBlue
class node_learningroutes,node_learningcontrollers,node_lessonstructure,node_grammar,node_listening,node_speaking,node_writing,node_vocab,node_sentences toneAmber
class node_progress,node_subscriptions toneMint
class node_ausbildung,node_blog,node_visa toneRose
class node_prisma,node_email,node_bruteforce,node_cloudinary toneIndigo
```

## Components

### API and identity

- [HTTP server](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/server.ts): `src/server.ts`
- [Auth routes](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/auth/auth.routes.ts): `src/modules/auth/auth.routes.ts`
- [Auth controller](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/auth/auth.controller.ts): `src/modules/auth/auth.controller.ts`
- [Authentication](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/auth/auth.service.ts): `src/modules/auth/auth.service.ts`
- [JWT middleware](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/middlewares/auth.middleware.ts): `src/middlewares/auth.middleware.ts`

### Learning experience

- [Learning routes](https://github.com/mehedi-hasan-raju/langauge-learning-website/tree/main/src/modules/learning/route): `src/modules/learning/route`
- [Learning controllers](https://github.com/mehedi-hasan-raju/langauge-learning-website/tree/main/src/modules/learning/controller): `src/modules/learning/controller`
- [Books and chapters](https://github.com/mehedi-hasan-raju/langauge-learning-website/tree/main/src/modules/learning/service): `src/modules/learning/service`
- [Grammar practice](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/grammer/grammar-question.service.ts): `src/modules/learning/service/grammer/grammar-question.service.ts`
- [Listening practice](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/listening/listening.service.ts): `src/modules/learning/service/listening/listening.service.ts`
- [Speaking practice](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/speaking/speaking.service.ts): `src/modules/learning/service/speaking/speaking.service.ts`
- [Writing practice](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/writing/writing.service.ts): `src/modules/learning/service/writing/writing.service.ts`
- [Vocabulary practice](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/vocabulary/vocabulary.service.ts): `src/modules/learning/service/vocabulary/vocabulary.service.ts`
- [Sentence practice](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/learning/service/sentence/sentence.service.ts): `src/modules/learning/service/sentence/sentence.service.ts`

### User and access

- [Study and progress](https://github.com/mehedi-hasan-raju/langauge-learning-website/tree/main/src/modules/user/service): `src/modules/user/service`
- [Subscriptions](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/subscription/service/subscription.service.ts): `src/modules/subscription/service/subscription.service.ts`

### Content and services

- [Ausbildung resources](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/ausbildung/service/ausbildung.service.ts): `src/modules/ausbildung/service/ausbildung.service.ts`
- [Blog publishing](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/blog/service/blog.service.ts): `src/modules/blog/service/blog.service.ts`
- [Visa checklist](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/modules/visa-checklist/service/visa-checklist.service.ts): `src/modules/visa-checklist/service/visa-checklist.service.ts`

### Shared infrastructure

- [PostgreSQL access](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/lib/prisma.ts): `src/lib/prisma.ts`
- [Email delivery](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/lib/email.ts): `src/lib/email.ts`
- [Login throttling](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/middlewares/bruteForce.middleware.ts): `src/middlewares/bruteForce.middleware.ts`
- [Cloudinary uploads](https://github.com/mehedi-hasan-raju/langauge-learning-website/blob/main/src/lib/cloudinary-image.ts): `src/lib/cloudinary-image.ts`

### Other components

- **API client**

## Connections

- API client → HTTP server: sends requests (evidence: `src/server.ts`)
- HTTP server → Auth routes: mounts routes (evidence: `src/server.ts`)
- HTTP server → Learning routes: mounts routes (evidence: `src/server.ts`)
- Auth routes → Auth controller: routes requests (evidence: `src/modules/auth/auth.routes.ts`)
- Auth routes → JWT middleware: applies guards (evidence: `src/modules/auth/auth.routes.ts`)
- Authentication → PostgreSQL access: queries users (evidence: `src/modules/auth/auth.service.ts`)
- Authentication → Email delivery: sends codes (evidence: `src/modules/auth/auth.service.ts`)
- Authentication → Login throttling: records login failures (evidence: `src/modules/auth/auth.service.ts`)
- Learning routes → Learning controllers: dispatches requests (evidence: `src/modules/learning/route/chapter.route.ts`)
- Learning controllers → Books and chapters: delegates chapter operations (evidence: `src/modules/learning/controller/chapter.controller.ts`)
- Learning controllers → Grammar practice: delegates questions (evidence: `src/modules/learning/controller/grammer/grammar-question.controller.ts`)
- Learning controllers → Listening practice: delegates exercises (evidence: `src/modules/learning/controller/listening/listening.controller.ts`)
- Learning controllers → Speaking practice: delegates practice (evidence: `src/modules/learning/controller/speaking/speaking.controller.ts`)
- Learning controllers → Writing practice: delegates practice (evidence: `src/modules/learning/controller/writing/writing.controller.ts`)
- Learning controllers → Vocabulary practice: delegates exercises (evidence: `src/modules/learning/controller/vocabulary/vocabulary.controller.ts`)
- Learning controllers → Sentence practice: delegates exercises (evidence: `src/modules/learning/controller/sentence/sentence.controller.ts`)
- Learning controllers → JWT middleware: checks identity (evidence: `src/modules/learning/controller/chapter.controller.ts`)
- HTTP server → Study and progress: mounts user routes (evidence: `src/server.ts`)
- HTTP server → Subscriptions: mounts subscription routes (evidence: `src/server.ts`)
- HTTP server → Ausbildung resources: mounts resource routes (evidence: `src/server.ts`)
- HTTP server → Blog publishing: mounts blog routes (evidence: `src/server.ts`)
- HTTP server → Visa checklist: mounts checklist routes (evidence: `src/server.ts`)
- Blog publishing → PostgreSQL access: uses database (evidence: `src/modules/blog/service/blog.service.ts`)
- Ausbildung resources → Cloudinary uploads: uses image uploads (evidence: `src/modules/ausbildung/controller/ausbildung.controller.ts`)
- Learning controllers → Cloudinary uploads: uploads listening audio (evidence: `src/modules/learning/controller/listening/listening.controller.ts`)
