Razorlinks simplifies URL shortening for efficient sharing. Easily generate, manage, and track your shortened links with our intuitive interface and comprehensive analytics dashboard. With features like QR code generation and click tracking, Razorlinks streamlines the process of sharing and monitoring your links.
🔴 Live Application: https://razorlinks.dev
- Simple URL Shortening - Create short, memorable URLs in just a few clicks
- Custom Short URLs - Personalize your shortened links with custom aliases
- Link Management - Organize and manage all your shortened URLs in one place
- QR Code Generation - Automatically generate QR codes for easy sharing of your shortened links
- Click Tracking - Monitor link performance with timestamp-based click analytics
- Visual Analytics Dashboard - Interactive charts and graphs to visualize your link performance
- Date Range Analytics - View click data for specific time periods
- Total Clicks Monitoring - Track cumulative clicks across all your links
- User Authentication - Secure login and registration system with Spring Security
- Email Verification - Verify user accounts via email with beautiful templates powered by jte
- Password Reset - Secure password recovery functionality with email notifications
- Admin Dashboard - Comprehensive admin panel for user and link management
- Audit Logs - Track user activities and system events
- Responsive Design - Seamless experience across desktop, tablet, and mobile devices
- Subdomain Routing - Smart routing based on subdomains for different app experiences
- Real-time Updates - Instant feedback with React Query for data fetching and caching
- Smooth Animations - Enhanced UI with Framer Motion animations
- Language: Java 17
- Framework: Spring Boot 3.x
- Security: Spring Security with JWT authentication
- Database: PostgreSQL (via Spring Data JPA)
- Task Scheduling: Spring Scheduling (
@EnableScheduling) - Build Tool: Gradle
- Email Templates: jte (Java Template Engine)
- Runtime: Node.js 22.14.0
- Framework: React 18.x
- Routing: React Router DOM
- State Management: Context API
- Data Fetching: TanStack React Query (formerly React Query)
- Forms: React Hook Form
- Styling: Tailwind CSS
- UI Components: Material-UI (MUI)
- Icons: React Icons
- Animations: Framer Motion
- Notifications: React Hot Toast
- Data Visualization: Custom charts for analytics
- Data Grid: MUI DataGrid for tabular data
- Build Tool: Vite
Razorlinks is fully hosted on AWS with a production-ready architecture:
- VPC: Custom Virtual Private Cloud with isolated network
- Subnets: Public and private subnets across multiple availability zones
- Route Tables: Custom routing for secure network traffic management
- Backend: AWS Elastic Beanstalk + CloudFront CDN
- Elastic Beanstalk for application hosting and auto-scaling
- CloudFront for global content delivery and reduced latency
- Frontend: AWS Amplify
- Automated deployments connected to GitHub repository
- Built-in CI/CD pipeline for frontend changes
- Database: Amazon RDS (PostgreSQL)
- Hosted in private subnet group
- Only accessible by Elastic Beanstalk application
- Secure, isolated database environment
- ACM (AWS Certificate Manager): Domain certificates for HTTPS
- Private Network: Database isolated in private subnets
Automated deployment pipeline for backend to AWS Elastic Beanstalk:
-
Trigger: Push to
masterbranch (only when backend files change) -
Authentication: AWS OIDC for secure, keyless authentication
-
Build Process:
- Checkout code
- Configure AWS credentials via OIDC
- Set up JDK 17
- Build with Gradle (skip tests)
- Generate version label with timestamp
- Deploy JAR to Elastic Beanstalk
- Wait for deployment completion
-
Configuration File:
.github/workflows/deploy-backend.yml -
Target: Elastic Beanstalk environment in
ap-south-1region
- Trigger: Push to
masterbranch (frontend changes) - Process: Automatically handled by AWS Amplify's built-in CI/CD
- Connected Repository: Direct GitHub integration
- Java 17 or higher
- Node.js 22.14.0 or higher
- PostgreSQL database
- Gradle (or use the included Gradle wrapper)
-
Clone the repository
git clone https://github.com/Razorquake/Razorlinks.git cd Razorlinks/razorlinks -
Configure application properties
# Create application.properties or application.yml # Configure database connection, JWT secret, email settings, etc.
-
Build and run
./gradlew clean build ./gradlew bootRun
Or run directly:
java -jar build/libs/razorlinks-0.0.1-SNAPSHOT.jar
-
Navigate to frontend directory
cd razorlinks-web -
Install dependencies
npm install
-
Configure environment variables
# Create .env file with API endpoint configuration -
Run development server
npm run dev
-
Build for production
npm run build
Razorlinks/
├── razorlinks/ # Backend (Spring Boot)
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/razorquake/razorlinks/
│ │ │ │ ├── RazorlinksApplication.java
│ │ │ │ ├── controller/
│ │ │ │ ├── service/
│ │ │ │ ├── repository/
│ │ │ │ ├── model/
│ │ │ │ ├── config/
│ │ │ │ └── security/
│ │ │ └── resources/
│ │ │ └── application.properties
│ │ └── test/
│ ├── build.gradle
│ └── gradlew
├── razorlinks-web/ # Frontend (React + Vite)
│ ├── src/
│ │ ├── components/
│ │ │ ├── auth/
│ │ │ ├── dashboard/
│ │ │ ├── auditlogs/
│ │ │ ├── LandingPage.jsx
│ │ │ ├── AboutPage.jsx
│ │ │ └── ...
│ │ ├── hooks/
│ │ ├── services/
│ │ │ └── api.js
│ │ ├── store/
│ │ │ └── ContextApi.jsx
│ │ ├── utils/
│ │ ├── App.jsx
│ │ └── main.jsx
│ ├── public/
│ ├── package.json
│ └── vite.config.js
├── .github/
│ └── workflows/
│ └── deploy-backend.yml # Backend CI/CD pipeline
└── README.md
- JWT Authentication: Secure token-based authentication
- Spring Security: Comprehensive security configuration
- Email Verification: Account verification via email
- Password Encryption: Secure password hashing
- Private Database: RDS in private subnet, not publicly accessible
- HTTPS: SSL/TLS certificates via AWS ACM
- OIDC Authentication: Keyless AWS authentication in CI/CD
We welcome contributions! This project participates in Hacktoberfest.
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
hacktoberfesthacktoberfest-acceptedjavaspring-bootspring-data-jpaspring-security
POST /auth/public/register- User registrationPOST /auth/public/login- User loginPOST /auth/public/resend-verification- Resend verification emailPOST /auth/public/reset-password- Reset password
POST /urls/shorten- Create shortened URLGET /urls/myurls- Get user's shortened URLsGET /urls/totalClicks- Get click analytics with date range
GET /admin/get-users- Get all usersGET /admin/users/{id}- Get user details
Currently, Razorlinks provides:
- ✅ Click Tracking - Track every click with timestamp
- ✅ Time-based Analytics - View clicks over custom date ranges
- ✅ Visual Charts - Interactive graphs for data visualization
- ✅ Total Click Counts - Aggregate click statistics
Note: Geographical data and referral source tracking are not currently implemented but may be added in future updates.
The application supports intelligent subdomain routing:
- Main App (
www): Landing page, about page, authentication - URL Subdomain (
url): Dedicated subdomain for URL management and analytics
This project is licensed under the MIT License - see the LICENSE file for details.
Copyright (c) 2025 Anant Jaiswal
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.
Razorquake
- GitHub: @Razorquake
- Website: razorlinks.dev
- Spring Boot team for the excellent framework
- React team for the powerful UI library
- AWS for reliable cloud infrastructure
- All contributors who help improve Razorlinks
Made with ❤️ by Razorquake
⭐ Star this repository if you find it helpful!