From 5a8e178f51e14518717213be08662075f2146078 Mon Sep 17 00:00:00 2001 From: jay Date: Sun, 21 Jun 2026 19:26:31 -0400 Subject: [PATCH] =?UTF-8?q?Homepage=20hub:=20/home2=20prototype=20?= =?UTF-8?q?=E2=80=94=20sections-as-data=20+=20bigger=20shell=20+=20hybrid?= =?UTF-8?q?=20room=20cards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New sections registry (lib/rooms.js): each room is one data entry (title/blurb/href/cta/ size/preview/icon) — add or resize by editing the list. - Reusable RoomCard (lib/components/RoomCard.svelte) with size variants and hybrid previews: Art shows today's live thumbnail, News shows today's top headline, others are blurb+CTA. - /home2 hidden prototype (noindex, unlinked) with a bigger top bar (logo 50px, larger nav labels) and a reflowing grid hub of the four rooms (News/Art/Play/Daily Moment). Iterate the look here, then promote to / and remove the clone. Co-Authored-By: Claude Opus 4.8 --- frontend/src/lib/components/RoomCard.svelte | 72 ++++++++++++ frontend/src/lib/rooms.js | 46 ++++++++ frontend/src/routes/home2/+page.svelte | 122 ++++++++++++++++++++ 3 files changed, 240 insertions(+) create mode 100644 frontend/src/lib/components/RoomCard.svelte create mode 100644 frontend/src/lib/rooms.js create mode 100644 frontend/src/routes/home2/+page.svelte diff --git a/frontend/src/lib/components/RoomCard.svelte b/frontend/src/lib/components/RoomCard.svelte new file mode 100644 index 0000000..1c8e2bb --- /dev/null +++ b/frontend/src/lib/components/RoomCard.svelte @@ -0,0 +1,72 @@ + + + + {#if room.preview === 'art' && artImg} +
+ {/if} + +
+
{room.icon}{room.title}
+ + {#if room.preview === 'news' && newsHeadline} +

“{newsHeadline}”

+ {:else} +

{room.blurb}

+ {/if} + + {room.cta} +
+
+ + diff --git a/frontend/src/lib/rooms.js b/frontend/src/lib/rooms.js new file mode 100644 index 0000000..18f8d6b --- /dev/null +++ b/frontend/src/lib/rooms.js @@ -0,0 +1,46 @@ +// The homepage hub as data. Each "room" is one entry — add, reorder, or resize by +// editing this list. `size` drives the grid footprint (large | wide | tall | small); +// `preview` picks how the card shows itself (news/art = live snippet, static = blurb). +// Copy here is placeholder — owner-written final wording lands later. +export const ROOMS = [ + { + id: 'news', + title: 'Good News', + blurb: "The world's quiet good, gathered each morning.", + href: '/', // becomes /news once the Brief is split out + cta: 'Read the Brief', + size: 'large', + preview: 'news', + icon: '📰', + }, + { + id: 'art', + title: 'Daily Art', + blurb: 'A masterwork a day, beautifully framed.', + href: '/art', + cta: 'View today', + size: 'wide', + preview: 'art', + icon: '🖼️', + }, + { + id: 'play', + title: 'Play', + blurb: 'Daily Word, Word Search, Bloom, Memory Match.', + href: '/play', + cta: 'Enter', + size: 'small', + preview: 'static', + icon: '🎲', + }, + { + id: 'moment', + title: 'Daily Moment', + blurb: 'A small calm to carry with you.', + href: '#', + cta: 'Soon', + size: 'small', + preview: 'static', + icon: '🌿', + }, +]; diff --git a/frontend/src/routes/home2/+page.svelte b/frontend/src/routes/home2/+page.svelte new file mode 100644 index 0000000..2d9f413 --- /dev/null +++ b/frontend/src/routes/home2/+page.svelte @@ -0,0 +1,122 @@ + + + + upbeatBytes — a calmer corner of the internet + + + + +
+
+ + upbeatBytes + + +
+ +
+
+

A calmer corner of the internet.

+

Good news, daily art, small games, and little resets.

+
+ +
+ {#each ROOMS as r (r.id)} + + {/each} +
+
+ +
upbeatBytes — no ads, no paywalls, no doomscrolling.
+
+ +