262 Commits

Author SHA1 Message Date
2bfbdd602b chore: sync deno.lock 2026-08-27 23:33:39 -07:00
964dd74f72 feat(launchpad): populate all registered apps for Universal Sandbox guests on Launchpad and allow ForwardAuth access 2026-08-27 23:33:30 -07:00
c221e32855 fix(join): wire handleJoin and handleSplashJoin in public scripts and join fragments to fix 400 error on /join 2026-08-27 23:05:18 -07:00
77a82cbe84 feat(sessions): include active event group sessions in unified session table and mobile deck without removing event deck 2026-08-27 22:47:18 -07:00
2fa8222062 feat(events): complete audit parity for vanity /e/:slug splash, /join/:slug CLI env ingress, and PIN+slug rotation 2026-08-27 22:33:39 -07:00
fc86565597 fix(sessions): wire extend and revoke onclick handlers in table and mobile deck fragments 2026-08-27 22:28:57 -07:00
b38f122df4 fix(ui): complete all items in tasks/checklist.md (sticky docking, floating toasts, rotate PIN, tab locks, expired events, reset actions) 2026-08-27 22:24:10 -07:00
ed9bdb8852 fix(ui): align create button terminology with ui-audit specifications (Create Session & Create Event) 2026-08-27 22:06:01 -07:00
cd2dd194ec fix(ui): restore compact/grid toggle, 2-tab delegation, sticky header, and event cockpit guest actions 2026-08-27 21:57:20 -07:00
b2a2bdab07 fix(ui): restore launchpad routing, admin catalog pages, and ui-audit sessions workflow 2026-08-27 21:47:50 -07:00
2c07c8cba1 fix(ui): add layout css for top navbar and fix isGlobalAdmin database query 2026-08-27 21:29:16 -07:00
aa9760b1e1 fix(ui): restore centered auth card layout, serve auth-client assets, and fix root redirects 2026-08-27 21:11:44 -07:00
a8111f6dc3 test(auth): hermetically mock SQL and Valkey rate limiter to prevent connection leaks 2026-08-27 21:02:10 -07:00
11d4b80014 build(docker): update container image entrypoint to src/main.ts and copy src workspace 2026-08-27 20:58:55 -07:00
ed70e4d1cd test(smoke): add comprehensive in-memory HTTP router smoke test 2026-08-27 20:53:29 -07:00
ee02daba79
feat(phase-5a): complete runtime switchover to src/main.ts and isolate cleanup task (#61) 2026-08-27 20:52:45 -07:00
58ac8a983d
feat(phase-4): persistent architectural and network test harness (#60)
* feat(phase-4): persistent architectural and network test harness

* docs(audit): add phase 4 post-implementation audit
2026-08-27 20:50:43 -07:00
5bbe2bc764
refactor(core): self-contained core utilities and 100% domain isolation (#59) 2026-08-27 20:43:24 -07:00
973fba0607
feat(phase-3): real-time hypermedia slices and client scripts migration (#58)
* feat(phase-3): migrate events and sessions hypermedia slices and client scripts

* docs(audit): add phase 3 post-implementation audit
2026-08-27 20:35:57 -07:00
06cad3d8fe feat(arch): enforce 400-line ceiling and subdivide vertical slices
- Update AGENTS.md with 400-line hard ceiling and sub-feature slicing rules
- Update scripts/lint_arch.ts to enforce 400 lines max with anti-formatting heuristics
- Subdivide src/shared/ui/ into layout, navbar, and admin layout fragments
- Subdivide src/features/auth/ into modular login, register, and recovery routes/fragments
- Subdivide src/features/admin/ into users, user details, apps, and audit fragments
- Maintain backwards compatibility via fragment index re-exports
2026-08-27 19:55:01 -07:00
8b30b17dbe
feat(arch): implement Phase 2 base vertical slices and shared UI (#57)
- Scaffold shared UI fragments and styles in src/shared/ui/
- Implement full Auth vertical slice in src/features/auth/ with WebAuthn ceremonies and recovery endpoints
- Implement full Admin vertical slice in src/features/admin/ with responsive tables and mobile decks
- Add public client-side JS utilities and pure JS BIP-39 module
- Mount routes in src/main.ts and keep legacy server/ and ui/ quarantined
- Add pure JSX and API tests for Auth and Admin slices
2026-08-27 19:29:08 -07:00
34e9c4a76d chore(audit): fix formatting, lint types, and add Phase 1 audit report 2026-08-27 18:22:13 -07:00
8062283955 chore(plan): move hypermedia plan to in-progress for phase 2 2026-08-27 18:21:55 -07:00
a1909381d5
Merge pull request #56 from mrteye/phase1-arch-setup-14562406403991920726
feat: phase 1 vertical slicing & hypermedia foundation
2026-08-27 18:20:18 -07:00
google-labs-jules[bot]
a613ed2b68 feat: execute Phase 1 architectural hypermedia framework
- Bootstraps `src/core/` foundation (`db.ts`, `valkey.ts`, `spire_ffi.ts`, `main.ts`).
- Adds `auth_guards.ts` for payload capping, CSRF check, and rate limiting.
- Adds `content_negotiation.ts` and `sse_adapter.ts` for Datastar transport helpers.
- Adds `error_fragments.tsx` for standardized Datastar error morphs.
- Introduces `scripts/lint_arch.ts` to block imperative DOM usage.
- Updates `deno.json` with src workspace configs and lint commands.

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-28 01:20:01 +00:00
f5c44f8ac5 docs(plan): refine hypermedia migration plan to 5-phase structure with shift-left tooling and AGENTS.md legacy quarantine 2026-08-27 17:52:43 -07:00
9fdb97f3f4
Merge pull request #55 from mrteye/plan-hypermedia-architecture-5555508364227023504
docs(plan): add hypermedia architecture migration plan

migration from the legacy `server/` and `ui/` directories to a domain-oriented vertical slice architecture under `src/features/`. The plan spans four phases: Core Foundation, Base Slices, Real-Time Slices, and Architectural Testing.
2026-08-27 17:17:16 -07:00
google-labs-jules[bot]
ff024cb23b docs(plan): add hypermedia architecture migration plan
Adds a comprehensive, 4-phase execution plan in `tasks/new/` outlining the architectural transition to a Datastar-driven Hypermedia paradigm and Vertical Feature Slicing, adhering to the project's task guidelines and blueprint.

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-28 00:16:33 +00:00
f764f28abc minor plan de-dupication update 2026-08-27 17:10:27 -07:00
081cd9c765 feat(arch): adopt hypermedia & vertical slicing paradigm (Datastar + Deno SSR)
- Establish server-driven hypermedia architecture with Datastar to eliminate brittle imperative client DOM manipulation
- Codify vertical feature slicing (routes, queries, fragments co-located by domain)
- Formalize right-sized dual transport: standard text/html for user mutations, targeted SSE for Valkey pub/sub broadcasts
- Define zero-trust guardrails: untrusted client signals, 16KB payload bounds, rate limiting, and data-ignore subtree protection
- Establish hypermedia error protocol (4xx/5xx return JSX error fragments) and mid-stream SSE resilience
- Add active task checklist with granular 1-to-1 items and shared component suggestions
- Update AGENTS.md with AI-optimized engineering principles (SRP, bounded files, flat call chains, distinctive naming)
2026-08-27 16:51:16 -07:00
70542c2dc2 docs(arch): update hypermedia architecture blueprint and AGENTS.md with SSE adapter, mid-stream resilience, and AI-optimized coding principles 2026-08-27 16:44:18 -07:00
f6b5dd3992 fix(sessions): resolve attendees drawer TypeError and PostgreSQL interval syntax error 2026-08-27 13:30:03 -07:00
0a3c147880 fix(events): patch db backfill for legacy users and sync frontend domain drift on rotation 2026-08-27 00:21:34 -07:00
3dcd823e23
Merge pull request #54 from mrteye/jules-3797922055245838917-9136c1df
feat: UI and Event Polish Phase

Completed Phase 6 Final Polish according to the task specification `2026-0826.06.gem.feat.ui.sessions-and-events-final-polish-2305.ph6.md`. Fixes backend rotation vulnerabilities and extension math bugs while implementing high-polish UI elements including bounded 2-row cards, WAI-ARIA compliant delegation tabs, and natural telemetry formatters. Checked against all standard quality gates.
2026-08-26 23:39:02 -07:00
google-labs-jules[bot]
61789f1d45 feat: phase 6 final polish for sessions and events
- implemented universal ingress credential rotation (slug + pin)
- fixed event extension logic (`GREATEST(expires_at, NOW())`)
- added UI formatter logic for natural dates (`formatNaturalExpiry`, `formatNaturalJoinTime`)
- updated event cards to bounded 2-row compact cards
- consolidated CLI expanding snippets
- overhauled WAI-ARIA support for delegation drawers
- removed legacy "Dismiss" mock buttons for cleanly styled "OK" buttons
- updated tests and ensured pure zero-dependency SSR JSX compatibility

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-27 06:38:21 +00:00
5209534d7a new tasks 2026-08-26 23:06:23 -07:00
1e1c0b9244
Merge pull request #53 from mrteye/sessions-ui-overhaul-11815422362335558787
Sessions UI Overhaul Phase 5

Implemented Phase 5 Task Plan for Sessions UI Overhaul: fixed the backend attendee session revocation permission checks to allow event creators to delete sessions; upgraded the EventGuestsDrawer into a fixed slide-over panel on Desktop and bottom sheet on Mobile; added standardized dynamic countdown pills using SSR and client-side real-time ticking; added a multi-event compact density toggle with localStorage memory; optimized the mobile session deck view; fixed unit tests to mock SQL correctly due to SQL query changes.
2026-08-26 21:06:57 -07:00
google-labs-jules[bot]
d86642ce31 feat: Sessions UI overhaul and backend revocation fix
- Update `DELETE /api/sessions/:id` in `server/routes/sessions.ts` to allow event creators to delete guests' sessions.
- Update page hierarchy and top headings in `ui/components/SessionsPage.tsx`.
- Refactor `EventAttendeesDrawer.tsx` to `EventGuestsDrawer.tsx` as a fixed slide-over overlay.
- Add multi-event compact view toggle with `localStorage` persistence in `EventCockpitDeck.tsx`.
- Standardize dynamic countdown pills across `EventCockpitDeck.tsx`, `EventGuestsDrawer.tsx`, `SessionDeck.tsx`, and `SessionTable.tsx`.
- Optimize mobile session deck in `SessionDeck.tsx`.

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-27 04:06:19 +00:00
a194844309 docs(tasks): add Phase 5 Sessions UI overhaul, slide-over guest drawer, and revoke fix task 2026-08-26 20:22:39 -07:00
0c4f7ac5d2 fix(ui): relocate Rotate PIN to card operational action grid with full a11y support 2026-08-26 19:41:51 -07:00
86896fa8c3 fix(ui): ensure CLI row is always visible on event cards and expands full command into textarea 2026-08-26 19:40:30 -07:00
8777ae33c8 style(ui): clean Delegate Session button text (remove + and key emoji) 2026-08-26 19:39:04 -07:00
debe95c89b style(ui): polish event deck section title to Event Passes and button to End Event 2026-08-26 19:05:14 -07:00
a53e69d9fb
Merge pull request #52 from mrteye/feat-event-attendee-controls-13863970798268504771
feat: implement live attendee management drawer and session pause

Implemented Phase 4 of the Event & Session Overhaul:

- **Database:** Added `is_paused` flag to `sessions` and `event_passes` tables safely via soft-fail migrations.
- **API (Sessions):** Added `POST /api/sessions/:id/pause` endpoint; updated `session_resolver` to serialize `is_paused` into Valkey caches and the edge middleware (`auth_forward.ts`) to return 403 when paused.
- **API (Events):** Added endpoints to fetch `attendees` (resolving via `guest_<slug>_<seat>` deterministic lookup), `rotate-pin`, and `expand` seats. Secured all event modification endpoints to enforce `created_by` or global admin scope.
- **UI & Scripts:** Built `EventAttendeesDrawer` to visualize live connections, injected the `<EventAttendeesDrawer />` container in `SessionsPage`, added quick controls to the `EventCockpitDeck`, and backed the DOM manipulation seamlessly with vanilla JS in `SessionsScript.tsx`.
2026-08-26 18:55:49 -07:00
google-labs-jules[bot]
0a4f6a8344 feat(event-controls): implement live attendee management drawer and session pause
This commit finalizes Phase 4 of the Event & Session Overhaul:
1. Implements session pause logic across PostgreSQL schema, Valkey cache, and `auth_forward.ts` edge check (`is_paused`).
2. Implements non-destructive operational endpoints (`/api/events/:id/rotate-pin`, `/api/events/:id/expand`, `/api/events/:id/attendees`) with Zero-Trust Ownership verification.
3. Upgrades existing `end` and `extend` endpoints in `events.ts` to utilize robust Zero-Trust Ownership queries (created_by OR isGlobalAdmin).
4. Creates `EventAttendeesDrawer.tsx` to handle live participant inspection and individual session controls (Pause, Revoke).
5. Updates `EventCockpitDeck.tsx` and `SessionsScript.tsx` to mount and drive the new controls via vanilla JavaScript, respecting zero-framework guidelines.
6. Ensures `deno fmt`, `deno task lint`, `deno task check` and `deno test` execute successfully against the new schema and API guards.

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-27 01:53:52 +00:00
f6b5f4704c docs(tasks): add and format phase 4 task specification for live event controls 2026-08-26 17:53:26 -07:00
efbf5b9f9a
Merge pull request #51 from mrteye/feat-phase-4-event-controls-plan-6385071723789224813
feat: add Phase 4 event controls task plan
2026-08-26 17:49:12 -07:00
google-labs-jules[bot]
a942a18e82 docs: add Phase 4 event attendee drawer and live controls task plan
Created a detailed Markdown task specification in `tasks/new/` for Phase 4 of the event system overhaul, outlining the database updates for session pausing, API endpoints for live controls, and UI enhancements for the attendee slide-out drawer based on provided architectural guidance.

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-27 00:45:21 +00:00
57f5fc7700
Merge pull request #50 from mrteye/feat-sessions-drawer-machine-11417224878052948069
feat(ui): implement 2-state workshop drawer machine and refine session page hierarchy

Reorganized the Sessions page hierarchy to place the Event Cockpit below the main header. Refactored the Workshop Drawer to utilize a strict 2-state container machine for clean transitions between the creation form and the success handoff modal. Implemented UI accessibility enhancements and fixed mobile text wrapping constraints.
2026-08-26 17:14:32 -07:00
google-labs-jules[bot]
d057e080d3 feat(ui): implement 2-state workshop drawer machine and refine session page hierarchy
- Moved `EventCockpitDeck` below main header in `SessionsPage.tsx`
- Refactored `WorkshopDrawer.tsx` to strictly use a 2-state display toggle (`#eventCreateState` and `#eventHandoffState`)
- Added `aria-label`s to copy buttons for accessibility
- Configured `#status-banner` with `role="status"` and `aria-live="polite"`
- Fixed mobile title text wrapping on `#createdEventTitle`
- Fixed script emoji injection logic to prevent double emojis
- Added JS reset logic in `closeDelegateDrawer` to restore drawer states and clear form data

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-27 00:12:50 +00:00