AI-powered daily planner that helps you organize your day. Features include:
- AI-generated daily schedules with task breakdown
- Google Calendar integration (sync events bi-directionally)
- Canvas LMS integration (view assignments, auto-navigate to course websites)
- Goal tracking and planning
- "Welcome Back" overlay showing your progress when returning to the app
- Prerequisites
- Quick Start
- Detailed Setup
- Environment Variables
- Running the Application
- Features
- Architecture
- Troubleshooting
- Development
Before starting, ensure you have:
| Requirement | Version | Check Command | Install |
|---|---|---|---|
| Node.js | 18+ | node -v |
nodejs.org |
| Python | 3.10-3.12 | python3 --version |
brew install python@3.11 (macOS) |
| MongoDB | 6+ | mongod --version |
See MongoDB Setup |
# 1. Clone the repository
git clone <your-repo-url>
cd SB-Hacks
# 2. Run the setup script
chmod +x setup.sh
./setup.sh
# 3. Configure environment variables (see below)
# 4. Start MongoDB (if not running)
# Option A: Docker
docker run -d -p 27017:27017 --name mongodb mongo:latest
# Option B: Local MongoDB
mongod --dbpath /path/to/data
# 5. Start the application
./run.shOpen http://localhost:8080 in your browser.
npm installcd backend
python3.11 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
cd ..Option A: Docker (Recommended)
docker run -d -p 27017:27017 --name mongodb mongo:latestOption B: MongoDB Atlas (Cloud)
- Create free account at mongodb.com/atlas
- Create a cluster and get your connection string
- Use the connection string in
MONGODB_URI
Option C: Local Installation
- macOS:
brew install mongodb-community && brew services start mongodb-community - Ubuntu:
sudo apt install mongodb && sudo systemctl start mongodb - Windows: Download from mongodb.com
- Go to Google AI Studio
- Click "Create API Key"
- Copy the key (starts with
AIza...)
- Go to Google Cloud Console
- Create a new project (or select existing)
- Configure OAuth consent screen:
- User Type: External
- App name: Blindly (or your name)
- Scopes:
email,profile,openid - For Calendar: Add
https://www.googleapis.com/auth/calendarandhttps://www.googleapis.com/auth/calendar.events
- Create OAuth 2.0 Client ID:
- Application type: Web application
- Authorized redirect URIs:
http://localhost:8080/api/auth/callback/google http://localhost:8080/api/calendar/connect
- Copy Client ID and Client Secret
- Go to GitHub Developer Settings
- New OAuth App:
- Homepage URL:
http://localhost:8080 - Callback URL:
http://localhost:8080/api/auth/callback/github
- Homepage URL:
- Copy Client ID and Client Secret
Create .env.local in the project root:
# NextAuth Configuration (Required)
NEXTAUTH_URL=http://localhost:8080
NEXTAUTH_SECRET=generate-with-openssl-rand-base64-32
# MongoDB (Required)
MONGODB_URI=mongodb://localhost:27017
MONGODB_DATABASE=blindly
# Backend URL (Required)
NEXT_PUBLIC_BACKEND_URL=http://127.0.0.1:8000
NEXT_PUBLIC_FRONTEND_URL=http://localhost:8080
# Google OAuth (Optional)
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_CALENDAR_REDIRECT_URI=http://localhost:8080/api/calendar/connect
# GitHub OAuth (Optional)
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secretGenerate NEXTAUTH_SECRET:
openssl rand -base64 32Create backend/.env:
# Gemini API (Required)
GEMINI_API_KEY=AIza...your-key-here
# MongoDB (Required)
MONGODB_URL=mongodb://localhost:27017
MONGODB_DATABASE=blindly
# JWT Secret (Required for auth)
JWT_SECRET_KEY=change-this-to-a-long-random-string
# Google OAuth (Optional - same as frontend)
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
# Frontend URL
FRONTEND_URL=http://localhost:8080./run.shThis starts both frontend (port 8080) and backend (port 8000).
Terminal 1 - Backend:
cd backend
source venv/bin/activate
python -m uvicorn main:app --host 0.0.0.0 --port 8000 --reloadTerminal 2 - Frontend:
npm run dev- Frontend: http://localhost:8080
- Backend: http://localhost:8000 (should return
{"detail":"Not Found"}) - Test API:
curl http://localhost:8000/api/canvas/courses -H "X-User-ID: test"
- Enter tasks in natural language
- AI generates optimized schedule with time slots
- Drag-and-drop timeline view
- Track step-by-step progress on tasks
- Connect Google account in sidebar
- Calendar events automatically sync to your plan
- Create events from tasks
- Bi-directional sync
- Enter your Canvas URL (e.g.,
ucsb.instructure.com) - Generate API key in Canvas: Account > Settings > New Access Token
- View assignments due this week
- AI navigates to assignment pages and finds GitHub starter code links
- One-click to open VS Code with project setup
- Shows progress on in-progress tasks when returning to the app
- Speedometer showing overall completion
- Quick jump to continue where you left off
SB-Hacks/
├── app/ # Next.js App Router
│ ├── api/ # API routes (NextAuth, Calendar)
│ ├── page.tsx # Main application page
│ ├── layout.tsx # Root layout with providers
│ └── globals.css # Global styles (Tailwind)
├── components/ # React components
│ ├── Timeline.tsx # Schedule timeline view
│ ├── TaskItem.tsx # Individual task card
│ ├── AuthModal.tsx # Login/signup modal
│ └── WelcomeBackOverlay.tsx
├── lib/ # Frontend utilities
│ ├── auth.ts # Auth configuration
│ ├── mongodb.ts # MongoDB client
│ └── desktop.ts # VS Code integration
├── backend/ # FastAPI Backend
│ ├── main.py # FastAPI app entry
│ ├── config.py # Environment configuration
│ ├── api/
│ │ └── routes.py # API endpoints
│ └── services/
│ ├── gemini_service.py # Gemini AI integration
│ ├── mongodb_service.py # MongoDB operations
│ ├── planning_service.py # Schedule generation
│ ├── assignment_analyzer_service.py # Canvas assignment AI
│ └── goals_service.py # Goal planning
└── public/ # Static assets
- Frontend: Next.js 16, React 19, TypeScript, Tailwind CSS
- Backend: FastAPI, Python 3.11, Pydantic
- Database: MongoDB (with Motor async driver)
- AI: Google Gemini 1.5 Flash
- Auth: NextAuth.js with MongoDB adapter
"Module not found"
cd backend
source venv/bin/activate
pip install -r requirements.txt"GEMINI_API_KEY not found"
- Create
backend/.envwith your Gemini API key - Verify:
cat backend/.env | grep GEMINI
"Connection refused" to MongoDB
# Check if MongoDB is running
nc -z localhost 27017 && echo "MongoDB OK" || echo "MongoDB not running"
# Start with Docker
docker start mongodb || docker run -d -p 27017:27017 --name mongodb mongo:latest"Module not found"
rm -rf node_modules package-lock.json
npm installPort already in use
# Kill processes on ports
lsof -ti:8080 | xargs kill -9 # Frontend
lsof -ti:8000 | xargs kill -9 # Backend- Verify Canvas URL format:
school.instructure.com(no https://) - Verify API key is valid (test in Canvas)
- Check backend logs for errors:
tail -fthe backend terminal
"redirect_uri_mismatch"
- Add exact redirect URIs to Google Cloud Console:
http://localhost:8080/api/auth/callback/google http://localhost:8080/api/calendar/connect
"Access blocked: App not verified"
- Add your email to test users in OAuth consent screen
- Or publish the app for production
- Backend endpoints:
backend/api/routes.py - Frontend pages:
app/directory - Components:
components/directory - Services:
backend/services/
users- User accounts and settingsplans- Daily plans with taskssessions- NextAuth sessionsgoogle_tokens- OAuth tokens for Calendar
# Backend
cd backend && python -m pytest
# Frontend
npm test- Push to GitHub
- Import project in Vercel
- Set environment variables
- Deploy
- Create Dockerfile or use platform's Python buildpack
- Set environment variables
- Ensure MongoDB Atlas connection string
# .env.local (production)
NEXTAUTH_URL=https://your-domain.com
MONGODB_URI=mongodb+srv://user:pass@cluster.mongodb.net/blindly
NEXT_PUBLIC_BACKEND_URL=https://your-backend.comMIT
Built at SB Hacks 2026