From 1e3d8224494915cda0acc8998724efd6c5ab6e03 Mon Sep 17 00:00:00 2001 From: Arkaprabha Chakraborty Date: Wed, 7 Aug 2024 12:50:13 +0530 Subject: [PATCH] Add a README --- README.md | 78 ++++++++++++++++++++++++++++++++++++++++++++++++ blob/reduce.png | Bin 0 -> 14393 bytes 2 files changed, 78 insertions(+) create mode 100644 README.md create mode 100644 blob/reduce.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..ae088c4 --- /dev/null +++ b/README.md @@ -0,0 +1,78 @@ +![reduce.png](blob/reduce.png) + +# Reduce + +Reduce is a URL shortening service that allows users to easily shorten long URLs for easy access and sharing. This repository contains both the backend and frontend code for the Reduce application. + +## Features + +- URL shortening: Convert long URLs into short, easy-to-share URLs. +- Automatic URL retrieval: Easily retrieve the original long URL using the short URL. +- Unique ID generation: Each shortened URL is given a unique, randomly generated ID. +- Responsive UI: User-friendly interface with React, Tailwind CSS, and MUI components. + +## Technologies Used + +- **Backend**: Go, Echo, GORM +- **Frontend**: React, Axios, Tailwind CSS, MUI +- **Database**: PostgreSQL +- **Containerization**: Docker, Docker Compose + +## Getting Started + +### Prerequisites + +- Docker and Docker Compose installed +- Node.js and npm installed + +### Backend Setup + +1. Ensure the environment variables are set: + + ``` + DB_HOST=host + DB_PORT=port + DB_USER=user + DB_NAME=name + DB_PASSWORD=password + BASE_URL=url + ``` + +2. Build and run the backend using Docker Compose: + ```sh + docker-compose up --build + ``` + +### Frontend Setup + +1. Navigate to the frontend directory: + + ```sh + cd frontend + ``` + +2. Create a `.env.local` file with the following variable: + + ``` + NEXT_PUBLIC_BACKEND_URL=http://localhost:8080 + ``` + +3. Install the dependencies and run the frontend: + ```sh + npm install + npm run dev + ``` + +## Usage + +1. Open your browser and navigate to `http://localhost:3000`. +2. Enter the long URL you want to shorten and click the "Reduce" button. +3. Copy the shortened URL and share it as needed. + +## Contributing + +Thank you for considering contributing to Reduce! We welcome your contributions. Whether it's fixing bugs, adding features, or improving documentation, your help is appreciated. Feel free to report issues or submit pull requests. + +## License + +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details. diff --git a/blob/reduce.png b/blob/reduce.png new file mode 100644 index 0000000000000000000000000000000000000000..83cdef7b06971b7d65dec5610c8d778ec6655d20 GIT binary patch literal 14393 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 NP~SwaOxN+w{{s3QX)OQ% literal 0 HcmV?d00001