A calmer place for your tasks, notes, wellbeing check-ins, and AI assistance.
- Start with Today: see open tasks, a wellness check-in prompt, and a path to your briefing or chat.
- Manage tasks and notes: add, complete, edit, and keep track of the small things that matter.
- Check in on yourself: manually log sleep, energy, stress, and mood; view readiness feedback when available.
- Ask Equinox: use general or wellness chat for help thinking through your day.
- Generate a briefing: request a summary of tasks, wellness, and connected email, then choose whether to send it by email.
Equinox uses Google sign-in. The interface does not require a wellness entry to reach your tasks or chat. Briefings are generated when you request them.
Design decisions explain the new information structure, visual language, and motion choices.
| Technology | Purpose |
|---|---|
| FastAPI | High-performance Python API |
| LangChain + LangGraph | Multi-agent orchestration |
| Groq (Llama 3.3 70B) | Fast LLM inference |
| PostgreSQL | Persistent data storage |
| Opik | LLM observability & tracing |
| Google OAuth 2.0 | Gmail & Tasks integration |
| Technology | Purpose |
|---|---|
| React 19 + TypeScript | Modern UI framework |
| Vite | Fast build tooling |
| React Router | Client-side navigation |
| React Markdown (GFM) | Rich chat rendering |
- Python 3.10+
- Node.js 18+
- PostgreSQL database
- API Keys:
# Clone the repository
git clone https://github.com/Deep99739/equinox.git
cd equinox
# Configure environment
cp backend/.env.example backend/.env
# Edit backend/.env with your API keys
# Set SESSION_SECRET to a long random value (for example, python -c "import secrets; print(secrets.token_urlsafe(48))")
# Set FRONTEND_URL and GOOGLE_REDIRECT_URI to the URLs of your frontend and OAuth callback
# Initialize the PostgreSQL schema with the same URL used in backend/.env:
psql 'postgresql://user:pass@localhost:5432/equinox' -f backend/database/init.sql
# Run everything
chmod +x startup.sh
./startup.shCreate backend/.env:
# Required
GROQ_API_KEY=your_groq_api_key
GROQ_MODEL=openai/gpt-oss-120b
DATABASE_URL=postgresql://user:pass@localhost:5432/equinox
SESSION_SECRET=replace_with_a_long_random_secret
FRONTEND_URL=http://localhost:5173
GOOGLE_REDIRECT_URI=http://localhost:8000/auth/google/callback
# Opik Observability (Required for tracing)
OPIK_API_KEY=your_opik_api_key
OPIK_WORKSPACE=your_opik_workspace
OPIK_PROJECT_NAME=equinox
# Google OAuth (for Gmail & Tasks)
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
# Optional: only needed for semantic memory features
PINECONE_API_KEY=your_pinecone_api_keyFor the frontend, copy frontend/.env.example to frontend/.env and set
VITE_API_URL to the backend's public base URL when deploying. Configure
FRONTEND_URL on the backend to that frontend's exact origin. Google OAuth
must use GOOGLE_REDIRECT_URI as an authorized callback URL. Existing users
will need to sign in again after enabling session cookies.
GROQ_MODEL defaults to openai/gpt-oss-120b when omitted. Groq retired
llama-3.3-70b-versatile for free and developer accounts in August 2026;
remove any old GROQ_MODEL override from Render when deploying this update.
equinox/
βββ backend/
β βββ agents/
β β βββ briefing/ # Morning briefing agent
β β βββ productivity/ # Email, notes, todos agent
β β βββ wellness/ # Health and fitness agent
β βββ supervisor/ # Query router (LangGraph)
β βββ api/ # REST endpoints
β β βββ briefing.py # Briefing generation
β β βββ todos.py # Task management
β β βββ notes.py # Note-taking
β β βββ google_oauth.py # OAuth flow
β βββ database/ # SQLAlchemy models
β βββ state/ # User token management
β βββ tools/ # Google API utilities
β βββ main.py # FastAPI application
βββ frontend/
β βββ src/
β β βββ pages/
β β β βββ Today/ # Daily workspace
β β β βββ Home/ # Landing page
β β β βββ Chat/ # Agentic chatbot
β β β βββ Briefing/ # Morning briefing
β β β βββ Productivity/ # Notes and tasks
β β β βββ Wellness/ # Health dashboard
β β βββ components/ # Shared UI components
β β βββ api/ # API client utilities
β βββ package.json
βββ startup.sh # Development startup script
| Method | Endpoint | Description |
|---|---|---|
GET |
/ping |
Health check |
POST |
/supervisor |
Send message to AI supervisor |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/briefing/generate |
Generate morning briefing |
POST |
/api/briefing/send-email |
Email briefing to user |
| Method | Endpoint | Description |
|---|---|---|
GET |
/todos/{email} |
Get user todos (Local + Google Tasks) |
POST |
/todos/ |
Create todo |
PUT |
/todos/{id} |
Toggle/update todo |
DELETE |
/todos/{id} |
Delete todo |
| Method | Endpoint | Description |
|---|---|---|
GET |
/notes/{email} |
Get user notes |
POST |
/notes/ |
Create note |
PATCH |
/notes/{id} |
Update note |
DELETE |
/notes/{id} |
Delete note |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/history/{email} |
Get all conversation threads |
GET |
/api/history/{email}/{thread_id} |
Get specific thread |
POST |
/api/history/{email}/{thread_id} |
Save thread |
Equinox uses Opik for complete LLM observability:
- β All LangChain agent invocations
- β Tool calls (Gmail, Tasks, Notes)
- β LLM prompts and responses
- β Latency and token usage
- β Conversation threading
- Go to comet.com/opik
- Navigate to the
equinoxproject - View traces grouped by
thread_id
- Debug AI issues β See exactly what the LLM received and responded
- Optimize costs β Monitor token usage across agents
- Improve quality β Analyze agent decisions and tool usage
cd backend
pip install -r requirements.txt
python -m uvicorn main:app --reload --port 8000cd frontend
npm install
npm run dev| Issue | Solution |
|---|---|
OPIK_API_KEY not found |
Set in backend/.env |
| Google OAuth errors | Verify GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET |
| Rate limiting (429) | Groq free tier: 30 req/min. Wait or upgrade. |
| Database connection errors | Verify DATABASE_URL and PostgreSQL is running |
| Briefing shows 0 emails/tasks | Re-authenticate with Google OAuth |
Deepak Kumar
MIT License - see LICENSE for details.
π Equinox β Balance your day with AI
Built with β€οΈ for the Opik Hackathon
