Skip to content
Deep99739Public

About

Your AI Chief of Staff that adapts your workload to your wellness

Resources

Stars

4 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

99 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Equinox

A calmer place for your tasks, notes, wellbeing check-ins, and AI assistance.

Open the live app

The Equinox Today workspace with sample tasks

What you can do

  • 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.


πŸ› οΈ Tech Stack

Backend

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

Frontend

Technology Purpose
React 19 + TypeScript Modern UI framework
Vite Fast build tooling
React Router Client-side navigation
React Markdown (GFM) Rich chat rendering

πŸš€ Quick Start

Prerequisites

One-Command Startup

# 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.sh

Environment Variables

Create 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_key

For 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.


πŸ“ Project Structure

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

πŸ”Œ API Endpoints

Core

Method Endpoint Description
GET /ping Health check
POST /supervisor Send message to AI supervisor

Briefing

Method Endpoint Description
POST /api/briefing/generate Generate morning briefing
POST /api/briefing/send-email Email briefing to user

Todos

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

Notes

Method Endpoint Description
GET /notes/{email} Get user notes
POST /notes/ Create note
PATCH /notes/{id} Update note
DELETE /notes/{id} Delete note

Chat History

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

πŸ“Š Opik Integration

Equinox uses Opik for complete LLM observability:

What's Traced

  • βœ… All LangChain agent invocations
  • βœ… Tool calls (Gmail, Tasks, Notes)
  • βœ… LLM prompts and responses
  • βœ… Latency and token usage
  • βœ… Conversation threading

Viewing Traces

  1. Go to comet.com/opik
  2. Navigate to the equinox project
  3. View traces grouped by thread_id

Why Opik?

  • 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

πŸ§ͺ Development

Backend

cd backend
pip install -r requirements.txt
python -m uvicorn main:app --reload --port 8000

Frontend

cd frontend
npm install
npm run dev

πŸ› Troubleshooting

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

πŸ‘¨β€πŸ’» Author

Deepak Kumar


πŸ“„ License

MIT License - see LICENSE for details.


πŸŒ… Equinox β€” Balance your day with AI

Built with ❀️ for the Opik Hackathon

About

Your AI Chief of Staff that adapts your workload to your wellness

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages