Hackathon-ready · Open source · MIT v1.0.0

Email that works while you build.

A local proxy that sits between your app and any email provider. Swap providers, mock sends, and debug — without touching a single line of your app code.

macOS: if Gatekeeper blocks the app, right-click → Open on first launch.  ·  Windows: SmartScreen may warn — click "More info" → "Run anyway".

~ /protopost
# clone & start in 3 commands
$ git clone https://github.com/pgokul695/ProtoPost.git && cd ProtoPost
$ pip install -r requirements.txt
$ uvicorn backend.main:app --reload --port 8000
 
INFO: Application startup complete.
INFO: Uvicorn running on http://localhost:8000
 
# send your first email
$ curl -X POST http://localhost:8000/api/send \
  -H "Content-Type: application/json" \
  -d '{"from":"[email protected]","to":["[email protected]"],"subject":"Hello"}'
 
✓ {"status":"success","provider":"resend","processing_time_ms":341}
Your App
POST /api/send
ProtoPost
Resend / Gmail or Sandbox 📦

Everything you need.

Nothing you don't.

📦
Sandbox Mode
Captures every email locally. Nothing is ever sent. Flip one toggle — your app gets a 200 OK, no provider calls are made.
🔀
Automatic Failover
If your primary provider returns a 429 or 500, ProtoPost catches it and retries with the next configured provider automatically.
⚖️
Manual Load Balancing
Assign percentage weights to providers — 70% Resend, 30% Gmail. Traffic splits probabilistically. Change weights live with no restart.
🧭
Guided Setup Wizards
Built-in step-by-step walkthroughs for Gmail App Passwords and Resend — right inside the dashboard. No docs tab needed.
📋
Full Outbox & Logs
Every email logged: timestamp, recipient, provider used, status, and response time. Click any row to inspect the raw JSON payload.
Zero App Changes
One endpoint. Your app never knows which provider is running. Swap from Resend to Gmail in 2 clicks without deploying anything.

Connect any sender.

API keys, App Passwords, raw SMTP — ProtoPost handles all of them from the same dashboard form.

Resend
Free tier

Developer-first email API. 3,000 emails/month free. Best for production-quality delivery with verified domains.

3,000 / mo free ~5 min setup Needs domain
Mailtrap
Free tier

Transactional email API with a built-in test inbox. 1,000 emails/month free. Great for staging environments.

1,000 / mo free ~3 min setup No domain needed
Gmail App Password

Use your existing Google account. ~500 emails/day. Guided setup walkthrough built into the dashboard.

~500 / day ~5 min setup Needs 2FA
Custom SMTP
Any server

SendGrid, Mailgun, AWS SES, Zoho, Office 365 — any SMTP server. Configure host, port, TLS/SSL, and credentials.

Port 587 / 465 / 2525 TLS + SSL flags ~2 min setup

Pick your path.

Three ways to get ProtoPost running — not sequential, pick one.

Option A RECOMMENDED
Just run it
No Python. No terminal. Double-click and go.

A short wizard sets your port and optional auth token on first launch. Browser opens automatically.

macOS: right-click → Open on first run.  ·  Windows: More info → Run anyway if SmartScreen appears.

OR
Option B
Run from source
For developers. Requires Python 3.11+.
git clone https://github.com/pgokul695/ProtoPost.git
cd ProtoPost
pip install -r requirements.txt
OR
Option C
Host on Render
Deploy to the cloud. Free tier, always-on.
📖 Full deploy guide ↗

Get started — executable path

01
Download the executable
Pick your platform and download the ProtoPost executable. No installer needed.

macOS: right-click → Open on first run.  ·  Windows: More info → Run anyway if SmartScreen appears.

02
A short wizard sets your port
On first launch a wizard sets your port and optional auth token. No config file to edit. Browser opens automatically.
03
Add a provider from the dashboard
Open the Providers tab, click "Add Provider", pick your type. The built-in wizard walks you through getting credentials for Gmail and Resend.
04
Point your app at one endpoint
Change your email calls to hit ProtoPost. That's the only code change you'll ever make.
POST http://localhost:PORT/api/send

{
  "from": "you@yourdomain.com",
  "to": ["recipient@example.com"],
  "subject": "Hello from ProtoPost",
  "body_html": "<h1>It works!</h1>"
}

You control the traffic.

Three routing modes to match exactly where you are in the build.

📦
Sandbox
All emails captured locally. Zero external calls. Your app gets a 200 OK response every time. Best for development and CI pipelines.
⚖️
Manual Weights
Assign exact percentages to providers. Traffic distributes probabilistically across all enabled providers.
Resend
70%
Gmail
30%

Test without the mess.

One flip in the dashboard captures every email your app sends — without calling a single external provider. The response to your app is indistinguishable from a real send.

  • Zero API calls — no provider credentials needed while developing
  • Full payload logged — see exactly what your app is sending before going live
  • Instant toggle — flip off for demo day, flip back on after. No restart.
  • 200 OK always returned — your error handling code works the same in sandbox and production
📧 ProtoPost Dashboard
SANDBOX
12:04 [email protected] SANDBOX
12:03 [email protected] SANDBOX
12:01 [email protected] SANDBOX

Docs

Guides, references, and deploy recipes — everything to go beyond the basics.

Before you go live.

Click each item to check it off.

  • Sandbox Mode is OFF
  • At least one provider is configured and enabled
  • Test email sent and received from the Test Send tab
  • Outbox shows "Success" — not "Sandbox"
  • uvicorn terminal window is still running
  • App is pointing to http://localhost:8000/api/send
⚡ Running out of time?

Turn Sandbox Mode ON. Your app gets a 200 OK on every send, nothing goes out, and no one will know the difference during your demo.

Wire up a real provider after you win.