A simple URL shortening service that helps you share the perfect links!
- Copy To Clipboard (Copy your shortened links easily at just a button click)
- Guest Service (Anyone can create shortened links)
- Public API (Cuttlink for developers)
main
- production ready codedev-features
- where features implementation happendev-fixes
- where broken stuffs are fixed
others
nginx
- where I implemented an NGINX reverse proxy for the NodeJS server and an NGINX web server to serve bundled Angular code in productiondb
- where I'm currently implementing a PostgreSQL database for the app and a PostgreSQL admin database for management in the dev environmentdocs-changes
- where adding, fixing and improvement of documentations happeninfrastructure
-- where I'll be writing Kubernetes configurations for containers orchestration
- where I'll be using Terraform as Infrastructure as Code for provisioning cloud services for a staging and production environment
Version 1.0.0-alpha pre-released, awaiting version 1.0.0
β
Web UI: Built the web UI with Angular 11.
β
NodeJS server: Built the NodeJS server with ExpressJS to:
- Serve our API
- Shorten long urls
β
Dockerize: Containerized the services using Docker with Docker Compose for easier management.
β
Caching: Implemented a Redis server in a container to store long urls and their short codes.
β
Reverse Proxy: Implemented an NGINX reverse proxy in a container to reverse proxy requests to our NodeJS server.
β
Web Server: Implemented NGINX as a web server in our frontend container to serve our compiled angular build in production.
β
Error tracking: Error tracking handled by Sentry which is integrated into our NodeJS server logger.
β
Rate limiting: Implemented rate limiting on our API with a maximum of 100 requests per 3 mins per user IP.
βοΈ PostgreSQL Database: Implementing a PostgreSQL database in a container to store long urls and their short codes.
βοΈ Containers Orchestration: Write Kubernetes manifests to manage Docker services.
βοΈ Provision cloud resources: Provision the cloud infrastructures(resources) the app will need using Terraform.
βοΈ Continuous Delivery Pipeline: Implement a continuous delivery pipeline using Github Actions.
The frontend is built with Angular 11 and fully browser rendered. On the backend, a REST API handles shortening long urls. The REST API is rate limited allowing a maximum of 100 requests per 3 mins per user IP. A Redis cache is used for fast data retrieval. A PostgreSQL database is used to persist data. An NGINX server reverse proxies requests to our NodeJS server. An NGINX web server serves the compiled angular code in production. Error tracking is implemented for our NodeJS server using Sentry.
Angular Β· Typescript Β· CSS Β· HTML Β· NGINX
Express.js Β· Typescript Β· Redis Β· Sentry Β· NGINX
PostgreSQL
Docker with Docker Compose
Terraform
Shell script Β· PowerShell
See HOW_TO_RUN.md