ChotuLink is a modern URL shortening web application designed to make link management effortless. It allows users to create short links, track clicks, generate QR codes, and access premium features. Guest users can try the service with limited functionality, while registered users enjoy full features.
- Features
- Tech Stack
- Installation
- Database Setup
- Running the App
- API Endpoints
- Frontend Pages
- Screenshots
- License
- Author
- Shorten URLs temporarily (not stored in the database)
- Limited to 5 requests per minute
- Signup/Login with JWT authentication
- Create unlimited short links
- Set custom expiry dates for links
- Track clicks for each link
- Access dashboard to manage links
- Generate QR codes for links
- Rate limiting for signup, login, and guest actions
- JWT-based authentication for secure routes
- Helmet for enhanced HTTP headers security
- CORS enabled
- Logging with Morgan
- Frontend: React, Axios, React Icons
- Backend: Node.js, Express.js
- Database: MySQL / PostgreSQL
- Authentication: JWT
- Security: Helmet, Rate Limiter
- Other Libraries: bcryptjs, nanoid, morgan
git clone https://github.com/ashishkarche/chotu-link.git
cd chotu-linkcd chotu-link-backend
npm installcd chotu-link-frontend
npm installCreate a .env file in the backend folder:
PORT=5000
JWT_SECRET=your-strong-random-key
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=yourpassword
DB_NAME=chotu_linkRun the following SQL commands:
CREATE DATABASE chotu_link;
USE chotu_link;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE links (
id INT AUTO_INCREMENT PRIMARY KEY,
short_code VARCHAR(10) UNIQUE NOT NULL,
short_url VARCHAR(255),
original_url TEXT NOT NULL,
user_id INT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
click_count INT DEFAULT 0,
expires_at DATETIME NULL
);cd backend
npm startcd frontend
npm start- Frontend runs on
http://localhost:3000 - Backend runs on
http://localhost:5000
- POST /signup β Create a new user account
- POST /login β Login and receive JWT token
- POST /shorten β Shorten a URL
- GET /mylinks β Fetch all links for authenticated user
- GET /clicks/:code β Get click count of a specific link
- GET /:code β Redirect to original URL
- Home Page β Introduction and link shortening form
- Signup Page β Create account with split-screen design
- Login Page β Login with split-screen design
- Dashboard β Manage all your shortened links
- Navbar β Responsive navigation with dynamic login/logout
This project is licensed under the MIT License Β© 2025 Ashish Karche




