A web application where startups can find and claim exclusive deals on SaaS tools.
This platform helps early-stage startups save money by providing access to deals on tools like AWS, Notion, HubSpot, etc. Some deals are public, and some are locked for verified users.
Frontend:
- Next.js (App Router)
- TypeScript
- Tailwind CSS for styling
Backend:
- Node.js with Express
- MongoDB database
- JWT for authentication
You need to have these installed:
- Node.js (I used v18)
- MongoDB running locally
- Go to the server folder:
cd server- Install dependencies:
npm install-
Make sure MongoDB is running (I used
mongodin terminal) -
Seed the database with sample deals:
npm run seed- Start the server:
npm run devServer should be running on port 8000.
- Open another terminal and go to client folder:
cd client- Install dependencies:
npm install- Start the frontend:
npm run devFrontend should open on http://localhost:3000
- Browse Deals - You can see all deals on the deals page
- Register - Create an account to unlock deals
- Claim Deals - Click on a deal and claim it
- Dashboard - See all your claimed deals with redemption codes
server/
src/
controllers/ - Handle API logic
models/ - Database schemas
routes/ - API endpoints
middleware/ - Auth middleware
client/
src/
app/ - Next.js pages
components/ - Reusable components
context/ - Auth context
lib/ - Utilities
- User authentication (register/login)
- Browse deals with search and category filter
- Locked vs unlocked deals
- Claim system
- User dashboard to track claims
- Mobile menu is not implemented (desktop only for now)
- Email verification is not actually implemented
- Admin panel for managing deals would be nice
- Better error messages
The backend uses JWT tokens stored in localStorage. In production, this should probably use httpOnly cookies for better security.
The database is just running locally, so you need MongoDB installed. The connection string is in the .env file.
Create a .env file in the server folder:
PORT=8000
MONGO_URI=mongodb://127.0.0.1:27017/perkstack
JWT_SECRET=your_secret_here
Here is a glimpse of the application:



