Skip to content

nikhil-marne/StoreIt

Repository files navigation

StoreIt πŸ“¦

StoreIt πŸ“¦

A Modern Cloud Storage Management Platform

Built with Next.js 15 | Powered by Appwrite | Styled with Tailwind CSS

Live Demo Vercel

View Demo β€’ Report Bug β€’ Request Feature


πŸ“Έ Screenshots

Dashboard View

Dashboard Modern dashboard with storage analytics and recent files

Images Gallery

Images Browse and manage your images

File Actions

File Actions Rename, share, download, and delete files

File Sharing

Share Files Share files with other users via email

File Details

File Details View detailed information about your files

Search Functionality

Search Quickly find files with real-time search


πŸ“‹ Table of Contents


🎯 About The Project

StoreIt is a feature-rich cloud storage management platform that enables users to securely upload, organize, and share files. With an intuitive interface and powerful features, StoreIt provides a seamless experience for managing your digital assets.

Why StoreIt?

  • πŸ”’ Secure Storage - Your files are stored securely with Appwrite's robust backend
  • πŸ“Š Storage Analytics - Real-time insights into your storage usage by file type
  • 🀝 Easy Sharing - Share files with others via email with granular permissions
  • 🎨 Beautiful UI - Modern, responsive design that works on all devices
  • ⚑ Fast Performance - Built with Next.js 15 for optimal speed and performance

✨ Features

Core Features

  • πŸ“€ File Upload & Storage

    • Support for multiple file types (Documents, Images, Videos, Audio)
    • Drag-and-drop interface
    • Bulk file uploads
    • File size validation
  • πŸ“ File Management

    • Organize files by type
    • Rename files
    • Delete files
    • Search functionality
    • Sort by date, name, or size
  • πŸ‘₯ File Sharing

    • Share files with multiple users via email
    • Manage shared file permissions
    • Track who has access to your files
  • πŸ“Š Storage Analytics

    • Visual storage breakdown by file type
    • Storage usage charts
    • Track storage consumption in real-time
    • 2GB storage limit per user
  • πŸ• Recent Activity

    • Quick access to recently uploaded files
    • File thumbnails and previews
    • Timestamp information
  • πŸ” Authentication

    • Secure user authentication via Appwrite
    • Protected routes
    • Session management

πŸ› οΈ Tech Stack

Frontend

Backend

  • Appwrite - Backend-as-a-Service
    • Authentication
    • Database
    • Storage
    • Real-time capabilities

Additional Tools

  • React Hook Form - Form handling
  • Zod - Schema validation
  • ESLint - Code linting
  • PostCSS - CSS processing

πŸš€ Getting Started

Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js (v18.0.0 or higher)
  • npm or yarn or pnpm
  • An Appwrite account (Sign up here)

Installation

  1. Clone the repository

    git clone https://github.com/nikhil-marne/StoreIt.git
    cd StoreIt
  2. Install dependencies

    npm install
    # or
    yarn install
    # or
    pnpm install
  3. Set up Appwrite

    a. Create a new project in your Appwrite Console

    b. Create a new Database and note the Database ID

    c. Create the following collections:

    • users collection with these attributes:
      • fullName (string)
      • email (string)
      • avatar (string)
      • accountId (string)
    • files collection with these attributes:
      • type (string)
      • name (string)
      • url (string)
      • extension (string)
      • size (number)
      • owner (string)
      • accountId (string)
      • users (array)
      • bucketFileId (string)

    d. Create a Storage Bucket and note the Bucket ID

    e. Set up appropriate permissions for collections and storage

    f. Add platform for localhost:

    • Go to Settings β†’ Platforms β†’ Add Platform β†’ Web App
    • Hostname: localhost
  4. Configure environment variables

    Create a .env.local file in the root directory and add the following:

    NEXT_PUBLIC_APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
    NEXT_PUBLIC_APPWRITE_PROJECT=your_project_id
    NEXT_PUBLIC_APPWRITE_DATABASE=your_database_id
    NEXT_PUBLIC_APPWRITE_USERS_COLLECTION=your_users_collection_id
    NEXT_PUBLIC_APPWRITE_FILES_COLLECTION=your_files_collection_id
    NEXT_PUBLIC_APPWRITE_BUCKET=your_bucket_id
    NEXT_APPWRITE_KEY=your_api_key
  5. Run the development server

    npm run dev
    # or
    yarn dev
    # or
    pnpm dev
  6. Open your browser

    Navigate to http://localhost:3000


🌐 Deployment

Deploy to Vercel

