faisalsayed10 / firefiles Goto Github PK
View Code? Open in Web Editor NEWThe open‑source alternative to Dropbox. ⚡️
Home Page: https://firefiles.app
License: GNU Affero General Public License v3.0
The open‑source alternative to Dropbox. ⚡️
Home Page: https://firefiles.app
License: GNU Affero General Public License v3.0
A great project. But I found that this link does not seem to exist.
For CodeDay Labs
Wasabi is yet another object storage platform that would be a very good integration to have in our app. The good part is that Wasabi fully supports the AWS S3 API, So we don't need to reinvent the wheel again!
If you look into our codebase right now, you'll see that we support Backblaze and AWS both at the same time. Also, we have only written the code for supporting S3, and it works out of the box for Backblaze! (with some minor conditional changes wherever required)
Example: conditions inside useS3.tsx
wherever small changes are required depending on the bucket:
Okay, so now, your job is to integrate Wasabi in a similar manner by making the useS3
hook compatible with it.
pages/new/
directory which will be used to get the credentials for that provider. (refer other files to get an idea)useS3
hook wherever required. Explore how we've integrated Backblaze and try to follow it.util/globals.ts
and add an object for your provider to the PROVIDERS
array. (Also add a logo for the provider in the public/
directory)util/types.ts
and add your provider's name to the Provider
enum.useBucket
hook and add a case for your provider and return that hook.Refer to CONTRIBUTING.md for further guide: https://github.com/faisalsayed10/firefiles/blob/main/docs/CONTRIBUTING.md#testing
files
state as is used in the useS3 hook:setFiles((files) => [...files, newFile]);
to setFiles((files) => (files ? [...files, newFile] : [newFile]));
files
stateaddFile
addFile
Implement a grid view UI for files
Implement downloading an entire folder (.zip
) along with its child files and folders.
Add Cloudflare's C2 integration to Firefiles
Scaleway is yet another object storage platform that would be a very good integration to have in our app. The good part is that Scaleway fully supports the AWS S3 API, So we don't need to reinvent the wheel again!
If you look into our codebase right now, you'll see that we support Backblaze and AWS both at the same time. Also, we have only written the code for supporting AWS S3, but it works out of the box for Backblaze! (with some minor conditional changes wherever required)
Example: conditions inside useS3.tsx
wherever small changes are required depending on the bucket:
Okay, so now, your job is to integrate Scaleway in a similar manner by making the useS3
hook compatible with it.
pages/new/
directory which will be used to get the credentials for that provider. (refer to other files to get an idea)useS3
hook wherever required. Explore how we've integrated Backblaze and try to follow it.util/globals.ts
and add an object for your provider to the PROVIDERS
array. (Also add a logo for the provider in the public/
directory)util/types.ts
and add your provider's name to the Provider
enum.useBucket
hook and add a case for your provider and return that hook.Refer to CONTRIBUTING.md for further guidance: https://github.com/faisalsayed10/firefiles/blob/main/docs/CONTRIBUTING.md#testing
Add Supabase integration to Firefiles
Microsoft Azure also offers their blob storage service which we can integrate into Firefiles. The sad news is that unlike most of the other object storage services, Azure does not support S3-compatible APIs. So we will have to create a new useAzure
hook for this integration.
Refer to the CONTRIBUTING.md
file to understand how adding a new integration works.
https://github.com/faisalsayed10/firefiles/blob/main/docs/CONTRIBUTING.md#adding-cloud-providers
Deta is a very user-friendly cloud platform that enables users to use the cloud for free! (unlike s3). This would be a very good integration to have in our app. We will need to implement Deta support just like how Firebase is implemented.
If you look into our codebase right now, you will see that we have a custom hook called useFirebase that allows all the CRUD functions for the bucket.
So now, your job is to integrate Deta in a similar manner by making a useDeta
hook.
pages/new/
directory which will be used to get the credentials for that provider. (refer to other files to get an idea)useDeta
hook. Explore how we've integrated Firebase and try to follow it.util/globals.ts
and add an object for your provider to the PROVIDERS
array. (Also add a logo for the provider in the public/
directory)util/types.ts
and add your provider's name to the Provider
enum.useBucket
hook and add a case for your provider and return that hook.Refer to CONTRIBUTING.md for further guidance: https://github.com/faisalsayed10/firefiles/blob/main/docs/CONTRIBUTING.md#testing
For CodeDay Labs
The current behavior in our app is that whenever the user navigates to a folder, we hit the APIs and fetch their files again. This results in unnecessary API calls even if the list of files for that specific folder hasn't even changed.
How can this be improved?
Well, we can simply make use of the browser's indexeddb to locally store the list of files.
Basically, whenever we fetch the list of files for the first time using an API, we will store the response we get locally. And then, whenever the user fetches the list again for that specific folder, we get our response from there instead of making a get request every time.
Next, we will have a sync button so that the users can refresh their local data (and sync with the APIs). Whenever a file gets uploaded using our app, sync it locally too.
You may use any npm packages for interacting with indexeddb.
Implement AWS support just like how Firebase is currently implemented
maybe can it be replaced with sendinblue.com
Implement Min.io support just like how Firebase is implemented.
Hey, I'm getting this error while trying to set cors.
ArgumentException: JSON CORS data could not be loaded from: [ { "origin": ["https://drive.daniellop.me”], "method": ["GET"], "maxAgeSeconds": 3600 } ]
Just add Samba support to Firefiles
For CodeDay Labs
Object Storage buckets, like S3, allow users to add tags to the objects. This enables the users to better manage their files and filter them when needed.
https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging-managing.html
Your task is to implement a tagging system for files through which the user will directly interact with these APIs and add / remove / edit tags.
This issue can be fixed by simply re-setting the CORS whenever it breaks.
For CodeDay Labs
Currently, if you see, the files are randomly rendered on the screen. We must sort the files based on their properties like name
, size
, or created_at
.
Above the table which renders the list of files, add a sorting dropdown with options containing the properties. When the user selects any option, sort the list of the files.
BONUS: Add further flexibility by allowing users to choose whether they want their files sorted in ascending or descending order.
Oracle is yet another object storage platform that would be a very good integration to have in our app. The good part is that Oracle's object storage fully supports the AWS S3 API, So we don't need to reinvent the wheel again!
If you look into our codebase right now, you'll see that we support Backblaze and AWS both at the same time. Also, we have only written the code for supporting AWS S3, but it works out of the box for Backblaze! (with some minor conditional changes wherever required)
Example: conditions inside useS3.tsx
wherever small changes are required depending on the bucket:
Okay, so now, your job is to integrate Oracle's object storage in a similar manner by making the useS3
hook compatible with it.
pages/new/
directory which will be used to get the credentials for that provider. (refer other files to get an idea)useS3
hook wherever required. Explore how we've integrated Backblaze and try to follow it.util/globals.ts
and add an object for your provider to the PROVIDERS
array. (Also add a logo for the provider in the public/
directory)util/types.ts
and add your provider's name to the Provider
enum.useBucket
hook and add a case for your provider and return that hook.Refer to CONTRIBUTING.md for further guidance: https://github.com/faisalsayed10/firefiles/blob/main/docs/CONTRIBUTING.md#testing
Right now if you see, we're using Chakra UI to build out the interface for our app. We've decided to completely remove Chakra UI and switch to Tailwind CSS instead.
The migration part is already done but implementing the interface is still remaining. One of these pages is the dashboard, which currently looks like this:
Your goal is to use Tailwind CSS to implement a dashboard page that looks like this instead:
(ignore the dark mode UI, we'll first only implement the light theme)
To begin with, head over to the https://github.com/faisalsayed10/firefiles/tree/v1.4.0 branch which already has the migration done. Part of the UI is also already implemented.
Note: Don't worry too much about the features like tags
, search
, recent files
, etc. that are not yet implemented. It's okay to just build out the UI right now.
Providers that don't have a video tutorial:
For CodeDay Labs
Digital Ocean is yet another object storage platform that would be a very good integration to have in our app. The good part is that Digital Ocean fully supports the AWS S3 API, So we don't need to reinvent the wheel again!
If you look into our codebase right now, you'll see that we support Backblaze and AWS both at the same time. Also, we have only written the code for supporting AWS S3, but it works out of the box for Backblaze! (with some minor conditional changes wherever required)
Example: conditions inside useS3.tsx
wherever small changes are required depending on the bucket:
Okay, so now, your job is to integrate Digital Ocean in a similar manner by making the useS3
hook compatible with it.
pages/new/
directory which will be used to get the credentials for that provider. (refer other files to get an idea)useS3
hook wherever required. Explore how we've integrated Backblaze and try to follow it.util/globals.ts
and add an object for your provider to the PROVIDERS
array. (Also add a logo for the provider in the public/
directory)util/types.ts
and add your provider's name to the Provider
enum.useBucket
hook and add a case for your provider and return that hook.Refer to CONTRIBUTING.md for further guide: https://github.com/faisalsayed10/firefiles/blob/main/docs/CONTRIBUTING.md#testing
I encountered an issue while attempting to log in to Firefiles. After entering my email and clicking the log-in button, I received an email to verify my login. However, when I clicked both the verification link in the email and the alternative link provided, both redirected me to a page displaying a status code 500 internal server error.
I expected to be redirected to the Firefiles application after clicking either the verification link or the alternative link in the email.
This bug report aims to highlight the issue encountered while attempting to log in to Firefiles. The status code 500 internal server error prevents successful login, whether using the primary verification link or the alternative link provided in the email. The described steps should help reproduce the problem.
Feature which gives the users ability to invite other people to their storage bucket(s) and they can handle the read/write permissions of the user.
Oracle offers 200GB of free cloud storage - I'd love to see an integration there! This definitely wouldn't be a very easy thing to integrate though.
Implement file previewing for archives and compressed files similar to how other files are being previewed currently.
Implement a search bar on top of the drives page which allows users to search files and folders within the current directory.
BONUS: Allow users to search an entire drive regardless of the directory they are in.
How this can be achieved:
indexeddb
. (related to #30)indexeddb
.indexeddb
should update whenever a file is uploaded or a folder is created.Currently, there is a simple toast that shows the file's progress while it is being uploaded. We want to change that to show a Google Chrome-like downloads UI from where a user can manage their ongoing uploads and resume unfinished uploads. I'm thinking of a simple notion-like sidebar that expands into a full page on a button click.
There is also a case to handle when it comes to file uploading:
CASE: The upload continues sometime later after closing the window / on a different computer:
Implement Backblaze support just like how Firebase is implemented.
To be picked after #44.
Once tags have been implemented in our app. We need to allow users to filter their files based on the tags they select. Implement filtering within the directories for now.
BONUS: If you're looking for a challenge, consider implementing the filter system across the entire storage bucket (i.e. cross-directory) and even a global filtering system that filters files across all the buckets that a user has.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.