live-talk
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Viewing readonly version of main branch: v87View latest version
A platform for interactive presentations allowing audiences to participate in real-time activities via their mobile devices. The system distinguishes between a Presenter Mode (Admin) and a Participant Mode.
- Runtime: Val Town (Deno)
- Backend: Hono (HTTP handling), Val Town SQLite (Persistence)
- Frontend: React (SSR + Client Hydration), TailwindCSS (Styling)
- Communication: Client-side polling or standard HTTP requests (keeping it simple initially)
-
Session Management:
- Participants are assigned a unique
sessionIdstored inlocalStorage. - This ID identifies the user across different steps/widgets.
- Participants are assigned a unique
-
Widget Framework:
- Each step in a presentation is associated with a Widget.
- Widgets have two views:
- Admin/Presenter: Shows QR code, activity controls, and aggregated results.
- Participant: Shows the input interface (e.g., poll options, text field).
- Widgets handle their own logic for fetching and saving data.
-
Routing Strategy:
/admin/p/:presentationId/s/:stepId: Presenter view for a specific step./p/:presentationId/s/:stepId: Participant view for a specific step (URL embedded in QR code).- (Optional Future):
/live/:presentationId: Redirects to the currently active step set by the presenter.
id(TEXT, PK): Unique slug/ID.title(TEXT): Name of the talk.deck_url(TEXT): Link to the main slide deck.created_at(DATETIME)
id(TEXT, PK): Unique ID.presentation_id(TEXT, FK): Link to presentation.widget_type(TEXT): Enum (e.g., 'poll', 'qna', 'word_cloud').config(JSON): Widget-specific settings (e.g., poll question, options).order_index(INTEGER): Sequence in the presentation.
id(INTEGER, PK)step_id(TEXT, FK)session_id(TEXT): Anonymous participant ID.data(JSON): The user's answer/input.created_at(DATETIME)
- Theme: Modern, clean, high-contrast for projector visibility. "Last Conference" vibe (professional, tech-focused).
- Presenter View:
- Dominant QR Code for easy scanning.
- Real-time visualization of data (charts/lists).
- Navigation controls (Next/Prev step).
- Participant View:
- Mobile-first design.
- Large touch targets.
- Instant feedback upon submission.
- Project Scaffolding: Setup Hono backend with React SSR structure.
- Database Schema: Create SQLite tables (
presentations,steps,responses). - Seed Data: Create a mock presentation with a Poll step for testing.
- Session Logic: Implement client-side hook to generate/retrieve
sessionId.
- Widget Registry: Create a TypeScript interface/pattern for defining widgets.
- Basic Routing: Implement routes for Admin and Participant views.
- API Endpoints: generic
/api/submitand/api/resultsendpoints.
- Poll Participant UI: Form with radio buttons.
- Poll Backend: Handle vote submission and aggregation.
- Poll Admin UI: Display QR code and bar chart of results.
- Presentation Layout: "Shell" UI for the presenter (header, navigation).
- Styling: Apply "Last Conference" aesthetic (Tailwind).
- Testing: Verify mobile flow and persistence.
- Q&A Widget: Allow upvoting questions.
- Live Sync: Auto-update participant view when presenter changes slides.