Skip to content

Luthuli pilot — dashboard, bookings, chat, staff roster, client report - #2

Open
imbilawork wants to merge 30 commits into
mainfrom
dev-luthuli-agents
Open

Luthuli pilot — dashboard, bookings, chat, staff roster, client report#2
imbilawork wants to merge 30 commits into
mainfrom
dev-luthuli-agents

Conversation

@imbilawork

Copy link
Copy Markdown
Contributor

Summary

23 commits covering the Luthuli pilot buildout on the Developers hub — partner showcase, manager tooling, guest-facing flows, and client reporting for Guy.

Partner Hub

  • Add Luthuli pilot as a Live Pilot section in Partner Hub

Manager Dashboard

  • Tabbed dashboard: Overview / Staff / Finance / Maintenance
  • Real D1 booking data (replaces mock data)
  • Platform Plan tab — roadmap showing live / next / future for Guy

Bookings & Calendar

  • Gantt-style booking timeline
  • Google Calendar + iCal export
  • Fix: calendar bookings show correct night span (depart day is checkout, not last night)

Staff Roster

  • Redesigned: clear ON/OFF table per day, coverage row, guest overlay

Chat (guest, manager, staff)

  • Mobile input-bar buffer fixes across all three chat surfaces
  • Thicker chat bar buffer + reset/seed API endpoint
  • More-visible Chat/Dashboard tab bar on mobile

Notifications

  • Real email notifications: booking alerts to Guy & LJ, guest confirmations

Client Report for Guy

  • Report page — what's built, how to test, pilot proposal
  • send-report email endpoint (sends to Guy and Craig)
  • Pricing removed from report (to discuss with Guy directly)

Mobile & Misc

  • Mobile viewport + agent learning log
  • Persistent quick menu, scrollable Plan tab on mobile
  • Remove Win95 classic view

Scope

39 files changed · +11,155 / −178

Test plan

  • Open Partner Hub, confirm Luthuli pilot section renders with correct links
  • Log in as manager, walk all four dashboard tabs (Overview/Staff/Finance/Maintenance)
  • Open Bookings tab, confirm Gantt view renders with real D1 data; export to Google Cal and iCal
  • Verify a multi-night booking shows correct night count (checkout day not counted)
  • Staff roster: toggle ON/OFF, confirm coverage row updates, confirm guest overlay appears
  • Create a test booking — confirm Guy + LJ get booking alert email, guest gets confirmation
  • Guest/manager/staff chat on mobile: input bar not cut off, keyboard doesn't overlap
  • Plan tab scrolls horizontally on mobile
  • /api/send-report endpoint delivers to Guy + Craig

🤖 Generated with Claude Code

Craig Leppan and others added 30 commits April 5, 2026 20:41
Moved simulations out of cramped card interiors into a shared
full-width panel that appears below the card grid:

- Card click → highlights card border green
- Panel slides in below with header (icon + title + close button)
- Content renders at full page width with readable font sizes
- Close button (×) or click another card to switch
- Auto-scrolls panel into view
- Tables use 13px font, proper padding
- Dropdowns use 12px font, 6px padding
- Takeoff results at 12px with 1.8 line height

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ddleware conflict)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Partner profile:
- SA's largest sectional title developer (JSE: BWN)
- 56,426 apartments, 98 developments, R3B+ revenue
- Edge Green + 6-Star certified
- Full Balwin World ecosystem mapped (10 services)
- Skills: biz/openbim, biz/estate-management
- Links to SmartBIM demo and AI Construction page

SmartBIM concept demo — Balwin World × openBIM:
- Central hub: IFC Model connects all ecosystem services
- 6 clickable ecosystem spokes, each expands to show:
  - What the service does
  - Exact IFC classes that connect it to the model
  - What AI enables at Balwin's scale (56K units)
  - Live metrics

