AI-Powered Email Triage for SMEs β Transform your inbox into a revenue engine
Reply-Now Inbox is an intelligent email management platform that helps founders and sales teams prioritize what matters. With AI-driven classification, personalized triage rules, and seamless Gmail/Outlook integration, you'll never miss an important email again.
- AI Priority Scoring (0-100): Automatically ranks emails by urgency and importance
- Category Classification: Urgent, Important, Normal, Low Priority, Newsletter, Promotional, Spam
- Sentiment Analysis: Positive, Neutral, Negative, Angry
- Intent Detection: Request, Question, Information, Sales, Meeting, Follow-up
- VIP Senders: Always prioritize emails from key contacts
- Priority Keywords: Boost emails containing specific terms
- Auto-Archive Rules: Automatically triage newsletters and low-priority domains
- Learning System: Gets smarter with every interaction (defensibility!)
- Gmail via OAuth 2.0
- Outlook via Microsoft Graph API
- Automatic background sync every 5 minutes
- Support for multiple email accounts
- Email Summaries: 1-2 sentence TL;DR of each email
- Suggested Responses: AI-generated reply drafts
- Entity Extraction: Automatically identifies people, companies, dates, and amounts
- Tone Customization: Professional, Casual, or Friendly
| Component | Technology |
|---|---|
| Backend | FastAPI (Python 3.11+) |
| Database | PostgreSQL 15 |
| Cache/Queue | Redis 7 |
| Task Queue | Celery |
| AI | OpenAI GPT-4 / Anthropic Claude |
| Email APIs | Gmail API, Microsoft Graph |
| Deployment | Docker + Docker Compose |
ReplyNowAI/
βββ backend/
β βββ app/
β βββ api/
β β βββ v1/
β β βββ endpoints/
β β βββ auth.py # Authentication (register/login)
β β βββ users.py # User management & preferences
β β βββ emails.py # Email triage endpoints
β β βββ integrations.py # Gmail/Outlook OAuth
β βββ core/
β β βββ config.py # Settings & configuration
β β βββ database.py # SQLAlchemy setup
β β βββ security.py # JWT & password hashing
β βββ models/
β β βββ user.py # User model
β β βββ email_account.py # Connected email accounts
β β βββ email.py # Email records with AI data
β β βββ email_label.py # Email labels/tags
β β βββ user_preferences.py # Personalization data
β βββ schemas/ # Pydantic schemas
β βββ services/
β β βββ gmail_service.py # Gmail API integration
β β βββ outlook_service.py # Outlook API integration
β β βββ ai_service.py # AI classification engine
β βββ workers/
β β βββ celery_app.py # Celery configuration
β β βββ tasks.py # Background tasks (email sync)
β βββ main.py # FastAPI application
βββ alembic/ # Database migrations
βββ docker-compose.yml # Local development setup
βββ Dockerfile # Production Docker image
βββ requirements.txt # Python dependencies
βββ README.md # You are here!
- Python 3.11+
- PostgreSQL 15+
- Redis 7+
- Docker & Docker Compose (recommended)
- OpenAI API Key
- Google OAuth Credentials (for Gmail)
- Microsoft OAuth Credentials (for Outlook)
- Clone the repository
git clone <your-repo-url>
cd ReplyNowAI- Create
.envfile
cp .env.example .envEdit .env and add your credentials:
# Required
SECRET_KEY=your-secret-key-here-change-in-production
JWT_SECRET_KEY=your-jwt-secret-here
# OpenAI
OPENAI_API_KEY=sk-...
# Google OAuth (Gmail)
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_REDIRECT_URI=http://localhost:8000/api/v1/integrations/gmail/callback
# Microsoft OAuth (Outlook)
MICROSOFT_CLIENT_ID=your-microsoft-client-id
MICROSOFT_CLIENT_SECRET=your-microsoft-client-secret
MICROSOFT_REDIRECT_URI=http://localhost:8000/api/v1/integrations/outlook/callback- Start all services
docker-compose up -d- Run database migrations
docker-compose exec backend alembic upgrade head- Access the application
- API: http://localhost:8000
- API Docs: http://localhost:8000/docs
- Redoc: http://localhost:8000/redoc
- Install dependencies
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt- Start PostgreSQL and Redis
# Using Docker
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=replynow postgres:15
docker run -d -p 6379:6379 redis:7-alpine- Run database migrations
alembic upgrade head- Start the application
# Terminal 1: FastAPI backend
uvicorn backend.app.main:app --reload --port 8000
# Terminal 2: Celery worker
celery -A backend.app.workers.celery_app worker --loglevel=info
# Terminal 3: Celery beat (scheduler)
celery -A backend.app.workers.celery_app beat --loglevel=infoPOST /api/v1/auth/register
Content-Type: application/json
{
"email": "founder@startup.com",
"password": "SecurePass123!",
"full_name": "Jane Founder"
}POST /api/v1/auth/login
Content-Type: application/json
{
"email": "founder@startup.com",
"password": "SecurePass123!"
}
Response:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"token_type": "bearer"
}# Step 1: Get authorization URL
GET /api/v1/integrations/gmail/auth-url
Authorization: Bearer <access_token>
Response:
{
"auth_url": "https://accounts.google.com/o/oauth2/auth?...",
"state": "random-state-string"
}
# Step 2: User authorizes in browser, then callback
GET /api/v1/integrations/gmail/callback?code=<auth_code>
Authorization: Bearer <access_token># Step 1: Get authorization URL
GET /api/v1/integrations/outlook/auth-url
Authorization: Bearer <access_token>
# Step 2: Callback after authorization
GET /api/v1/integrations/outlook/callback?code=<auth_code>
Authorization: Bearer <access_token>POST /api/v1/integrations/accounts/{account_id}/sync
Authorization: Bearer <access_token>
Response:
{
"message": "Successfully synced 47 new emails",
"total_fetched": 50,
"new_emails": 47
}GET /api/v1/emails?page=1&page_size=50&min_priority=70&is_read=false
Authorization: Bearer <access_token>
Response:
{
"emails": [
{
"id": "uuid",
"subject": "Urgent: Customer issue needs attention",
"from_email": "customer@example.com",
"from_name": "Important Customer",
"priority_score": 95,
"category": "urgent",
"sentiment": "negative",
"intent": "request",
"ai_summary": "Customer experiencing critical bug affecting production system.",
"is_read": false,
"received_at": "2025-11-02T10:30:00Z"
}
],
"total": 150,
"page": 1,
"page_size": 50,
"has_more": true
}PATCH /api/v1/emails/{email_id}
Authorization: Bearer <access_token>
Content-Type: application/json
{
"is_read": true,
"is_starred": true,
"user_priority_override": 90
}POST /api/v1/emails/{email_id}/archive
Authorization: Bearer <access_token>GET /api/v1/emails/stats/overview
Authorization: Bearer <access_token>
Response:
{
"total_emails": 487,
"unread_count": 142,
"urgent_count": 23,
"important_count": 67,
"by_category": {
"urgent": 23,
"important": 67,
"normal": 298,
"low_priority": 99
}
}GET /api/v1/users/me/preferences
Authorization: Bearer <access_token>PUT /api/v1/users/me/preferences
Authorization: Bearer <access_token>
Content-Type: application/json
{
"triage_rules": {
"vip_senders": ["ceo@bigclient.com", "investor@vc.com"],
"priority_keywords": ["urgent", "asap", "revenue", "churn"],
"low_priority_domains": ["newsletter.com", "marketing.io"],
"auto_archive_patterns": ["unsubscribe"]
},
"ai_preferences": {
"enable_summaries": true,
"enable_suggested_responses": true,
"tone": "professional",
"summary_length": "medium"
},
"notification_settings": {
"priority_threshold": 75,
"quiet_hours_start": "22:00",
"quiet_hours_end": "07:00"
}
}- JWT Authentication: Secure token-based auth with refresh tokens
- Password Hashing: Bcrypt with salt
- OAuth 2.0: Industry-standard for Gmail/Outlook
- Token Encryption: Access tokens encrypted at rest (production)
- Rate Limiting: Prevent abuse (configurable)
- CORS: Configurable allowed origins
| Tier | Price | Features |
|---|---|---|
| Trial | Free (14 days) | Full access, 1 email account |
| Basic | $49/user/month | 3 email accounts, 5k emails/month |
| Pro | $99/user/month | Unlimited accounts, advanced AI |
- ACV: $588 - $1,188/user/year
- Buyer: Founder, Sales Lead, Ops Manager
- Single-seat win β Team expansion: Low friction
- Churn defense: Personalization data creates lock-in
# Run tests
pytest
# With coverage
pytest --cov=backend/app --cov-report=html
# Run specific test file
pytest backend/tests/test_ai_service.py-
Environment Variables
- Change
SECRET_KEYandJWT_SECRET_KEY - Use production database URL
- Set
ENVIRONMENT=production - Set
DEBUG=False - Configure
CORS_ORIGINS - Add
SENTRY_DSNfor error tracking
- Change
-
Database
- Use managed PostgreSQL (AWS RDS, Google Cloud SQL)
- Enable backups
- Set up connection pooling
-
Redis
- Use managed Redis (AWS ElastiCache, Redis Cloud)
- Enable persistence
-
Security
- Enable HTTPS
- Set up rate limiting
- Encrypt tokens at rest
- Regular security audits
-
Monitoring
- Set up Sentry for error tracking
- Configure log aggregation
- Set up uptime monitoring
- Create alerts for critical errors
Option 1: Docker + AWS ECS/Fargate
- Build image:
docker build -t replynow:latest . - Push to ECR
- Deploy via ECS task definition
Option 2: Kubernetes
- Create K8s manifests
- Use Helm charts for deployment
- Configure autoscaling
Option 3: Platform-as-a-Service
- Heroku, Render, Railway
- Push code and platform handles deployment
We welcome contributions! Please:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is proprietary. All rights reserved.
- Documentation: Check
/docsendpoint - Issues: Open a GitHub issue
- Email: support@replynow.ai
- Browser extension (Chrome/Firefox)
- Mobile apps (iOS/Android)
- Slack integration
- Advanced analytics dashboard
- Team collaboration features
- Custom AI training on company data
- Email scheduling & reminders
- CRM integrations (Salesforce, HubSpot)
- Multi-language support
- Voice-to-email responses
- Advanced automations & workflows
- API for third-party integrations
- Direct Revenue Impact: Helps founders/sales teams respond to high-value opportunities faster
- Clear Buyer: Decision-maker is the user (no 10-person committee)
- Viral Expansion: "Why don't you have this?" spreads within teams
- Defensible Moat: Personalization data improves with use (switching cost)
- Triage Ritual: Becomes the morning routine (high engagement = low churn)
Built with β€οΈ for busy founders who refuse to let their inbox control their day.