# jisan-p/portfolio architecture

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

- Interactive diagram: https://gitdiagram.com/jisan-p/portfolio
- Repository: https://github.com/jisan-p/portfolio

## Overview

This is a terminal-inspired portfolio with two ways to view its pages: browsers receive static HTML, while terminal clients receive ANSI text selected by a Cloudflare Worker. The documented runtime path runs from a visitor request through Cloudflare routing to static assets; the documented generation path uses Bash page generators and Make to produce those assets. Page files and generator names are visible in the tree, but their internal calls were not sampled, so those links are not inferred.

Main entry points: [`website/Makefile`](https://github.com/jisan-p/portfolio/blob/main/website/Makefile) (Build orchestration), [`website/static`](https://github.com/jisan-p/portfolio/tree/main/website/static) (Generated site assets), [`website/make-index`](https://github.com/jisan-p/portfolio/blob/main/website/make-index) (Home generator), [`website/make-about`](https://github.com/jisan-p/portfolio/blob/main/website/make-about) (About generator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_generation["Page generation"]
  node_makefile["Build orchestration"]
  node_home_gen["Home generator"]
  node_about_gen["About generator"]
  node_projects_gen["Projects generator"]
  node_academics_gen["Academics generator"]
  node_contact_gen["Contact generator"]
  node_static_assets["Generated site assets"]
end

subgraph group_browser["Browser experience"]
  node_home_page["Home page<br/>[index.html]"]
  node_about_page["About page<br/>[about.html]"]
  node_projects_page["Projects page<br/>[projects.html]"]
  node_academics_page["Academics page<br/>[academics.html]"]
  node_contact_page["Contact page<br/>[contact.html]"]
  node_terminal_ui["Typing display<br/>[terminal.js]"]
end

subgraph group_terminal["Terminal delivery"]
  node_worker["Request router<br/>[_worker.js]"]
end

node_browser_visitor(("Browser visitor"))
node_terminal_visitor(("Terminal visitor"))
node_cloudflare["Cloudflare Pages"]

node_makefile -->|"builds pages"| node_home_gen
node_makefile -->|"builds pages"| node_about_gen
node_makefile -->|"builds pages"| node_projects_gen
node_makefile -->|"builds pages"| node_academics_gen
node_makefile -->|"builds pages"| node_contact_gen
node_home_gen -->|"generates assets"| node_static_assets
node_about_gen -->|"generates assets"| node_static_assets
node_projects_gen -->|"generates assets"| node_static_assets
node_academics_gen -->|"generates assets"| node_static_assets
node_contact_gen -->|"generates assets"| node_static_assets
node_browser_visitor -->|"requests pages"| node_cloudflare
node_terminal_visitor -->|"requests pages"| node_cloudflare
node_cloudflare -->|"dispatches request"| node_worker
node_worker -->|"fetches assets"| node_static_assets
node_cloudflare -->|"serves browser HTML"| node_home_page
node_cloudflare -->|"serves browser HTML"| node_about_page
node_cloudflare -->|"serves browser HTML"| node_projects_page
node_cloudflare -->|"serves browser HTML"| node_academics_page
node_cloudflare -->|"serves browser HTML"| node_contact_page

click node_makefile "https://github.com/jisan-p/portfolio/blob/main/website/Makefile"
click node_home_gen "https://github.com/jisan-p/portfolio/blob/main/website/make-index"
click node_about_gen "https://github.com/jisan-p/portfolio/blob/main/website/make-about"
click node_projects_gen "https://github.com/jisan-p/portfolio/blob/main/website/make-page-projects"
click node_academics_gen "https://github.com/jisan-p/portfolio/blob/main/website/make-page-academics"
click node_contact_gen "https://github.com/jisan-p/portfolio/blob/main/website/make-page-contact"
click node_static_assets "https://github.com/jisan-p/portfolio/tree/main/website/static"
click node_worker "https://github.com/jisan-p/portfolio/blob/main/website/static/_worker.js"
click node_home_page "https://github.com/jisan-p/portfolio/blob/main/website/static/index.html"
click node_about_page "https://github.com/jisan-p/portfolio/blob/main/website/static/about.html"
click node_projects_page "https://github.com/jisan-p/portfolio/blob/main/website/static/projects.html"
click node_academics_page "https://github.com/jisan-p/portfolio/blob/main/website/static/academics.html"
click node_contact_page "https://github.com/jisan-p/portfolio/blob/main/website/static/contact.html"
click node_terminal_ui "https://github.com/jisan-p/portfolio/blob/main/website/static/terminal.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_makefile,node_home_gen,node_about_gen,node_projects_gen,node_academics_gen,node_contact_gen,node_static_assets,node_browser_visitor toneBlue
class node_home_page,node_about_page,node_projects_page,node_academics_page,node_contact_page,node_terminal_ui toneAmber
class node_worker toneMint
class node_terminal_visitor,node_cloudflare toneIndigo
```

## Components

### Page generation

- [Build orchestration](https://github.com/jisan-p/portfolio/blob/main/website/Makefile): `website/Makefile`
- [Home generator](https://github.com/jisan-p/portfolio/blob/main/website/make-index): `website/make-index`
- [About generator](https://github.com/jisan-p/portfolio/blob/main/website/make-about): `website/make-about`
- [Projects generator](https://github.com/jisan-p/portfolio/blob/main/website/make-page-projects): `website/make-page-projects`
- [Academics generator](https://github.com/jisan-p/portfolio/blob/main/website/make-page-academics): `website/make-page-academics`
- [Contact generator](https://github.com/jisan-p/portfolio/blob/main/website/make-page-contact): `website/make-page-contact`
- [Generated site assets](https://github.com/jisan-p/portfolio/tree/main/website/static): `website/static`

### Browser experience

- [Home page](https://github.com/jisan-p/portfolio/blob/main/website/static/index.html): `website/static/index.html`
- [About page](https://github.com/jisan-p/portfolio/blob/main/website/static/about.html): `website/static/about.html`
- [Projects page](https://github.com/jisan-p/portfolio/blob/main/website/static/projects.html): `website/static/projects.html`
- [Academics page](https://github.com/jisan-p/portfolio/blob/main/website/static/academics.html): `website/static/academics.html`
- [Contact page](https://github.com/jisan-p/portfolio/blob/main/website/static/contact.html): `website/static/contact.html`
- [Typing display](https://github.com/jisan-p/portfolio/blob/main/website/static/terminal.js): `website/static/terminal.js`

### Terminal delivery

- [Request router](https://github.com/jisan-p/portfolio/blob/main/website/static/_worker.js): `website/static/_worker.js`

### Other components

- **Browser visitor**
- **Terminal visitor**
- **Cloudflare Pages**

## Connections

- Build orchestration → Home generator: builds pages
- Build orchestration → About generator: builds pages
- Build orchestration → Projects generator: builds pages
- Build orchestration → Academics generator: builds pages
- Build orchestration → Contact generator: builds pages
- Home generator → Generated site assets: generates assets
- About generator → Generated site assets: generates assets
- Projects generator → Generated site assets: generates assets
- Academics generator → Generated site assets: generates assets
- Contact generator → Generated site assets: generates assets
- Browser visitor → Cloudflare Pages: requests pages
- Terminal visitor → Cloudflare Pages: requests pages
- Cloudflare Pages → Request router: dispatches request
- Request router → Generated site assets: fetches assets
- Cloudflare Pages → Home page: serves browser HTML
- Cloudflare Pages → About page: serves browser HTML
- Cloudflare Pages → Projects page: serves browser HTML
- Cloudflare Pages → Academics page: serves browser HTML
- Cloudflare Pages → Contact page: serves browser HTML
