feat: rename project to InboxConverge with configurable contact details
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/82f2f361-3513-44e6-991b-db1a19902772 Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# POP3 Forwarder SaaS - Multi-Tenant Architecture
|
||||
# InboxConverge - Multi-Tenant Architecture
|
||||
|
||||
This document describes the new multi-tenant SaaS architecture for the POP3/IMAP email forwarder.
|
||||
|
||||
@@ -20,7 +20,7 @@ The project has been transformed from a single-user Docker application into a fu
|
||||
## 📁 Project Structure
|
||||
|
||||
```
|
||||
pop_puller_to_gmail/
|
||||
inboxconverge/
|
||||
├── backend/ # FastAPI backend application
|
||||
│ ├── app/
|
||||
│ │ ├── api/ # API endpoints
|
||||
@@ -50,7 +50,7 @@ pop_puller_to_gmail/
|
||||
│ └── .env.example # Environment template
|
||||
├── frontend/ # React/Next.js frontend (to be implemented)
|
||||
├── docker-compose.new.yml # Docker Compose for all services
|
||||
├── pop3_forwarder.py # Legacy single-user script
|
||||
├── inbox_converge.py # Legacy single-user script
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
@@ -68,8 +68,8 @@ pop_puller_to_gmail/
|
||||
|
||||
1. **Clone and navigate to repository**
|
||||
```bash
|
||||
git clone https://github.com/christianlouis/pop_puller_to_gmail.git
|
||||
cd pop_puller_to_gmail
|
||||
git clone https://github.com/christianlouis/inboxconverge.git
|
||||
cd inboxconverge
|
||||
```
|
||||
|
||||
2. **Configure backend environment**
|
||||
@@ -329,7 +329,7 @@ Coming soon: Kubernetes manifests and Helm charts.
|
||||
|
||||
## 🔄 Migration from Legacy Version
|
||||
|
||||
To migrate from the single-user `pop3_forwarder.py`:
|
||||
To migrate from the single-user `inbox_converge.py`:
|
||||
|
||||
1. **Export existing configuration** from `.env` file
|
||||
2. **Create user account** via API or admin panel
|
||||
@@ -404,8 +404,8 @@ MIT License - See [LICENSE](../LICENSE) file
|
||||
|
||||
## 🆘 Support
|
||||
|
||||
- **Issues**: https://github.com/christianlouis/pop_puller_to_gmail/issues
|
||||
- **Discussions**: https://github.com/christianlouis/pop_puller_to_gmail/discussions
|
||||
- **Issues**: https://github.com/christianlouis/inboxconverge/issues
|
||||
- **Discussions**: https://github.com/christianlouis/inboxconverge/discussions
|
||||
- **Email**: support@example.com
|
||||
|
||||
## 🙏 Acknowledgments
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Coding Patterns and Best Practices
|
||||
|
||||
This document outlines the coding patterns, conventions, and best practices for the POP3 to Gmail Forwarder project.
|
||||
This document outlines the coding patterns, conventions, and best practices for the InboxConverge project.
|
||||
|
||||
## Table of Contents
|
||||
- [General Principles](#general-principles)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Deployment Checklist and Next Steps
|
||||
|
||||
This document provides a checklist for deploying the multi-tenant POP3 Forwarder with web interface.
|
||||
This document provides a checklist for deploying the multi-tenant InboxConverge with web interface.
|
||||
|
||||
## 🚀 Pre-Deployment Checklist
|
||||
|
||||
@@ -48,7 +48,7 @@ This document provides a checklist for deploying the multi-tenant POP3 Forwarder
|
||||
|
||||
#### Database
|
||||
- [ ] PostgreSQL 15+ instance running
|
||||
- [ ] Database created: `pop3_forwarder`
|
||||
- [ ] Database created: `inbox_converge`
|
||||
- [ ] Connection details configured in backend/.env
|
||||
- [ ] Backups configured
|
||||
|
||||
@@ -89,8 +89,8 @@ sudo certbot --nginx -d yourdomain.com -d api.yourdomain.com
|
||||
```bash
|
||||
# On production server
|
||||
cd /opt
|
||||
sudo git clone https://github.com/christianlouis/pop_puller_to_gmail.git
|
||||
cd pop_puller_to_gmail
|
||||
sudo git clone https://github.com/christianlouis/inboxconverge.git
|
||||
cd inboxconverge
|
||||
```
|
||||
|
||||
### Step 2: Configure Environment
|
||||
@@ -195,9 +195,9 @@ curl -X POST https://api.yourdomain.com/api/v1/auth/register \
|
||||
# Automated daily backup script
|
||||
cat > /usr/local/bin/backup-pop3-db.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
BACKUP_DIR=/var/backups/pop3_forwarder
|
||||
BACKUP_DIR=/var/backups/inbox_converge
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
docker exec pop3-postgres pg_dump -U postgres pop3_forwarder | gzip > $BACKUP_DIR/backup_$DATE.sql.gz
|
||||
docker exec inboxconverge-postgres pg_dump -U postgres inbox_converge | gzip > $BACKUP_DIR/backup_$DATE.sql.gz
|
||||
find $BACKUP_DIR -type f -mtime +30 -delete
|
||||
EOF
|
||||
|
||||
@@ -394,4 +394,4 @@ Use this checklist after deployment:
|
||||
|
||||
## 🎉 Congratulations!
|
||||
|
||||
If all checkboxes above are complete, your multi-tenant POP3 Forwarder with web interface is successfully deployed and ready to serve users!
|
||||
If all checkboxes above are complete, your multi-tenant InboxConverge with web interface is successfully deployed and ready to serve users!
|
||||
|
||||
+50
-50
@@ -1,6 +1,6 @@
|
||||
# Deployment Guide
|
||||
|
||||
This guide walks you through deploying **POP3 to Gmail Forwarder** from scratch — whether you just want a single container pulling emails, a full multi-service SaaS stack with Docker Compose, or a production-grade Kubernetes setup.
|
||||
This guide walks you through deploying **InboxConverge** from scratch — whether you just want a single container pulling emails, a full multi-service SaaS stack with Docker Compose, or a production-grade Kubernetes setup.
|
||||
|
||||
---
|
||||
|
||||
@@ -52,13 +52,13 @@ You will also need:
|
||||
|
||||
## Option 1 — Legacy Single-Container Deployment
|
||||
|
||||
The legacy mode runs a single Python script (`pop3_forwarder.py`) that polls POP3 mailboxes and forwards email via SMTP. No database, no web UI — just a container and an `.env` file.
|
||||
The legacy mode runs a single Python script (`inbox_converge.py`) that polls POP3 mailboxes and forwards email via SMTP. No database, no web UI — just a container and an `.env` file.
|
||||
|
||||
### 1. Create the environment file
|
||||
|
||||
```bash
|
||||
git clone https://github.com/christianlouis/pop_puller_to_gmail.git
|
||||
cd pop_puller_to_gmail
|
||||
git clone https://github.com/christianlouis/inboxconverge.git
|
||||
cd inboxconverge
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
@@ -97,12 +97,12 @@ The repository ships `docker-compose.yml` for this mode. Here is the content for
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
pop3-forwarder:
|
||||
inbox-converge:
|
||||
# Build from source
|
||||
build: .
|
||||
# Or use the pre-built image:
|
||||
# image: ghcr.io/christianlouis/pop_puller_to_gmail:latest
|
||||
container_name: pop3-gmail-forwarder
|
||||
# image: ghcr.io/christianlouis/inboxconverge:latest
|
||||
container_name: inboxconverge
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env
|
||||
@@ -149,7 +149,7 @@ Save both values — you will need them below.
|
||||
### 2. Create the backend environment file
|
||||
|
||||
```bash
|
||||
cd pop_puller_to_gmail
|
||||
cd inboxconverge
|
||||
cp backend/.env.example backend/.env
|
||||
```
|
||||
|
||||
@@ -157,7 +157,7 @@ Edit `backend/.env`:
|
||||
|
||||
```ini
|
||||
# ── Database ──────────────────────────────────────────────
|
||||
DATABASE_URL=postgresql+asyncpg://postgres:change-me@postgres:5432/pop3_forwarder
|
||||
DATABASE_URL=postgresql+asyncpg://postgres:change-me@postgres:5432/inbox_converge
|
||||
|
||||
# ── Security (paste the values you generated above) ──────
|
||||
SECRET_KEY=<your-64-char-hex-secret>
|
||||
@@ -198,12 +198,12 @@ services:
|
||||
# ── PostgreSQL ───────────────────────────────────────────
|
||||
postgres:
|
||||
image: postgres:15-alpine
|
||||
container_name: pop3-postgres
|
||||
container_name: inboxconverge-postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: change-me # must match DATABASE_URL
|
||||
POSTGRES_DB: pop3_forwarder
|
||||
POSTGRES_DB: inbox_converge
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
@@ -219,7 +219,7 @@ services:
|
||||
# ── Redis ────────────────────────────────────────────────
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: pop3-redis
|
||||
container_name: inboxconverge-redis
|
||||
restart: unless-stopped
|
||||
command: redis-server --appendonly yes
|
||||
volumes:
|
||||
@@ -235,7 +235,7 @@ services:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile
|
||||
container_name: pop3-backend
|
||||
container_name: inboxconverge-backend
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000"
|
||||
@@ -260,7 +260,7 @@ services:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile
|
||||
container_name: pop3-celery-worker
|
||||
container_name: inboxconverge-celery-worker
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- ./backend/.env
|
||||
@@ -278,7 +278,7 @@ services:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile
|
||||
container_name: pop3-celery-beat
|
||||
container_name: inboxconverge-celery-beat
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- ./backend/.env
|
||||
@@ -296,7 +296,7 @@ services:
|
||||
build:
|
||||
context: ./frontend
|
||||
dockerfile: Dockerfile
|
||||
container_name: pop3-frontend
|
||||
container_name: inboxconverge-frontend
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
@@ -358,7 +358,7 @@ Below is a set of example Kubernetes manifests to get you started. Adapt namespa
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: pop3-forwarder
|
||||
name: inbox-converge
|
||||
```
|
||||
|
||||
### Secrets
|
||||
@@ -369,13 +369,13 @@ Store sensitive values in a Kubernetes Secret. In production, consider using an
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: pop3-forwarder-secrets
|
||||
namespace: pop3-forwarder
|
||||
name: inbox-converge-secrets
|
||||
namespace: inbox-converge
|
||||
type: Opaque
|
||||
stringData:
|
||||
SECRET_KEY: "<your-64-char-hex-secret>"
|
||||
ENCRYPTION_KEY: "<your-64-char-hex-encryption-key>"
|
||||
DATABASE_URL: "postgresql+asyncpg://postgres:change-me@postgres:5432/pop3_forwarder"
|
||||
DATABASE_URL: "postgresql+asyncpg://postgres:change-me@postgres:5432/inbox_converge"
|
||||
REDIS_URL: "redis://redis:6379/0"
|
||||
CELERY_BROKER_URL: "redis://redis:6379/0"
|
||||
CELERY_RESULT_BACKEND: "redis://redis:6379/0"
|
||||
@@ -396,7 +396,7 @@ apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: postgres
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
@@ -416,11 +416,11 @@ spec:
|
||||
- name: POSTGRES_USER
|
||||
value: postgres
|
||||
- name: POSTGRES_DB
|
||||
value: pop3_forwarder
|
||||
value: inbox_converge
|
||||
- name: POSTGRES_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: pop3-forwarder-secrets
|
||||
name: inbox-converge-secrets
|
||||
key: POSTGRES_PASSWORD
|
||||
volumeMounts:
|
||||
- name: pgdata
|
||||
@@ -439,7 +439,7 @@ apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: postgres
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
selector:
|
||||
app: postgres
|
||||
@@ -451,7 +451,7 @@ apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: postgres-pvc
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
accessModes: [ReadWriteOnce]
|
||||
resources:
|
||||
@@ -466,7 +466,7 @@ apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
@@ -493,7 +493,7 @@ apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
selector:
|
||||
app: redis
|
||||
@@ -509,7 +509,7 @@ apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: backend
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
@@ -522,22 +522,22 @@ spec:
|
||||
spec:
|
||||
initContainers:
|
||||
- name: run-migrations
|
||||
image: ghcr.io/christianlouis/pop_puller_to_gmail-backend:latest
|
||||
image: ghcr.io/christianlouis/inboxconverge-backend:latest
|
||||
command: ["alembic", "upgrade", "head"]
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: pop3-forwarder-secrets
|
||||
name: inbox-converge-secrets
|
||||
env:
|
||||
- name: DEBUG
|
||||
value: "false"
|
||||
containers:
|
||||
- name: backend
|
||||
image: ghcr.io/christianlouis/pop_puller_to_gmail-backend:latest
|
||||
image: ghcr.io/christianlouis/inboxconverge-backend:latest
|
||||
ports:
|
||||
- containerPort: 8000
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: pop3-forwarder-secrets
|
||||
name: inbox-converge-secrets
|
||||
env:
|
||||
- name: HOST
|
||||
value: "0.0.0.0"
|
||||
@@ -567,7 +567,7 @@ apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: backend
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
selector:
|
||||
app: backend
|
||||
@@ -583,7 +583,7 @@ apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: celery-worker
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
@@ -596,7 +596,7 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- name: worker
|
||||
image: ghcr.io/christianlouis/pop_puller_to_gmail-backend:latest
|
||||
image: ghcr.io/christianlouis/inboxconverge-backend:latest
|
||||
command:
|
||||
- celery
|
||||
- -A
|
||||
@@ -606,7 +606,7 @@ spec:
|
||||
- --concurrency=2
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: pop3-forwarder-secrets
|
||||
name: inbox-converge-secrets
|
||||
resources:
|
||||
requests:
|
||||
cpu: 250m
|
||||
@@ -625,7 +625,7 @@ apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: celery-beat
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
replicas: 1 # Must be exactly 1
|
||||
strategy:
|
||||
@@ -640,7 +640,7 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- name: beat
|
||||
image: ghcr.io/christianlouis/pop_puller_to_gmail-backend:latest
|
||||
image: ghcr.io/christianlouis/inboxconverge-backend:latest
|
||||
command:
|
||||
- celery
|
||||
- -A
|
||||
@@ -649,7 +649,7 @@ spec:
|
||||
- --loglevel=info
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: pop3-forwarder-secrets
|
||||
name: inbox-converge-secrets
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
@@ -666,7 +666,7 @@ apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: frontend
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
@@ -679,7 +679,7 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- name: frontend
|
||||
image: ghcr.io/christianlouis/pop_puller_to_gmail-frontend:latest
|
||||
image: ghcr.io/christianlouis/inboxconverge-frontend:latest
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
env:
|
||||
@@ -697,7 +697,7 @@ apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: frontend
|
||||
namespace: pop3-forwarder
|
||||
namespace: inbox-converge
|
||||
spec:
|
||||
selector:
|
||||
app: frontend
|
||||
@@ -714,8 +714,8 @@ The Ingress below assumes you have an Ingress controller installed (e.g., [ingre
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: pop3-forwarder-ingress
|
||||
namespace: pop3-forwarder
|
||||
name: inbox-converge-ingress
|
||||
namespace: inbox-converge
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
|
||||
@@ -725,7 +725,7 @@ spec:
|
||||
- hosts:
|
||||
- your-domain.com
|
||||
- api.your-domain.com
|
||||
secretName: pop3-forwarder-tls
|
||||
secretName: inbox-converge-tls
|
||||
rules:
|
||||
- host: your-domain.com
|
||||
http:
|
||||
@@ -754,7 +754,7 @@ spec:
|
||||
If you manage many environments (staging, production, etc.) consider wrapping the manifests above into a Helm chart:
|
||||
|
||||
```text
|
||||
helm/pop3-forwarder/
|
||||
helm/inbox-converge/
|
||||
├── Chart.yaml
|
||||
├── values.yaml # defaults for all environments
|
||||
├── values-staging.yaml
|
||||
@@ -782,8 +782,8 @@ replicaCount:
|
||||
frontend: 2
|
||||
|
||||
image:
|
||||
backend: ghcr.io/christianlouis/pop_puller_to_gmail-backend
|
||||
frontend: ghcr.io/christianlouis/pop_puller_to_gmail-frontend
|
||||
backend: ghcr.io/christianlouis/inboxconverge-backend
|
||||
frontend: ghcr.io/christianlouis/inboxconverge-frontend
|
||||
tag: latest
|
||||
|
||||
ingress:
|
||||
@@ -862,7 +862,7 @@ In production you should place a reverse proxy in front of the backend and front
|
||||
### Example: nginx
|
||||
|
||||
```nginx
|
||||
# /etc/nginx/sites-available/pop3-forwarder
|
||||
# /etc/nginx/sites-available/inbox-converge
|
||||
|
||||
# Frontend
|
||||
server {
|
||||
@@ -969,7 +969,7 @@ If you prefer Traefik, add it as a service in your Compose file and use labels o
|
||||
## Upgrading
|
||||
|
||||
```bash
|
||||
cd pop_puller_to_gmail
|
||||
cd inboxconverge
|
||||
|
||||
# Pull latest code
|
||||
git pull origin main
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Error Codes and Messages
|
||||
|
||||
This document catalogs all error codes used in the POP3 to Gmail Forwarder application.
|
||||
This document catalogs all error codes used in the InboxConverge application.
|
||||
|
||||
## Error Code Format
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 🎯 Mission Accomplished
|
||||
|
||||
This document summarizes the completion of the web interface and multitenancy features for the POP3 to Gmail Forwarder project.
|
||||
This document summarizes the completion of the web interface and multitenancy features for the InboxConverge project.
|
||||
|
||||
## 📦 What Was Delivered
|
||||
|
||||
@@ -320,7 +320,7 @@ These are potential future improvements outside the current task:
|
||||
### What Was Accomplished
|
||||
✅ **Complete implementation of web interface and multitenancy features**
|
||||
|
||||
The POP3 to Gmail Forwarder now has:
|
||||
The InboxConverge now has:
|
||||
- A modern, responsive web interface
|
||||
- Complete user authentication system
|
||||
- Full mail account management capabilities
|
||||
@@ -356,7 +356,7 @@ The implementation is **complete and ready for**:
|
||||
|
||||
## 👏 Thank You
|
||||
|
||||
This implementation represents a significant milestone in transforming the POP3 Forwarder from a simple script into a production-ready multi-tenant SaaS application. The web interface makes the service accessible to users of all technical levels, while maintaining the robust backend infrastructure.
|
||||
This implementation represents a significant milestone in transforming the InboxConverge from a simple script into a production-ready multi-tenant SaaS application. The web interface makes the service accessible to users of all technical levels, while maintaining the robust backend infrastructure.
|
||||
|
||||
**The multitenancy and web interface implementation is now complete and ready for deployment!** 🎉
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Implementation Guide
|
||||
|
||||
This guide provides step-by-step instructions for setting up and deploying the multi-tenant POP3 Forwarder SaaS application.
|
||||
This guide provides step-by-step instructions for setting up and deploying the multi-tenant InboxConverge application.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
@@ -36,8 +36,8 @@ This guide provides step-by-step instructions for setting up and deploying the m
|
||||
|
||||
```bash
|
||||
# Clone repository
|
||||
git clone https://github.com/christianlouis/pop_puller_to_gmail.git
|
||||
cd pop_puller_to_gmail
|
||||
git clone https://github.com/christianlouis/inboxconverge.git
|
||||
cd inboxconverge
|
||||
|
||||
# Create backend environment file
|
||||
cp backend/.env.example backend/.env
|
||||
@@ -49,7 +49,7 @@ Edit `backend/.env` with your settings:
|
||||
|
||||
```bash
|
||||
# Minimum required for development
|
||||
DATABASE_URL=postgresql+asyncpg://postgres:password@postgres:5432/pop3_forwarder
|
||||
DATABASE_URL=postgresql+asyncpg://postgres:password@postgres:5432/inbox_converge
|
||||
SECRET_KEY=$(openssl rand -hex 32)
|
||||
ENCRYPTION_KEY=$(openssl rand -hex 32)
|
||||
GOOGLE_CLIENT_ID=your-client-id
|
||||
@@ -176,7 +176,7 @@ ADMIN_EMAIL=admin@yourdomain.com
|
||||
Use nginx or Traefik as reverse proxy:
|
||||
|
||||
```nginx
|
||||
# /etc/nginx/sites-available/pop3-forwarder
|
||||
# /etc/nginx/sites-available/inbox-converge
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name api.yourdomain.com;
|
||||
@@ -202,7 +202,7 @@ cat > /etc/cron.daily/backup-postgres << 'EOF'
|
||||
#!/bin/bash
|
||||
BACKUP_DIR=/var/backups/postgres
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
docker exec pop3-postgres pg_dump -U postgres pop3_forwarder | gzip > $BACKUP_DIR/backup_$DATE.sql.gz
|
||||
docker exec inboxconverge-postgres pg_dump -U postgres inbox_converge | gzip > $BACKUP_DIR/backup_$DATE.sql.gz
|
||||
find $BACKUP_DIR -type f -mtime +7 -delete # Keep 7 days
|
||||
EOF
|
||||
|
||||
@@ -348,10 +348,10 @@ docker-compose -f docker-compose.new.yml exec celery-worker celery -A app.worker
|
||||
|
||||
```bash
|
||||
# Check connections
|
||||
docker exec pop3-postgres psql -U postgres -d pop3_forwarder -c "SELECT count(*) FROM pg_stat_activity;"
|
||||
docker exec inboxconverge-postgres psql -U postgres -d inbox_converge -c "SELECT count(*) FROM pg_stat_activity;"
|
||||
|
||||
# Check table sizes
|
||||
docker exec pop3-postgres psql -U postgres -d pop3_forwarder -c "
|
||||
docker exec inboxconverge-postgres psql -U postgres -d inbox_converge -c "
|
||||
SELECT
|
||||
schemaname,
|
||||
tablename,
|
||||
@@ -376,7 +376,7 @@ docker-compose -f docker-compose.new.yml ps postgres
|
||||
docker-compose -f docker-compose.new.yml logs postgres
|
||||
|
||||
# Test connection
|
||||
docker exec pop3-postgres psql -U postgres -c "SELECT version();"
|
||||
docker exec inboxconverge-postgres psql -U postgres -c "SELECT version();"
|
||||
```
|
||||
|
||||
#### Celery Worker Not Processing
|
||||
@@ -480,8 +480,8 @@ redis:
|
||||
For additional help:
|
||||
|
||||
- **Documentation**: See [ARCHITECTURE.md](ARCHITECTURE.md)
|
||||
- **Issues**: https://github.com/christianlouis/pop_puller_to_gmail/issues
|
||||
- **Discussions**: https://github.com/christianlouis/pop_puller_to_gmail/discussions
|
||||
- **Issues**: https://github.com/christianlouis/inboxconverge/issues
|
||||
- **Discussions**: https://github.com/christianlouis/inboxconverge/discussions
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Migration Guide: Single-User to Multi-Tenant SaaS
|
||||
|
||||
This guide helps you migrate from the legacy single-user `pop3_forwarder.py` script to the new multi-tenant SaaS application.
|
||||
This guide helps you migrate from the legacy single-user `inbox_converge.py` script to the new multi-tenant SaaS application.
|
||||
|
||||
## Overview
|
||||
|
||||
@@ -230,7 +230,7 @@ docker-compose -f docker-compose.yml down
|
||||
|
||||
# Archive old configuration
|
||||
mkdir -p archive
|
||||
mv pop3_forwarder.py archive/
|
||||
mv inbox_converge.py archive/
|
||||
mv .env.legacy.backup archive/
|
||||
mv docker-compose.yml archive/docker-compose.legacy.yml
|
||||
|
||||
|
||||
+10
-10
@@ -1,6 +1,6 @@
|
||||
# Quick Start Guide
|
||||
|
||||
Get your POP3 to Gmail forwarder running in under 10 minutes!
|
||||
Get your InboxConverge instance running in under 10 minutes!
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@@ -13,8 +13,8 @@ Get your POP3 to Gmail forwarder running in under 10 minutes!
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/christianlouis/pop_puller_to_gmail.git
|
||||
cd pop_puller_to_gmail
|
||||
git clone https://github.com/christianlouis/inboxconverge.git
|
||||
cd inboxconverge
|
||||
```
|
||||
|
||||
### 2. Generate Gmail App Password
|
||||
@@ -23,7 +23,7 @@ cd pop_puller_to_gmail
|
||||
2. Sign in to your Google Account
|
||||
3. Select "App passwords" under Security
|
||||
4. Choose "Mail" and "Other (Custom name)"
|
||||
5. Enter "POP3 Forwarder" as the name
|
||||
5. Enter "InboxConverge" as the name
|
||||
6. Click "Generate"
|
||||
7. **Copy the 16-character password** (you'll need this in step 3)
|
||||
|
||||
@@ -66,10 +66,10 @@ docker-compose logs -f
|
||||
|
||||
You should see:
|
||||
```
|
||||
pop3-gmail-forwarder | INFO - POP3 to Gmail Forwarder starting...
|
||||
pop3-gmail-forwarder | INFO - Loaded POP3 account: ...
|
||||
pop3-gmail-forwarder | INFO - Configuration validated successfully
|
||||
pop3-gmail-forwarder | INFO - Starting email processing cycle
|
||||
inboxconverge | INFO - InboxConverge starting...
|
||||
inboxconverge | INFO - Loaded POP3 account: ...
|
||||
inboxconverge | INFO - Configuration validated successfully
|
||||
inboxconverge | INFO - Starting email processing cycle
|
||||
```
|
||||
|
||||
### 6. Test the Forwarder
|
||||
@@ -192,13 +192,13 @@ Restart after changes: `docker-compose restart`
|
||||
|
||||
## Need Help?
|
||||
|
||||
- Open an issue: https://github.com/christianlouis/pop_puller_to_gmail/issues
|
||||
- Open an issue: https://github.com/christianlouis/inboxconverge/issues
|
||||
- Check existing discussions
|
||||
- Review troubleshooting section in README.md
|
||||
|
||||
## Success! 🎉
|
||||
|
||||
Your POP3 to Gmail forwarder is now running. Emails will be automatically forwarded every 5 minutes (or your configured interval).
|
||||
Your InboxConverge instance is now running. Emails will be automatically forwarded every 5 minutes (or your configured interval).
|
||||
|
||||
**Remember**:
|
||||
- The forwarder deletes emails from POP3 after successful forwarding
|
||||
|
||||
+4
-4
@@ -39,8 +39,8 @@ This project has been **completely transformed** from a single-user Docker scrip
|
||||
|
||||
```bash
|
||||
# Clone repository
|
||||
git clone https://github.com/christianlouis/pop_puller_to_gmail.git
|
||||
cd pop_puller_to_gmail
|
||||
git clone https://github.com/christianlouis/inboxconverge.git
|
||||
cd inboxconverge
|
||||
|
||||
# Configure environment
|
||||
cp backend/.env.example backend/.env
|
||||
@@ -330,8 +330,8 @@ MIT License - See [LICENSE](../LICENSE) file for details.
|
||||
## 🆘 Support
|
||||
|
||||
- **Documentation**: See docs in repository
|
||||
- **Issues**: https://github.com/christianlouis/pop_puller_to_gmail/issues
|
||||
- **Discussions**: https://github.com/christianlouis/pop_puller_to_gmail/discussions
|
||||
- **Issues**: https://github.com/christianlouis/inboxconverge/issues
|
||||
- **Discussions**: https://github.com/christianlouis/inboxconverge/discussions
|
||||
- **Email**: support@example.com (for Enterprise customers)
|
||||
|
||||
## 🎉 Acknowledgments
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
# Roadmap
|
||||
|
||||
## Vision
|
||||
Create a robust, scalable, and user-friendly POP3 to Gmail forwarding solution that serves as a complete replacement for Gmail's discontinued POP3 import feature.
|
||||
Create a robust, scalable, and user-friendly InboxConverge email-forwarding solution that serves as a complete replacement for Gmail's discontinued POP3 import feature.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Overview
|
||||
|
||||
Security analysis completed on February 1, 2026 for the Multi-Tenant POP3 Forwarder SaaS application.
|
||||
Security analysis completed on February 1, 2026 for the Multi-Tenant InboxConverge application.
|
||||
|
||||
## CodeQL Security Scan
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ This guide will help you test the complete multi-tenant web interface with the b
|
||||
3. Edit the `.env` file and update the following critical values:
|
||||
```bash
|
||||
# Database - should point to Docker service
|
||||
DATABASE_URL=postgresql+asyncpg://postgres:password@postgres:5432/pop3_forwarder
|
||||
DATABASE_URL=postgresql+asyncpg://postgres:password@postgres:5432/inbox_converge
|
||||
|
||||
# Redis - should point to Docker service
|
||||
REDIS_URL=redis://redis:6379/0
|
||||
|
||||
+7
-1
@@ -2,6 +2,12 @@
|
||||
|
||||
Comprehensive task breakdown for repository improvements and production readiness.
|
||||
|
||||
## ✅ Recently Completed
|
||||
|
||||
- [x] Rename entire project to **InboxConverge**: all user-visible strings, Docker container/image names, DB defaults, monitoring, and docs updated.
|
||||
- [x] Domain updated to `inboxconverge.com`; contact email defaults to `christian@inboxconverge.com`.
|
||||
- [x] New configurable env vars: `CONTACT_EMAIL`, `APP_URL`, `NEXT_PUBLIC_APP_NAME`.
|
||||
|
||||
## 🔴 Critical - Security (In Progress)
|
||||
|
||||
### Completed ✅
|
||||
@@ -245,7 +251,7 @@ because the API client layer is missing.
|
||||
- [x] Admin overview page (`/admin`) with system-wide stats
|
||||
- [x] User management page (`/admin/users`) — list, edit, delete users; assign plans; promote/demote admin
|
||||
- [x] Plan management page (`/admin/plans`) — full CRUD for subscription plans (mailboxes, emails/day, interval, pricing)
|
||||
- [x] `ADMIN_EMAIL` env var with default `christianlouis@gmail.com`; admin auto-promoted on login and on every application startup (fixes pre-existing accounts)
|
||||
- [x] `ADMIN_EMAIL` env var with default `christian@inboxconverge.com`; admin auto-promoted on login and on every application startup (fixes pre-existing accounts)
|
||||
- [x] `is_superuser` exposed in `/users/me` response
|
||||
- [x] Admin badge (purple shield) shown in top bar for superusers
|
||||
- [x] Fix blank page on direct navigation to `/admin*`: moved superuser guard inside `<AuthGuard>` so auth check always runs on fresh load
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Web Interface Quick Start Guide
|
||||
|
||||
The POP3 to Gmail Forwarder now includes a modern web interface built with Next.js, making it easy to manage your email forwarding without API calls.
|
||||
The InboxConverge now includes a modern web interface built with Next.js, making it easy to manage your email forwarding without API calls.
|
||||
|
||||
## 🌐 Accessing the Web Interface
|
||||
|
||||
@@ -104,7 +104,7 @@ frontend:
|
||||
build:
|
||||
context: ./frontend
|
||||
dockerfile: Dockerfile
|
||||
container_name: pop3-frontend
|
||||
container_name: inboxconverge-frontend
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
|
||||
@@ -126,7 +126,7 @@ elif version == 'v2':
|
||||
def get_or_create_user_salt(user_id: int) -> bytes:
|
||||
# Use deterministic salt based on user_id + global salt
|
||||
# OR store random salt in database per user
|
||||
return hashlib.sha256(f'pop3_forwarder_user_{user_id}'.encode()).digest()
|
||||
return hashlib.sha256(f'inbox_converge_user_{user_id}'.encode()).digest()
|
||||
```
|
||||
|
||||
## Security Best Practices
|
||||
|
||||
@@ -64,7 +64,7 @@ async def lifespan(app: FastAPI):
|
||||
# Shutdown: cleanup
|
||||
|
||||
app = FastAPI(
|
||||
title="POP3 Forwarder API",
|
||||
title="InboxConverge API",
|
||||
lifespan=lifespan,
|
||||
openapi_url="/api/openapi.json",
|
||||
docs_url="/api/docs",
|
||||
|
||||
Reference in New Issue
Block a user