/stack_

Not a "trending list" — 36 pieces of software cuberoot.me actually leans on (plus the ones I am about to adopt): what runs on the production VM, the authoring chain that writes it, and personal tooling about to enter the loop. One page each: history, strengths, and the exact job it does in this architecture.

Snapshot·2026-05·Full system topology →
/Cloudflare DNSLet’s Encrypt TLSnginx :443SPA (React 19 + Vite 8)
/nginx :443 (api)Hono :3001Node 22 (pm2)PostgreSQL 13 :5432pg_dump 03:00 UTC
/Claude Opus 4.7Claude CodegitGitHub Actionsnginx + acme.sh
// frontend

Frontend

The half that runs in the browser

19.2

React

Declarative UI, components, virtual DOM

Renders the whole SPA — 24 tool pages all live inside one React tree.

born 2013-05
7.x

React Router

Binds URLs to your component tree

Routes all 24+ tool pages. Each page is lazy()-split into its own chunk with <Suspense> covering the load; react-router-dom 7 pairs with React 19 concurrent renderer.

born 2014-05
8.0

Vite

Native ESM dev server + Rolldown production build

Dev server + production bundler for the SPA. Cold start under 1s; build emits ~80 hashed chunks.

born 2020-04
r184

Three.js

The de facto standard for 3D in the browser

The renderer behind every 3D cube on this site — TwistyPlayer and the sq1 demo both ride three.js.

born 2010-04
0.63.3

cubing.js

WCA-grade scrambles + 3D twisty + alg parsing

Random-state scrambles for all 17 WCA events, 3D animation for every player, and KPuzzle state derivation all live here.

born 2018-09
CR 2023-02

WebCodecs Stack

Hardware-accelerated decode + re-encode + zero-drop export in the browser

The core pipeline behind /frame-count. Video file → mp4box.js demux → WebCodecs hardware decode into VideoFrame → OffscreenCanvas crop → VideoEncoder hardware re-encode → mp4-muxer writes back to .mp4. VFR / exotic codecs fall back to ffmpeg.wasm.

born 2020-11
4.3

Tailwind CSS

Utility-first CSS framework

Installed on cuberoot.me, but mostly used as the preflight base layer with utility classes as an escape hatch.

born 2017-11
24.x + 15.x

i18next

The de-facto i18n stack of JavaScript

The whole site\

born 2011-08
ʕ
5.0.x

Zustand

Bear-minimum React state management

Client-side cross-page state — 11 stores: auth / settings / sessions / trainer / battle / calc / mosaic / viz / recon.

born 2019-09
// backend

Backend

Processes and tables on that one VM

// edge

Edge / Network

TLS, DNS, HTTP — before a request even reaches a process

// dev

Dev / AI

From keystrokes to a commit — the whole authoring chain

2.54

Git

Distributed version control + content-addressable storage

The single source of truth for this repo. Every commit, every branch, every deploy trigger starts here.

born 2005-04
Opus 4.7

Claude

Anthropic's chat / tool-use / coding LLM

Co-author of nearly every new line of code on cuberoot.me. Opus 4.7 is the daily driver — the whole repo fits in one conversation at 1M context.

born 2023-03
>_
2.x

Claude Code

Anthropic's official CLI agent

100% of this codebase is maintained inside Claude Code. Read / Edit / Bash / Grep + subagents + skills + memory replace most of an IDE.

born 2025-02
11.1.2

pnpm

A drop-in npm replacement, with a content-addressable store and hard links

Package manager for the cuberoot.me monorepo — stitches 10 workspaces into a shared tree.

born 2017-01
2.5

Turborepo

Incremental task orchestration + content-addressed cache

Threads build / typecheck / test / lint across the monorepo into a dependency graph, replaying cached outputs for unchanged packages.

born 2020-11
pnpm 10 + Turbo 2

Monorepo

One repo, many packages, one lockfile

Four core workspaces (client / server / shared / stats-build), one pnpm-lock, Turbo cache, one CI workflow.

born ~2003
11.14

npm

The world's largest software registry — and the de-facto JS package format

We type `pnpm install`, but every dependency still comes from registry.npmjs.org. package.json is the source; semver / lockfile is the glue.

born 2010-01
1.2

Bun

Node + npm + Vite + Vitest, all in one binary

Not in use. If we ever switch, the two first targets are api.cuberoot.me (Hono on Bun beats Node) and the one-off TS scripts under core/scripts/ (bun run is 2-3x faster cold start than tsx). The current pm2 + Node 22 setup is fine, so it stays.

born 2022-07
0.11.14

uv

pip + virtualenv + pipx + pyenv, replaced by one Rust binary

Python toolchain + deps + venvs in one binary. The site’s scripts are still on plain python3 — uv is the migration plan.

born 2024-02
ubuntu-24.04

GitHub Actions

YAML-driven CI/CD + general-purpose orchestration

The execution engine behind this repo\

born 2018-10
1.60

Playwright

Cross-browser E2E testing + browser automation

UI regression suites + the browser backend AI agents drive to verify pages on this site.

born 2020-01
4.1

Vitest

Next-gen test runner powered by Vite

Runs unit / worker / regression tests — utils pure functions, worker algorithms, analyzer baselines all live here.

born 2021-12
1.96.5

Tailscale

WireGuard-based mesh VPN

Pulls dev machine, phone, laptop onto one private network — dev servers reachable across devices without ever opening a public port.

born 2019-04
10.3p1

OpenSSH

The encrypted remote-login suite that runs the public internet

The transport beneath every server login, deploy, and git push. Every CI deploy on cuberoot.me rides it.

born 1999-12
3.4.2

rsync

Ship only the bytes that changed

Syncs build artifacts / backups / mirrors between two machines — only the delta crosses the wire.

born 1996-06
1.7

Obsidian

Local-first markdown thinking tool

Planned tooling — personal knowledge base + AI-era context store. The cuberoot.me codebase does not depend on it yet, but the next year of work plans to move notes / design decisions / research into a vault and close the loop with Claude Code.

born 2020-03
3.20

GitHub

A social forge on top of git, with first-party CI and AI collaboration

Hosts this repo, RuiminYan/cuberoot.me, and executes the deploy / mirror / stats / healthcheck workflows.

born 2008-04
8.20.0

curl

Thirty years, one maintainer, twenty billion installations

The default way to poke this repo. Opening an nginx vhost, pinging an endpoint, checking a cert, running a GitHub Actions health probe — all curl.

born 1996-11