feat(ui): static shell + router + api wrapper
Three-column grid (sidebar / main / right rail) with Cradle aesthetic: blackflame accent on Cinzel display headings + Cormorant Garamond body in cards, system UI for chrome. Hash-based router covers all entity routes plus search, inbox, sacred-valley. api.js stores OWNER_TOKEN in localStorage and prompts via a modal on 401. dom.js provides safe el() + mount() builders so no component ever assigns innerHTML from API data (the only exception is an explicit, scary-named html: opt-in for sanitizer output, used later by the markdown editor). state.js is a tiny event bus for shared chrome state (pending count). Components and views are loaded as ES modules — sidebar / topbar / rightrail + 9 view stubs that the later Phase E tasks fill in. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
15
public/views/home.js
Normal file
15
public/views/home.js
Normal file
@@ -0,0 +1,15 @@
|
||||
// T17 stub — recent activity lands in T19.
|
||||
import { el, mount } from '../dom.js';
|
||||
|
||||
export async function render(main) {
|
||||
mount(main,
|
||||
el('h1', { class: 'view-h1' }, 'The Void'),
|
||||
el('p', { class: 'view-sub' }, 'Step into the abyss. Everything else loads as you navigate.'),
|
||||
el('div', { class: 'card' },
|
||||
el('h3', {}, 'Welcome'),
|
||||
el('p', { class: 'muted' },
|
||||
'Pick a space from the sidebar to start. The API is alive; the views populate as Phase E lands.'
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user