feat: rewrite readme and clean up support

This commit is contained in:
Jet 2026-03-26 21:27:26 -07:00
parent 38af26d959
commit 7758be92b4
No known key found for this signature in database
16 changed files with 383 additions and 453 deletions

130
README.md
View file

@ -1,90 +1,72 @@
# jetpham.com
<div align="center">
<img src="src/app/icon0.svg" alt="jetpham.com icon" width="200" height="200">
</div>
Personal site for Jet Pham.
Jet Pham's personal website. This website comes with a long story. The domain was originally registered in highschool by my teamate on my robotics team as a joke. The site was originally a filesystem full of memes and random files. Once I was in college, the domain expired and I registered it myself.
The site is a small Vite app with a terminal-style UI, ANSI-rendered text, and a Rust/WebAssembly Conway's Game of Life background.
The site originally contained a blog. It was made in Next.js plainly with plain colors and no real style. I posted a few blogs about my life but eventually lost motivaiton and didn't like sharing it with other people after having been inspired by so many other cool websites.
## Features
I started to become more obsessed with Rust and rewrote my website from being a blog into a static linktree site made in rust via WASM. It was in ASCII style using a modified fork of ratzilla and had a fun implementation of Conways Game of Life in the background.
- ASCII/ANSI-inspired visual style with the IBM VGA font
- Conway's Game of Life running in the background via Rust + WebAssembly
- Q+A page backed by the site API
- Single-file oriented frontend build with Vite
- Reduced-motion aware background controls with a static fallback mode
After leaving that website alone, I started to make more web based projects in Next.js. I realized I could properly make this website awesome and still keep the interesting style in the site while making it more performant, responsive, and accessible. This is the state that you see the website in now.
## Stack
I have some awesome features packed in this site now that represent all the cool things I'm interested in:
- ANSI rendering of my name in CSS!
- Terminal style text, font, and colors just like BBS
- Rust WASM implementation of Conway's Game of Life running in the background
- List of socials and contact info
Let me know if you have any feedback about the site!
## Tech Stack
- [Next.js 16](https://nextjs.org) with Turbo mode
- [Tailwind CSS v4](https://tailwindcss.com)
- [TypeScript](https://www.typescriptlang.org/)
- [React 19](https://react.dev/)
- Rust + WebAssembly (for Conway's Game of Life)
- [Bun](https://bun.sh) (package manager)
- Vite
- TypeScript
- Tailwind CSS v4
- Rust + WebAssembly
- npm
## Development
### Prerequisites
- Bun
- Rust (for building the Conway's Game of Life WASM module)
- wasm-pack (or use the install script)
- Node.js + npm
- Rust
- `wasm-pack`
- `wasm-opt` (used by `build:wasm`)
### Getting Started
1. Clone the repository
2. Build the Rust WASM module:
```bash
bun run build:wasm
```
Or use the install script:
```bash
./install.sh
```
3. Install dependencies:
```bash
bun install
```
4. Start the development server:
```bash
bun run dev
```
The site will be available at `http://localhost:3000`.
## Q&A Mail Safety
The Q&A feature sends notification emails from `qa@...` and uses a static `Reply-To` like `qa@jetpham.com`. Replies are matched back to the right question by parsing the question number from the email subject, e.g. `123 - ...`.
To avoid breaking normal inbound mail when the Q&A API is down:
- set `services.jetpham-website.qaMailDomain = "jetpham.com";`
- set `services.jetpham-website.qaReplyDomain = "jetpham.com";`
- route only the exact reply address `qa@jetpham.com` into the Q&A webhook
- keep your personal mail domain (`extremist.software`) delivering normally without depending on the Q&A webhook
This isolates the automation path from your main inbox. If the Q&A API fails, Q&A replies may be delayed, but personal mail should still deliver normally.
## Project Structure
### Install
```bash
npm install
```
src/ - Next.js app router pages
cgol/ - Rust WASM module for Conway's Game of Life
public/ - Static assets
### Build the WASM package
```bash
npm run build:wasm
```
### Start the dev server
```bash
npm run dev
```
### Check the app
```bash
npm run check
```
### Build for production
```bash
npm run build
```
## Structure
```text
src/ frontend app
cgol/ Rust + WASM Conway's Game of Life module
```
## Notes
- The homepage and Q+A page are the intended public pages.
- If WebAssembly fails or motion is disabled, the site falls back to a static background treatment.