Ecosystem drill-downs:
- Fibre: IfcCableSegment, bandwidth prediction, IoT backbone
- Green Living: IfcSolarDevice, 42MW installed, R186M/yr saved
- Technik: IfcDoor access points, 2,400 cameras, person detection
- Infrastructure: federated design, clash detection, 4D programme
- Rentals: IfcSpace→unit, condition tracking, vacancy prediction
- Lifestyle: occupancy analytics, equipment maintenance, 12,400 members

Portfolio dashboard: 56K units, 42MW solar, 99.2% fibre uptime,
R186M energy saved, 94% occupancy, Edge Green certified

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rtner

Trevor Glaister / Optimal Tech as Premium Build Partner, 1M tokens.

Partner profile with:
- 10-item Microsoft stack grid (Azure, M365, D365, Power Platform,
  Azure AI, Intune, DevOps, Entra ID, Sentinel, Copilot)
- 16 capabilities
- 4 skills: azure-cloud, microsoft-365, dynamics-365, enterprise-security
- "Why this matters" — bridges AI-native dev with enterprise Microsoft

Hub section under Technology category.
PIN: trevor / 7334 / scope: optimaltech
Welcome email drafted (Trevor.Glaister@OptimalTech.co.za, CC craig@2nth.ai)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Added to partner profile:
- "2nth.io Compute Partner" section with badge
- "First Partner to Offer 2nth.io Compute" headline
- 4 stats: 12+ templates, 6 Hetzner locations, R750/mo, AI managed
- Links to 2nth.io platform and showcase
- Explanation: deploy ERPNext, TwentyCRM etc. for their clients

Hub section:
- Added "2nth.io Compute — First Partner" link
- Shows authorised reseller status

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Full partner explainer showing Trevor how to sell 2nth.io + 2nth.ai:

Proposition flow: You (sell) → 2nth.io (provision) → Hetzner (host) → Client (use)

How it works: 6-step table from client request to live platform
in 4 minutes. ASCII deployment diagram showing the full chain.

12 templates: ERPNext, TwentyCRM, Nextcloud, n8n, Metabase, Gitea,
Grafana, MinIO, Directus, Plausible, Mattermost + custom.

Margin model:
- Single client: R5K in, R2.5K cost = R2.5K margin
- Full stack (4 platforms): R10K in, R5.5K cost = R4.5K margin
- Plan table: Starter/Pro/Enterprise with cost, charge, margin

Client conversations: 4 realistic scenarios with suggested responses
(ERP vs SAP, file sharing, dashboards, onboarding automation)

2nth.ai integration: AI reports on ERPNext, smart automation via n8n,
natural-language Metabase dashboards

CTA: "Your first client deploy is free"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… API

Three AI agent interfaces for lodge management:
- Guest agent (WhatsApp-style) — bookings, availability, pricing, lodge info
- Staff agent (SMS-style) — schedules, leave requests, room status
- Manager agent (chat + dashboard) — occupancy, revenue, staff, approvals

Backend API with D1 schema, intent detection, OTP auth via Resend.
Client-side fallback for demo without API. Craig & Guy auto-enrolled as admins.
Also adds repos.html partner repository browser.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix input bar cut off on mobile browsers (use visualViewport + 100dvh)
- Add feedback thumbs up/down on guest and staff agent responses
- Add Agent Learning Log panel to manager dashboard with filters, notes, CSV export
- Log all chat exchanges to localStorage for review

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Increase padding-bottom to 16px + 20px safe-area fallback (was 6-8px + 0px)
- Bump input field min-height to 44px (Apple HIG touch target)
- Increase send button to 44-46px tap target
- Larger font size (16px) to prevent iOS auto-zoom on focus

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add scrollable quick menu bar above input in all 3 chats
  - Guest: Availability, Pricing, Pavilions, Book, Guides, Directions
  - Staff: Schedule, Coverage, Guests, Leave, Room ready
  - Manager: Occupancy, Revenue, Staff, Bookings, Leave, Systems
