Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
c9db9bf
feat(arise): comparative progression study, evidence surfacing, UX ha…
henrygoldsmith07-wq Aug 22, 2026
029a705
feat(rtk): correctness/perf hardening, fuzz harness, capture+external…
henrygoldsmith07-wq Aug 22, 2026
7c8c00d
feat(rapport): hardening pass — gaming resistance, transfer validatio…
henrygoldsmith07-wq Aug 22, 2026
b9e0c12
fix(rapport): restore evidence tab modules lost from the working tree
henrygoldsmith07-wq Aug 22, 2026
d095e65
feat(forq): household trial outcome measurement
henrygoldsmith07-wq Aug 22, 2026
b8959a2
feat(forq): receipt parsing across nine retailer groups + benchmark h…
henrygoldsmith07-wq Aug 22, 2026
b523cd6
feat(arise): exercise library expansion 39->77 with enforced content …
henrygoldsmith07-wq Aug 22, 2026
c48aff7
fix(forq): restore outcome-flow fixes lost in the working-tree wipe
henrygoldsmith07-wq Aug 22, 2026
92efc02
feat(forq): unified meal/pantry/basket optimisation engine
henrygoldsmith07-wq Aug 22, 2026
1a274e5
feat(forq): wire optimiser into the live planner behind multiObjective
henrygoldsmith07-wq Aug 23, 2026
795a3aa
feat(forq): activate multi-objective plan selection in PlanGenerator
henrygoldsmith07-wq Aug 23, 2026
99e609f
test(forq): pre-pass, offline sync, property, perf and a11y coverage
henrygoldsmith07-wq Aug 23, 2026
9784207
Merge remote-tracking branch 'origin/main'
henrygoldsmith07-wq Aug 23, 2026
ffb561f
fix(forq): restore 357 app files swept by the standalone-repo migrati…
henrygoldsmith07-wq Aug 23, 2026
386d04e
feat(forq): OpenRouter free-tier AI + red animated favourite
henrygoldsmith07-wq Aug 23, 2026
4507787
feat(forq): rank free models by intelligence with ordered failover
henrygoldsmith07-wq Aug 23, 2026
47c98e5
fix(repo): restore site dirs and vercel configs so engineering gates …
henrygoldsmith07-wq Aug 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions apps/arise-site/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# arise — intro site

Static landing page for `arise`.

Same contract as `apps/le-studio-site`:

- One `index.html` + icons — no build step.
- Vercel project **Root Directory: `apps/arise-site`**, Framework Preset **Other**, no build command, output directory `.`.
- Monochrome stroke icons, `@le-studio/tokens` palette.

