projectrules.ai

Frontend Guideline Document

FrontendReal-time CommunicationUI DesignReactTypeScript

Description

Frontend Guideline Document

Globs

**/*
---
description: Frontend Guideline Document
globs: **/*
---

# Frontend Guideline Document

## 1. Introduction

Our **SAT Word Quiz Show** uses a **three-screen** model to deliver a fun, educational experience:

1.  **Public Shared Screen (Game Board)**: Shown on a large display/TV, featuring the current question, hints, animations, and scoreboard.
2.  **Player Screen**: Each participant’s personal device for inputting answers.
3.  **Host Control Screen**: The host’s interface for managing rounds, revealing hints, and controlling when to show correctness or final scores.

The goal is to create a **highly interactive**, **real-time** environment where teenagers can learn SAT vocabulary through an engaging, quiz-show-style format. This document outlines the **frontend architecture, design principles, and technical practices** needed to achieve that vision.

## 2. Frontend Architecture

1.  **Core Framework**: **React**

    *   Chosen for its **component-based** architecture, robust ecosystem, and easy integration with real-time data.
    *   **Hooks** (e.g., `useState`, `useEffect`, `useContext`) to manage local UI logic and side effects.
    *   Encouraged to use **TypeScript** (if feasible) to improve developer productivity and code quality.

2.  **UI Component Library**: **HeadlessUI + Tailwind**

    *   For all UI components such as buttons, inputs, menus, etc.
    *   Style using the aesthetic described in the product-requirements-document.

3.  **Real-Time Communication**

    *   The UI must reflect state changes (new questions, scoreboard updates, hint reveals) with minimal delay.
    *   Rely on **WebSockets** (via Supabase Realtime or [Socket.io](mdc:http:/Socket.io)) to broadcast changes and maintain synchronization across all three screens.

4.  **Folder & Component Structure**

    *   **/components**: Shared UI elements (e.g., buttons, modals, scoreboard widgets).

    *   **/screens**:

        *   **/PublicScreen**: Main game board.
        *   **/PlayerScreen**: Input and question display for individual players.
        *   **/HostScreen**: Host’s management interface (hints, reveal correctness, progress to next round).

    *   **/hooks**: Reusable logic for real-time data subscription, scoreboard updates, etc.

    *   **/utils**: Helper functions (e.g., format timers, orchestrate audio triggers).

## 3. Design & Branding Principles

1.  **Teen-Focused Aesthetic**

    *   Vibrant but not childish. Aim for **modern, clean** visuals with readable typography.
    *   Avoid overly “cartoonish” elements; incorporate subtle animations and color schemes that resonate with high school audiences.

2.  **Accessibility & Simplicity**

    *   Meet **WCAG** guidelines for color contrast and text size. Some teens may have visual or reading difficulties.
    *   Provide clear CTAs and large tap targets, especially on mobile (Player Screens).

3.  **Consistent Brand Elements**

    *   Standard color palette for backgrounds, highlights, and text, ensuring uniformity across screens.
    *   Use a **theming system** (e.g., via CSS variables or a SASS color map) so the scoreboard, question panels, and host controls share the same look and feel.

4.  **Audio & Visual Engagement**

    *   Dynamic sound effects for correct/incorrect answers (cue a short “fanfare” for correct or “buzz” for incorrect).
    *   Looping background music or countdown timers for tension. Let the host toggle volume or switch off music if desired.

## 4. Styling & Theming

1.  **CSS Methodology**

    *   **CSS Modules** or **styled-components** to scope styles at the component level. Alternatively, SASS with a **BEM** approach for clarity and maintainability.

2.  **Theme Variables**

    *   Variables for primary/secondary colors, font sizes, spacing units. Keep them in a single file (`/styles/_variables.scss` or a theme config) for easy editing.

3.  **Responsive Layout**

    *   **Mobile-First** breakpoints for smaller screens (Player device), scaling up to large displays (Public Screen).
    *   Be mindful that the **Public Shared Screen** might be 1080p or higher, so design for large or wide aspect ratios.

## 5. Component Structure & Best Practices

1.  **Reusable UI Components**

    *   **Buttons, Card Containers, Modal Overlays** that can adapt to different screens with minimal styling changes.

