DEV Community

Cover image for InboxOps – AI-Powered Email Automation Platform Using Postmark Inbound Parsing
Mihir Amin
Mihir Amin

Posted on

InboxOps – AI-Powered Email Automation Platform Using Postmark Inbound Parsing

This is a submission for the Postmark Challenge: Inbox Innovators.

What I Built

InboxOps is a powerful AI-augmented operations platform that transforms inbound emails into real-time dashboards — using Postmark's inbound email parsing as its foundation.

And all those inboxes are

  • Fragmented
  • Human-dependent

People were copy-pasting from Emails into Tickets. Approvals were lost in threads. Support issues were never tagged. There was no single dashboard to see anything.

Inboxops automate workflows from:

  • 📦 Customer Orders
  • ✅ Approval Requests
  • 🛠️ Support Tickets
  • 🧑‍💼 HR / Leave Requests
  • 🙋 Customer Enquiries

InboxOps turns every structured or unstructured email into actionable items using Postmark + LLMs, and visualizes them in a modern, modular dashboard, and helps create APIs to use in Internal Dashboards.

Single inbox automatically:

  • Understand the intent (order, complaint, HR, etc.)
  • Summarize the message using AI
  • Assign tags and priority levels
  • Route to the right internal dashboard
  • Trigger concerned workflows

Demo

Inboxops Dashboard
https://inboxops.onrender.com

Code Repository

https://github.com/DYNAMICMORTAL/inboxops

GitHub logo DYNAMICMORTAL / inboxops

InboxOps – Automate operations directly from your inbox using Postmark + AI. Real-time email parsing, classification, dashboards, and replies. Built for the Postmark Challenge: Inbox Innovators 2025.

📬 InboxOps

🚀 AI-powered workflow automation platform that converts inbound emails into live, actionable dashboards — built with Postmark and LLMs.


✨ Highlights

  • 📥 Postmark Inbound Email Parsing → clean JSON
  • 🧠 LLM-powered Summarization, Classification, Tags, Priority
  • 🗂️ Route to: Orders, Approvals, Support, HR, Enquiries
  • 🖥️ Clean modular dashboard UI with filters, pills, modals
  • 💬 Built-in Enterprise AI Chatbot for querying

🖼️ Screenshots

Dashboard

Orders + Summary

Support Enquiries


🛠️ Tech Stack

  • FastAPI — Backend & APIs
  • Postmark — Inbound Email Parsing
  • Gemini Flash (LLM) — Summary, tags, criticality
  • SQLite + SQLAlchemy — DB & ORM
  • Jinja2 + Tailwind CSS — UI templates
  • Render.com — Hosting (Demo)

🧠 AI Chat Demo

InboxOps includes a native AI chat modal that uses parsed email context to answer questions like:

  • “Show recent approvals.”
  • “Track order ODR-20240603...”
  • “What is the trend in leave requests?”

AI Chat


🔗 Live Demo

🌐 https://inboxops.render.com




Screenshots

dashboard

dashboard cards

order information, items, quantity, price extracted from Email ContentOrder information, items, quantity, price extracted from Email Content

customer enquiries, support, issues, requests, tickets are assigned Ticket ID concernedCustomer enquiries, support, issues, requests, tickets are assigned Ticket ID concerned

customer support tickets managementCustomer support tickets management

How I Built It

  • 🟧 FastAPI (Python) — REST APIs and webhook handling
  • 📬 Postmark — Inbound webhook parsing + email confirmation sending
  • 🧠 Gemini 2.0 Flash — Summary, classification, tag + urgency prediction
  • 🎨 Jinja2 + TailwindCSS - UI components, dashboards, modals
  • 💾 SQLite + SQLAlchemy - Fast storage and search for parsed emails
  • Email - Postmark Inbound Webhooks for real-time email ingestion
  • 🧩 Modules:
    • Orders: Parse and confirm orders
    • Approvals: HR and budget workflows
    • Support: AI-tagged issues with urgency
    • HR Requests: Leave and policy handling
    • Enquiries: Customer request viewer
    • AI Chat Assistant: Modal chatbot for agents
  • Features : Custom parsers for orders, approvals, and support tickets AI-powered accurate summary of Mail content and tag extraction Dynamic dashboards and modals Enterprise AI chat with recommended prompts

