A Flask-based web application that generates professional email signature images. Users can create customized email signatures with their name, title, position, department, email, and phone number overlay on a company template image.
- Bilingual UI — English and Spanish supported with instant language switching
- Template Management — Admin panel to upload, activate, and delete signature templates
- Dynamic Generation — Text is rendered on the template using Pillow with proportional scaling
- Department/Position mapping — Dropdowns auto-populate based on configured organizational structure (JSON-driven)
- Email domain validation — Restrict access to specific institutional email domains
- Admin authentication — Separate admin login for template management
- High-quality output — PNG images at 144 DPI
- Backend: Python / Flask
- Image Processing: Pillow (PIL)
- Frontend: HTML, CSS, JavaScript
- Templates: Jinja2
# Clone the repo
git clone https://github.com/YOUR_USER/email-signature-generator.git
cd email-signature-generator
# Create virtual environment
python -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env with your settings
# Run the app
python app.pyEdit .env with your organization's settings:
| Variable | Description | Default |
|---|---|---|
SECRET_KEY |
Flask session secret | (required) |
COMPANY_DOMAIN |
Allowed email domain(s) | example.com |
PHONE_PREFIX |
Country/area code prefix | +1 |
ADMIN_EMAIL |
Admin login email | admin@example.com |
ADMIN_PASSWORD |
Admin login password | change-this-password |
- User login — Enter your institutional email
- Fill details — Select title, department, position, enter name, email and phone
- Generate — Click "Generate Signature" to create the PNG image
- Download — Save the image and set it as your email signature
Templates should be 1814 × 602 pixels for best results. Text positioning and scaling are calculated relative to this reference size.
- Log in as admin (
/adminlogin) - Upload a PNG/JPG template image
- Set it as the active template
- The text will automatically scale based on the template dimensions
├── app.py # Flask application with i18n
├── requirements.txt # Python dependencies
├── .env.example # Environment config template
├── static/
│ ├── css/styles.css # Styles
│ ├── templates/ # Signature template images
│ ├── output/ # Generated signatures
│ ├── posiciones.json # Department/position data
│ └── cuentas.json # Allowed email accounts
├── templates/ # HTML templates (Jinja2)
│ ├── login.html
│ ├── index.html
│ ├── firma.html
│ ├── admin.html
│ ├── adminlogin.html
│ └── acceso_denegado.html
└── *.ttf / *.otf # Font files
MIT