2.  **Game-Specific Components**

    *   **QuestionPanel**: Renders current question and optional hints.
    *   **LockInButton**: Displays status if the player has locked in or not.
    *   **Scoreboard**: Can appear on the **Public Screen** in a larger, animated form, or a minimal form on Player/Host screens.

3.  **Host Controls**

    *   A dedicated **ControlBar** or **ControlPanel** for toggling hints, revealing correctness, and progressing to next question.
    *   Ensure the host’s component architecture is separate from the player logic.

## 6. State Management

1.  **Global vs. Local State**

    *   Use local React state for straightforward UI toggles (e.g., a dropdown’s open/close status).

    *   Store **game session** and **player states** in a global store or within a React context. For instance:

        *   `GameContext` for round number, question index, scoreboard.
        *   Could integrate a library like **Redux** or **Zustand** if the state complexity grows.

2.  **Real-Time Synchronization**

    *   Subscribe to **WebSocket** channels that broadcast new questions, scoreboard updates, or hint reveals.
    *   Ensure the Player and Public Screen UIs automatically rerender on relevant events (i.e., `onMessage` from the server updates the shared `gameState` in context).

## 7. Routing & Navigation

1.  **Top-Level Routes**

    *   **/public/:sessionCode** → Public Shared Screen for the current game session.
    *   **/player/:sessionCode** → Player’s screen for that session.
    *   **/host/:sessionCode** → Host’s control interface.

2.  **URL-Based**

    *   Use **React Router** or a Next.js-based approach for dynamic routes.
    *   The 4-character session code can be part of the path or a query param.

3.  **Handling Invalid Codes**

    *   If a user enters an invalid or expired session code, redirect to an error or “Session Not Found” screen with a prompt to create or join another session.

## 8. Performance Optimization

1.  **Lazy Loading & Code Splitting**

    *   Use dynamic imports (e.g., `React.lazy`) to load the scoreboard animations only when needed.

2.  **Asset Management**

    *   Minimize large audio files; use compressed formats (mp3, ogg).
    *   Leverage sprite sheets for animations rather than multiple individual image files where possible.

3.  **Caching & Preloading**

    *   Preload essential game assets (fonts, primary sounds) during the lobby/waiting state so gameplay is smooth once started.

4.  **Real-Time Event Efficiency**

    *   Throttle or debounce some events if the user’s actions (e.g., repeated hint requests) might spam the server or block rendering.

## 9. Testing & QA

1.  **Unit Tests**

    *   Use **Jest** or **Vitest** with React Testing Library to ensure each component (QuestionPanel, Scoreboard, HostControl) behaves as expected.

2.  **Integration Tests**

    *   Validate that the **Public Screen** updates when the host reveals a hint, or that players can see correct/incorrect feedback in real time.

3.  **End-to-End Tests**

    *   Use **Cypress** or **Playwright** to simulate actual user flows:

        1.  Player joins with a session code
        2.  Host starts game, reveals hints, checks scoreboard
        3.  Player locks in answers, sees final result.

4.  **Cross-Browser & Device Testing**

    *   Verify on Chrome, Firefox, Safari, and mobile browsers.
    *   Ensure the UI scales well on big screens and older devices.

## 10. Additional Frontend Recommendations

1.  **Consistent Development Practices**

    *   **ESLint** + **Prettier** for code style and formatting.
    *   Enforce commit hooks (e.g., Husky) to run lint and tests.

2.  **Audio Toggle & Volume Control**

    *   Provide a simple UI element to mute or reduce volume (particularly if used in a classroom).

3.  **Internationalization (Future)**

    *   While primarily English-based for SAT vocab, structure text strings so translation can be added if needed.

4.  **Edge Cases**

    *   Handle scenario where no host is present (or the host disconnects). Provide graceful failover or pause.
    *   Manage session state if the Public Screen refreshes or loses connectivity.

## 11. Conclusion

These **Frontend Guidelines** aim to ensure a **cohesive**, **high-performance**, and **engaging** experience for all users—players, hosts, and spectators. By leveraging **React** for structure, and robust **real-time** state handling, we create a quiz show environment that **teenagers** find motivating, **teachers/hosts** find manageable, and **developers** can easily maintain and iterate upon.