- Fix viewport: use 100dvh + -webkit-fill-available + relative positioning
- Bigger input targets (44px min) with generous bottom padding

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Dashboard restructured into 4 tabs
- Staff tab: 4-week coverage calendar with rotation logic, leave requests, stats
- Finance tab: revenue cards, PH commission, levy breakdown per booking
- Maintenance tab: solar/water status, task list (offline placeholders)
- Agent Learning Log moved to overlay
- Coverage calendar shows both staff per day with guest booking bars

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rea)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- All chat bars: padding-bottom 44px + 28px safe area (72px total)
- GET /api/luthuli/reset — show data counts
- POST /api/luthuli/reset — action: reset | clear | seed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nfirmations

- Email helper sends to guy@rumf.co.za + hamlin@mweb.co.za on new bookings
- Guest gets confirmation email with booking details + levy breakdown
- Manager can toggle: "emails on" / "emails off" via chat
- Toggle state persisted in KV
- Beautiful HTML email templates matching Luthuli earth-tone branding
- CC managers on guest confirmations

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…lendar

- transformBookings() converts API format (arrive/depart/source/guest_name) to calendar format (start/end/type/name)
- Calendar, booking modal, and levy breakdown all use live D1 data
- Fallback to demo data only when API unavailable
- Modal shows full booking details (adults, children, guide, email, total)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New LIVE PILOTS category at top of hub (before Technology)
- Luthuli Lodge group with highlighted border showing all 5 entry points
- Manager Dashboard featured prominently with admin note
- Guest Agent, Staff Agent, Lodge Dashboard, Platform Concept linked
- Removed old Luthuli entry from Technology section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…t, not last night)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace broken day-cell calendar with Gantt timeline (pavilion rows × day columns)
- Booking bars span full duration with color coding (owner/direct/PH/pending)
- Google Calendar export + .ics download for all bookings
- Sticky pavilion labels for mobile horizontal scroll
- Coverage calendar shows guest presence for Sunday work rules

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Plan tab with 3 tiers: Live Now (9 items), Coming Next (7 items), Future Enterprise (9 items)
- Data Architecture section showing current D1 schema + planned additions
- Integration Map: connected, next, future, infrastructure
- Email inbox processing, WhatsApp API, SMS gateway, payments in Coming Next
- Multi-property, OTA channel manager, IoT, voice AI in Future
- 2nth.ai branding as scalable enterprise template

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Dark earth background with sage border — stands out clearly
- Larger text (11px, 700 weight), more padding
- Higher z-index (200) to stay above everything
- More bottom padding on app body so content doesn't hide behind tabs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ge row, guest overlay

- Horizontal scrollable table: dates across top, staff as rows
- Each cell shows ON/OFF/SUN/L with clear color coding
- Guest row shows amber dots where bookings exist
- Coverage row shows 2/1/⚠ per day (red for gaps)
- Stats cards above roster showing cycle day + leave remaining
- Uses real D1 booking data for guest presence on Sundays
- Summary bar with coverage percentage

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Comment on lines +659 to +664
document.getElementById('live-endpoints').innerHTML = endpoints.map(e => `
<div style="background:var(--c-graphite);border:1px solid var(--c-border);border-radius:8px;padding:16px">
<div style="font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:1px;text-transform:uppercase;color:var(--c-brand);margin-bottom:4px">${e.label}</div>
<div style="font-family:'JetBrains Mono',monospace;font-size:13px;color:var(--c-titanium);font-weight:600;margin-bottom:2px;word-break:break-all">${e.value}</div>
<div style="font-size:12px;color:var(--c-steel-600)">${e.desc}</div>
</div>`).join('');
`[${hostname}] Published to 2nth/${hostname}/telemetry`,
];
msgs.forEach((m,i) => setTimeout(() => {
lterm.innerHTML += `<div>${m}</div>`;

// ─── Helpers ─────────────────────────────────────────────────
function log(el, msg, cls) {
el.innerHTML += `<div class="${cls||''}">${msg}</div>`;
html += '</span>';
html += '</div>';

row.innerHTML = html;
bubble.appendChild(p);
}
const container = document.createElement('div');
container.innerHTML = htmlContent;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants