Skip to content

A Full Stack link shortener with a microservices architecture πŸ›  (LAST FEATURES in *db* branch) Shorten those long links πŸ”—

License

Notifications You must be signed in to change notification settings

danBamikiya/cuttlink

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ”— Cuttlink

Short links, more clicks

A simple URL shortening service that helps you share the perfect links!


cuttlink-preview-img


✨ Features

  • 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)

🌴 Branches

others

  • nginx - where I implemented an NGINX reverse proxy for the NodeJS server and an NGINX web server to serve bundled Angular code in production
  • db - where I'm currently implementing a PostgreSQL database for the app and a PostgreSQL admin database for management in the dev environment
  • docs-changes - where adding, fixing and improvement of documentations happen
  • infrastructure -
    • 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

βŒ› Status

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.

πŸ“š Tech Stack

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.

Frontend

Angular Β· Typescript Β· CSS Β· HTML Β· NGINX

Backend

Express.js Β· Typescript Β· Redis Β· Sentry Β· NGINX

Database

PostgreSQL

Containerization

Docker with Docker Compose

Infrastructure as Code

Terraform

Scripting

Shell script Β· PowerShell

🚴 How To Run

See HOW_TO_RUN.md

About

A Full Stack link shortener with a microservices architecture πŸ›  (LAST FEATURES in *db* branch) Shorten those long links πŸ”—

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published