GoNet is a niche-based social discovery MVP built with Next.js 15, Auth.js, Prisma, Supabase Postgres, Tailwind CSS, and reusable shadcn-style UI primitives.
Users can:
- sign in with their X account
- build a niche-driven profile
- browse other users who share similar interests
- jump directly to a matched user on X
- Next.js 15 App Router
- TypeScript
- Tailwind CSS
- Auth.js v5
- Prisma
- Supabase Postgres
GoNet/
|-- app/
| |-- (app)/
| | |-- discover/
| | | `-- page.tsx
| | `-- profile/
| | `-- page.tsx
| |-- (marketing)/
| | `-- page.tsx
| |-- api/
| | `-- auth/
| | `-- [...nextauth]/
| | `-- route.ts
| |-- globals.css
| `-- layout.tsx
|-- components/
| |-- profile/
| | `-- profile-form.tsx
| |-- ui/
| | |-- avatar.tsx
| | |-- badge.tsx
| | |-- button.tsx
| | |-- card.tsx
| | |-- input.tsx
| | |-- label.tsx
| | |-- separator.tsx
| | `-- textarea.tsx
| |-- navbar.tsx
| |-- niche-selector.tsx
| `-- user-card.tsx
|-- lib/
| |-- actions/
| | |-- discover.ts
| | `-- profile.ts
| |-- auth.ts
| |-- db.ts
| `-- utils.ts
|-- prisma/
| `-- schema.prisma
|-- types/
| `-- next-auth.d.ts
|-- .env.example
|-- .eslintrc.json
|-- next.config.js
|-- package-lock.json
|-- package.json
|-- postcss.config.js
|-- tailwind.config.ts
`-- tsconfig.json
Copy .env.example to .env.local and fill in:
AUTH_SECRETAUTH_TWITTER_IDAUTH_TWITTER_SECRETDATABASE_URLDIRECT_URL
- Create a Supabase project and copy the Postgres connection strings.
- Create an X developer app.
- Set the callback URL to:
http://localhost:3000/api/auth/callback/twitter - Copy
.env.exampleto.env.local. - Install dependencies:
npm install - Push the Prisma schema:
npx prisma db push - Start the app:
npm run dev
npm run devnpm run buildnpm run lintnpm run db:generatenpm run db:pushnpm run db:studio
- Auth.js is configured to store the X profile once at sign-in, then read user data from Postgres.
- The app uses JWT sessions instead of the Prisma adapter, which keeps auth aligned with the custom
Userschema in this repo. - The current production build passes locally after a fresh dependency install.