Skip to content

Make host page responsive for mobile#5

Open
BahandAb wants to merge 5 commits into
mainfrom
claude/keen-gauss-jxzvip
Open

Make host page responsive for mobile#5
BahandAb wants to merge 5 commits into
mainfrom
claude/keen-gauss-jxzvip

Conversation

@BahandAb

Copy link
Copy Markdown
Owner

Summary

  • Activity bar becomes a bottom tab bar on phones (≤640px) instead of a vertical left column
  • Side panels slide in as a full-height overlay drawer from the left, with a semi-transparent backdrop that taps to close
  • Each panel gets a ✕ close button on mobile
  • Crop handles enlarged from 10px to 22px for finger touch targets
  • Touch events added to crop drag (touchstart/touchmove/touchend) so crop works on phone
  • touch-action: none on crop overlay and workspace to prevent scroll interference
  • Header compresses on small screens (logo hidden, items wrap)
  • Setup screen padding and font sizes scaled down for small screens
  • Hover styles scoped to @media (hover: hover) so they don't fire on touch devices

Generated by Claude Code

BahandAb added 5 commits June 14, 2026 11:17
- host.html: new instructor host page with two-screen flow (setup + live
  session); side panel with status, roster, and admin controls; camera
  preview, resolution selector, session code generator
- host.js: camera enumeration with permission-first pattern, canvas
  render loop driving crop pipeline, LiveKit canvas.captureStream()
  publisher (simulcast disabled), Socket.IO register_host, drag-to-crop
  overlay with corner handles, follow/broadcast mode toggles, camera
  switch bar, fullscreen toggle
- manifest.json + sw.js: PWA support — eaglevision.dev is now
  installable on desktop and mobile; network-first for API/LiveKit,
  cache-first for static assets
- index.html: Host a Session button in hero (gold accent), PWA meta
  tags, Apple touch icon, theme-color, service worker registration
- README.md: fixed tech stack (Gemini API not Claude API), fixed
  backend description (Python Flask not Node.js), added Oracle Cloud
  deployment note, updated instructor flow to point to host.html,
  added new files to frontend structure section

https://claude.ai/code/session_01FzZZvZE2K52QBp2jz4opgH
Copilot AI review requested due to automatic review settings June 14, 2026 08:36

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a new browser-based instructor host experience and adds PWA/offline scaffolding, with an emphasis on making the host workflow usable on mobile (≤640px) through responsive layout and touch-friendly controls.

Changes:

  • Added a new host.html + host.js host flow (camera preview/setup, session start, LiveKit publish, roster + admin controls) with a mobile-responsive activity bar + overlay side panels.
  • Added PWA pieces: manifest.json, sw.js, and service worker registration in index.html.
  • Updated README.md to document the host page as the primary hosting method and refreshed architecture/project structure notes.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
sw.js Adds a service worker for static asset caching and network passthrough for select external hosts.
README.md Updates instructor flow and architecture/docs to reflect the new host page and backend details.
manifest.json Adds a PWA manifest (name, theme colors, icons).
index.html Links the manifest / Apple web app meta and registers the service worker; adds a “Host a Session” CTA.
host.js Implements host-side session logic (camera, Socket.IO, LiveKit publish, crop, roster, admin commands).
host.html Adds the host UI and responsive/mobile styles (bottom tab bar, overlay drawer panels, touch crop handles).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread sw.js
Comment on lines +8 to +10
'/style.css',
'/landing.css',
'/script.js',
Comment thread sw.js
Comment on lines +18 to +23
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME).then(cache => cache.addAll(STATIC_ASSETS))
);
self.skipWaiting();
});
Comment thread host.html
#setup-error { color: #f87171; font-size: .9rem; display: none; margin: 0; }

/* ── Session screen ── */
#session-screen { display: none; flex-direction: column; height: 100dvh; height: 100vh; }
Comment thread host.html
color: var(--muted, #7c83a8); cursor: pointer;
font-size: 1.2rem; display: flex; align-items: center; justify-content: center;
}
.ab-btn:hover, .ab-btn.active { background: var(--border, #2a3050); color: var(--text, #e8eaf6); }
Comment thread host.js
Comment on lines +383 to +393
roster.forEach(student => {
const initials = (student.name || '?').slice(0, 2).toUpperCase();
const div = document.createElement('div');
div.className = 'roster-item';
div.innerHTML = `
<div class="roster-avatar">${initials}</div>
<span class="roster-name">${student.name || student.id}</span>
<button class="roster-kick" onclick="kickUser('${student.id}')">Kick</button>
`;
body.appendChild(div);
});
Comment thread host.js
Comment on lines +196 to +198
function connectSocket() {
const BACKEND = 'https://api.eaglevision.dev';
socket = io(BACKEND, { transports: ['websocket'] });
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