Skip to content

TabletopFoundry/gamepulse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

21 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽฒ GamePulse

A Rotten Tomatoes-style aggregation hub for board games โ€” critic consensus scores, community reviews, personalized taste matching, and discovery, all in one place.

Next.js React TypeScript Tailwind CSS SQLite CI License


โœจ Features

Feature Description
๐Ÿ  Landing Page Hero section, trending games, latest critic reviews, rising games, awards tracker, and newsletter signup
๐ŸŽฎ Game Pages Dual GamePulse scores (critics + community), consensus badge, full critic breakdown, community reviews, price comparison, and similar games
๐Ÿ” Browse & Discover Filter by category, player count, and complexity. Sort by score, trending, newest, or most reviewed. Search autocomplete with keyboard navigation
๐Ÿ‘ค Critic Profiles Taste profile radar charts, review history, taste match percentage, and follow/unfollow actions
๐Ÿ“Š User Dashboard Your ratings, watchlist, wishlist, matched critics, taste profile visualization, and personalized score predictions
๐Ÿ“ฐ Content Feed Personalized feed with filters (reviews, news, deals, videos), release calendar, and weekly newsletter preview
๐Ÿงฎ Taste Matching Cosine similarity + Pearson correlation across 6 taste dimensions to match users with aligned critics
๐Ÿ’พ Local Persistence All interactions (ratings, reviews, watchlist, follows, newsletter signups) persist in SQLite

๐Ÿš€ Quick Start

# 1. Clone and install
git clone <your-repo-url>
cd 10-gamepulse
npm install

# 2. Start the development server
npm run dev

# 3. Open in your browser
open http://localhost:3000

The database seeds automatically on first run with 60+ board games, 14 named critic profiles, 50+ community users, 200+ critic reviews, rich watchlists/wishlists, awards, and release-calendar data. No extra setup is required in local development.

๐Ÿ“ฆ Scripts

Script Description
npm run dev Start the Next.js development server
npm run build Create an optimized production build
npm run start Serve the production build
npm run lint Run ESLint checks
npm run type-check Run TypeScript compiler checks (no emit)
npm run check Run type-check โ†’ lint โ†’ build (CI gate)
npm run clean Remove build artifacts and database

๐Ÿ—๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   Next.js App Router                 โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚  /       โ”‚ โ”‚ /browse  โ”‚ โ”‚ /feed  โ”‚ โ”‚ /critics โ”‚ โ”‚
โ”‚  โ”‚  /games  โ”‚ โ”‚ /me      โ”‚ โ”‚        โ”‚ โ”‚          โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚
โ”‚                        โ”‚                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚            lib/queries/ (Data Layer)            โ”‚ โ”‚
โ”‚  โ”‚  games.ts ยท critics.ts ยท feed.ts ยท dashboard.tsโ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                        โ”‚                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚         lib/scoring.ts + lib/taste.ts           โ”‚ โ”‚
โ”‚  โ”‚   Cosine similarity ยท Pearson correlation       โ”‚ โ”‚
โ”‚  โ”‚   Consensus badges ยท Personalized predictions   โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                        โ”‚                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚          lib/db/ (SQLite via better-sqlite3)    โ”‚ โ”‚
โ”‚  โ”‚  connection.ts ยท schema.ts ยท seed.ts ยท seeds/   โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“ Project Structure

