# redman13/personal-website architecture

> Architecture diagram of the GitHub repository redman13/personal-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/redman13/personal-website
- Repository: https://github.com/redman13/personal-website

## Overview

This repository is a personal website for publishing interactive pages and sharing web projects. The main visitor workflow is an HTTP request handled by the server, which resolves a URL and returns a page or runs server-side content; the site also documents build-time preprocessors for shared templates and richer page formats. Account management and WebSocket file sharing are additional server capabilities. The Discord quote-generation files are under `useless-history`; their relationships are visible, but the sampled request handler is commented out, so they are shown as a separate historical subsystem. Some page and server behavior is inferred only from the tree and README.

Main entry points: [`server/index.js`](https://github.com/redman13/personal-website/blob/main/server/index.js) (HTTP server), [`useless-history/discord-bot/index.server.js`](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/index.server.js) (Discord handler), [`useless-history/discord-bot/commands.js`](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/commands.js) (Bot commands), [`useless-history/discord-bot/quote-generator.js`](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/quote-generator.js) (Quote generation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_site["Website"]
  node_pages["Website pages"]
end

subgraph group_server["Server"]
  node_webserver["HTTP server<br/>[index.js]"]
  node_url["URL handling<br/>[url-preprosesor.js]"]
  node_php["PHP execution<br/>[php-execute.js]"]
  node_reject["HTTP errors<br/>[handle-reject.js]"]
end

subgraph group_precomp["Preprocessors"]
  node_templating["HTML templates"]
  node_jsx["JSX compiler"]
  node_otherpre["Other preprocessors"]
end

subgraph group_sharing["Accounts And Sharing"]
  node_user[("User management<br/>[user-manager.js]")]
  node_userapi["User REST routes"]
  node_shareapi["Share REST routes<br/>[share-port-rest.js]"]
  node_share["WebSocket sharing<br/>[share-port.js]"]
end

subgraph group_history["Historical Discord Tools"]
  node_discord["Discord handler<br/>[index.server.js]"]
  node_commands["Bot commands<br/>[commands.js]"]
  node_quotes["Quote generation<br/>[quote-generator.js]"]
  node_texttools["Text rendering<br/>[text-tools.js]"]
  node_tokenizer["Text tokenizer<br/>[tokenizer.js]"]
  node_assets["Discord assets<br/>[asset-helper.js]"]
  node_webrequests["Discord API requests<br/>[web-requests.js]"]
  node_enums["Discord enums<br/>[enums.js]"]
end

node_visitor(("Site visitor"))

node_visitor -->|"requests pages"| node_webserver
node_webserver -->|"routes requests"| node_url
node_webserver -->|"runs PHP"| node_php
node_webserver -->|"serves files"| node_pages
node_webserver -->|"authenticates users"| node_user
node_webserver -->|"registers routes"| node_userapi
node_webserver -->|"registers routes"| node_shareapi
node_webserver -->|"handles failures"| node_reject
node_userapi -->|"rejects requests"| node_reject
node_shareapi -->|"uses sharing"| node_share
node_share -->|"checks credentials"| node_user
node_templating -.->|"expands templates"| node_pages
node_jsx -.->|"transforms JSX"| node_pages
node_otherpre -.->|"transforms content"| node_pages
node_discord -->|"imports commands"| node_commands
node_discord -->|"imports API helper"| node_webrequests
node_discord -->|"imports quote tools"| node_quotes
node_discord -->|"imports constants"| node_enums
node_commands -->|"uses API helper"| node_webrequests
node_commands -->|"uses constants"| node_enums
node_quotes -->|"renders text"| node_texttools
node_quotes -->|"loads assets"| node_assets
node_texttools -->|"tokenizes text"| node_tokenizer

click node_webserver "https://github.com/redman13/personal-website/blob/main/server/index.js"
click node_url "https://github.com/redman13/personal-website/blob/main/server/url-preprosesor.js"
click node_php "https://github.com/redman13/personal-website/blob/main/server/php-execute.js"
click node_user "https://github.com/redman13/personal-website/blob/main/server/user-manager.js"
click node_userapi "https://github.com/redman13/personal-website/blob/main/server/user-manager-rest.js"
click node_shareapi "https://github.com/redman13/personal-website/blob/main/server/share-port-rest.js"
click node_share "https://github.com/redman13/personal-website/blob/main/server/share-port.js"
click node_reject "https://github.com/redman13/personal-website/blob/main/server/handle-reject.js"
click node_templating "https://github.com/redman13/personal-website/blob/main/preprocessors/html-templating.precomp.js"
click node_jsx "https://github.com/redman13/personal-website/blob/main/preprocessors/javascript-xml.precomp.js"
click node_otherpre "https://github.com/redman13/personal-website/tree/main/preprocessors"
click node_discord "https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/index.server.js"
click node_commands "https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/commands.js"
click node_quotes "https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/quote-generator.js"
click node_texttools "https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/text-tools.js"
click node_tokenizer "https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/tokenizer.js"
click node_assets "https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/asset-helper.js"
click node_webrequests "https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/web-requests.js"
click node_enums "https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/enums.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_pages toneBlue
class node_webserver,node_url,node_php,node_reject toneAmber
class node_templating,node_jsx,node_otherpre toneMint
class node_user,node_userapi,node_shareapi,node_share toneRose
class node_discord,node_commands,node_quotes,node_texttools,node_tokenizer,node_assets,node_webrequests,node_enums,node_visitor toneIndigo
```

## Components

### Website

- **Website pages**

### Server

- [HTTP server](https://github.com/redman13/personal-website/blob/main/server/index.js): `server/index.js`
- [URL handling](https://github.com/redman13/personal-website/blob/main/server/url-preprosesor.js): `server/url-preprosesor.js`
- [PHP execution](https://github.com/redman13/personal-website/blob/main/server/php-execute.js): `server/php-execute.js`
- [HTTP errors](https://github.com/redman13/personal-website/blob/main/server/handle-reject.js): `server/handle-reject.js`

### Preprocessors

- [HTML templates](https://github.com/redman13/personal-website/blob/main/preprocessors/html-templating.precomp.js): `preprocessors/html-templating.precomp.js`
- [JSX compiler](https://github.com/redman13/personal-website/blob/main/preprocessors/javascript-xml.precomp.js): `preprocessors/javascript-xml.precomp.js`
- [Other preprocessors](https://github.com/redman13/personal-website/tree/main/preprocessors): `preprocessors`

### Accounts And Sharing

- [User management](https://github.com/redman13/personal-website/blob/main/server/user-manager.js): `server/user-manager.js`
- [User REST routes](https://github.com/redman13/personal-website/blob/main/server/user-manager-rest.js): `server/user-manager-rest.js`
- [Share REST routes](https://github.com/redman13/personal-website/blob/main/server/share-port-rest.js): `server/share-port-rest.js`
- [WebSocket sharing](https://github.com/redman13/personal-website/blob/main/server/share-port.js): `server/share-port.js`

### Historical Discord Tools

- [Discord handler](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/index.server.js): `useless-history/discord-bot/index.server.js`
- [Bot commands](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/commands.js): `useless-history/discord-bot/commands.js`
- [Quote generation](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/quote-generator.js): `useless-history/discord-bot/quote-generator.js`
- [Text rendering](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/text-tools.js): `useless-history/discord-bot/text-tools.js`
- [Text tokenizer](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/tokenizer.js): `useless-history/discord-bot/tokenizer.js`
- [Discord assets](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/asset-helper.js): `useless-history/discord-bot/asset-helper.js`
- [Discord API requests](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/web-requests.js): `useless-history/discord-bot/web-requests.js`
- [Discord enums](https://github.com/redman13/personal-website/blob/main/useless-history/discord-bot/enums.js): `useless-history/discord-bot/enums.js`

### Other components

- **Site visitor**

## Connections

- Site visitor → HTTP server: requests pages (evidence: `README.md`)
- HTTP server → URL handling: routes requests (evidence: `server/index.js`)
- HTTP server → PHP execution: runs PHP (evidence: `server/index.js`)
- HTTP server → Website pages: serves files (evidence: `server/index.js`)
- HTTP server → User management: authenticates users (evidence: `server/index.js`)
- HTTP server → User REST routes: registers routes (evidence: `server/index.js`)
- HTTP server → Share REST routes: registers routes (evidence: `server/index.js`)
- HTTP server → HTTP errors: handles failures (evidence: `server/index.js`)
- User REST routes → HTTP errors: rejects requests (evidence: `server/user-manager-rest.js`)
- Share REST routes → WebSocket sharing: uses sharing (evidence: `server/share-port-rest.js`)
- WebSocket sharing → User management: checks credentials (evidence: `server/share-port.js`)
- HTML templates → Website pages: expands templates (evidence: `README.md`)
- JSX compiler → Website pages: transforms JSX (evidence: `README.md`)
- Other preprocessors → Website pages: transforms content (evidence: `README.md`)
- Discord handler → Bot commands: imports commands (evidence: `useless-history/discord-bot/index.server.js`)
- Discord handler → Discord API requests: imports API helper (evidence: `useless-history/discord-bot/index.server.js`)
- Discord handler → Quote generation: imports quote tools (evidence: `useless-history/discord-bot/index.server.js`)
- Discord handler → Discord enums: imports constants (evidence: `useless-history/discord-bot/index.server.js`)
- Bot commands → Discord API requests: uses API helper (evidence: `useless-history/discord-bot/commands.js`)
- Bot commands → Discord enums: uses constants (evidence: `useless-history/discord-bot/commands.js`)
- Quote generation → Text rendering: renders text (evidence: `useless-history/discord-bot/quote-generator.js`)
- Quote generation → Discord assets: loads assets (evidence: `useless-history/discord-bot/quote-generator.js`)
- Text rendering → Text tokenizer: tokenizes text (evidence: `useless-history/discord-bot/text-tools.js`)
