An unofficial, fast, clean, and open-source frontend for DUPR
DUPR is a great rating system, but the official website and app leave a lot to be desired.
- Annoying ads, popups, upsells
- Slow
- Unintuitive UI
Both tested on iPhone 16 Pro Max on iOS 26 Developer Beta 9 on September 9, 2025. Open DUPR installed as a PWA. Official DUPR iOS App version 1.9.2 installed from the App Store.
- Clean, fast interface - No ads or distractions
- Player profiles - View ratings, match history, and stats
- Match recording - Record new matches and validate pending ones
- Player search - Find and follow other players
- Social features - Follow players and see their activity
- PWA support - Install as a mobile app
- Responsive design - Works on desktop and mobile
- Bun package manager
cd open-dupr-react
bun install
bun run devThe app will be available at http://localhost:5173
bun run build- React 19 with TypeScript
- Vite for fast development and building
- Tailwind CSS for styling
- React Router for navigation
Coming Soon™️
- Add multiple games in a match
- More game formats e.g. Round Robin
- Player ratings on the add teammate/opponent view
- Recent players in additon to following/followers on add teammate/opponent view
- Edit profile
Contributions are welcome! Please feel free to open an issue or submit a pull request.
This project is licensed under the MIT License - see the LICENSE file for details.
DUPR has a public API at api.dupr.gg with an OpenAPI spec (Swagger UI). A downloaded copy and notes live in api_reference.
DUPR rejects requests from unknown origins, so the client never calls api.dupr.gg directly. Instead, /api/... requests are proxied same-origin: a Vercel Edge Function (api/proxy.ts) strips Origin/Referer and forwards to DUPR in production; the Vite dev server does the same locally. If a response includes Render’s rndr-id header (legacy static host), the client switches to https://open-dupr.vercel.app/api for the rest of the tab session (VITE_VERCEL_API_BASE overrides that URL). Remove that fallback after 2026-07-01 (see TODO in src/lib/api.ts) once the domain is Vercel-only—DNS caches typically clear in hours to a couple of days; the extra months cover edge cases.