10-gamepulse/
โ”œโ”€โ”€ app/                    # Next.js App Router pages
โ”‚   โ”œโ”€โ”€ page.tsx            # Landing page
โ”‚   โ”œโ”€โ”€ api/health/         # Health check endpoint
โ”‚   โ”œโ”€โ”€ browse/             # Browse & discover with filters
โ”‚   โ”œโ”€โ”€ critics/            # Critic directory + [slug] profiles
โ”‚   โ”œโ”€โ”€ feed/               # Personalized content feed
โ”‚   โ”œโ”€โ”€ games/[slug]/       # Individual game pages
โ”‚   โ”œโ”€โ”€ me/                 # User dashboard
โ”‚   โ”œโ”€โ”€ newsletter/manage/  # Self-serve newsletter removal page
โ”‚   โ”œโ”€โ”€ robots.ts           # SEO robots.txt generation
โ”‚   โ””โ”€โ”€ sitemap.ts          # SEO sitemap generation
โ”œโ”€โ”€ components/             # React components
โ”‚   โ”œโ”€โ”€ gamepulse-ui.tsx    # Shared UI: cards, badges, sections
โ”‚   โ”œโ”€โ”€ search-autocomplete.tsx # Header search combobox
โ”‚   โ”œโ”€โ”€ client-widgets.tsx  # Client chart widgets
โ”‚   โ”œโ”€โ”€ action-forms.tsx    # Form components with server actions
โ”‚   โ”œโ”€โ”€ submit-button.tsx   # Pending-state submit button
โ”‚   โ””โ”€โ”€ toast.tsx           # Toast notification system
โ”œโ”€โ”€ lib/                    # Business logic & data access
โ”‚   โ”œโ”€โ”€ db/                 # Database connection, schema, seeds
โ”‚   โ”œโ”€โ”€ queries/            # Per-domain query modules
โ”‚   โ”œโ”€โ”€ actions.ts          # Server Actions (review, follow, etc.)
โ”‚   โ”œโ”€โ”€ config.ts           # Centralized configuration constants
โ”‚   โ”œโ”€โ”€ scoring.ts          # Score algorithms & consensus logic
โ”‚   โ”œโ”€โ”€ taste.ts            # Taste dimension types
โ”‚   โ””โ”€โ”€ gamepulse.ts        # Barrel re-exports
โ”œโ”€โ”€ data/                   # SQLite database (auto-generated)
โ”œโ”€โ”€ docs/                   # Project documentation
โ”‚   โ”œโ”€โ”€ PRD.md              # Product Requirements Document
โ”‚   โ”œโ”€โ”€ CODE_REVIEW.md      # Code quality audit
โ”‚   โ”œโ”€โ”€ UX_REVIEW.md        # UX & accessibility audit
โ”‚   โ””โ”€โ”€ IMPROVEMENTS.md     # Improvement roadmap
โ”œโ”€โ”€ .github/                # GitHub templates and CI
โ”‚   โ”œโ”€โ”€ workflows/ci.yml    # CI pipeline
โ”‚   โ”œโ”€โ”€ ISSUE_TEMPLATE/     # Bug report & feature request forms
โ”‚   โ””โ”€โ”€ pull_request_template.md
โ””โ”€โ”€ public/                 # Static assets

๐Ÿงฎ How Scoring Works

GamePulse uses a multi-signal scoring system:

  • Critics Score โ€” Weighted average of critic reviews (0โ€“100 scale)
  • Community Score โ€” Average of user ratings (1โ€“10 scale, displayed as 0โ€“100)
  • Consensus Badge โ€” Derived from score spread and momentum:
    • ๐Ÿ† Critically Acclaimed โ€” Critics โ‰ฅ86 AND Community โ‰ฅ80
    • โค๏ธ Community Favorite โ€” Community โ‰ฅ88
    • ๐Ÿ’Ž Hidden Gem โ€” Community โ‰ฅ80, Critics โ‰ฅ74, Rising โ‰ฅ60
    • ๐Ÿ”ฅ On the Rise โ€” Default for active games
    • โšก Divisive โ€” |Critics โˆ’ Community| โ‰ฅ15
  • Personalized Predictions โ€” Weighted by taste-matched critic correlation (cosine similarity + Pearson)

๐Ÿ’พ Data Notes

  • The database lives at data/gamepulse.db and is auto-created on first run
  • The seed catalog currently includes 60+ games, 14 critics, 50+ users, 200+ critic reviews, 100+ community reviews, awards, release-calendar entries, follow relationships, and saved-list activity
  • Seeds are deterministic and transactional: the seeding pass clears and rebuilds reference data in a single SQLite transaction, resets autoincrement sequences, and stamps app_meta.seed_version
  • Edge cases are intentionally included, including one-review games, hidden gems, and divisive titles with strong critic / weak community splits
  • In production, automatic reseeds are blocked when reference data already exists unless GAMEPULSE_ENABLE_PRODUCTION_RESEED=1 is set
  • To force a fresh local dataset, run npm run clean and then start the app or run npm run build
  • The current user is a hardcoded mock user ("alex") โ€” see CONTRIBUTING.md for auth notes

๐Ÿณ Docker

# Build the container
docker build -t gamepulse .

# Run it
docker run -p 3000:3000 gamepulse

The SQLite database is created inside the container at /app/data/gamepulse.db. Mount a volume to persist data across restarts:

docker run -p 3000:3000 -v gamepulse-data:/app/data gamepulse

๐Ÿ”ง Configuration

Copy .env.example to .env.local to customize settings:

cp .env.example .env.local
Variable Default Description
NEXT_PUBLIC_BASE_URL https://gamepulse.example.com Public URL for sitemap, OG tags, canonical links
NODE_ENV development Node.js environment

๐Ÿ› ๏ธ Tech Stack

Layer Technology Why
Framework Next.js 16 (App Router) Server components, server actions, streaming
UI React 19 Latest concurrent features, useActionState
Styling Tailwind CSS 4 Utility-first, zero-config with PostCSS
Charts Recharts Composable radar charts for taste profiles
Icons Lucide React Tree-shakeable icon library
Database better-sqlite3 Synchronous SQLite for server components
Language TypeScript 5 Strict mode enabled

๐Ÿค Contributing

See CONTRIBUTING.md for setup instructions, coding conventions, and the PR process.

๐Ÿ“„ License

MIT

About

Rotten Tomatoes-style aggregation hub for board games with critic consensus, community reviews, and taste matching.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages