From cfc256c7bd844c1dc4dd7e4062be56df4ccbcaef Mon Sep 17 00:00:00 2001 From: Martin Dvorak Date: Wed, 30 Sep 2026 09:09:47 +0000 Subject: [PATCH] rebuild the web theme as a physical desk (walnut surface, monitor + keyboard, real rack, drive drawer, paper tags, dot-matrix report, brass plaques) --- README.md | 36 +- agents.md | 30 +- package.json | 2 +- public/textures/desk.jpg | Bin 0 -> 24977 bytes public/textures/rubber.jpg | Bin 36610 -> 0 bytes src/app/components/WebSite.tsx | 607 +++++++------ src/app/components/web-ui.tsx | 285 +++--- src/app/credits/page.tsx | 103 +-- src/app/web.css | 1492 ++++++++++++++++++++++---------- 9 files changed, 1645 insertions(+), 910 deletions(-) create mode 100644 public/textures/desk.jpg delete mode 100644 public/textures/rubber.jpg diff --git a/README.md b/README.md index 919ccff..c10eb22 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,16 @@ > The source code for my personal website, **[dvorakmortonxd.dev](https://dvorakmortonxd.dev)**. -It's a **skeuomorphic personal site**: a dark homelab desk built from anodised aluminium, OLED -glass, carbon fibre and paper, with the whole KDE desktop simulation kept behind a physical -power switch. Two modes, one content set: +It's a **skeuomorphic personal site**: a walnut desk with graphite hardware, cream paper and +brass details resting on it, with the whole KDE desktop simulation kept behind a physical power +switch. Two modes, one content set: -- **Web** (default) — the homelab desk. A 4U rack carries the headline on an engraved nameplate - and a live console readout; services are rack units with status LEDs, the 18 coding projects - are labelled SSD caddies in a drive drawer, hardware hangs on a pegboard, the contribution - heatmap is an LED matrix and the socials are a patch panel. Textures are CC0 — see - [`/credits`](http://localhost:3000/credits). +- **Web** (default) — the desk. A monitor carries the headline with a keyboard in front of it + and a small rack beside it; services are 1U rack units with health LEDs, the 18 coding + projects are labelled drives in a drawer, the machines hang as paper tags on a pegboard, the + contribution heatmap is printed on continuous dot-matrix paper, friends are business cards, + the gym log is a clipboard and the socials are a patch panel. Textures are CC0 — see + [`/credits`](https://dvorakmortonxd.dev/credits). - **Desktop mode** — the KDE Plasma / Windows-style **desktop simulation**: draggable snap-to-grid icons, resizable/floating windows, a Start menu, taskbar, live clock and a working in-browser terminal (Alacritty). Reached from the power switch and hidden on phones. @@ -23,8 +24,9 @@ heatmap**, gym SBD and links to friends' sites. - **Web theme is the landing view** — the site always opens on the desk; the theme is deliberately not persisted, so a reload never drops you into the desktop. -- **Skeuomorphic hardware** — rack, LEDs, rocker switch, screws, vents and panels are CSS - materials over five CC0 textures; every section is a real-world object rather than a card. +- **Skeuomorphic materials** — walnut desk, graphite faceplates, cream paper, brass plaques and + amber LEDs, all CSS over five CC0 textures. Every section is a physical object with a contact + shadow; nothing is pure white on black or grey on black. - **Desktop mode (desktop-only)** — a physical power switch in the top rail (and in the footer) flips to the KDE-style desktop for the session. Phones never get it: the switch is hidden, so the old iOS-style phone home screen is gone. @@ -64,15 +66,15 @@ heatmap**, gym SBD and links to friends' sites. - **Framework:** Next.js 16 (App Router, Turbopack) - **Language:** TypeScript, React 19 (client components everywhere interactivity lives) - **Styling:** `src/app/globals.css` holds the palette tokens, base styles, the Tailwind v4 - `@theme`/`@utility` classes and the scroll reveals. `src/app/web.css` is the skeuomorphic - material system (metal, OLED glass, paper, carbon, rubber, plastic, LEDs, screws, vents, - switches) and the object layouts. `page.css` keeps the shared component styles the desktop - apps still use, and `skeuo.css` is the KDE desktop. + `@theme`/`@utility` classes and the scroll reveals. `src/app/web.css` is the material system + (walnut desk, graphite metal, cream paper, brass, OLED glass, LEDs, screws, rack rails, rocker + switch) and the object layouts. `page.css` keeps the shared component styles the desktop apps + still use, and `skeuo.css` is the KDE desktop. - **Fonts:** Newsreader (headlines, paper) + IBM Plex Sans/Mono (body, machine labels) via `next/font/google`; the desktop keeps its system sans stack. -- **Textures:** five CC0 materials from ambientCG, downscaled to 512 px in `public/textures`. - Attribution is on `/credits`. -- **Version:** `3.1.0` (see `package.json`) +- **Textures:** five CC0 materials from ambientCG — `desk` (walnut), `metal`, `paper`, `carbon`, + `plastic` — downscaled to 512 px in `public/textures`. Attribution is on `/credits`. +- **Version:** `3.2.0` (see `package.json`) ## 🚀 Running Locally diff --git a/agents.md b/agents.md index 2024e64..92ba4e6 100644 --- a/agents.md +++ b/agents.md @@ -34,19 +34,20 @@ When in doubt, prefer updating. A stale README **or** agents.md is treated as a ## What this project is Personal portfolio site for **dvorakmortonxd.dev**. The default view is a -**skeuomorphic homelab desk** (a rack, LEDs, paper, anodised metal); a physical -power switch flips to a **KDE Plasma desktop simulation**. Phones only ever get -the desk. +**skeuomorphic desk**: a walnut surface with a monitor, keyboard, rack, drive +drawer, pegboard, dot-matrix report, business cards, clipboard and patch panel +resting on it. A physical power switch flips to a **KDE Plasma desktop +simulation**. Phones only ever get the desk. - Framework: **Next.js 16** (App Router, Turbopack), **React 19**, TypeScript. -- Styling: **Tailwind v4** for layout plus **`web.css`**, the skeuomorphic - material system (metal, OLED glass, paper, carbon, rubber, plastic, LEDs, - screws, vents, switches) over five CC0 textures in `public/textures` +- Styling: **Tailwind v4** for layout plus **`web.css`**, the material system + (walnut desk, graphite metal, cream paper, brass, OLED glass, LEDs, screws, + rack rails, rocker switch) over five CC0 textures in `public/textures` (credited on `/credits`). `globals.css` holds the tokens, base styles and the reveals; `skeuo.css` and `page.css` are the desktop and the shared desktop-app styles. - Path alias: `@/*` → `src/*`. -- Version: `3.1.0` (see `package.json`). +- Version: `3.2.0` (see `package.json`). ### Scripts ```bash @@ -123,11 +124,11 @@ scripts/ desktop is up so its scroll position survives; the desktop mounts on demand (phones can never reach `skeuo`). -Modes: `web` = the skeuomorphic homelab desk (default/landing), `skeuo` = KDE -Plasma desktop. +Modes: `web` = the skeuomorphic desk (default/landing), `skeuo` = KDE Plasma +desktop. -The desk uses **five CC0 textures** from ambientCG (`public/textures`: metal, -paper, carbon, rubber, plastic), downscaled to 512 px and credited on +The desk uses **five CC0 textures** from ambientCG (`public/textures`: desk +walnut, metal, paper, carbon, plastic), downscaled to 512 px and credited on `/credits`. The social SVGs are used as monochrome CSS masks (`.social-mask`); `linkedin.svg` is a filled badge that masks to a plain square, so `web-ui.tsx` renders an inline mark for it instead. The desktop still uses the image assets. @@ -235,7 +236,12 @@ not free placement. Don't confuse the two. collided with Tailwind's `w-screen` (`width: 100vw`) and silently stretched every panel to the viewport. Also remember `web.css` is unlayered, so its properties beat Tailwind utilities on the same element; use a dedicated class - (e.g. `.w-navlink`) or `!` when a utility must win. + (e.g. `.w-navlink`, `.w-corner-tr`) or `!` when a utility must win. (`.w-screw` + sets `position: relative` for its slot, which is why screws are placed with + `.w-corner-*` instead of Tailwind's `absolute`.) +- Angles and offsets that hover states need to override live in CSS custom + properties (e.g. `--tilt` on `.w-drive`), never in inline `style` transforms — + an inline transform wins over `:hover`. - The desk reveals blocks with `.reveal` (see `Reveal` in `web-ui.tsx`): hidden by default, `.is-in` shows. On load the first screenful cascades top-to-bottom (90ms per block, in DOM order); the rest reveal when they scroll in. **Wrap diff --git a/package.json b/package.json index 048a6c9..2af9046 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dvorakmortonxd", - "version": "3.1.0", + "version": "3.2.0", "private": true, "scripts": { "dev": "node scripts/dev-server.mjs", diff --git a/public/textures/desk.jpg b/public/textures/desk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..820ba7f13562588bb3986cc3b0c0bfab6e8a4a28 GIT binary patch literal 24977 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 Oq{hgt+dN=U2mjeK)%M{4 diff --git a/src/app/components/WebSite.tsx b/src/app/components/WebSite.tsx index 8ca65a0..70661a4 100644 --- a/src/app/components/WebSite.tsx +++ b/src/app/components/WebSite.tsx @@ -1,13 +1,17 @@ "use client"; -import { useState } from "react"; +import { useState, type CSSProperties } from "react"; import { useTheme } from "./useTheme"; import { codingProjects, friends, socials, techProjects } from "../data"; import { - Bay, - ContributionsPanel, + Keyboard, Led, + MiniRack, + Monitor, + Plaque, + Report, Reveal, + SectionHead, ServiceUnit, SocialGlyph, type ServiceAccess, @@ -17,10 +21,10 @@ import { const NAV = [ { href: "#about", label: "about" }, - { href: "#services", label: "rack" }, + { href: "#services", label: "services" }, { href: "#projects", label: "projects" }, - { href: "#hardware", label: "inventory" }, - { href: "#contact", label: "ports" }, + { href: "#hardware", label: "machines" }, + { href: "#contact", label: "contact" }, ]; const SERVICES: { @@ -40,20 +44,9 @@ const SERVICES: { ]; const LIFTS = [ - { lift: "squat", weight: "125", unit: "kg", date: "05 Jan 2025" }, - { lift: "bench", weight: "111", unit: "kg", date: "29 May 2026" }, - { lift: "deadlift", weight: "165", unit: "kg", date: "17 Dec 2024" }, -]; - -const NEOFETCH: [string, string][] = [ - ["host", "Proxmox VE · home rack"], - ["os", "Gentoo Linux (x86_64)"], - ["cpu", "Xeon E5-2680 v4 · 14c/28t"], - ["gpu", "RTX 3070 · passthrough"], - ["memory", "68 GB DDR4 RDIMM"], - ["storage", "256 GB NVMe · 1 TB · 750 GB"], - ["services", "6 containers, 0 subscriptions"], - ["uptime", "17 years"], + { lift: "squat", weight: "125", date: "05 Jan 2025" }, + { lift: "bench", weight: "111", date: "29 May 2026" }, + { lift: "deadlift", weight: "165", date: "17 Dec 2024" }, ]; /** Titles carry their state in parentheses, e.g. "dxdwm (Discontinued)". */ @@ -62,12 +55,12 @@ function splitStatus(title: string) { return m ? { name: m[1], status: m[2] } : { name: title, status: null }; } -function statusKind(status: string | null): "green" | "amber" | "red" | "off" { +function statusKind(status: string | null): "on" | "amber" | "off" { if (!status) return "off"; const s = status.toLowerCase(); - if (s.includes("finished") || s.includes("available")) return "green"; + if (s.includes("finished") || s.includes("available")) return "on"; if (s.includes("wip") || s.includes("unfinished")) return "amber"; - return "red"; + return "off"; } /* ------------------------------------------------------------------ page */ @@ -76,30 +69,19 @@ export default function WebSite() { const { setTheme } = useTheme(); const [menuOpen, setMenuOpen] = useState(false); - const stats = [ - { value: String(SERVICES.length), label: "self-hosted services" }, - { value: String(codingProjects.length), label: "projects on the shelf" }, - { value: String(techProjects.length), label: "machines logged" }, - { value: "401", label: "kg best SBD total" }, - ]; - return ( -
- {/* ----------------------------------------------------------- rail */} -
-
- - - dvorakmortonxd.local +
+ {/* -------------------------------------------------------------- rail */} +
+
+ + + dvorakmortonxd
{menuOpen ? ( -