Links back to the family hub (`apps/le-studio-site`) and to the app.
Binary file added apps/arise-site/icon-192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/arise-site/icon-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions apps/arise-site/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
143 changes: 143 additions & 0 deletions apps/arise-site/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
<!doctype html>
<html lang="en-GB">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="light dark">
<title>Arise — Training, levelled up.</title>
<meta name="description" content="Arise — offline-first training: progression engine, scheduled programs, 39 exercises, load tracking, volume trends and history-derived attributes.">
<link rel="canonical" href="https://claude-code-5crn.vercel.app/">
<meta name="theme-color" content="#111111" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#0a0a0a" media="(prefers-color-scheme: dark)">
<meta property="og:title" content="Arise — Training, levelled up.">
<meta property="og:description" content="Arise — offline-first training: exercise browser, scheduled programs, load tracking.">
<meta property="og:site_name" content="Le Studio">
<meta property="og:url" content="https://claude-code-5crn.vercel.app/">
<meta property="og:image" content="https://claude-code-5crn.vercel.app/icon-512.png">
<meta property="og:image:width" content="512">
<meta property="og:image:height" content="512">
<meta property="og:image:alt" content="Arise app icon">
<meta property="og:type" content="website">
<meta property="og:locale" content="en_GB">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Arise — Training, levelled up.">
<meta name="twitter:description" content="Arise — offline-first training: exercise browser, scheduled programs, load tracking.">
<meta name="twitter:image" content="https://claude-code-5crn.vercel.app/icon-512.png">
<link rel="icon" href="./icon.svg">
<link rel="apple-touch-icon" href="./icon-192.png">
<style>
:root { --ls-bg:#f4f4f6; --ls-surface:#fff; --ls-line:#dcdce1; --ls-ink:#131316; --ls-ink2:#4d4d55; --ls-ink3:#6a6a74; }
@media (prefers-color-scheme: dark) { :root { --ls-bg:#0b0b0d; --ls-surface:#17171a; --ls-line:#34343a; --ls-ink:#f4f4f5; --ls-ink2:#b2b2ba; --ls-ink3:#8f8f99; } }
* { box-sizing:border-box; margin:0; }
body { background:var(--ls-bg); color:var(--ls-ink); font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; line-height:1.6; -webkit-font-smoothing:antialiased; }
.wrap { max-width:1020px; margin:0 auto; padding:0 22px; }
a:focus-visible, button:focus-visible { outline:2px solid var(--ls-ink); outline-offset:3px; }
.skip { position:absolute; left:-9999px; }
.skip:focus { position:fixed; left:12px; top:12px; z-index:100; padding:10px 14px; background:var(--ls-ink); color:var(--ls-bg); border-radius:10px; text-decoration:none; font-weight:700; font-size:14px; }
header { padding:18px 0; display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
header img { width:34px; height:34px; border-radius:9px; }
header b { font-size:17px; letter-spacing:-.01em; }
header nav { margin-left:auto; display:flex; gap:8px; flex-wrap:wrap; align-items:center; }
header nav a { color:var(--ls-ink2); text-decoration:none; font-size:13px; font-weight:600; padding:8px 10px; }
header nav a:hover { color:var(--ls-ink); }
.hero { text-align:center; padding:48px 0 36px; }
.hero img { width:84px; height:84px; border-radius:22px; box-shadow:0 12px 40px rgba(0,0,0,.18); }
h1 { font-size:clamp(30px,6vw,52px); font-weight:800; letter-spacing:-.03em; line-height:1.1; margin:22px 0 12px; }
.hero p.sub { font-size:clamp(15px,2.4vw,19px); color:var(--ls-ink2); max-width:640px; margin:0 auto 26px; }
a.cta { display:inline-block; background:var(--ls-ink); color:var(--ls-bg); font-weight:700; text-decoration:none; padding:13px 26px; border-radius:14px; font-size:15px; transition:opacity .15s ease, transform .15s ease; }
a.cta:hover { opacity:.85; transform:translateY(-1px); }
a.ghost { display:inline-block; color:var(--ls-ink); text-decoration:none; font-weight:600; padding:13px 20px; font-size:15px; }
.grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(250px,1fr)); gap:14px; }
.card { background:var(--ls-surface); border:1px solid var(--ls-line); border-radius:18px; padding:20px; }
.card h3 { font-size:15px; margin:8px 0 4px; display:flex; align-items:center; gap:8px; }
.card p { font-size:13px; color:var(--ls-ink2); }
.ic { width:22px; height:22px; stroke:currentColor; fill:none; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; flex-shrink:0; }
.stats { display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:12px; padding:28px 0; }
.stat { background:var(--ls-surface); border:1px solid var(--ls-line); border-radius:16px; padding:18px 8px; text-align:center; }
.stat b { display:block; font-size:26px; letter-spacing:-.02em; }
.stat span { font-size:12px; color:var(--ls-ink3); }
.privacy, .faq { background:var(--ls-surface); border:1px solid var(--ls-line); border-radius:22px; padding:28px; margin:48px 0; }
.privacy { text-align:center; }
.privacy h2, .faq h2 { font-size:clamp(20px,3.5vw,26px); letter-spacing:-.02em; margin-bottom:8px; }
.privacy p { color:var(--ls-ink2); max-width:560px; margin:0 auto 18px; font-size:14px; }
.pill { display:inline-block; background:var(--ls-bg); border:1px solid var(--ls-line); border-radius:999px; padding:6px 14px; font-size:12px; font-weight:600; color:var(--ls-ink2); margin:0 4px 12px; }
details { border-top:1px solid var(--ls-line); padding:12px 0; }
details:first-of-type { border-top:0; }
summary { cursor:pointer; font-weight:700; font-size:14px; list-style:none; }
summary::-webkit-details-marker { display:none; }
details p { margin-top:8px; font-size:13px; color:var(--ls-ink2); }
footer { border-top:1px solid var(--ls-line); padding:26px 0 40px; text-align:center; color:var(--ls-ink3); font-size:12px; margin-top:24px; }
footer a { color:var(--ls-ink2); }
@media (prefers-reduced-motion: reduce) { a.cta { transition:none; } a.cta:hover { transform:none; } }
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Arise",
"url": "https://claude-code-5crn.vercel.app/",
"description": "Arise — offline-first training: progression engine, scheduled programs, 39 exercises, load tracking, volume trends and history-derived attributes.",
"image": "https://claude-code-5crn.vercel.app/icon-512.png",
"applicationCategory": "HealthApplication",
"operatingSystem": "Web",
"isAccessibleForFree": true,
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "GBP"
}
}
</script>
</head>
<body>
<a class="skip" href="#main">Skip to content</a>
<div class="wrap">
<header>
<a href="https://le-studio-site-henrygoldsmith07-9188s-projects.vercel.app/" style="display:flex;align-items:center;gap:10px;text-decoration:none;color:inherit"><img src="./icon-192.png" alt="" aria-hidden="true"><b>Arise</b></a>
<nav aria-label="Site">
<a href="https://le-studio-site-henrygoldsmith07-9188s-projects.vercel.app/">Family</a>
<a href="#features">Features</a>
<a href="#faq">FAQ</a>
<a class="cta" href="https://github.com/henrygoldsmith07-wq/Claude-Code/tree/main/apps/arise">Open Arise</a>
</nav>
</header>
<section class="hero" id="main">
<img src="./icon-192.png" alt="" aria-hidden="true">
<p style="margin:14px 0 0;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--ls-ink3);font-weight:700">Le Studio family · Arise</p>
<h1>Train like a game.<br>Keep it honest.</h1>
<p class="sub">An offline-first training companion — 39 exercises, real programs turned into scheduled sessions, load-tracked sets and attributes that only move when your history does. No nutrition theatre.</p>
<a class="cta" href="https://github.com/henrygoldsmith07-wq/Claude-Code/tree/main/apps/arise">Open Arise</a>
<a class="ghost" href="https://le-studio-site-henrygoldsmith07-9188s-projects.vercel.app/">← Back to family</a>
</section>
<section class="stats" aria-label="Stats">
<div class="stat"><b>39</b><span>exercises</span></div>
<div class="stat"><b>3</b><span>programs</span></div>
<div class="stat"><b>0</b><span>accounts required</span></div>
<div class="stat"><b>3</b><span>sets: reps·kg·RPE</span></div>
<div class="stat"><b>PWA</b><span>installable</span></div>
<div class="stat"><b>≥44px</b><span>touch targets</span></div>
</section>
<section class="grid" id="features" style="margin-top:8px">
<div class="card"><h3><svg class="ic" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16"/></svg>Exercise browser</h3><p>Search + muscle/equipment/level filters and an Only-my-kit toggle — always shows a substitution when kit is missing.</p></div>
<div class="card"><h3><svg class="ic" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="5" width="18" height="16" rx="3"/><path d="M3 10h18M8 3v4M16 3v4"/></svg>Programs → schedule</h3><p>Picking a program creates dated sessions; Today shows today's session and progress is done/total.</p></div>
<div class="card"><h3><svg class="ic" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 19V5"/><path d="M4 19h16"/><path d="M8 15l3-6 3 4 3-8"/></svg>Load tracking</h3><p>Every set is { reps, weightKg, rpe } — volume derived live, PRs from Epley 1RM, bodyweight respected.</p></div>
<div class="card"><h3><svg class="ic" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></svg>Attributes from history</h3><p>Strength/Endurance/Consistency/Technique computed from volume, variety, cardio minutes and streak — never from labels.</p></div>
<div class="card"><h3><svg class="ic" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3v18M8 8h8M7 12h10M9 16h6"/></svg>Export / restore</h3><p>Versioned JSON backup with Merge (de-dupe) or Replace — you own the file, no cloud required.</p></div>
<div class="card"><h3><svg class="ic" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></svg>Offline & accessible</h3><p>manifest + sw.js cache, skip link, aria-live counts, focus-visible ring, prefers-reduced-motion.</p></div>
</section>
<section class="privacy" style="margin-top:28px">
<h2>Honest by design</h2>
<p>Local-first, no forced login, no ads. Equipment-aware from onboarding — never recommends a barbell to a bodyweight-only user.</p>
<div><span class="pill">Vite + React</span><span class="pill">@le-studio/tokens</span><span class="pill">node:test</span><span class="pill">Open source</span></div>
<a class="cta" href="https://github.com/henrygoldsmith07-wq/Claude-Code/tree/main/apps/arise">Open Arise</a>
</section>
<section class="faq" id="faq">
<h2>FAQ</h2>
<details><summary>Does onboarding matter?</summary><p>Yes — goal, location, equipment, level and days re-sort recommendations deterministically. Minimal kit pushes beginner-friendly first.</p></details>
<details><summary>Is there a nutrition system?</summary><p>Intentionally not. That recreates Forq and distracts from the training proposition.</p></details>
<details><summary>Can I install it?</summary><p>Yes — Add to Home Screen, then airplane-mode reload keeps Today/Exercises/schedule from cache.</p></details>
</section>
<footer><a href="https://le-studio-site-henrygoldsmith07-9188s-projects.vercel.app/">Le Studio family</a> · Arise · <a href="https://github.com/henrygoldsmith07-wq/Claude-Code/tree/main/apps/arise">Open app</a> · <a href="https://github.com/henrygoldsmith07-wq/Claude-Code">Source</a></footer>
</div>
</body>
</html>
8 changes: 8 additions & 0 deletions apps/arise-site/vercel.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"framework": null,
"outputDirectory": ".",
"cleanUrls": true,
"trailingSlash": false,
"ignoreCommand": "node \"$(git rev-parse --show-toplevel)/scripts/vercel-ignore.mjs\" --project arise-site"
}
Loading
Loading