DEV Community

Cover image for CC-my-Jira: Agentic JIRA Ticketing via Postmark
Younes Laaroussi
Younes Laaroussi

Posted on

CC-my-Jira: Agentic JIRA Ticketing via Postmark

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

What I Built

Architectural Diagram

view highres architectural diagram

I built CCMyJira, an AI-powered, multi-tenant SaaS platform that intelligently transforms emails into structured, actionable JIRA tickets. It bridges the communication gap between email-centric clients/users and JIRA-focused development teams.

The Core Problem: Critical requests, bug reports, and feedback in emails often get lost, misinterpreted, or require manual, error-prone transcription into JIRA, leading to inefficiencies and delays.

CCMyJira's Solution – Key Capabilities:

Capability Description
🧠 AI Agents Leverages GPT-4.1 to understand the content, intent, and technical nuances of incoming emails.
🎟️ Intelligent Ticket Management Searches existing JIRA issues to prevent duplicates; creates new tickets or updates existing ones with information from follow-up emails.
πŸ“Ž Seamless Attachment Handling Automatically extracts and uploads all email attachments (documents, images, logs) and embedded images to the relevant JIRA ticket, preserving crucial context.
🎯 Smart Assignee Suggestions AI considers team workload, skills (from JIRA profiles/roles), and email content (like @mentions) to suggest the most appropriate assignee.
🏒 Multi-Tenant SaaS Architecture Supports multiple organizations with Atlassian OAuth for self-serve onboarding, custom domain verification (using Postmark for verification emails), and data isolation via Supabase Row Level Security (RLS).
⚑ Reliable & Scalable Email Ingestion (via Postmark) Postmark webhooks receive an immediate 200 OK (~50ms). Intensive AI/JIRA processing (15-60+ secs) is handled by background workers (BullMQ/Redis), preventing Postmark timeouts and ensuring every email is reliably captured and processed.
πŸ“§ Robust Email Handling (Postmark) Inbound Parsing: All emails (to [email protected]) are parsed by Postmark, providing rich JSON. Outbound Delivery: Postmark sends critical operational emails, like domain verifications.

Essentially, CCMyJira acts as an intelligent automation layer, ensuring every important email becomes an actionable JIRA item, with Postmark as the crucial email gateway.

Demo

Watch the Video Demo:

Experience CCMyJira live: ccmyjira.com

We offer two ways to explore the platform's capabilities:

1. πŸš€ Instant Demo (No Atlassian Account Needed)

This mode lets you see the core email-to-ticket functionality in action immediately using a shared demo JIRA board.

Step Action
1 Go to ccmyjira.com
2 During the onboarding, click "Use Demo Account".
3 Send an email from any email address to [email protected]. Try including a subject like "Urgent Bug: Website Checkout Broken," details in the body, and perhaps an inline image or an attachment.
4 Observe the demo JIRA board UI on the CCMyJira website. Your new ticket, along with any attachments, should appear live within a minute or two as the AI processes it.

What you'll see:
An email transformed into a JIRA ticket in a Kanban view:

Example JIRA Ticket created by CCMyJira

(note that in demo mode, you can't directly access the Jira links because they can't be public, therefore I built a custom API to fetch Jira tickets and view attachments)

2. πŸ”’ Full SaaS Experience (With Your Atlassian Account)

This mode demonstrates the complete multi-tenant SaaS flow, connecting CCMyJira to your own Atlassian JIRA instance.

Step Action
1 Go to ccmyjira.com
2 Click "Login with Atlassian" and authenticate with your Atlassian account.
3 Follow the onboarding steps to create an organization.
4 Verify your company domain. Note: Public email providers (like gmail.com) cannot be used for verified routing to your private JIRA for security reasons; a custom domain is required. Postmark will send a verification email to an admin address at your domain.
5 Configure your JIRA board details (target project, etc.).
6 Send an email from your verified company domain to [email protected]. This address can also be CC'd or BCC'd.
7 Watch as the AI processes the email and creates/updates a ticket directly in your JIRA project, also reflected in the CCMyJira dashboard.

Kanban View within CCMyJira:
Once tickets are processed, you can view them in JIRA or the Kanban view:

