FeaturesTemplatesShowcaseTownie
AI
BlogDocsPricing
Log inSign up
bmitchinson
bmitchinsonfactoid-trivia
Public
Like
factoid-trivia
Home
Code
8
.bruno
1
backend
3
frontend
4
shared
1
.instructions.md
.vtignore
README.md
deno.json
Branches
2
Pull requests
Remixes
History
Environment variables
Settings
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in miliseconds.
Sign up now
Code
/
Code
/
Search
index.ts
https://bmitchinson--9127face487a11f08b4576b3cceeab13.web.val.run
README.md

Trivia Game

A realtime trivia game themed like a USPS post office, supporting up to 30 concurrent users.

https://www.val.town/x/bmitchinson/factoid-trivia

Features

  • USPS post office themed design
  • Real-time user presence (see who's online)
  • Name entry and user management
  • Support for up to 30 concurrent players
  • NEW: Complete trivia game functionality:
    • Fact submission by each player
    • Random fact selection for rounds
    • Voting system where players guess whose fact it is
    • Real-time vote tracking and display
    • Answer reveal with vote results
    • Scoring system and leaderboard
    • Skip functionality for rounds

How to Play

  1. Join the Game: Enter your name to join the post office
  2. Submit a Fact: Each player submits an interesting fact about themselves
  3. Wait for Others: Game can start when at least 2 players have submitted facts
  4. Vote on Facts: When a fact is displayed, guess which player it belongs to
  5. See Results: After voting, reveal answers to see who was correct
  6. Earn Points: Get 1 point for each correct guess
  7. Climb the Leaderboard: Track your score against other players

Game Flow

Join Game → All Players Submit Facts → Facts Get Queued →
Vote on Random Facts → See Results → Earn Points →
Next Round → Repeat Until All Facts Used

Key Features

  • Everyone Submits Facts: All players can and should submit facts
  • Random Queue System: Facts are randomly selected from the queue for each round
  • Flexible Start: Game can start with 2+ facts, or wait for everyone
  • Real-time Progress: See who has/hasn't submitted facts yet
  • Complete Fact Usage: All submitted facts will eventually be used in rounds

Project Structure

├── backend/
│   ├── index.ts           # Main Hono server with game API endpoints
│   ├── database/
│   │   ├── migrations.ts  # SQLite schema for users, facts, votes, rounds
│   │   └── queries.ts     # Database query functions for game logic
│   └── routes/
│       └── websocket.ts   # WebSocket connection handling (future)
├── frontend/
│   ├── index.html         # Main HTML template
│   ├── index.tsx          # React frontend entry point
│   ├── components/
│   │   ├── App.tsx        # Main app component with game state management
│   │   ├── NameEntry.tsx  # Name entry form
│   │   ├── FactEntry.tsx  # Fact submission form
│   │   ├── GameLobby.tsx  # Waiting area showing fact collection progress
│   │   ├── GameRound.tsx  # Active round with voting interface
│   │   ├── Leaderboard.tsx # Score tracking display
│   │   └── UserList.tsx   # Online users display
│   └── style.css          # USPS-themed styles
└── shared/
    └── types.ts           # Shared TypeScript types for game objects

Getting Started

  1. The backend runs on Hono with WebSocket support for real-time features
  2. Frontend uses React with WebSocket client for real-time updates
  3. SQLite stores user sessions and game state
  4. USPS-themed styling with postal colors and typography

Current Status

  • ✅ User name entry and management
  • ✅ Real-time user presence (up to 30 players)
  • ✅ USPS theming and design
  • ✅ Fact submission system
  • ✅ Random fact selection for rounds
  • ✅ Voting system with real-time updates
  • ✅ Answer reveal and vote result display
  • ✅ Scoring system and leaderboard
  • ✅ Skip round functionality
  • ✅ Complete game flow from start to finish

API Endpoints

  • GET /api/game-state - Get current game state including users, rounds, leaderboard
  • POST /api/join - Join the game with a name
  • POST /api/leave - Leave the game
  • POST /api/submit-fact - Submit a personal fact
  • POST /api/start-round - Start a new round with a random fact
  • POST /api/vote - Cast a vote for who you think the fact belongs to
  • POST /api/reveal - Reveal the answer and award points
  • POST /api/skip - Skip the current round
  • POST /api/admin/kick-all - [ADMIN] Clear all game data and kick all players

Admin Features

The game includes an admin panel accessible through a discrete "Admin" link at the bottom of the page. This provides:

  • Kick All Players: Immediately disconnects all connected players and clears all game data including:
    • All user sessions
    • All submitted facts
    • All votes and rounds
    • All scores and leaderboard data
    • Current game state

⚠️ Warning: The kick all function is irreversible and will completely reset the game to its initial state.

HTTP
  • index.ts
    bmitchinson--91…13.web.val.run
Code
.brunobackendfrontendshared.instructions.md.vtignoreREADME.mddeno.json
Go to top
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Product
FeaturesPricing
Developers
DocsStatusAPI ExamplesNPM Package Examples
Explore
ShowcaseTemplatesNewest ValsTrending ValsNewsletter
Company
AboutBlogCareersBrandhi@val.town
Terms of usePrivacy policyAbuse contact
© 2025 Val Town, Inc.