Skip to content
All projects

Node.js · MySQL · Automation

Email Outreach & Delivery Management Dashboard

A dashboard for managing email campaign delivery: campaign status, sending history, contact categories, and delivery reporting.

Node.jsExpress.jsMySQLJavaScript

This is a private project. The case study is sanitized and illustrative: client names, URLs, data, credentials, and infrastructure details are intentionally omitted.

01Overview

The dashboard organizes email outreach in one place: which campaigns exist, what state each one is in, who they go to, and what has been sent and when.

Most of the work was in the data model: representing campaigns, contacts, categories, and send history so the dashboard views and reports can be built directly from them.

02Key Challenges

Modeling delivery over time
A campaign isn't a single event. It moves through states and produces a history of sends that needs to be queryable later.
Organizing contacts
Contacts need categories so that campaigns can be targeted and reports can be broken down meaningfully.
Reporting from real records
Dashboard figures should come from the stored sending history rather than being tracked separately.

03My Contributions

  • Node.js and Express.js backend
  • MySQL database integration
  • Campaign tracking and status management
  • Email delivery workflow organization
  • Sending history and timestamps
  • Contact categorization
  • Dashboard data modeling and reporting

04Architecture

How the main pieces of data relate and feed the dashboard.

  1. 1

    Contacts & categories

    Contacts are stored and grouped into categories.

  2. 2

    Campaigns

    Each campaign has a tracked status.

  3. 3

    Delivery workflow

    Sending is organized per campaign and recipient.

  4. 4

    Sending history

    Each send is recorded with a timestamp.

  5. 5

    Reporting

    Dashboard views are built from the stored records.

05Engineering Decisions

Explicit campaign status
Campaign state is stored as a defined status rather than inferred, which keeps dashboard filters and views simple.
History with timestamps
Recording sends with timestamps makes it possible to answer when something was sent, not only whether it was.
Relational structure in MySQL
Contacts, categories, campaigns, and sends are related tables, so reports are built with queries rather than duplicated counters.

06Scope & Status

Implemented

  • Campaign tracking and status management
  • Email delivery workflow organization
  • Sending history and timestamps
  • Contact categorization
  • Dashboard data modeling and reporting