1️⃣ Inbound Email Parsing via Postmark
When a mail is sent to the Postmark Inbound Email Stream, the Postmark parses the message and sends a full JSON payload.

{
"From": "[email protected]",
"Subject": "Leave Request: July 2-5",
"TextBody": "Hi, I’d like to apply for leave from July 2 to 5 for personal reasons.",
"Attachments": [],
"Headers": [...],
...
}

It also shows if the Email follows the DKIM Signature and SPF Policy for making Email secure. I made this JSON data to be received by /inbound-email and inserted into the emails table with all metadata and raw content stored.

I wanted to distinguish Email types because of my system design. I wrote a basic logic of Keys for Order Emails ODR, HR Workflows, and Approval Emails APL, Customer Enquiries as SUP with including YYYYMMDD00serialNumber.

screenshot image of Email model

2️⃣ Intelligent Email Understanding with Gemini
The Email type is to be identified. I thought of using RegEx, a dictionary of known type of words and phrases. To improve the accuracy of classification, alongside parsing the JSON to use the Google Gemini LLM Model, the inbound email is parsed by a prompt chain to extract:

Type: ORDER, SUPPORT, APPROVAL, HR, ENQUIRY
Summary: A 1–2 line abstract
Tags: e.g. ["leave", "login issue"]
Criticality: Low, Medium, High, Urgent
These fields are stored alongside the email and used to guide logic and UI rendering.

3️⃣ Backend Logic & Storage (FastAPI + SQLAlchemy)
The backend routing of each email to trigger Workflows is important. The Dashboard is dynamic for real-time Email communications in an Enterprise. For Inboxops to serve scalability, FastAPI is the best choice.
The routings are as follows:
/u - The Inboxops Inbox
/dashboard or /u?page=dashboard - Support, Issues, Ticket, success rate, Dashboard Panel
/new - Customer Support Tickets Chat for the concerned team to have an in-depth chat
/support-customer - Tickets Management (Email to Ticket).
/ai-chat - Popup Enterprise AI LLM Chat that uses JSON context, summary, and tags to serve every query in detail. (Present at Header)

Enterprise Inboxops AI LLM Chat:

Example Queries

What is the latest Approval Mail about?
What do the emails discuss in the quarter 2025 - 2026?
What is the time when Employees take the most leave, and how does it affect the Customer Enquiries Supports Tickets?
Track me order ODR-202606030002

dashboard showing Modal with AI LLM chat

The last thing in development is continuous development, improvement.
From the moment an email lands, it’s transformed into a clean JSON payload with headers, bodies, metadata, and attachments — ready to power whatever comes next.

That kind of reliability made it easy to focus on the product, not the plumbing.
I built Inboxops on this foundation.
Here are the next features on the roadmap:
Add Slack/MS Teams integration Inbound Email to Slack MS Teams and Slack MS Teams to Outbound Email using Postmark.
Sentiment analysis for customer complaints.
CRM Integration for Internal Team Dashboards

Well, if you made it this far in the post, here is a thank you 💛 to you 😁✨

Top comments (13)

Collapse
 
axrisi profile image
Nikoloz Turazashvili (@axrisi)

FYI the link to demo is not working: inboxops.render.com

Collapse
 
dynamicmortal profile image
Mihir Amin

The link had a silly typo i didn't knew it was .onrender.com.
The Submission is updated with Link!

Collapse
 
axrisi profile image
Nikoloz Turazashvili (@axrisi)

good :) now I can access it. Any way I can test it? maybe sending email with some fake employer request?

Thread Thread
 
dynamicmortal profile image
Mihir Amin

Yes, the Email address is:

[email protected]
Enter fullscreen mode Exit fullscreen mode

