Organize your Google Gemini AI chats into folders β right inside the sidebar.
A Chrome extension that adds a fully-featured folder system to Google Gemini's sidebar. Create folders, drag chats in, search across everything β and keep your AI conversations organized.
- Create folders to group related Gemini conversations
- Add/remove chats to any folder with a click
- Search across folders and chat titles instantly
- Auto-expand the folder containing your currently active chat
- Deep scroll to discover older conversations not yet loaded by Gemini
- Multi-device sync β folders are saved to Firebase and follow your Google account
- Native look & feel β styled to blend seamlessly with Gemini's UI
| Layer | Technology |
|---|---|
| Framework | Plasmo (Chrome Extension) |
| UI | React 18 + Tailwind CSS |
| Language | TypeScript |
| Backend | Firebase Auth + Firestore |
| Interception | XHR/Fetch monkey-patching in MAIN world |
- Node.js 18+ and pnpm installed
- A Firebase project with Firestore and Authentication enabled
- A Chrome browser
-
Clone the repo
git clone https://github.com/aghori3004/gemini-folders.git cd gemini-folders/gemini-app -
Install dependencies
pnpm install
-
Configure environment variables
Create a
.envfile in the project root:PLASMO_PUBLIC_FIREBASE_API_KEY=your_api_key PLASMO_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com PLASMO_PUBLIC_FIREBASE_PROJECT_ID=your_project_id PLASMO_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.appspot.com PLASMO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id PLASMO_PUBLIC_FIREBASE_APP_ID=your_app_id PLASMO_PUBLIC_FIREBASE_MEASUREMENT_ID=your_measurement_id
-
Start the development server
pnpm dev
-
Load the extension in Chrome
- Go to
chrome://extensions - Enable Developer mode
- Click Load unpacked
- Select the
build/chrome-mv3-devfolder
- Go to
pnpm buildThe production bundle is generated in build/chrome-mv3-prod, ready to be zipped and submitted to the Chrome Web Store.
src/
βββ background.ts # Service worker (auth token, popup)
βββ content.tsx # Inline content script (UI injector)
βββ firebase.ts # Firebase config & initialization
βββ popup.tsx # Extension popup (login/logout)
βββ types.ts # TypeScript interfaces
βββ style.css # Tailwind entry + shadow DOM reset
βββ utils/
β βββ logger.ts # Dev-only logging utility
βββ hooks/
β βββ useAuth.tsx # Google Sign-In + session sync
β βββ useChatScraper.tsx # XHR interception + deep scroll
β βββ useFolderStore.tsx # Firestore CRUD for folders
βββ contents/
β βββ interceptor.ts # MAIN world network interceptor
βββ components/
βββ MainUI.tsx # Root UI controller
βββ FolderList.tsx # Folder list renderer
βββ FolderItem.tsx # Individual folder + chat items
βββ CreateFolderModal.tsx # New folder creation dialog
βββ AddChatModal.tsx # Add/remove chats dialog
βββ ErrorBoundary.tsx # React error boundary
This extension collects only what's needed to organize your chats:
- Google account info (for authentication)
- Chat titles and IDs (for folder organization)
- Folder names you create
We do not read chat message content, track browsing, or share data with third parties.
See the full Privacy Policy.
This project is licensed under the MIT License β see LICENSE for details.
Contributions are welcome! Please:
- Fork the repo
- Create a feature branch (
git checkout -b feature/awesome-feature) - Commit your changes (
git commit -m 'Add awesome feature') - Push to the branch (
git push origin feature/awesome-feature) - Open a Pull Request
Divyansh Gangwar β divyanshgangwar3004@gmail.com