This project is deployed on Vercel. Follow these steps to deploy your own instance:

  1. Push your code to GitHub

    git add .
    git commit -m "Ready for deployment"
    git push origin main
  2. Import to Vercel

    • Go to vercel.com
    • Click "New Project"
    • Import your GitHub repository
    • Vercel will auto-detect Next.js settings
  3. Add Environment Variables

    In Vercel project settings, add all environment variables from your .env.local:

    • NEXT_PUBLIC_APPWRITE_ENDPOINT
    • NEXT_PUBLIC_APPWRITE_PROJECT
    • NEXT_PUBLIC_APPWRITE_DATABASE
    • NEXT_PUBLIC_APPWRITE_USERS_COLLECTION
    • NEXT_PUBLIC_APPWRITE_FILES_COLLECTION
    • NEXT_PUBLIC_APPWRITE_BUCKET
    • NEXT_APPWRITE_KEY
  4. Configure Appwrite for Production

    In your Appwrite Console:

    • Go to Settings β†’ Platforms β†’ Add Platform β†’ Web App
    • Add your Vercel domain (e.g., your-app.vercel.app)
    • Add wildcard for previews: *.vercel.app
  5. Deploy

    • Click "Deploy"
    • Your app will be live in minutes!

Live Demo: https://store-it-alpha-topaz.vercel.app/


πŸ“ Project Structure

StoreIt/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ (auth)/              # Authentication pages
β”‚   β”‚   β”œβ”€β”€ sign-in/         # Sign in page
β”‚   β”‚   └── sign-up/         # Sign up page
β”‚   β”œβ”€β”€ (root)/              # Main application pages
β”‚   β”‚   β”œβ”€β”€ [type]/          # Dynamic file type pages
β”‚   β”‚   └── page.tsx         # Dashboard
β”‚   β”œβ”€β”€ globals.css          # Global styles
β”‚   └── layout.tsx           # Root layout
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ ui/                  # Shadcn UI components
β”‚   β”œβ”€β”€ ActionDropdown.tsx   # File actions menu
β”‚   β”œβ”€β”€ Chart.tsx            # Storage usage chart
β”‚   β”œβ”€β”€ FileUploader.tsx     # File upload component
β”‚   β”œβ”€β”€ FormattedDateTime.tsx
β”‚   β”œβ”€β”€ Header.tsx
β”‚   β”œβ”€β”€ MobileNavigation.tsx
β”‚   β”œβ”€β”€ OTPModal.tsx
β”‚   β”œβ”€β”€ Search.tsx
β”‚   β”œβ”€β”€ Sidebar.tsx
β”‚   β”œβ”€β”€ Thumbnail.tsx
β”‚   └── ...
β”œβ”€β”€ constants/
β”‚   └── index.ts             # App constants and config
β”œβ”€β”€ hooks/
β”‚   └── ...                  # Custom React hooks
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ actions/
β”‚   β”‚   β”œβ”€β”€ file.action.ts   # File CRUD operations
β”‚   β”‚   └── user.action.ts   # User operations
β”‚   β”œβ”€β”€ appwrite/
β”‚   β”‚   β”œβ”€β”€ config.ts        # Appwrite configuration
β”‚   β”‚   └── index.ts         # Appwrite client setup
β”‚   └── utils.ts             # Utility functions
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ assets/              # Static assets (icons, images)
β”‚   └── screenshots/         # App screenshots
β”œβ”€β”€ types/
β”‚   └── index.d.ts           # TypeScript type definitions
β”œβ”€β”€ .env.local               # Environment variables (create this)
β”œβ”€β”€ .gitignore
β”œβ”€β”€ next.config.ts
β”œβ”€β”€ package.json
β”œβ”€β”€ tailwind.config.ts
β”œβ”€β”€ tsconfig.json
└── README.md

πŸ’‘ Usage

Uploading Files

  1. Click the "Upload" button in the header
  2. Select files from your device or drag and drop
  3. Files will be automatically categorized by type
  4. View uploaded files in the dashboard or respective type pages

Managing Files

  • Rename: Click the three-dot menu β†’ Select "Rename"
  • Share: Click the three-dot menu β†’ Select "Share" β†’ Enter email addresses
  • Download: Click the three-dot menu β†’ Select "Download"
  • Delete: Click the three-dot menu β†’ Select "Delete" β†’ Confirm
  • Details: Click the three-dot menu β†’ Select "Details" to view file information

Viewing Storage Analytics

  • Dashboard displays storage breakdown by file type
  • Visual chart shows percentage of storage used
  • Click on any file type card to view files of that category

Searching Files

  • Use the search bar in the header
  • Search works across all file names
  • Results update in real-time as you type

File Categories

  • Documents - PDF, DOC, DOCX, TXT, XLS, XLSX, CSV
  • Images - JPG, JPEG, PNG, GIF, SVG, WEBP
  • Media - MP4, AVI, MOV, MKV, WEBM
  • Audio - MP3, WAV, OGG, M4A
  • Others - All other file types

🀝 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.

  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

πŸ“ License

Distributed under the MIT License. See LICENSE file for more information.


πŸ“§ Contact

Nikhil Marne - @nikhil-marne

Project Link: https://github.com/nikhil-marne/StoreIt

Live Demo: https://store-it-alpha-topaz.vercel.app/


πŸ™ Acknowledgments


⭐ If you find this project useful, please consider giving it a star!

Made with ❀️ by Nikhil Marne

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published