reduced.to

Free Modern URL Reducer. Make sure to share love by giving it a star.🌟 Have a great day!

693
282
TypeScript

Contributors
Forks
Stargazers
Issues


logo

Preview

Reduced.to is a modern web application that reduces the length of link URL. So it's easier to remember, share and track.

App Β· Report Bug Β· Request Feature


πŸ“š Table of Contents
  1. 🌐 About The Project
  2. πŸš€ Getting Started
  3. πŸ±β€πŸ’» Usage
  4. 🧱 Roadmap
  5. πŸ₯‡ Contributing
  6. πŸ† Contributors
  7. πŸ“ License
  8. πŸ’Œ Contact

🌐 About The Project

πŸ”₯ Built With

List of frameworks/libraries used to bootstrap the project.

  • NX
  • Nest
  • Qwik
  • Tailwindcss
  • Novu

(back to top)

πŸš€ Getting Started

πŸ“ƒ Prerequisites

List of things you need to run the project locally and how to install them.

  • npm
    npm install npm@latest -g
    
  • docker
    https://docs.docker.com/get-docker/
    

πŸ’» Installation

  1. Fork / Clone this repository
  2. Install NPM packages
    npm install
    
  3. Copy .example.env to .env and fill it properly (see Configuration)
  4. Make sure you have a local instance of PostgreSQL running on port 5432. If not, you can run it using docker:
    docker run --name reduced_to_db -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=reduced_to_db -p 5432:5432 -d postgres
    
  5. Run Prisma migration from root folder:
    npx nx migrate-dev prisma --name=init
    
  6. Run the backend from root folder:
    npx nx serve backend
    
  7. Run the frontend from root folder:
    npx nx serve frontend
    

πŸ‘©β€πŸ’» Development

The project is structured in the following way:

.
β”œβ”€β”€ apps/
β”‚   β”œβ”€β”€ backend
β”‚   └── frontend
└── libs/
    β”œβ”€β”€ config
    └── prisma

🐳 Docker

You can build the docker images by running the following nx command:

npx nx run-many -t docker-build
  • This command will automatically build the dependencies and the backend and frontend images.

πŸ™ Docker compose

  • In case you have docker installed, you can single-click deploy and test your changes by running the following and going to http://localhost:5000/ on your browser.

  • When you run the command below, don’t forget to change the .env file with the correct values.

    docker compose -f docker/local/docker-compose.yml -p reduced-to up
    

☸ Deployment

You can deploy the app to a Kubernetes cluster by installing the Helm chart.

  1. Navigate to the chart directory (/docker/k8s/chart)
  2. Update the values in the values.yaml file
  3. Run the following command to deploy the app to your cluster:
helm install reduced-to . --namespace reduced-to --create-namespace

πŸ‘· Configuration

For the minimal configuration you can just rename the .example.env files to .env.

General
  • BACKEND_APP_PORT: Backend port
  • FRONTEND_APP_PORT: Frontend port
  • NODE_ENV: Node environment (development / production)
Database
  • DATABASE_URL: Database connection string
Rate Limit
  • RATE_LIMIT_TTL: Rate limit TTL (time to live)
  • RATE_LIMIT_COUNT: Number of requests within the ttl
Paddle - (Payment Gateway - https://www.paddle.com/ - Optional)
  • PADDLE_ENABLE: Wethter to enable Paddle or not
  • PADDLE_WEBHOOK_KEY: Get it from your Paddle account
  • PADDLE_SECRET_KEY: Get it from your Paddle account
Logger
  • LOGGER_CONSOLE_THRESHOLD: Threshold level of the console transporter.
Frontend
  • DOMAIN: Domain of your frontend app
  • PUBLIC_PADDLE_KEY: Get it from your Paddle account (Not needed when running locally)
  • API_DOMAIN: Domain of your backend instance (used for server side requests)
  • CLIENTSIDE_API_DOMAIN: Domain of your backend instance (used for client side requests)
  • STORAGE_DOMAIN=Domain of your bucket (used for storing images)
Redis
  • REDIS_ENABLE: Whether to use external Redis store or not
  • REDIS_HOST: Redis instance host
  • REDIS_PORT: Redis instance port
  • REDIS_PASSWORD: Redis instance password
  • REDIS_TTL: Redis ttl (in seconds)
Auth
  • JWT_ACCESS_SECRET: Jwt secret (used for access tokens)
  • JWT_REFRESH_SECRET: Jwt secret (used for refresh tokens)
Safe Browsing API
Novu
  • NOVU_API_KEY: Get it from https://novu.co/, you don’t need this when running locally (just verify your email from the database)

Happy Hacking !

Change my plan on development

If you want to change your plan on developemnt (Assuming you have a local instance of PostgreSQL running on port 5432 and you don’t have Paddle configured):

  1. Register locally on the app.
  2. Go to your database and create a new row in the Subscription table:
    • id: 1
    • userId: (you can find your user id in the User table)
    • plan: (FREE / PRO / BUSINESS)
    • status: active
    • endDate: Choose a date in the future
    • scheduledToBeCancelled: false
    • endDate: empty (NULL)
    • nextBilledAt: empty (NULL)
    • createdAt: current date
    • updatedAt: current date
  3. Relogin to the app (refresh the JWT token)
  4. You can now access the premium features.

(back to top)

πŸ±β€πŸ’» Usage

Simply copy and paste a URL into the provided area. Then click shorten URL! Your URL has now been shortened!

(back to top)

🧱 Roadmap

  • [x] Migrate backend to NestJS
  • [x] Migrate frontend to Qwik
  • [x] Better README
  • [x] Generate QRCode
  • [x] Split front-end into components
  • [x] Better UI
    • [x] Animations
    • [x] Logo
    • [x] Dark/Light mode
  • [ ] Improve front-end components
  • [x] Backend tests
  • [x] Migration to Nx
  • [ ] Split backend into libs
  • [ ] Support k8s deployment (helm)
  • [ ] Front-end Tests
  • [ ] Logs
  • [ ] Add a statistics page
  • [ ] Add more ideas

Just create a Pull request already πŸ˜ƒ

See the open issues for a full list of proposed features (and known issues).

(back to top)

πŸ₯‡ Contributing

Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag β€œenhancement”.
Don’t forget to give the project a star ⭐!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ† Contributors

(back to top)

πŸ“ License

This project is licensed under the terms of the MIT License

(back to top)

πŸ’Œ Contact

Project Link: https://github.com/origranot/reduced.to

(back to top)