The schema to send an Employee or HR Leave application is suggested:
Subject: xyzabc
Body: Start Date, End Date
The body can contain anything!

Thread Thread
 
axrisi profile image
Nikoloz Turazashvili (@axrisi)

thanks! jsut sent email and saw it in inbox, but not in other parts of dashboard, should I make some action to trigger it go through the flow?

Thread Thread
 
dynamicmortal profile image
Mihir Amin

Yes, the Ticket was not getting created, the whole workflow was at a standstill due to Postmark not recognizing the email address.
I made some changes in the backend routing code, it should work just fine now!

Thread Thread
 
axrisi profile image
Nikoloz Turazashvili (@axrisi)

now i see it in other tabs, but it is not supposed to send me any resolution of issue right? at this stage i guess it is not implemented yet? potentially if certain flows are set up it will be able to resolve certain use cases?

Thread Thread
 
dynamicmortal profile image
Mihir Amin

You're absolutely right! At this stage, InboxOps focuses on intelligently parsing, classifying, summarizing, and dashboarding inbound emails using Postmark + LLMs.

While it doesn't send automatic resolutions yet, it's architected to make that possible. The foundation is in place:

  • We classify intent (support, order, HR, approval)
  • Extract entities and tags
  • Predict criticality and assign to a workflow
  • And allow internal actions like “View / Approve / Respond”
  • The next step (on roadmap) is to integrate response automation:

The next step (on roadmap) is to help create APIs for the Internal team systems that can directly attach replies to which response by email automation using Postmark Outbound Email Stream is to be done.

Thread Thread
 
axrisi profile image
Nikoloz Turazashvili (@axrisi)

I think to make this submission stronger, you can make simple emulation of response. Like on receive of webhook to process as you already do + simulation of real work done:

You are the InboxOps AI Assistant.
Your task is to read an incoming email (provided as a JSON object) and automatically generate a polished, accurate reply that resolves the sender’s request. Your reply must:

1. Greet the sender by name.
2. Reference any relevant identifiers (order numbers, ticket IDs, dates, etc.).
3. Acknowledge their question or issue.
4. Explain exactly what action you are taking or next steps.
5. Close with a friendly sign-off and the InboxOps support signature.

Always tailor tone and detail to the email’s context—formal for HR and approvals, empathetic for support, straightforward for orders or invoices. Do not mention that this is a simulation.

Email JSON:
{email}
Enter fullscreen mode Exit fullscreen mode

Also ALERT 🔴🔴🔴 you might want to check your repo for leaked gemini and postmark tokens.

Thread Thread
 
dynamicmortal profile image
Mihir Amin

Thanks a lot for the guidance, I will work on this to update Inboxops!

Collapse
 
dotallio profile image
Dotallio

Super impressive how you’ve combined Postmark parsing with LLMs to automate and unify so many workflows. Curious, how did you approach prompt chaining for reliable intent and summary extraction across really different email types?

Collapse
 
dynamicmortal profile image
Mihir Amin

Yes when it came to extracting intent, summary, tags, and criticality from different email types Orders, HR, Customer Enquiries support, Approvals I used structured prompt chaining.
The Postmark Inbound Email JSON is passed to LLM to return in a structured JSON format:


{
"intent": "support",
"summary": "Customer reports duplicate charge and requests refund.",
"criticality": "high",
"tags": ["refund", "billing", "duplicate"]
}

This solved me the consistent storage of data. Entirely the workflows cannot just rely on LLM. To improve reliability across types: Order Emails, Approvals, HR, Customer Enquiries Support Requests Issues Tickets, I did:

  • i made use of few-shot examples in prompts of Google Gemini LLM.
  • Fallbacked to RegEx for edge cases
  • Added prompt to generate auto-replies based on the Sender Mail! The Postmark Inbound Mail processing JSON is the major part!
Collapse
 
nathan_tarbert profile image
Nathan Tarbert

been cool seeing steady progress - it adds up. you think the roadmap or just showing up every day keeps stuff moving the most?

Some comments may only be visible to logged-in visitors. Sign in to view all comments.