A simple and efficient URL shortening service that allows users to convert long URLs into short, shareable links
Shortly is a complete URL shortening solution combining a beautiful, responsive frontend with a powerful backend. This monorepo contains both components as separate modules.
- 🔗 Instant URL shortening
- 📊 Comprehensive analytics for tracking link performance
- 🔐 Secure user authentication with JWT
- 📱 Responsive design optimized for all devices
- 📈 Dashboard to manage all shortened URLs
- 🔄 RESTful API design with clean architecture
- 🔍 Centralized logging and monitoring for operational insights
shortly/
├── frontend/ # Next.js frontend application
│ ├── app/ # Pages and routes
│ ├── components/ # Reusable UI components
│ ├── README.md # Frontend-specific documentation
│ └── ...
├── backend/ # Go backend service
│ ├── cmd/ # Application entry points
│ ├── internal/ # Clean architecture implementation
│ ├── README.md # Backend-specific documentation
│ └── ...
├── infra/ # Kubernetes configurations (submodule)
│ ├── namespaces.yaml # Kubernetes namespace definitions
│ ├── istio.yaml # Service mesh configuration
│ ├── cert-manager.yaml # TLS certificate management
│ ├── deployment.yaml # Application deployments
│ ├── elastic-search.yaml # Elasticsearch configuration
│ ├── kibana.yaml # Kibana dashboard configuration
│ ├── logstash.yaml # Log processing pipeline
│ ├── filebeat.yaml # Log collection agent
│ └── monitoring/ # Prometheus and Grafana configs
└── docs/ # Project documentation and assets
- Framework: Next.js 14+
- Language: TypeScript
- Styling: Tailwind CSS
- UI Components: Radix UI/shadcn/ui
- Icons: Lucide React
- Language: Golang
- Database: PostgreSQL
- Authentication: JWT
- API Documentation: Swagger
- Containerization: Docker & Docker Compose
- Logging: Zerolog
- Migration: Golang-Migrate
- Metrics: Prometheus & Grafana
- Logging: ELK Stack (Elasticsearch, Logstash, Kibana)
- Log Collection: Filebeat
- Service Mesh: Istio
Shortly uses Kubernetes for deployment and infrastructure management. The Kubernetes configuration files are maintained in a separate private repository and linked to this repository using Git submodules.
# Clone the complete repository with infrastructure configs
git clone --recursive git@github.com:PraveenGongada/shortly.git
# Or initialize submodules after cloning
git submodule init
git submodule update
# To fetch latest changes
git submodule update --remote
Contributions, issues, and feature requests are welcome! Feel free to check issues page.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Made with ❤️ by Praveen Kumar