Osewa! is a darker, data-rich osu! companion that helps you:
- Search beatmaps with mode, ranked status, and popularity filters while surfacing tags and difficulty details.
- Inspect players deeply—PP breakdown, recent (including fails), rank history, and total performance metrics.
- Spot PP farm maps by analysing a player's most played beatmapsets.
- Bookmark favourites & recall searches so you can jump back into promising maps instantly.
- Sync Discord to carry your community avatar and identity across the app.
Built with Next.js (App Router), NextAuth, Prisma, Tailwind CSS 4, and the osu! v2 API.
-
Copy the environment template and provide secrets:
cp env.example .env.local
Fill in:
DATABASE_URL(SQLite path is fine for dev).NEXTAUTH_URL(usuallyhttp://localhost:3000).NEXTAUTH_SECRET(generate withopenssl rand -base64 32).OSU_CLIENT_ID/OSU_CLIENT_SECRETfrom your osu! OAuth application.DISCORD_CLIENT_ID/DISCORD_CLIENT_SECRETfrom the Discord Developer Portal.
-
Install dependencies:
npm install
-
Apply Prisma migrations & generate the client:
npx prisma migrate dev
-
Run the development server:
npm run dev
-
Visit
http://localhost:3000, sign in with osu!, and head to/settingsto link Discord or adjust avatar preferences.
src/app/page.tsx– landing page + authenticated dashboard entry point.src/components/dashboard/– beatmap search UI, results grid, player insight panels.src/app/api/osu/*– server routes that proxy osu! API queries with client-credential caching.src/auth.config.ts/src/auth.ts– NextAuth configuration (osu! + Discord, refresh handling, Prisma adapter).prisma/schema.prisma– User/session models plus bookmark & history tables.src/app/settings/page.tsx– account settings (avatar source toggle, Discord connect/disconnect).
- Mirror the environment variables from
.env.localinto the Vercel dashboard. - If you move beyond SQLite, point
DATABASE_URLto a production database (PlanetScale, Neon, Supabase, etc.) and runnpx prisma migrate deployduring build. - osu! & Discord redirect URIs must match the production domain:
https://your-domain.com/api/auth/callback/{provider}. - Enable the “Prisma generate” build step or run it manually after deploy to keep the client in sync.
npm run dev # Start local dev server
npm run build # Production build
npm run start # Run the production build locally
npm run lint # ESLint checks- Keep
.env.localout of source control. - Tokens are stored per-user in the database and refreshed automatically.
- All
/api/user/*and/api/osu/*endpoints enforce authentication.