- scaffold 14 placeholder crates (app, db, engine, gen, http, logic,
policy, ql, service, sub, txn, ui, value, wal) — empty Cargo.toml +
src/lib.rs to receive code phase-by-phase from `rt`
- restructure docs/examples/ecommerce into multi-app layout: apps/admin
and apps/storefront, with shared/ types/logic/components, per-app
app.wo + wo.toml, and reusable .htmlx components (layout, money,
order-row)
- add reference/rest/{blog,ecommerce}.rest — VS Code/JetBrains HTTP
request files driving the running prototype, including 501/404/405
expectations for stubbed endpoints
- add docs/plan/09-concurrency-scaleout.md and docs/plan/ui/00-overview.md;
refine docs/plan/assembly/02-writeonce-stance.md
- refresh templates (about, article, header/footer, home, layout, styles)
and add static favicon/logo
- add infra/sync.sh and tighten .gitignore for reference/ symlinks
42 lines
1.4 KiB
Text
42 lines
1.4 KiB
Text
{{!--
|
|
Top-level page chrome shared across every app in the workspace.
|
|
Both storefront and admin inherit this layout and override the `{{> slot.content}}`
|
|
partial with their own screen's body.
|
|
|
|
The `wo:bind="session.user.name"` in the header is a field-level live binding:
|
|
when the customer updates their profile, every open tab's header repaints
|
|
without a page reload — the same delta-dispatch mechanism the live tables use,
|
|
just on a singleton subscription.
|
|
|
|
See docs/plan/ui/01-htmlx-format-spec.md (to land in a future sub-phase)
|
|
for the full grammar.
|
|
--}}
|
|
<!doctype html>
|
|
<html lang="{{app.i18n}}">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>{{page.title}} — {{app.name}}</title>
|
|
<link rel="stylesheet" href="/static/{{app.name}}.css">
|
|
{{> slot.head}}
|
|
</head>
|
|
<body class="theme-{{app.theme}}">
|
|
<header class="page-header">
|
|
<a href="/" class="brand">{{app.name}}</a>
|
|
<nav>{{> slot.nav}}</nav>
|
|
{{#if session.user}}
|
|
<span class="session" wo:bind="session.user.name">{{session.user.name}}</span>
|
|
{{/if}}
|
|
</header>
|
|
|
|
<main class="page-body">
|
|
{{> slot.content}}
|
|
</main>
|
|
|
|
<footer class="page-footer">
|
|
<small>Built with writeonce · {{app.version}}</small>
|
|
</footer>
|
|
|
|
{{!-- Client runtime + subscription manifest are injected automatically. --}}
|
|
<script data-wo-runtime src="/_wo/runtime.js"></script>
|
|
</body>
|
|
</html>
|