rename terminal theme to web, make it the default, drop the mobile home screen, and rebuild the web shell as a light/dark glassmorphism layout
This commit is contained in:
parent
32d622f80e
commit
d947ecfb1a
21 changed files with 1707 additions and 2978 deletions
62
README.md
62
README.md
|
|
@ -2,27 +2,35 @@
|
|||
|
||||
> The source code for my personal website, **[dvorakmortonxd.dev](https://dvorakmortonxd.dev)**.
|
||||
|
||||
This is not a normal portfolio page. It ships **two fully interactive shells** and picks
|
||||
which one to show based on the saved theme and the device, all from the same content:
|
||||
This is not a normal portfolio page. It ships **two shells** and picks which one to show
|
||||
from the saved theme, all from the same content:
|
||||
|
||||
- **`skeuo`** (default) — a KDE Plasma / Windows-style **desktop simulation**: draggable
|
||||
snap-to-grid icons, resizable/floating windows, a Start menu, taskbar and live clock.
|
||||
On phones it becomes an **iOS-style home screen** with a widget grid, dock, drag-to-reorder
|
||||
and an iOS launch animation.
|
||||
- **`terminal`** — a **Gruvbox TUI** version of the site: TUI panels, an animated ASCII
|
||||
train background, a clickable easter-egg logo, and a working in-browser terminal (Alacritty)
|
||||
with commands like `help`, `ls`, `cat`, `neofetch`, `emerge`, `ssh` and more.
|
||||
- **`web`** (default) — a light, frosted-glass **website**: a sticky sidebar (section nav,
|
||||
light/dark switch, desktop switch) beside a column of glass cards — hero, quick tiles,
|
||||
live services, activity heatmap, projects, hardware, features and friends. Light by
|
||||
default with a persisted dark mode, and fully responsive, so phones and desktops get the
|
||||
same shell.
|
||||
- **`skeuo`** — an alternate KDE Plasma / Windows-style **desktop simulation** (desktop
|
||||
only): draggable snap-to-grid icons, resizable/floating windows, a Start menu, taskbar and
|
||||
live clock. Reachable from the web theme's sidebar switch.
|
||||
|
||||
Both shells surface the same personal content: socials, self-hosted services with **live
|
||||
up/down health checks**, a hardware collection, coding projects, a **GitDXD contribution
|
||||
heatmap**, a gym SBD panel and links to friends' sites.
|
||||
heatmap**, a gym SBD panel and links to friends' sites. The desktop shell additionally embeds
|
||||
an animated ASCII train background, a clickable easter-egg logo and a working in-browser
|
||||
terminal (Alacritty) with commands like `help`, `ls`, `cat`, `neofetch`, `emerge`, `ssh` and
|
||||
more.
|
||||
|
||||
## ✨ Features
|
||||
|
||||
- **Two themes / shells** — KDE-style desktop and Gruvbox terminal, toggled from either UI
|
||||
and persisted in `localStorage` (applied pre-paint to avoid a flash).
|
||||
- **Phone vs. desktop detection** — a user-agent sniff on `<html data-device>` decides whether
|
||||
the desktop or the mobile home screen is shown.
|
||||
- **Two themes / shells** — a default frosted-glass **web** shell and an alternate KDE-style
|
||||
**desktop** shell, toggled from either UI and persisted in `localStorage` (applied pre-paint
|
||||
to avoid a flash). Phones always get the web shell.
|
||||
- **Light / dark mode** — the web shell has a light/dark switch (light by default, remembered
|
||||
in `localStorage`, applied pre-paint). The desktop shell keeps its own Breeze Dark look.
|
||||
- **Glassmorphic web layout** — a sticky sidebar with section navigation beside a column of
|
||||
frosted-glass panels (subtle gradients + `backdrop-filter` blur), reorganised into
|
||||
hero / quick-tile / section cards.
|
||||
- **Draggable desktop icons** — free placement that snaps to a measured grid, one icon per
|
||||
cell, with a follow-the-cursor drag ghost. Icons shrink on cramped viewports so they never
|
||||
collide.
|
||||
|
|
@ -58,13 +66,13 @@ heatmap**, a gym SBD panel and links to friends' sites.
|
|||
|
||||
- **Framework:** Next.js 16 (App Router, Turbopack)
|
||||
- **Language:** TypeScript, React 19 (client components everywhere interactivity lives)
|
||||
- **Styling:** hand-written CSS — `src/app/page.css` (terminal theme), `src/app/skeuo.css`
|
||||
(desktop + mobile), `src/app/globals.css` (base/reset). Tailwind v4 is imported for the
|
||||
base layer but the UI is custom CSS.
|
||||
- **Fonts:** Monocraft (self-hosted in `public/`, used by the terminal theme; the desktop
|
||||
theme uses the system sans stack)
|
||||
- **Styling:** hand-written CSS — `src/app/web.css` (web theme: frosted glass + light/dark),
|
||||
`src/app/skeuo.css` (desktop theme), `src/app/globals.css` (base/reset). Tailwind v4 is
|
||||
imported for the base layer but the UI is custom CSS.
|
||||
- **Fonts:** the web theme uses the system sans stack; Monocraft (self-hosted in `public/`) is
|
||||
used by the desktop theme's SMP menu and the in-desktop terminal.
|
||||
- **Images:** `next/image`
|
||||
- **Version:** `2.1.0` (see `package.json`)
|
||||
- **Version:** `2.2.0` (see `package.json`)
|
||||
|
||||
## 🚀 Running Locally
|
||||
|
||||
|
|
@ -167,8 +175,8 @@ src/app/
|
|||
page.tsx → renders <ThemeRoot/>, imports the two theme stylesheets
|
||||
layout.tsx → html shell + metadata, injects ThemeScript
|
||||
globals.css → base/reset styles + Tailwind import
|
||||
page.css → terminal theme styles
|
||||
skeuo.css → desktop + mobile home styles
|
||||
web.css → web theme styles (frosted glass, light + dark)
|
||||
skeuo.css → desktop theme styles (KDE/Plasma shell)
|
||||
data.ts → socials, codingProjects, techProjects, friends, wallpapers
|
||||
revival-inc/page.tsx → embeds the bundled game at /public/revival-inc/index.html
|
||||
api/
|
||||
|
|
@ -176,21 +184,19 @@ src/app/
|
|||
activities/route.ts → GitDXD activity feed proxy
|
||||
ping/route.ts → service health check (HTTP + Minecraft)
|
||||
components/
|
||||
ThemeRoot.tsx → picks which shell(s) to mount
|
||||
ThemeScript.tsx → pre-paint script: theme + device detection
|
||||
ThemeRoot.tsx → picks which shell to mount (web or desktop)
|
||||
ThemeScript.tsx → pre-paint script: theme + light/dark scheme
|
||||
useTheme.ts → theme state via useSyncExternalStore
|
||||
TerminalLayout.tsx → the Gruvbox terminal shell
|
||||
useColorScheme.ts → light/dark state via useSyncExternalStore
|
||||
WebLayout.tsx → default web shell: sidebar + glass content
|
||||
WindowsDesktop.tsx → desktop shell: icons, windows, taskbar, Start menu
|
||||
MobileHome.tsx → phone shell: iOS home screen + app view
|
||||
WinWindow.tsx → one draggable/resizable window
|
||||
apps.tsx → APPS registry, window contents, in-app terminal
|
||||
useDesktopIcons.ts → desktop icon grid + drag/drop logic
|
||||
useDragOrder.ts → list reordering (mobile grid/dock)
|
||||
ServiceButton.tsx → service link + live status dot
|
||||
ContributionHeatmap.tsx → heatmap + recent commits widget
|
||||
Clock.tsx → live clock
|
||||
JokerLogo.tsx → logo with click easter egg
|
||||
SlBackground.tsx → animated ASCII train background
|
||||
scripts/
|
||||
dev-server.mjs → custom dev server: live updates without the dev-only debug surface
|
||||
deploy/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue