{"id":22316366,"url":"https://github.com/clementmadiot/storeit-nextjs","last_synced_at":"2026-05-06T03:33:13.065Z","repository":{"id":264645328,"uuid":"893957291","full_name":"ClementMadiot/StoreIt-nextjs","owner":"ClementMadiot","description":" Storage Management Platform inspired by giants like Google Drive, Dropbox, and OneDrive","archived":false,"fork":false,"pushed_at":"2025-02-26T12:40:38.000Z","size":1395,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-04T01:03:54.670Z","etag":null,"topics":["appwrite","nextjs","shadcn-ui","tailwindcss","typescript"],"latest_commit_sha":null,"homepage":"https://store-it-cm.vercel.app/sign-up","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ClementMadiot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-11-25T13:59:55.000Z","updated_at":"2025-02-26T12:40:41.000Z","dependencies_parsed_at":"2024-12-10T09:22:30.496Z","dependency_job_id":"c71712f1-8a46-459c-a029-77c66323a115","html_url":"https://github.com/ClementMadiot/StoreIt-nextjs","commit_stats":null,"previous_names":["clementmadiot/storeit-nextjs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ClementMadiot/StoreIt-nextjs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClementMadiot%2FStoreIt-nextjs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClementMadiot%2FStoreIt-nextjs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClementMadiot%2FStoreIt-nextjs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClementMadiot%2FStoreIt-nextjs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ClementMadiot","download_url":"https://codeload.github.com/ClementMadiot/StoreIt-nextjs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClementMadiot%2FStoreIt-nextjs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263427305,"owners_count":23464842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appwrite","nextjs","shadcn-ui","tailwindcss","typescript"],"created_at":"2024-12-03T23:06:12.535Z","updated_at":"2026-05-06T03:33:13.014Z","avatar_url":"https://github.com/ClementMadiot.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://store-it-cm.vercel.app/sign-up\" target=\"_blanck\"\u003e\u003cimg src=\"./app/storeIt-screen.png\" alt=\"StoreIt sign-Up\"\u003e\u003c/a\u003e\n   \u003cdiv align=\"center\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/-Next_JS-black?style=for-the-badge\u0026logoColor=white\u0026logo=nextdotjs\u0026color=000000\" alt=\"nextjs\" /\u003e\n      \u003cimg src=\"https://img.shields.io/badge/-TypeScript-black?style=for-the-badge\u0026logoColor=white\u0026logo=typescript\u0026color=3178C6\" alt=\"typescript\" /\u003e\n      \u003cimg src=\"https://img.shields.io/badge/-Tailwind_CSS-black?style=for-the-badge\u0026logoColor=white\u0026logo=tailwindcss\u0026color=06B6D4\" alt=\"tailwindcss\" /\u003e\n      \u003cimg src=\"https://img.shields.io/badge/-Appwrite-black?style=for-the-badge\u0026logoColor=white\u0026logo=appwrite\u0026color=FD366E\" alt=\"appwrite\" /\u003e\n    \u003c/div\u003e\n  \u003ch3 align=\"center\"\u003eStoreIt - Storage and File Sharing Platform\u003c/h3\u003e\n\u003c/div\u003e\n\n## \u003cbr /\u003e 📋 \u003ca name=\"table\"\u003eSummary\u003c/a\u003e\n\n- ✨ [Introduction](#introduction)\n- 🛠 [Technology Used](#tech-stack)\n- 📝 [Features](#features)\n- 🚀 [Launch App](#launch-app)\n- 🎨 [Styling](#style)\n\n## \u003cbr /\u003e \u003ca name=\"introduction\"\u003e✨ Introduction\u003c/a\u003e\n\n**[ENG]** This project is a comprehensive file management system built with Next.js 15 and the Appwrite Node SDK, leveraging advanced features for seamless file handling. It utilizes Tailwind CSS, ShadCN UI, and React Dropzone to create a modern and intuitive user experience. Offering Google Drive-like functionalities, it includes secure authentication, file upload, download, sharing, and advanced search and filtering capabilities for efficient file management.\n\n**[FR]** Ce projet est un système de gestion de fichiers complet développé avec Next.js 15 et le SDK Appwrite pour Node, exploitant des fonctionnalités avancées pour une gestion fluide des fichiers. Il utilise Tailwind CSS, ShadCN UI et React Dropzone pour offrir une expérience utilisateur moderne et intuitive. Proposant des fonctionnalités similaires à Google Drive, il inclut une authentification sécurisée, l’upload et le téléchargement de fichiers, le partage, ainsi qu’une recherche avancée avec des options de filtrage pour une gestion efficace des fichiers.\n\n## \u003cbr /\u003e \u003ca name=\"tech-stack\"\u003e🛠 Technology Used\u003c/a\u003e\n\n- [TailwindCSS](https://tailwindcss.com/docs/installation)\n  It's a utility-first CSS framework for rapidly building modern websites without ever leaving your HTML.\n\n- [tailwindcss-animated](https://www.npmjs.com/package/tailwindcss-animated)\n  Extended animation utilities for Tailwind CSS that brings various utility classes as well as several ready-to-use CSS animations.\n\n- [shadcn/ui](https://ui.shadcn.com/docs)\nOpen-source UI component library for React that focuses on flexibility and customization.\n\n- [Appwrite](https://www.npmjs.com/package/node-appwrite)\nAppwrite is an open-source backend as a service server that abstract and simplify complex and repetitive development tasks behind a very simple to use REST API.\n\n- [react-dropzone](https://react-dropzone.js.org/)\nSimple React hook to create a HTML5-compliant drag'n'drop zone for files\n\n- [useDebounce](https://www.npmjs.com/package/use-debounce)\nDelay the execution of function or state update with useDebounce.\n\n## \u003ca name=\"features\"\u003e📝 Features\u003c/a\u003e\n\n### File Management:\n\n👉 **Upload**: Allows users to upload files of various types using drag-and-drop functionality.\n\n👉 **Download**: Enables users to download files directly from the platform.\n\n👉 **Sharing**: Facilitates file sharing with other users by generating unique sharing links.\n\n👉 **Advanced Search**: Provides a powerful search bar to quickly find files based on keywords or metadata.\n\n👉 **Categorization**: Organizes files into categories (Documents, Images, Media, Others) for easy navigation.\n\n👉 **Sorting**: Offers flexible sorting options within each category:\n  - *Alphabetical* Order: Sorts files alphabetically by name.\n  - *File Size*: Sorts files by size (ascending or descending).\n\n### Technical Stack:\n\n👉 **Next.js**: A React framework for building web applications.\n\n👉 **Tailwind** CSS: A utility-first CSS framework for rapid UI development.1   \n\n👉 **Appwrite**: A backend server for building web and mobile applications.\n\n👉 **Shadcn** UI: A modern UI component library built with Next.js and Tailwind CSS.\n\n👉 **React** Dropzone: A HTML5-compliant drag-and-drop zone for files.\n\n\n## \u003cbr /\u003e \u003ca name=\"launch-app\"\u003e🚀 Launch App\u003c/a\u003e\n\nFollow these steps to set up the project locally on your machine.\n\n**Prerequisites**\n\n\u003e [!NOTE]\n\u003e Make sure you have the following installed on your machine:\n\n- [Git](https://git-scm.com/)\n- [Node.js](https://nodejs.org/en)\n- [npm](https://www.npmjs.com/) _(Node Package Manager)_\n\n**Cloning the Repository**\n\n```bash\ngit clone {git remote URL}\ncd {git project..}\n```\n\n**Installation**\n\n\u003e After cloning the repository, run the command `npm i` or `yarn i` to install the project's dependencies.\n\n\u003e Run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\n**Set Up Environment Variables**\n\nCreate a new file named `.env.local` in the root of your project and add the following content:\n\n```env\nNEXT_PUBLIC_APPWRITE_ENDPOINT=\"https://cloud.appwrite.io/v1\"\nNEXT_PUBLIC_APPWRITE_PROJECT=\"\"\nNEXT_PUBLIC_APPWRITE_DATABASE=\"\"\nNEXT_PUBLIC_APPWRITE_USERS_COLLECTION=\"\"\nNEXT_PUBLIC_APPWRITE_FILES_COLLECTION=\"\"\nNEXT_PUBLIC_APPWRITE_BUCKET=\"\"\nNEXT_APPWRITE_KEY=\"\"\n```\n\nReplace the values with your actual Appwrite credentials. You can obtain these credentials by signing up \u0026\ncreating a new project on the [Appwrite website](https://appwrite.io/).\n\n**Running the Project**\n\n```bash\nnpm run dev\n```\n\n## \u003cbr /\u003e \u003ca name=\"style\"\u003e🎨 Styling\u003c/a\u003e\n\nGlobal styling are defined using **CSS** \u0026 **TailwindCSS**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003eglobal.css\u003c/code\u003e\u003c/summary\u003e\n\n```css\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n  * {\n    @apply scroll-smooth;\n  }\n\n  body {\n    @apply bg-white text-dark-200 min-h-screen;\n  }\n\n  .custom-scrollbar::-webkit-scrollbar {\n    width: 6px;\n    height: 3px;\n    border-radius: 50px;\n  }\n\n  .custom-scrollbar::-webkit-scrollbar-track {\n    background: transparent;\n  }\n\n  .custom-scrollbar::-webkit-scrollbar-thumb {\n    background: #e5e7eb;\n    border-radius: 50px;\n  }\n\n  .custom-scrollbar::-webkit-scrollbar-thumb:hover {\n    background: #fa7275;\n  }\n\n  /* Remove scrollbar */\n  .remove-scrollbar::-webkit-scrollbar {\n    width: 0px;\n    height: 0px;\n    border-radius: 0px;\n  }\n\n  .remove-scrollbar::-webkit-scrollbar-track {\n    background: transparent;\n  }\n\n  .remove-scrollbar::-webkit-scrollbar-thumb {\n    background: transparent;\n    border-radius: 0px;\n  }\n\n  .remove-scrollbar::-webkit-scrollbar-thumb:hover {\n    /* background: #1e2238; */\n    background: transparent;\n  }\n\n  .recharts-responsive-container {\n    height: initial !important;\n  }\n}\n\n@layer utilities {\n  /* ===== TYPOGRAPHY */\n  .h1 {\n    @apply text-[34px] leading-[42px] font-bold;\n  }\n  .h2 {\n    @apply text-[24px] leading-[36px] font-bold;\n  }\n  .h3 {\n    @apply text-[20px] leading-[28px] font-semibold;\n  }\n  .h4 {\n    @apply text-[18px] leading-[20px] font-medium;\n  }\n  .h5 {\n    @apply text-[16px] leading-[24px] font-semibold;\n  }\n  .subtitle-1 {\n    @apply text-[16px] leading-[24px] font-medium;\n  }\n  .subtitle-2 {\n    @apply text-[14px] leading-[20px] font-semibold;\n  }\n  .body-1 {\n    @apply text-[16px] leading-[24px] font-normal;\n  }\n  .body-2 {\n    @apply text-[14px] leading-[20px] font-normal;\n  }\n  .button {\n    @apply text-[14px] leading-[20px] font-medium;\n  }\n  .caption {\n    @apply text-[12px] leading-[16px] font-normal;\n  }\n  .overline {\n    @apply text-[10px] leading-[14px] font-normal;\n  }\n\n  /* ===== HELPER CLASSES */\n  .container {\n    @apply mx-auto max-w-7xl px-5;\n  }\n  .primary-btn {\n    @apply bg-brand hover:bg-brand-100 transition-all rounded-full button !important;\n  }\n  .flex-center {\n    @apply flex items-center justify-center;\n  }\n\n  /* =====  SHADCN OVERRIDES */\n  .shad-no-focus {\n    @apply outline-none ring-offset-transparent focus:ring-transparent focus:ring-offset-0 focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-transparent focus-visible:ring-offset-0 !important;\n  }\n  .shad-input {\n    @apply border-none shadow-none p-0 shad-no-focus placeholder:text-light-200 body-2 !important;\n  }\n\n  .shad-form-item {\n    @apply flex h-[78px] flex-col justify-center rounded-xl border border-light-300 px-4 shadow-drop-1;\n  }\n  .shad-form-label {\n    @apply text-light-100 pt-2 body-2 w-full !important;\n  }\n  .shad-form-message {\n    @apply text-red body-2 ml-4 !important;\n  }\n  .shad-alert-dialog {\n    @apply space-y-4 max-w-[95%] sm:w-fit rounded-xl md:rounded-[30px] px-4 md:px-8 py-10 bg-white outline-none !important;\n  }\n  .shad-submit-btn {\n    @apply bg-brand button hover:bg-brand-100 transition-all rounded-full !important;\n  }\n  .shad-otp {\n    @apply w-full flex gap-1 sm:gap-2 justify-between !important;\n  }\n  .shad-otp-slot {\n    @apply text-[40px] font-medium rounded-xl ring-brand shadow-drop-1 text-brand-100 justify-center flex border-2 border-light-300 size-12 md:size-16 gap-5 !important;\n  }\n\n  .shad-sheet {\n    @apply pt-0 !important;\n  }\n  .shad-sheet button,\n  .shad-dialog button {\n    @apply focus:ring-0 focus:ring-offset-0 focus-visible:border-none outline-none focus-visible:outline-none focus-visible:ring-transparent focus-visible:ring-offset-0 !important;\n  }\n  .shad-dialog {\n    @apply rounded-[26px] w-[90%] max-w-[400px] px-6 py-8   !important;\n  }\n  .shad-chart-title {\n    @apply text-white !important;\n  }\n\n  /* Sidebar \u0026 MobileNavigation */\n  .nav-icon {\n    @apply w-6 filter invert opacity-25 !important;\n  }\n  .nav-icon-active {\n    @apply invert-0 opacity-100 !important;\n  }\n\n  /* =====  STYLE CLASSES */\n\n  /* Root Layout */\n  .main-content {\n    @apply remove-scrollbar h-full flex-1 overflow-auto bg-light-400 px-5 py-7 sm:mr-7 sm:rounded-[30px] md:mb-7 md:px-9 md:py-10 !important;\n  }\n\n  /* Dashboard */\n  .dashboard-container {\n    @apply mx-auto grid max-w-7xl grid-cols-1 gap-6 md:grid-cols-2 xl:gap-10 !important;\n  }\n  .dashboard-summary-list {\n    @apply mt-6 grid grid-cols-1 gap-4 xl:mt-10 xl:grid-cols-2 xl:gap-9 !important;\n  }\n  .dashboard-summary-card {\n    @apply relative mt-6 rounded-[20px] bg-white p-5 transition-all hover:scale-105 !important;\n  }\n  .summary-type-icon {\n    @apply absolute -left-3 top-[-25px] z-10 w-[190px] object-contain !important;\n  }\n  .summary-type-size {\n    @apply h4 relative z-20 w-full text-right !important;\n  }\n  .summary-type-title {\n    @apply h5 relative z-20 text-center !important;\n  }\n  .dashboard-recent-files {\n    @apply h-full rounded-[20px] xl:h-[654px] custom-scrollbar overflow-auto bg-white p-5 xl:p-7 !important;\n  }\n  .recent-file-details {\n    @apply flex w-full justify-between items-center !important;\n  }\n  .recent-file-name {\n    @apply subtitle-2 line-clamp-1 w-full text-light-100 sm:max-w-[200px] lg:max-w-[250px] !important;\n  }\n  .recent-file-date {\n    @apply body-2 text-light-100/80 !important;\n  }\n  .empty-list {\n    @apply body-1 mt-10 text-center text-light-200 !important;\n  }\n\n  /* Type page */\n  .page-container {\n    @apply mx-auto flex w-full max-w-7xl flex-col items-center gap-8 !important;\n  }\n  .total-size-section {\n    @apply flex mt-2 flex-col justify-between sm:flex-row sm:items-center !important;\n  }\n  .file-list {\n    @apply grid w-full gap-6 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 !important;\n  }\n  .sort-container {\n    @apply mt-5 flex items-center sm:mt-0 sm:gap-3 !important;\n  }\n\n  /* ActionsDropdown */\n  .rename-input-field {\n    @apply body-2 shad-no-focus h-[52px] w-full rounded-full border px-4 shadow-drop-1 !important;\n  }\n  .delete-confirmation {\n    @apply text-center text-light-100 !important;\n  }\n  .delete-file-name {\n    @apply font-medium text-brand-100 !important;\n  }\n  .modal-cancel-button {\n    @apply h-[52px] flex-1 rounded-full bg-white text-light-100 hover:bg-transparent !important;\n  }\n  .modal-submit-button {\n    @apply primary-btn !mx-0 h-[52px] w-full flex-1 !important;\n  }\n\n  /* ActionsModalContent */\n  .file-details-thumbnail {\n    @apply !mb-1 flex items-center gap-3 rounded-xl border border-light-200/40 bg-light-400/50 p-3 !important;\n  }\n  .file-details-label {\n    @apply body-2 w-[30%] text-light-100 !important;\n  }\n  .file-details-value {\n    @apply subtitle-2 flex-1 !important;\n  }\n\n  .share-wrapper {\n    @apply !mt-2 space-y-2 !important;\n  }\n  .share-input-field {\n    @apply body-2 shad-no-focus h-[52px] w-full rounded-full border px-4 shadow-drop-1 !important;\n  }\n  .share-remove-user {\n    @apply rounded-full bg-transparent text-light-100 shadow-none hover:bg-transparent !important;\n  }\n  .remove-icon {\n    @apply aspect-square rounded-full !important;\n  }\n\n  /* AuthForm */\n  .auth-form {\n    @apply flex max-h-[800px] w-full max-w-[580px] flex-col justify-center space-y-6 transition-all lg:h-full lg:space-y-8 !important;\n  }\n  .form-title {\n    @apply h1 text-center text-light-100 md:text-left !important;\n  }\n  .form-submit-button {\n    @apply primary-btn h-[66px] !important;\n  }\n  .error-message {\n    @apply body-2 mx-auto w-fit rounded-xl bg-error/5 px-8 py-4 text-center text-error !important;\n  }\n\n  /* Card */\n  .file-card {\n    @apply flex cursor-pointer flex-col gap-6 rounded-[18px] bg-white p-5 shadow-sm transition-all hover:shadow-drop-3 !important;\n  }\n  .file-card-details {\n    @apply flex flex-col gap-2 text-light-100 !important;\n  }\n\n  /* Chart */\n  .chart {\n    @apply flex items-center rounded-[20px] bg-brand p-2 text-white md:flex-col xl:flex-row !important;\n  }\n  .chart-container {\n    @apply mx-auto aspect-square w-[180px] text-white xl:w-[200px] !important;\n  }\n  .polar-grid {\n    @apply first:fill-white/20 last:fill-brand !important;\n  }\n  .chart-details {\n    @apply flex-1 items-start px-3 py-0 sm:px-5 lg:p-3 xl:pr-5 !important;\n  }\n  .chart-total-percentage {\n    @apply fill-white text-4xl font-bold !important;\n  }\n  .chart-title {\n    @apply h3 font-bold md:text-center lg:text-left !important;\n  }\n  .chart-description {\n    @apply subtitle-1 mt-2 w-full text-white/70 md:text-center lg:text-left !important;\n  }\n\n  /* FileUploader */\n  .uploader-button {\n    @apply primary-btn h-[52px] gap-2 px-10 shadow-drop-1 !important;\n  }\n  .uploader-preview-list {\n    @apply fixed bottom-10 right-10 z-50 flex size-full h-fit max-w-[480px] flex-col gap-3 rounded-[20px] bg-white p-7 shadow-drop-3 !important;\n  }\n  .uploader-preview-item {\n    @apply flex items-center justify-between  gap-3 rounded-xl p-3 shadow-drop-3 !important;\n  }\n  .preview-item-name {\n    @apply subtitle-2 mb-2 line-clamp-1 max-w-[300px] !important;\n  }\n\n  .error-toast {\n    @apply bg-red !rounded-[10px] !important;\n  }\n\n  /* Header */\n  .header {\n    @apply hidden items-center justify-between gap-5 p-5 sm:flex lg:py-7 xl:gap-10 !important;\n  }\n  .header-wrapper {\n    @apply flex-center min-w-fit gap-4 !important;\n  }\n  .sign-out-button {\n    @apply flex-center h-[52px] min-w-[54px] items-center rounded-full bg-brand/10 p-0 text-brand shadow-none transition-all hover:bg-brand/20 !important;\n  }\n\n  /* Mobile Navigation */\n  .mobile-header {\n    @apply flex h-[60px] justify-between px-5 sm:hidden !important;\n  }\n  .header-user {\n    @apply my-3 flex items-center gap-2 rounded-full p-1 text-light-100 sm:justify-center sm:bg-brand/10 lg:justify-start lg:p-3 !important;\n  }\n  .header-user-avatar {\n    @apply aspect-square w-10 rounded-full object-cover !important;\n  }\n  .mobile-nav {\n    @apply h5 flex-1 gap-1 text-brand !important;\n  }\n  .mobile-nav-list {\n    @apply flex flex-1 flex-col gap-4 !important;\n  }\n  .mobile-nav-item {\n    @apply flex text-light-100 gap-4 w-full justify-start items-center h5 px-6 h-[52px] rounded-full !important;\n  }\n  .mobile-sign-out-button {\n    @apply h5 flex h-[52px] w-full items-center gap-4 rounded-full bg-brand/10 px-6 text-brand shadow-none transition-all hover:bg-brand/20 !important;\n  }\n\n  /* OTP Modal */\n  .otp-close-button {\n    @apply absolute -right-1 -top-7 cursor-pointer sm:-right-2 sm:-top-4  !important;\n  }\n\n  /* Search */\n  .search {\n    @apply relative w-full md:max-w-[480px] !important;\n  }\n  .search-input-wrapper {\n    @apply flex h-[52px] flex-1 items-center gap-3 rounded-full px-4 shadow-drop-3 !important;\n  }\n  .search-input {\n    @apply body-2 shad-no-focus  placeholder:body-1 w-full border-none p-0 shadow-none placeholder:text-light-200 !important;\n  }\n  .search-result {\n    @apply absolute left-0 top-16 z-50 flex w-full flex-col gap-3 rounded-[20px] bg-white p-4 !important;\n  }\n  .empty-result {\n    @apply body-2 text-center text-light-100 !important;\n  }\n\n  /* Sidebar */\n  .sidebar {\n    @apply remove-scrollbar hidden h-screen w-[90px] flex-col overflow-auto px-5 py-7 sm:flex lg:w-[280px] xl:w-[325px] !important;\n  }\n  .sidebar-nav {\n    @apply h5 mt-9 flex-1 gap-1 text-brand !important;\n  }\n  .sidebar-nav-item {\n    @apply flex text-light-100 gap-4 rounded-xl lg:w-full justify-center lg:justify-start items-center h5 lg:px-[30px] h-[52px] lg:rounded-full !important;\n  }\n  .sidebar-user-info {\n    @apply mt-4 flex items-center justify-center gap-2 rounded-full bg-brand/10 p-1 text-light-100 lg:justify-start lg:p-3 !important;\n  }\n  .sidebar-user-avatar {\n    @apply aspect-square w-10 rounded-full object-cover !important;\n  }\n\n  .shad-active {\n    @apply bg-brand text-white shadow-drop-2 !important;\n  }\n\n  /* Sort */\n  .sort-select {\n    @apply shad-no-focus h-11 w-full rounded-[8px] border-transparent bg-white !shadow-sm sm:w-[210px] !important;\n  }\n\n  /* Thumbnail */\n  .thumbnail {\n    @apply flex-center size-[50px] min-w-[50px] overflow-hidden rounded-full bg-brand/10;\n  }\n  .thumbnail-image {\n    @apply size-full object-cover object-center !important;\n  }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003etailwind.config.js\u003c/code\u003e\u003c/summary\u003e\n\n```cjs\ntheme: {\n    extend: {\n      colors: {\n        brand: {\n          DEFAULT: '#FA7275',\n          100: '#EA6365',\n        },\n        red: '#FF7474',\n        error: '#b80000',\n        green: '#3DD9B3',\n        blue: '#56B8FF',\n        pink: '#EEA8FD',\n        orange: '#F9AB72',\n        light: {\n          100: '#333F4E',\n          200: '#A3B2C7',\n          300: '#F2F5F9',\n          400: '#F2F4F8',\n        },\n        dark: {\n          100: '#04050C',\n          200: '#131524',\n        },\n      },\n      fontFamily: {\n        poppins: ['var(--font-poppins)'],\n      },\n      boxShadow: {\n        'drop-1': '0px 10px 30px 0px rgba(66, 71, 97, 0.1)',\n        'drop-2': '0 8px 30px 0 rgba(65, 89, 214, 0.3)',\n        'drop-3': '0 8px 30px 0 rgba(65, 89, 214, 0.1)',\n      },\n      borderRadius: {\n        lg: 'var(--radius)',\n        md: 'calc(var(--radius) - 2px)',\n        sm: 'calc(var(--radius) - 4px)',\n      },\n      keyframes: {\n        'caret-blink': {\n          '0%,70%,100%': { opacity: '1' },\n          '20%,50%': { opacity: '0' },\n        },\n      },\n      animation: {\n        'caret-blink': 'caret-blink 1.25s ease-out infinite',\n      },\n    },\n  },\n  plugins: [require('tailwindcss-animate')],\n```\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclementmadiot%2Fstoreit-nextjs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclementmadiot%2Fstoreit-nextjs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclementmadiot%2Fstoreit-nextjs/lists"}