Homepage #
Part of the overby.me monorepo, where this lives in
apps/homepageand where all development happens.It is also published on its own, as tangled.org/overby.me/homepage and github.com/overby-me/homepage. Both are read-only mirrors, rebuilt from the monorepo with josh: a commit made to either is overwritten by the next sync, so please open issues and pull requests on the monorepo.
Personal homepage for overby.me — an interactive 3D graph visualization that maps out online presence, interests, and connections.
Overview #
The landing page renders a 3D force-directed graph where nodes represent profiles, platforms, and life categories (Commerce, Improve, Connect, Immerse, Give). Clicking a node navigates to the corresponding URL; nodes can be dragged, and the camera orbits and zooms.
The graph is a Rust/WebAssembly rewrite of the original React version: it draws directly to WebGL and runs a faithful port of d3-force-3d (the force model react-force-graph-3d uses) for the layout.
Additional routes:
/screensaver— Picks one of the XScreenSaver ports at random and redirects to it/screensaver/<name>— Runs that screensaver, with its options behind a button (seexscreensaver/)/screensaver/<name>?images=@handle— Savers that work on a picture take it from that account's posts;?images=%23tagtakes them live off the firehose/cardioid— An epicyclic curve tracer/search— Redirects search queries to Startpage/x— Redirects X/Twitter links through xcancel.com/yt— Embeds YouTube videos in a clean full-screen player
Tech Stack #
- Dioxus (Rust) compiled to WebAssembly
- WebGL via
web-sysfor the custom 3D renderer, with glam for math - Self-hosted Space Grotesk for the graph labels
- Dioxus Router for client-side routing
- Nix for reproducible dev environments
- Just as a command runner, driving the Dioxus CLI (
dx)
Getting Started #
Prerequisites #
The Nix dev shell provides the full toolchain (dx, a Rust toolchain with the
wasm32-unknown-unknown target, wasm-bindgen-cli, and binaryen):
nix develop .#homepage
Development #
just dev
Build #
just build
The static site is written to target/dx/homepage/release/web/public.
The release build gives each screensaver its own wasm chunk, so opening one
downloads only that one. See xscreensaver/README.md
for how that is wired and what it measures.
Test #
just test
Runs the screensaver ports headlessly: every saver renders frames at several window sizes and option values with no browser involved.
Clean #
just clean
License #
Licensed under AGPL-3.0.