CoOp:Anything
게임을 검색해 협동 플레이 가능한 모드·단계·품질·커뮤니티 평점을 확인합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기UI for a gamified marketing platform
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Picture and short-definition trivia across many topics. This repository is the web frontend (Next.js).
There are no points, leaderboards, rankings, ads or prize draws.
| Role | Home | What they do |
|---|---|---|
Player (gamer) | /user/dashboard | Play trivia, build custom trivias, upgrade to Pro |
| Brand | /brand/dashboard | Set up a brand profile, build and pay for campaigns, read campaign results |
| Admin | /admin | Manage topics, cards and global settings; moderate campaigns; view revenue |
src/lib/api.ts) with bearer auth and cookie-based token refreshThe frontend never talks to a database. Everything goes through the backend API, whose contract
is documented in docs/frontend-integration.md. That file is the
source of truth for endpoints, payloads, error codes and state machines.
npm install
cp .env.local.example .env.local # then fill it in
npm run dev # http://localhost:3000
The backend must be running and reachable at NEXT_PUBLIC_API_URL.
| Variable | Required | Purpose |
|---|---|---|
NEXT_PUBLIC_API_URL | Yes | Origin of the backend, without a path (for example http://localhost:4000). The app calls {origin}/api/v1/... |
NEXT_PUBLIC_GOOGLE_CLIENT_ID | No | Enables the Google sign-in button. Left out, the button is hidden |
Three routes are linked to from outside the app, so the backend's FRONTEND_URL must point at
wherever this frontend is served:
/q/:slug — shared custom trivia links/payment/verify?reference= — the return page after a Paystack checkout/reset-password?token= — password reset emailsToken refresh uses a refresh_token cookie, so the frontend and the API need to be able to
share cookies (same site, or a cross-site cookie setup on the backend).
| Command | What it does |
|---|---|
npm run dev | Development server |
npm run build / npm start | Production build and server |
npm run lint | ESLint |
npx tsc --noEmit | Typecheck |
npm run test / npm run test:watch | Vitest |
Docker and deployment scripts are described in DEPLOYMENT.md.
src/
├── app/
│ ├── (routes)/
│ │ ├── (private-pages)/ # Login required
│ │ │ ├── trivia/ # Topic picker and setup
│ │ │ ├── play/[sessionId]/ # Quiz → result, for every kind of trivia
│ │ │ ├── my-quizzes/ # Custom trivia list, builder and preview
│ │ │ ├── pro/ # Plan and Pro checkout
│ │ │ ├── user/ # Player home, profile, settings
│ │ │ ├── brand/ # Brand home, campaigns, profile
│ │ │ └── admin/ # Admin pages
│ │ └── (public-pages)/ # Login, register, /q/[slug], /payment/verify, ...
│ └── _utils/ # endpoints.ts, routes.ts, constants.ts
├── atom/user.ts # Logged-in user (persisted to localStorage)
├── components/
│ ├── ui/ # shadcn/ui primitives and shared widgets
│ ├── match/ trivia/ cards/ # Game screens and the shared card editor
│ ├── quizzes/ campaigns/ pro/ admin/
│ └── layout/ auth/
├── hooks/ # Game settings, plan, session start, back-navigation block
├── lib/ # API client, uploads, sound, small helpers
└── types/index.ts # All API types
A few rules shape most of the code:
deadlineAt and
serverTime; the countdown is driven from those, not the device clock. The correct answer is
only returned after a question is settled./play/[sessionId] renders from the server's session status, so a refresh
lands on the same phase and the same question with the time that is left.GET /settings/game; nothing is hard-coded.CAMPAIGN_REQUIRED and the app offers the campaign instead.npm run test covers the trivia quiz (practice pointer, timeout, forward only, resume), the campaign gate, the upgrade prompts and the small validation helpers.
Tests mock @/lib/api and render pages with a fresh query client (see src/test-utils.tsx).
Before a release, walk through docs/qa-checklist.md against a real
backend. It covers what the tests cannot: payments, uploads, sound, and layout on a phone.