Digital estate planning — compose messages for the people you love, delivered when it matters most.
| Layer | Technology |
|---|---|
| Frontend | React 18 + Vite + Tailwind CSS + Workbox (PWA) |
| Mobile | Capacitor (iOS + Android) |
| Backend | FastAPI + Uvicorn |
| Task queue | Celery + Redis |
| Database | Supabase (PostgreSQL) via SQLAlchemy + Alembic |
| Storage | Supabase Storage |
| Resend | |
| Deployment | Docker Compose |
legate/
├── backend/ # FastAPI application, Celery workers, DB models
├── docker-compose.yml
├── docker-compose.dev.yml
└── README.md
- WSL Ubuntu 22.04+ (or any Linux/macOS environment)
- Python 3.11+
- Docker + Docker Compose
- Git
git clone <your-repo-url> legate
cd legatecd backend
python3.11 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtcp .env.example .env
# Edit .env and fill in your Supabase URL, keys, Resend API key, and secret key# From the project root
docker compose -f docker-compose.dev.yml upThis starts: FastAPI (with hot reload on :8000), Celery worker, Celery beat, Redis.
cd backend
source .venv/bin/activate
alembic upgrade headNavigate to http://localhost:8000/docs
cd backend
source .venv/bin/activate
pytest --cov=app tests/git add .
git commit -m "feat: initial backend scaffold"
git push -u origin maincd backend
ruff check .
ruff format .| Variable | Description |
|---|---|
SECRET_KEY |
Long random string for JWT signing |
DATABASE_URL |
Supabase PostgreSQL connection string |
SUPABASE_URL |
Supabase project URL |
SUPABASE_ANON_KEY |
Supabase anon/public key |
SUPABASE_SERVICE_ROLE_KEY |
Supabase service role key (backend only) |
REDIS_URL |
Redis connection string |
RESEND_API_KEY |
Resend email API key |
EMAIL_FROM |
Sender address for transactional emails |
ACCESS_TOKEN_EXPIRE_MINUTES |
JWT access token lifetime (default: 15) |
REFRESH_TOKEN_EXPIRE_DAYS |
JWT refresh token lifetime (default: 7) |