diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..bebc9ee
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,96 @@
+# Contributing
+
+We would ❤️ for you to contribute to Pingvin Share and help make it better! All contributions are welcome, including issues, suggestions, pull requests and more.
+
+## Getting started
+You've found a bug, have suggestion or something else, just create an issue on GitHub and we can get in touch 😊.
+
+
+## Submit a Pull Request
+Once you created a issue and you want to create a pull request, follow this guide.
+
+Branch naming convention is as following
+
+`TYPE-ISSUE_ID-DESCRIPTION`
+
+example:
+
+```
+feat-69-ability-to-set-share-expiration-to-never
+```
+
+When `TYPE` can be:
+
+- **feat** - is a new feature
+- **doc** - documentation only changes
+- **fix** - a bug fix
+- **refactor** - code change that neither fixes a bug nor adds a feature
+
+**All PRs must include a commit message with the changes description!**
+
+For the initial start, fork the project and use the `git clone` command to download the repository to your computer. A standard procedure for working on an issue would be to:
+
+1. `git pull`, before creating a new branch, pull the changes from upstream. Your master needs to be up to date.
+
+```
+$ git pull
+```
+
+2. Create new branch from `main` like: `feat-69-ability-to-set-share-expiration-to-never`
+
+```
+$ git checkout -b [name_of_your_new_branch]
+```
+
+3. Work - commit - repeat
+
+4. Before you push your changes, make sure you run the linter and format the code.
+
+```bash
+npm run lint
+npm run format
+```
+
+5. Push changes to GitHub
+
+```
+$ git push origin [name_of_your_new_branch]
+```
+
+6. Submit your changes for review
+ If you go to your repository on GitHub, you'll see a `Compare & pull request` button. Click on that button.
+7. Start a Pull Request
+ Now submit the pull request and click on `Create pull request`.
+8. Get a code review approval/reject
+
+## Setup project
+
+Pingvin Share consists of a frontend and a backend.
+
+### Backend
+
+The backend is built with [Nest.js](https://nestjs.com) and uses Typescript.
+
+#### Setup
+
+1. Open the `backend` folder
+2. Duplicate the `.env.example` file, rename the duplicate to `.env` and change the environment variables if needed
+3. Install the dependencies with `npm install`
+4. Push the database schema to the database by running `npx prisma db push`
+5. Start the backend with `npm run dev`
+
+### Frontend
+The frontend is built with [Next.js](https://nextjs.org) and uses Typescript.
+
+#### Setup
+1. Start the backend first
+2. Open the `frontend` folder
+3. Duplicate the `.env.example` file, rename the duplicate to `.env` and change the environment variables if needed
+4. Install the dependencies with `npm install`
+5. Start the frontend with `npm run dev`
+
+You're all set!
+
+### Testing
+
+At the moment we only have system tests for the backend. To run these tests, run `npm run test:system` in the backend folder.
diff --git a/README.md b/README.md
index f3d48d1..8302206 100644
--- a/README.md
+++ b/README.md
@@ -10,10 +10,11 @@ Demo: https://pingvin-share.dev.eliasschneider.com
## ✨ Features
-- Create a simple share with a link
+- Create a share with files that you can access with a link
- No file size limit, only your disk will be your limit
+- Set a share expiration
- Optionally secure your share with a visitor limit and a password
-- Dark mode
+- Light & dark mode
## ⌨️ Setup
@@ -43,29 +44,4 @@ Just update the docker container by running `docker compose pull && docker compo
## 🖤 Contribute
-You're very welcome to contribute to Pingvin Share!
-Contact me, create an issue or directly create a pull request.
-
-### Development setup
-
-#### Backend
-
-1. Open the `backend` folder
-2. Duplicate the `.env.example` file, rename the duplicate to `.env` and change the environment variables if needed
-3. Install the dependencies with `npm install`
-4. Push the database schema to the database by running `npx prisma db push`
-5. Start the backend with `npm run dev`
-
-#### Frontend
-
-1. Start the backend first
-2. Open the `frontend` folder
-3. Duplicate the `.env.example` file, rename the duplicate to `.env` and change the environment variables if needed
-4. Install the dependencies with `npm install`
-5. Start the frontend with `npm run dev`
-
-You're all set!
-
-### Testing
-
-At the moment we only have system tests for the backend. To run these tests, run `npm run test:system` in the backend folder.
+You're very welcome to contribute to Pingvin Share! Follow the [contribution guide](/CONTRIBUTING.md) to get started.
diff --git a/frontend/.env.example b/frontend/.env.example
index 7e65299..dbda902 100644
--- a/frontend/.env.example
+++ b/frontend/.env.example
@@ -1,4 +1,3 @@
SHOW_HOME_PAGE=true
ALLOW_REGISTRATION=true
MAX_FILE_SIZE=1000000000
-TWELVE_HOUR_TIME=false
diff --git a/frontend/next.config.js b/frontend/next.config.js
index dea14c0..16030c9 100644
--- a/frontend/next.config.js
+++ b/frontend/next.config.js
@@ -5,8 +5,6 @@ const nextConfig = {
ALLOW_REGISTRATION: process.env.ALLOW_REGISTRATION,
SHOW_HOME_PAGE: process.env.SHOW_HOME_PAGE,
MAX_FILE_SIZE: process.env.MAX_FILE_SIZE,
- BACKEND_URL: process.env.BACKEND_URL,
- TWELVE_HOUR_TIME: process.env.TWELVE_HOUR_TIME
}
}
diff --git a/frontend/src/components/share/CreateUploadModalBody.tsx b/frontend/src/components/share/CreateUploadModalBody.tsx
index 0450763..f4dd7d4 100644
--- a/frontend/src/components/share/CreateUploadModalBody.tsx
+++ b/frontend/src/components/share/CreateUploadModalBody.tsx
@@ -1,8 +1,8 @@
import {
Accordion,
Button,
- Col,
Checkbox,
+ Col,
Grid,
NumberInput,
PasswordInput,
@@ -13,13 +13,10 @@ import {
} from "@mantine/core";
import { useForm, yupResolver } from "@mantine/form";
import { useModals } from "@mantine/modals";
+import moment from "moment";
import * as yup from "yup";
import shareService from "../../services/share.service";
import { ShareSecurity } from "../../types/share.type";
-import moment from "moment";
-import getConfig from "next/config";
-
-const { publicRuntimeConfig } = getConfig();
const PreviewExpiration = ({ form }: { form: any }) => {
const value = form.values.never_expires
@@ -34,14 +31,7 @@ const PreviewExpiration = ({ form }: { form: any }) => {
)
.toDate();
- if (publicRuntimeConfig.TWELVE_HOUR_TIME === "true")
- return `This share will expire on ${moment(expirationDate).format(
- "MMMM Do YYYY, h:mm a"
- )}`;
- else
- return `This share will expire on ${moment(expirationDate).format(
- "MMMM DD YYYY, HH:mm"
- )}`;
+ return `This share will expire on ${moment(expirationDate).format("LLL")}`;
};
const CreateUploadModalBody = ({
diff --git a/frontend/src/components/upload/showCompletedUploadModal.tsx b/frontend/src/components/upload/showCompletedUploadModal.tsx
index 68c32ae..ac7de64 100644
--- a/frontend/src/components/upload/showCompletedUploadModal.tsx
+++ b/frontend/src/components/upload/showCompletedUploadModal.tsx
@@ -62,11 +62,9 @@ const Body = ({ share }: { share: Share }) => {
{/* If our share.expiration is timestamp 0, show a different message */}
{moment(share.expiration).unix() === 0
? "This share will never expire."
- : `This share will expire on ${
- publicRuntimeConfig.TWELVE_HOUR_TIME === "true"
- ? moment(share.expiration).format("MMMM Do YYYY, h:mm a")
- : moment(share.expiration).format("MMMM DD YYYY, HH:mm")
- }`}
+ : `This share will expire on ${moment(share.expiration).format(
+ "LLL"
+ )}`}