diff --git a/README.md b/README.md
index 2def698..ec0369e 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,8 @@ from the saved theme, all from the same content:
- **`web`** (default) — a light, frosted-glass **website**: a sticky full-height sidebar
(section nav, light/dark switch, desktop switch) beside a column of glass cards — hero with
- a socials row, quick tiles, the Revival Inc. / RustyWolf feature panels, live services,
+ a socials row, quick tiles, the Revival Inc. / RustyWolf feature panels (drawn as little
+ CSS windows, not screenshots), live services,
activity heatmap, projects and hardware (a masonry gallery), and friends. Dark by default
with a persisted light mode, and fully responsive, so phones and desktops get the same shell.
- **`skeuo`** — an alternate KDE Plasma / Windows-style **desktop simulation** (desktop
@@ -31,6 +32,9 @@ more.
- **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.
+- **Asset-free feature windows** — the two feature panels (Revival Inc. / RustyWolf) are
+ hand-built CSS mock windows instead of screenshots: a little necromancy game scene with a
+ blinking "PRESS START", and a little browser window with a tab strip, toolbar and start page.
- **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.
@@ -72,7 +76,7 @@ more.
- **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.2.8` (see `package.json`)
+- **Version:** `2.2.9` (see `package.json`)
- **Dependencies:** `npm audit` reports **0 vulnerabilities**. `next` is kept at a patched
release (`>=16.3.6`) for the `next/og` RCE, and `brace-expansion` is force-upgraded via
`overrides`. `braces` (a transitive ESLint/`fast-glob` dependency) has **no upstream fix**,
@@ -194,6 +198,7 @@ src/app/
useTheme.ts → theme state via useSyncExternalStore
useColorScheme.ts → light/dark state via useSyncExternalStore
WebLayout.tsx → default web shell: sidebar + glass content
+ FeatureWindow.tsx → decorative CSS windows for the two feature panels
WindowsDesktop.tsx → desktop shell: icons, windows, taskbar, Start menu
WinWindow.tsx → one draggable/resizable window
apps.tsx → APPS registry, window contents, in-app terminal
diff --git a/agents.md b/agents.md
index 7e82d9e..5a3ce2d 100644
--- a/agents.md
+++ b/agents.md
@@ -34,7 +34,7 @@ When in doubt, prefer updating. A stale README **or** agents.md is treated as a
## Bump the version on EVERY prompt — also do this every time
Another standing requirement: increment the **patch** version (`x.x.+1`, so
-`2.2.7` → `2.2.8` → …) as part of every task, even the small ones. Keep all of
+`2.2.8` → `2.2.9` → …) as part of every task, even the small ones. Keep all of
these in sync:
- `package.json` → `"version"`
@@ -56,7 +56,7 @@ frosted-glass **web** site, and an alternate KDE/Plasma **desktop simulation**
utilities in the components (Tailwind is present via PostCSS but the look is
hand-written CSS).
- Path alias: `@/*` → `src/*`.
-- Version: `2.2.8` (see `package.json`).
+- Version: `2.2.9` (see `package.json`).
### Scripts
```bash
@@ -102,6 +102,7 @@ src/app/
components/
ThemeRoot.tsx → picks which shell to mount (the router of the UI)
WebLayout.tsx → "web" theme (default): sticky sidebar + glass content
+ FeatureWindow.tsx → decorative CSS "windows" for the two feature panels (game / browser)
WindowsDesktop.tsx → "skeuo" theme, desktop: icons, windows, taskbar
WinWindow.tsx → a single draggable/resizable window
apps.tsx → APPS registry + the content of each app + in-app terminal
@@ -157,10 +158,16 @@ Themes: `web` = default frosted-glass website (sidebar + content, light/dark),
Projects/hardware use a CSS multi-column
**masonry** gallery (`.project-grid`) so short cards don't leave half-empty
grid slots; on phones it drops to 2 columns with a shorter card image. The two feature panels (`.web-split`) stretch
- to equal height and share a fixed `16 / 10` `.web-shot` frame with
- `object-fit: cover` (+ `object-position: center top`), so source images with
- different aspect ratios still line up. The old stacked TUI panel layout and the
- `SlBackground` ASCII train were removed with it.
+ to equal height and share a fixed `16 / 10` `.fw` window (the `FeatureWindow`
+ component) — a decorative, **asset-free CSS mock-up** rather than a screenshot:
+ Revival Inc. is a little necromancy game scene (night sky, moon, tombstones,
+ blinking "PRESS START") and RustyWolf is a little browser window (tab strip,
+ toolbar, address bar, start page). Both are `aria-hidden` and purely
+ presentational; the real copy stays in the `.web-feature-text` paragraph below.
+ The old raster feature shots (`.web-shot` + `next/image`) were removed from the
+ web theme only — `revivalinc.webp` / `RustyWolfPreview.webp` are still used by
+ the desktop theme and the projects gallery, so the files stay. The old stacked
+ TUI panel layout and the `SlBackground` ASCII train were removed earlier.
- **Not a terminal.** The web theme deliberately has no TUI chrome: the hero is
a name + blurb (no `$ whoami` prompt, no blinking cursor), section eyebrows are
plain words (not `README.MD` / `TECH_LIST.JSON` filenames), and the activity
diff --git a/package-lock.json b/package-lock.json
index 6100b1e..339dbe6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "dvorakmortonxd",
- "version": "2.2.8",
+ "version": "2.2.9",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "dvorakmortonxd",
- "version": "2.2.8",
+ "version": "2.2.9",
"dependencies": {
"next": "^16.3.8",
"react": "^19.3.0",
diff --git a/package.json b/package.json
index ea775ee..e9f45f3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "dvorakmortonxd",
- "version": "2.2.8",
+ "version": "2.2.9",
"private": true,
"scripts": {
"dev": "node scripts/dev-server.mjs",
diff --git a/src/app/components/FeatureWindow.tsx b/src/app/components/FeatureWindow.tsx
new file mode 100644
index 0000000..f8ae684
--- /dev/null
+++ b/src/app/components/FeatureWindow.tsx
@@ -0,0 +1,103 @@
+"use client";
+
+import type { ReactNode } from "react";
+
+/**
+ * Decorative, asset-free mock windows for the two feature panels (Revival Inc.
+ * and RustyWolf). They replace the old raster screenshots so the panels read as
+ * a little OS window instead of a flat image. Purely presentational — the real
+ * copy lives in the `.web-feature-text` paragraph below each window.
+ */
+
+function Chrome({ title, children }: { title: string; children: ReactNode }) {
+ return (
+
A game I made for the game jam "Mini Jame Gam #55", the theme was
Necromancy and the special item was Milk, the game also includes a tutorial so
@@ -269,12 +247,7 @@ export default function WebLayout() {
-
+
A lightweight browser made in Rust with WebKitGTK. It's the successor to my
previous project Venturesome, aiming to provide a fast and minimalist browsing
@@ -345,7 +318,7 @@ export default function WebLayout() {