File Manager - A free file sharing platform for all
Tags: linodehackathon
Published: 2023-02-19 12:42:51

## What I built
I built a file manager for people to share files freely on the internet

### Features

- Allows new users to signup so that they can share files
- Allows users to upload files & generate a public shareable link
- Allows the user to control whether an uploaded file is public or not
- Allows users to preview the files before downloading them

### Category Submission:
Integration Innovators

### App Link
http://172.104.50.24
Test Credentials:
username: test
password: test@123

### Screenshots

Dashboard
![Dashboard](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o4qamrbb1rmeabaknxkb.png)

Public File Preview - Audio
![Public File Preview - Audio](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r489agferlqh4pk9wu0z.png)

Public File Preview - PDF
![Public File Preview - PDF](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6d396p65ntbjv8ioqy7e.png)

Public File Preview - Text
![Public File Preview - Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8ge895n6briboedkmhl.png)

Public File Preview - Video
![Public File Preview - Video](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9hj41j63ptzyhekqash2.png)

Login
![Login](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a04974s3tdaa1e6x67df.png)

Signup
![Signup](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjo0fqx6kuth0v8jw90n.png)

### Description
File manager is an online free-to-use platform where users can store & share their files with each other. The files can be either public or private as per the user's needs. The backend is built using Typescript & frontend uses Bootstrap & Edge templating.

### Link to Source Code
[https://github.com/jaanchal1/file-manager](https://github.com/jaanchal1/file-manager)

### Permissive License
[MIT](https://github.com/jaanchal1/file-manager/blob/main/LICENSE)

## Background
Recently, I've been looking for a solution to share my files online but all the sharers were either paid or slow or had some kind of time restriction. So, I decided to build this file manager so that more people like me can share files with each other online for free without any worry.


### How I built it
I built this using the AdonisJS framework for the backend & bootstrap for the frontend along with Linode services. I used the following Linode services:
- Object Storage: Linode's object storage is S3 compatible so I used it to store all the files that were uploaded by users. It was very easy to set up & use due to Linode's documentation. It was my first time using any sort of object storage and I got to learn how S3 & object storage in general work due to this
- Managed Postgres DB: Linode provides a managed PostgreSQL database which means that I don't have to configure it much and still get the industry standard database. This was very useful to me as I'm still learning about managing databases and saved me a lot of trouble along the way.
- Linode: I created a linode using [this](https://www.linode.com/docs/products/compute/compute-instances/guides/set-up-and-secure/) guide & installed node.js & nginx on it. This was my first time setting up a virtual machine from scratch and Linode's guides helped me out a lot on this journey.
- Linode Firewalls: Originally, I did not know anything about having a firewall on the Linode machine but reading Linode's guides gave me an idea about them & helped me understand their usefulness. Using Linode's firewall I blocked all ports except for 22 & 80 on my machine which helped in securing it.

Overall, I gained many new skills & knowledge along the way due to Linode's free 100$ credits and this hackathon. My next step would be to figure out how to make better use of the free credits & keep on improving my skills.

### Future Scope
- Allow users more control over who can access their files
- Store statistics regarding page views for public files
- Make APIs for uploading files so that this can be turned into a SaaS
- Better UI for users
- Add CDN for retrieving files