JIRA Ticket

Testing Tips:

  • Complex Emails: Try sending emails with mixed content: inline images, multiple attachments (PDFs, logs, text files), HTML formatting, and long discussion threads.
  • Keywords: Use keywords that might imply priority (e.g., "urgent," "critical") or ticket type (e.g., "bug report," "feature request").
  • Mentions: If you've set up users in your JIRA project, try @mentioning a user in the email body.
  • Follow-ups: Reply to the original email thread (ensuring [email protected] is a recipient). The AI should identify it as a follow-up and update the existing JIRA ticket.

Code Repository

The project is split into two main repositories:

  1. Server-Side Application (Backend):
    • This repository contains all the NestJS backend logic, including the AI agent, JIRA integration, Postmark webhook handling, multi-tenancy features, queue management, and API endpoints. The comprehensive documentation (/docs folder) detailing the architecture and features resides here.

AI-Powered Email-to-JIRA SaaS (Postmark Challenge)

NestJS TypeScript OpenAI Postmark BullMQ

πŸ† Built for Postmark Challenge | Live Demo | API Docs | Challenge Link


πŸ—οΈ Architecture

Overall Architecture


πŸš€ Try It Now (Live Demo)

🟒 No Atlassian Account Needed (Demo Mode)

Step Action
1 Go to ccmyjira.com
2 Click "Use Demo Account" during onboarding
3 Send an email from any email address to [email protected]
4 See the ticket and attachments appear live in the demo JIRA board UI

πŸ”’ With Your Atlassian Account (Full SaaS Flow)

Step Action
1 Go to ccmyjira.com
2 Authenticate with your Atlassian account
3 Verify your company domain (no public email providers like gmail)
4 Configure your JIRA board (project, users, sprints)
5 Send an email from your verified domain to [email protected] (or use forwarding/CC/reply-all)
6 Watch tickets and attachments appear live in your JIRA board UI

Kanban View

Note: For authenticated orgs, only emails sent from your verified domain are accepted and routed…

  1. Website & Dashboard (Frontend):
    • This repository contains the Next.js/React frontend application, which includes the user onboarding, dashboard for viewing processed tickets, organization management, and domain verification UI.

GitHub logo youneslaaroussi / ccmyjira-site

https://ccmyjira.com

CCMyJIRA - Professional JIRA Dashboard

A modern, professional dashboard for real-time JIRA ticket monitoring, team workload management, and system performance tracking.

πŸ›  Prerequisites

  • Bun (latest version)
  • JIRA instance with API access
  • Valid JIRA project key

πŸš€ Installation

  1. Clone the repository:
git clone https://github.com/youneslaaroussi/ccmyjira-site.git
cd ccmyjira-site
Enter fullscreen mode Exit fullscreen mode
  1. Install dependencies:
bun install
Enter fullscreen mode Exit fullscreen mode
  1. Set up environment variables:
cp env.example .env.local
Enter fullscreen mode Exit fullscreen mode

Configure your .env.local:

NEXT_PUBLIC_API_BASE_URL=http://localhost:3001
Enter fullscreen mode Exit fullscreen mode
  1. Start the development server:
bun dev
Enter fullscreen mode Exit fullscreen mode
  1. Open http://localhost:3000 in your browser.

✨ Features Overview

Feature Description
Enhanced Kanban Board Interactive ticket management with drag-and-drop, filtering, and real-time updates
Team Workload Management Visual representation of team capacity and task distribution
Real-time Metrics Live dashboard with KPIs, sprint progress, and performance tracking
Modern UI/UX Responsive design with dark mode, animations, and professional styling
Organization Management Multi-organization support with domain verification
Attachment Support View and download JIRA ticket attachments directly from the dashboard
Advanced Filtering Search and filter tickets by
…

How I Built It

Smart Assignment Diagram

view highres smart assignment diagram

Building CCMyJira was an exploration into creating a deeply integrated system where email, AI, and project management converge to streamline workflows. The mission was clear: make emails first-class citizens in JIRA, intelligently.

The Core Idea: Intelligent Email-to-JIRA Automation

