Your inbox, simplified. Login with Google, sync Gmail, sort emails, and chat with AI (Gemini).
View Demo: https://devpost.com/software/unclutter-ljtwq4?ref_content=my-projects-tab&ref_feature=my_projects
UnClutter connects to your Gmail, syncs recent messages into a clean dashboard, and groups them by intent (promotions, updates, social, etc.). You can search, filter by date, and read email details in a focused layout. The built-in assistant can summarize emails, surface deadlines/action items, and create custom group rules to keep your inbox organized.
- Frontend: React + Vite
- Backend: Node.js + Express
- Database: Supabase (Postgres)
- Auth: Google OAuth 2.0 (Gmail API)
- AI: Gemini (optional Groq fallback)
Copy .env.example to .env in the repo root and fill in:
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GEMINI_API_KEY=...
PORT=3001
REDIRECT_URI_BASE=http://localhost:3001
FRONTEND_URL=http://localhost:5174Create a frontend env file at frontend/.env:
VITE_API_URL=http://localhost:3001
VITE_GEMINI_API_KEY=your-gemini-key- Create a project at supabase.com
- Run migrations in order via the Supabase SQL Editor:
supabase/migrations/001_initial_schema.sqlsupabase/migrations/002_user_groups.sqlsupabase/migrations/003_unique_group_names.sql
- Go to Google Cloud Console
- Create OAuth 2.0 credentials (Web application)
- Add redirect URI:
http://localhost:3001/api/auth/google/callback - Enable Gmail API
npm install
npm run devThis starts:
- Backend (Node.js) on port 3001 (
server/) - Frontend (Vite + React) on port 5174 (
frontend/)
Open http://localhost:5174 and sign in with Google.
- Backend uses
REDIRECT_URI_BASE, so production redirect URI is:https://<your-backend>.onrender.com/api/auth/google/callback - For the Node backend, set
FRONTEND_URLto your Vercel URL andREDIRECT_URI_BASEto your backend base URL (no/api/...path). - Never put
SUPABASE_SERVICE_ROLE_KEYin the frontend.