# theodinproject/javascript-exercises architecture

> Architecture diagram of the GitHub repository theodinproject/javascript-exercises, 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/theodinproject/javascript-exercises
- Repository: https://github.com/theodinproject/javascript-exercises

## Overview

This repository is a set of JavaScript practice exercises for The Odin Project. A learner opens an exercise, writes or completes its JavaScript, and can consult the accompanying example solution after attempting it. The exercises cover foundational syntax, arrays and loops, object operations, recursion, and archived string transformations. The tree also contains exercise-generation code, but the README frames learner practice—not generation—as the primary product. The graph groups exercise families; individual exercise wiring and test behavior are not mapped.

Main entry points: [`foundations/data_types_and_conditionals`](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/data_types_and_conditionals) (Types & Conditionals), [`foundations/loops_and_arrays`](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/loops_and_arrays) (Loops & Arrays), [`foundations/object_basics/01_calculator`](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/01_calculator) (Calculator), [`foundations/object_basics/02_palindromes`](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/02_palindromes) (Palindromes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_fundamentals["Foundations"]
  node_types["Types &amp; Conditionals"]
  node_loops["Loops &amp; Arrays"]
end

subgraph group_objects["Object Basics"]
  node_calculator["Calculator"]
  node_palindromes["Palindromes"]
  node_fibonacci["Fibonacci"]
  node_titles["Get Titles"]
  node_oldest["Find Oldest"]
end

subgraph group_recursion["Recursion"]
  node_factorial["Factorial"]
  node_contains["Contains"]
  node_total["Total Integers"]
  node_permutations["Permutations"]
  node_pascal["Pascal's Triangle"]
end

subgraph group_archived["Archived Exercises"]
  node_caesar["Caesar Cipher"]
  node_piglatin["Pig Latin"]
  node_snakecase["Snake Case"]
end

node_learner(("Learner"))

node_learner -->|"practices"| node_types
node_learner -->|"practices"| node_loops
node_learner -->|"practices"| node_calculator
node_learner -->|"practices"| node_palindromes
node_learner -->|"practices"| node_fibonacci
node_learner -->|"practices"| node_titles
node_learner -->|"practices"| node_oldest
node_learner -->|"practices"| node_factorial
node_learner -->|"practices"| node_contains
node_learner -->|"practices"| node_total
node_learner -->|"practices"| node_permutations
node_learner -->|"practices"| node_pascal
node_learner -->|"practices"| node_caesar
node_learner -->|"practices"| node_piglatin
node_learner -->|"practices"| node_snakecase

click node_types "https://github.com/theodinproject/javascript-exercises/tree/main/foundations/data_types_and_conditionals"
click node_loops "https://github.com/theodinproject/javascript-exercises/tree/main/foundations/loops_and_arrays"
click node_calculator "https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/01_calculator"
click node_palindromes "https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/02_palindromes"
click node_fibonacci "https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/03_fibonacci"
click node_titles "https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/04_getTheTitles"
click node_oldest "https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/05_findTheOldest"
click node_factorial "https://github.com/theodinproject/javascript-exercises/tree/main/computer_science/recursion/1_factorial"
click node_contains "https://github.com/theodinproject/javascript-exercises/tree/main/computer_science/recursion/2_contains"
click node_total "https://github.com/theodinproject/javascript-exercises/tree/main/computer_science/recursion/3_totalIntegers"
click node_permutations "https://github.com/theodinproject/javascript-exercises/tree/main/computer_science/recursion/4_permutations"
click node_pascal "https://github.com/theodinproject/javascript-exercises/tree/main/computer_science/recursion/5_pascal"
click node_caesar "https://github.com/theodinproject/javascript-exercises/tree/main/archive/archived_caesar"
click node_piglatin "https://github.com/theodinproject/javascript-exercises/tree/main/archive/archived_pigLatin"
click node_snakecase "https://github.com/theodinproject/javascript-exercises/tree/main/archive/archived_snakeCase"

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_types,node_loops toneBlue
class node_calculator,node_palindromes,node_fibonacci,node_titles,node_oldest toneAmber
class node_factorial,node_contains,node_total,node_permutations,node_pascal toneMint
class node_caesar,node_piglatin,node_snakecase toneRose
class node_learner toneIndigo
```

## Components

### Foundations

- [Types & Conditionals](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/data_types_and_conditionals): `foundations/data_types_and_conditionals`
- [Loops & Arrays](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/loops_and_arrays): `foundations/loops_and_arrays`

### Object Basics

- [Calculator](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/01_calculator): `foundations/object_basics/01_calculator`
- [Palindromes](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/02_palindromes): `foundations/object_basics/02_palindromes`
- [Fibonacci](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/03_fibonacci): `foundations/object_basics/03_fibonacci`
- [Get Titles](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/04_getTheTitles): `foundations/object_basics/04_getTheTitles`
- [Find Oldest](https://github.com/theodinproject/javascript-exercises/tree/main/foundations/object_basics/05_findTheOldest): `foundations/object_basics/05_findTheOldest`

### Recursion

- [Factorial](https://github.com/theodinproject/javascript-exercises/tree/main/computer_science/recursion/1_factorial): `computer_science/recursion/1_factorial`
- [Contains](https://github.com/theodinproject/javascript-exercises/tree/main/computer_science/recursion/2_contains): `computer_science/recursion/2_contains`
- [Total Integers](https://github.com/theodinproject/javascript-exercises/tree/main/computer_science/recursion/3_totalIntegers): `computer_science/recursion/3_totalIntegers`
- [Permutations](https://github.com/theodinproject/javascript-exercises/tree/main/computer_science/recursion/4_permutations): `computer_science/recursion/4_permutations`
- [Pascal's Triangle](https://github.com/theodinproject/javascript-exercises/tree/main/computer_science/recursion/5_pascal): `computer_science/recursion/5_pascal`

### Archived Exercises

- [Caesar Cipher](https://github.com/theodinproject/javascript-exercises/tree/main/archive/archived_caesar): `archive/archived_caesar`
- [Pig Latin](https://github.com/theodinproject/javascript-exercises/tree/main/archive/archived_pigLatin): `archive/archived_pigLatin`
- [Snake Case](https://github.com/theodinproject/javascript-exercises/tree/main/archive/archived_snakeCase): `archive/archived_snakeCase`

### Other components

- **Learner**

## Connections

- Learner → Types & Conditionals: practices
- Learner → Loops & Arrays: practices
- Learner → Calculator: practices
- Learner → Palindromes: practices
- Learner → Fibonacci: practices
- Learner → Get Titles: practices
- Learner → Find Oldest: practices
- Learner → Factorial: practices
- Learner → Contains: practices
- Learner → Total Integers: practices
- Learner → Permutations: practices
- Learner → Pascal's Triangle: practices
- Learner → Caesar Cipher: practices
- Learner → Pig Latin: practices
- Learner → Snake Case: practices
