A web application for discovering, comparing, and rating alternatives to Discord.
Originally built as a front‑end using Next.js 16 (App Router) and TypeScript, the project also includes a simple backend model powered by MongoDB with Mongoose. It provides a modern, responsive UI with Tailwind CSS and a set of sectional components such as a hero banner, leaderboard, features list, and FAQ.
- DB schemas
- Alternative
- Request
- Pages
- / (Home page)
- /alternatives
- /request
- /why
- Add opengraph and twitter meta tags
- Security audit before deploy
- [] update README.md with proper instructions
- Next.js 16 with the new App Router
- React 19 and TypeScript for typed components
- Tailwind CSS (v4) with
@tailwindcss/postcss,tw-animate-cssand utility helpers (clsx,tailwind-merge) - Mongoose for MongoDB integration
- Shadcn UI primitives located in
components/ui - Static assets served from
public/ - ESLint configuration using
eslint-config-next
/ (workspace root)
│ package.json
│ tsconfig.json
│ next.config.ts
│ postcss.config.mjs
│ eslint.config.mjs
│
├─ app/ # Next.js application router
│ ├─ layout.tsx # root layout (includes Header/Footer)
│ ├─ page.tsx # homepage with sections
│ └─ globals.css # global Tailwind styles
│
├─ components/ # UI sections and shared components
│ ├─ Hero.tsx
│ ├─ LeaderboardSection.tsx
│ ├─ FeaturesSection.tsx
│ ├─ FAQSection.tsx
│ ├─ Header.tsx
│ ├─ Footer.tsx
│ ├─ RecomendationSection.tsx
│ └─ ui/ # design system primitives (button, card, etc.)
│
├─ lib/ # utility helpers
│ ├─ mongodb.ts # mongoose connection helper
│ └─ utils.ts # `cn` className helper
│
├─ models/ # database models
│ └─ Alternative.ts # Mongoose schema + TS interfaces
│
├─ public/ # static files (favicon, images, etc.)
├─ components.json # shadcn configuration
└─ README.md # this document
The application stores information about each "alternative" in a MongoDB collection. The schema (defined in models/Alternative.ts) includes:
- name, description, image, website
- recommend value that let's me change recommendations via database
- Nested
dataobject containing:pros,cons,warnings(arrays of text + notes entries)discordfeature statuses (text channels, roles, etc.)securitydetails (e2ee, data collection)openSourcestatus and repository URLusersstats (amount of users, rating)decentralization,nsfw,appsavailabilityaifor overall information about platform use of AIcountryfor now origin, maybe include more in future
All types are exported as TypeScript interfaces for frontend use. A lean version AlternativeLean omits mongoose document methods for serializability.
Ensure the MONGODB_URI environment variable is set before running the app.
npm install
# or yarn / pnpm / bunCreate a .env.local file at the project root with at least:
MONGODB_URI="mongodb://user:password@host:port/database"npm run devVisit http://localhost:3000.
npm run build
npm run startAll UI utilities (e.g. button, card, dropdown) live under components/ui and were generated via the shadcn CLI.
For some I either used free components from https://shadcnstudio.com or got inspiration from them
- Fork this repo
- Create a branch (
git checkout -b feat/your-change) - Make your changes and run
npm run lint - Commit and push, then open a pull request
Thanks for checking out Discordless! Feel free to open issues or discuss improvements.