Built my own Friday. MAY is a fully functional personal AI assistant inspired by Friday from Iron Man β powered by Claude Sonnet, deployed on mobile, and always one step ahead.
- π§ Claude Sonnet 4.5 β razor-sharp AI reasoning
- π Real-time web search β Claude's native search, no extra APIs
- π Google Calendar β read, create, and delete events
- π§ Gmail β read, filter, and summarize emails
- β Google Tasks β list, create, and complete tasks
- πΎ Persistent memory β Supabase + pgvector semantic search across sessions
- π± React Native mobile app β Chat, Dashboard, and Memory screens
- π Voice responses β TTS speaks MAY's replies aloud
- βοΈ Deployed on Render β works anywhere, not just on WiFi
React Native App ββHTTPβββΆ FastAPI (Render) βββΆ MAYOrchestrator
βββ POST /chat (Claude + memory)
βββ GET /calendar/today (Google Calendar)
βββ GET /memories (Supabase)
βββ GET /health
MAY/
βββ serve.py # FastAPI server entry point
βββ main.py # CLI entry point
βββ pyproject.toml
β
βββ may/
β βββ config.py # Centralised env/config loading
β βββ orchestrator.py # Claude agent + skill orchestration
β β
β βββ api/
β β βββ server.py # FastAPI REST endpoints
β β
β βββ memory/
β β βββ supabase_memory.py # Long-term memory (Supabase + pgvector)
β β
β βββ notifications/
β β βββ scheduler.py # Proactive notifications (APScheduler)
β β
β βββ skills/
β βββ productivity/ # Google Calendar
β βββ gmail/ # Gmail integration
β βββ tasks/ # Google Tasks
β
βββ mobile/ # React Native app (Expo)
β βββ src/
β β βββ screens/ # Chat, Dashboard, Memory
β β βββ components/ # MessageBubble, MicButton, EventCard...
β β βββ api/ # mayClient.js
β βββ App.js
β
βββ credentials/ # Google OAuth tokens (git-ignored)
- Python 3.11+
- Node.js 20 LTS
- Supabase project with pgvector enabled
- Anthropic API key
- Google Cloud project with Calendar, Gmail, Tasks APIs enabled
# Clone and install
git clone https://github.com/RYTH-07/MAY.git
cd MAY
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
# Configure environment
copy .env.example .env
# Fill in your API keys in .env
# Run Supabase migration (in Supabase SQL Editor)
# See may/memory/supabase_memory.py for the SQL
# Start backend
python serve.pycd mobile
npm install --legacy-peer-deps
# Update src/api/mayClient.js with your backend URL
# Then start Expo
npx expo startANTHROPIC_API_KEY= # Anthropic API key
SUPABASE_URL= # Supabase project URL
SUPABASE_SERVICE_ROLE_KEY= # Supabase service role key
GOOGLE_CREDENTIALS_PATH= # Path to google_credentials.json
GOOGLE_TOKEN_PATH= # Path to google_token.json
GOOGLE_TOKEN_JSON= # Token JSON string (for Render deployment)
GOOGLE_CREDENTIALS_JSON= # Credentials JSON string (for Render deployment)
VOYAGE_API_KEY= # Voyage AI key for embeddings| Layer | Storage | Purpose |
|---|---|---|
| Short-term | Python list | Current conversation context |
| Long-term | Supabase + pgvector | Semantic memories across sessions |
- Create
may/skills/<skill_name>/handler.py - Define a
TOOLSlist with Anthropic tool definitions - Implement the tool functions
- Skills are auto-discovered at startup
- Voice mode (ElevenLabs STT + TTS dev build)
- WhatsApp integration (Twilio)
- Proactive morning briefing
- Event reminders
- Notion integration
MIT