VibeGUI is a Svelte rewrite of DotGUI (the static game site in the sibling DotGUI/ directory, which was left completely untouched — verified via git status). It preserves the site's functioning, routes, and design while replacing ~110 copy-pasted static HTML pages with one small single-page app.
- Stack: Svelte 4 + Vite 5 +
svelte-spa-router(hash routing), no backend, no SSR.npm install/npm run buildproduces a staticdist/folder (verified: clean build, zero warnings, ~66 KB JS gzip ~20 KB). - Catalog data instead of duplicated HTML: all 104 game pages and 6 tool pages were parsed into
src/lib/games.js/src/lib/tools.js(slug, filter key, tile label, image, embed URL, local-vs-external flag, catalog visibility). OneGamePlayerand oneToolPlayerroute render all 110 shells from that data, including the exact per-page embed URLs (localgame-embeds/*.htmlaliases likebadtime/bind/cookieincluded) and the 12 external fallback hosts. - Game files served verbatim:
public/contains byte-for-byte copies of the originalfavicon.ico,media/(81 files),game-embeds/(93 files incl. the GBA-port subfolder),tool-embeds/(pico8.html,ruffle.html), and the inlined 2 MBtool-pages/sandstone.html. No embed was rewritten, so every game behaves exactly as before. - Routes:
/gateway (oldindex.html),/home,/games,/tools,/settings,/disclaimer,/play/:slug(oldpages/game-pages/*.html),/tools/:slug(oldpages/tool-pages/*.html),/cloak/about-blank,/cloak/blob,/cloak/data-url(oldlaunch/blob/dataurl.html). Every legacy path (/start.html,/select.html,/settings.html,/tools.html,/disclaimer.html,/launch.html,/blob.html,/dataurl.html,/start,/select) is aliased to the same component, so old bookmarks keep working. - Features ported 1:1: tab cloaker (same
localStoragekeytabCloaker, so settings carry over; Google / Vocabulary.com spoofing), game live-filter with the same no-results message, game request form link, Discord link, 6 homepage quotes (one quote mentioning search was dropped with the search removal), footer credits, taskbar Back/Restart/Full Screen on players, blob launcher with the same 5 favicon presets andrt_favicon_v1/rt_title_v1keys, about:blank launcher, and the fullstyles.cssdesign (nested rules flattened into valid CSS with identical cascade order). - Deployable anywhere as static files: relative asset base (
./) plus hash routing means deep links work with zero server rewrites. Included configs:vercel.json(SPA rewrites),netlify.toml+public/_redirects(/* -> /index.html 200, also read by Cloudflare Pages),public/.nojekyll, and.github/workflows/deploy.yml(GitHub Pages:npm ci+npm run build+dist/artifact). Tested by servingdist/and confirming 200s for the app, an embed, and an image.
- Fixed dead link: the "Geometry Dash Demake" tile pointed to non-existent
geodashdemake.html(404); it now opens the real page/embed. - Fixed broken DataURL page: it referenced an uncommitted
pages/dataurl.txtand had no working button; it now builds and opens a workingdata:launcher tab. - Fixed 404 title bug: the old 404 page's cloak script set the title to "Disclaimer"; it now says 404.
- Fixed Crossy Roads tile: its
alttext wrongly said "Geometry Dash". - Fixed Baldi's Basics filter key: truncated to "Baldi" by a quote in the attribute; now the full title.
- Removed all search references: the nav magnifier button, the
/search+/search.htmlroutes, the homepage note, and one homepage quote mentioning search are all gone (upstream/search.htmlnever existed — it only ever produced a 404). The nav now has 5 buttons. - Surfaced 2 hidden tools: Ruffle Emulator and Soundboard existed as pages but had no catalog tiles; they now have tiles alongside the original 4.
- 36 unlisted games stay playable via direct
/play/<slug>URLs (same as before, where their HTML files existed but had no tiles). - Fullscreen upgraded: the taskbar now tries the Fullscreen API first and only navigates to the raw embed as a fallback (old behavior navigated away immediately); tool shells still omit the button, as before.
- Removed Google Analytics (
G-Q919W0VJ1S) and Bidvertiser ad widgets (they were on nearly every page); there is no tracking or third-party script left except the games' own external hosts and the Google Fonts import. - Blob launcher targets this deployment instead of the hardcoded
https://dot-gui.vercel.app, and launches in one click (no download-then-open round trip). - Homepage trimmed: the "Search temporarily unavailable" line was removed along with everything else search-related.