The project stemmed from the universal challenge of critical information shared via email often being siloed or requiring tedious manual effort to integrate into project management tools like JIRA. I aimed to not just automate this but to infuse it with intelligence to understand context, prevent redundancy, and ensure tasks are actionable.

The agent has access to some of these tools:

{
  name: 'get_current_period',
  description: 'Get current date and time information'
}

{
  name: 'read_jira_tickets',
  description: 'Read JIRA tickets from a specific time period',
  parameters: {
    days: 'Number of days to look back',
    status: 'Filter by ticket status',
    assignee: 'Filter by assignee',
    searchText: 'Search in summary/description'
  }
}

{
  name: 'create_jira_ticket',
  description: 'Create a new JIRA ticket. Email attachments and embedded images are automatically included.',
  parameters: {
    summary: 'Ticket title/summary',
    description: 'Detailed description. Email context will be automatically appended.',
    issueType: 'Bug, Story, Task, Epic, etc.',
    priority: 'Highest, High, Medium, Low',
    assignee: 'Username or email to assign',
    labels: 'Array of labels to add',
    components: 'Array of component names'
  }
}

{
  name: 'modify_jira_ticket',
  description: 'Modify an existing JIRA ticket. New email attachments and embedded images are automatically added.',
  parameters: {
    ticketKey: 'JIRA ticket key (e.g., PROJ-123)',
    summary: 'New summary (optional)',
    status: 'New status (optional)',
    assignee: 'New assignee (optional)',
    comment: 'Add comment. Email context will be automatically appended. (optional)'
  }
}
Enter fullscreen mode Exit fullscreen mode

Leveraging Postmark for Robust Email Processing

Postmark was instrumental, serving as the reliable and developer-friendly gateway for all email interactions.

  • Inbound Email Parsing – The Heart of the System: CCMyJira's ability to process emails begins with Postmark. Emails sent to [email protected] are received and meticulously parsed by Postmark. The resulting rich JSON payload, complete with attachments, HTML/text bodies, and headers, is then dispatched via webhook to our NestJS API endpoint (/webhooks/postmark). This structured data is the fuel for our AI engine.
  • Critical: Immediate Webhook Response & Asynchronous Processing: A cornerstone of the architecture (detailed in README.md and docs/01-architecture.md) is the immediate 200 OK response (target <100ms) to Postmark webhooks. The intensive AI processing and JIRA API communications (often 15-60+ seconds) are deferred to background jobs managed by BullMQ and Redis. This design is vital as it prevents Postmark webhook timeouts, ensuring no email is lost and maintaining system responsiveness and scalability.
  • Outbound Email for Operational Integrity: Beyond inbound, Postmark handles essential outbound communications. Most significantly, it sends domain verification emails (as outlined in docs/15-domain-verification-guide.md). This Postmark-powered step is crucial for the multi-tenant security model, allowing organizations to securely link their email domains to their JIRA instances.
  • Professional Presence with Custom Domains: Postmark facilitates the use of CCMyJira's own inbound domain (send.ccmyjira.com) and a verified sender domain ([email protected]), enhancing trust and brand consistency for users.

Postmark's reliability, comprehensive API, and clear documentation for both inbound parsing and outbound sending were pivotal, allowing me to focus on the application's core intelligence.

Tech Stack

Category Technology Purpose
Backend
Framework NestJS (TypeScript) Modular, scalable, and maintainable API development.
AI OpenAI GPT-4o SDK Email analysis, intelligent ticket creation, smart assignments.
Queue System BullMQ & Redis Managing background jobs for AI processing & JIRA interactions, ensuring webhook responsiveness.
Database Supabase (PostgreSQL) Multi-tenant data storage (users, orgs, domain configs, JIRA settings) with Row Level Security for tenant isolation.
Containerization Docker & Docker Compose Consistent development, testing, and production environments.
Frontend
Framework Next.js & React Modern, interactive UI for dashboards, onboarding, and configuration (details in docs/16-frontend-integration-guide.md).
Deployment & Infrastructure
Hosting AWS EC2 (t3.medium) Application and worker hosting.
Load Balancing AWS Application Load Balancer (ALB) SSL termination and request distribution.
DNS AWS Route 53 Managing api.ccmyjira.com and ccmyjira.com.
Managed Redis Upstash Redis Queue backend for BullMQ in production.

