OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-booking commits / ba42ce0

Add main landing page with provider listing
Homepage at / shows "Book with confidence" headline and lists all active providers as clickable cards. Links to provider booking pages. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ba42ce0b7335494d2bfa5606f18fcfd4d1ac9972
by plankatron <fleeky@gmail.com> · 2026-03-22T20:25:51.000Z

Changed files (1) +65 -0

web/index.html +65 -0
……@@ -0,0 +1,65 @@
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>hyper-booking</title>
7 <link rel="stylesheet" href="web/css/app.css">
8</head>
9<body>
10 <div class="container">
11 <nav class="nav-bar">
12 <span class="nav-logo">hyper-booking</span>
13 <div class="nav-right">
14 <a href="dashboard" class="btn btn-secondary" id="dashboard-link" style="display:none">Dashboard</a>
15 <button class="btn btn-secondary" id="sign-in-btn">Sign In</button>
16 </div>
17 </nav>
18
19 <section style="text-align:center;padding:4rem 0;">
20 <h1 style="font-size:2.5rem;margin-bottom:1rem;">Book with confidence</h1>
21 <p style="color:var(--text-secondary);font-size:1.1rem;max-width:500px;margin:0 auto 2rem;">
22 Scheduling, payments, and client management for wellness professionals.
23 </p>
24 </section>
25
26 <section>
27 <h2 class="section-title">Providers</h2>
28 <div id="provider-list"><p class="empty">Loading...</p></div>
29 </section>
30
31 <footer class="footer">
32 <p>Powered by <strong>hyper-booking</strong></p>
33 </footer>
34 </div>
35
36 <script src="web/js/identity.js"></script>
37 <script src="web/js/app.js"></script>
38 <script>
39 (async function () {
40 try {
41 const res = await fetch('api/providers')
42 const providers = await res.json()
43 const list = document.getElementById('provider-list')
44
45 if (providers.length === 0) {
46 list.innerHTML = '<p class="empty">No providers yet.</p>'
47 return
48 }
49
50 list.innerHTML = providers.map(function (p) {
51 return '<div class="package-card" onclick="location.href=\'' + p.slug + '\'" style="cursor:pointer;">' +
52 '<div class="package-info">' +
53 '<h3 class="package-title">' + (p.displayName || '') + '</h3>' +
54 '<div class="package-meta">' + (p.specialties || []).join(' · ') + '</div>' +
55 '<p class="package-desc">' + ((p.bio || '').slice(0, 120)) + (p.bio && p.bio.length > 120 ? '...' : '') + '</p>' +
56 '</div>' +
57 '</div>'
58 }).join('')
59 } catch (err) {
60 document.getElementById('provider-list').innerHTML = '<p class="empty">Could not load providers.</p>'
61 }
62 })()
63 </script>
64</body>
65</html>