Key Implementation Details & Architectural Decisions

CCMyJira's effectiveness stems from several core architectural choices:

  1. Postmark-Driven Asynchronous Processing: To ensure reliability with Postmark, incoming emails trigger a rapid 200 OK response. The actual complex processing (AI analysis, JIRA updates) is then handled by a robust background queue system (BullMQ/Redis). This prevents Postmark webhook timeouts and allows the system to gracefully manage email bursts.

  2. Sophisticated AI Agent (docs/04-ai-agent.md):

    • Iterative Intelligence: Uses multi-step GPT-4o conversations to understand email context deeply, search JIRA for existing issues (preventing duplicates), and then decide on the best action (create, update, comment).
    • Comprehensive Data Handling: Processes and attaches all email content, including files and embedded images, directly to JIRA tickets.
    • High-Quality Ticket Creation: AI is guided to create well-structured, professional JIRA tickets (see docs/improved-ticket-example.md) that are immediately actionable, a significant step up from raw email dumps.
    • Smart Assignments: Suggests appropriate JIRA users for tickets based on workload, skills, and email content (like @mentions).
  3. **Secure & Scalable Multi-Tenancy (docs/13-multi-tenant-architecture.md):

    • Seamless Onboarding: Users connect via Atlassian OAuth, securely linking their JIRA instances.
    • Postmark-Secured Domain Verification: Organizations verify domain ownership using a Postmark-sent confirmation email. Only emails from verified domains are routed to a tenant's JIRA, ensuring emails go to the correct organization.
    • Data Isolation: Supabase RLS strictly separates each organization's data.
    • Targeted Email Routing: A dedicated service maps incoming email domains to the correct tenant, applying their specific JIRA and AI settings.
  4. Production-Ready Design:

    • Comprehensive Documentation: The project is backed by extensive documentation covering architecture, setup, and APIs.
    • Dockerized: For consistent environments from development to production.
    • Large Payload Support: Engineered to handle large emails with multiple attachments (up to 10MB).
    • Modular & API-First: Promotes maintainability and clear separation of concerns.

Experience with Postmark

My experience integrating Postmark was exceptionally positive and fundamental to CCMyJira's success. Postmark effectively solved the critical first step: getting email content into the application reliably and in a structured format.

  • Developer-Friendly Inbound Parsing: Postmark's webhook setup was straightforward, and the parsed email JSON was rich and easy to work with. This was the primary Postmark feature utilized and it formed the very foundation of the application.
  • Reliability & Peace of Mind: Knowing Postmark handles the complexities of email reception and parsing (with webhook retries) allowed me to focus on the core AI and JIRA integration logic.
  • Excellent Documentation: Clear guides and API references accelerated development significantly.
  • Efficient Testing: The ability to quickly test the inbound flow was invaluable for iteration.
  • Built for Scale: The webhook architecture, paired with our asynchronous processing, ensures the system is ready for high email volumes.

Postmark's inbound parsing was not just a feature used; it was the enabling technology that made CCMyJira feasible. It elegantly abstracts the complexities of email handling, empowering developers to build innovative email-driven applications like this one.


Developed by Younes Laaroussi.

Top comments (5)

Collapse
 
youneslaaroussi profile image
Younes Laaroussi

Hello judges!
Just recently found out that the Redis provider I was using shutdown while you were testing the app so the email did not get processed. Please if you try again now, it should work perfectly! :)

Submission: dev.to/youneslaaroussi/cc-my-jira-...

Younes.

Collapse
 
axrisi profile image
Nikoloz Turazashvili (@axrisi)

Who are you, monster? :D
Great job! Almost unbelievable you did it in 3 days.

Really amazing project!

Collapse
 
iammtander profile image
Mitchell Mutandah

Top notch!

Collapse
 
youneslaaroussi profile image
Younes Laaroussi

By the way everyone, this video was recorded using vidova.ai :)

Collapse
 
axrisi profile image
Nikoloz Turazashvili (@axrisi)

already checked it out :)

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