Overview

CodingMarble marketing + AI sales control panel

Eligible contacts

0
Healthy

Queue size

0
Scheduled

Sent today

0
20 / min pace

Replies today

0
+14% WoW

Complaint rate

0
Safe

Hard bounce rate

0
Under threshold

AI drafts pending

0
Approval needed

Positive replies

0
34% of replies

Sales funnel

0Imported
0Eligible
0Sent
0Delivered
0Reply
0Qualified
0Proposal
0Won

Primary metric: reply rate → qualification rate → revenue per 1,000 sends. Open rate is intentionally secondary.

Deliverability health

SPF · DKIM · DMARC
All sender identities aligned
Complaint rate 0.03%
Well below auto-pause 0.08%
Bounce rate 0.8%
Warning at 1.5%, pause at 2%
Provider quota
62% used today · resets 00:00 UTC

Recent activity

Last 24h

TimeEventContactCampaignStatus
No data available yet

Imports

Excel upload with column mapping & compliance validation

1. Upload file.xlsx / .xls / .csv
2. Sheet & headerPreview rows
3. Column mappingSave profile
4. ValidationCompliance check
5. CommitReady to campaign

Field mapping — Website Redesign Leads

emailRequired
first_nameOptional
business_nameRecommended
website_urlPreset field
countryCompliance
personalized_messageRecommended
eligibility_statusRequired

Validation result

No active imports

Saved mapping profiles

Reusable field maps

ProfilePresetFieldsLast used
No data available yet

Contacts

Unified contact database · shared suppression

Total contacts

0

Eligible

0
Active

Suppressed

0
Blocked

Countries

0
Legal policy engine
EmailBusinessCountryStageEligibilityLast contacted
No data available yet

Campaigns

Two campaign presets · shared suppression · Redis-limited sending

No Website Campaign

Businesses without an official website. Soft, non-accusatory language.

NO_WEBSITEActive

Website Redesign Campaign

Approved audit findings only. Mobile / speed / enquiry flow.

WEBSITE_REDESIGNActive

Sending pace

0

Global limit · ~28,800 emails / 24h · ~3.47 days per 100K

CampaignPresetStatusSentDeliveredRepliesHealth
No data available yet

Campaign builder preview — Redesign · Batch 08

Merge fields valid

Launch checklist

SPF · DKIM · DMARC verified
Unsubscribe URL presentList-Unsubscribe header configured
Postal address in footer
Test email sent · reviewed
Images & CTA links validated
!
Frequency cap142 contacts contacted in last 30 days
No prohibited affiliate linksHostinger referral blocked in cold email

Templates & Assets

Email templates and image asset manager

Redesign Intro v3

Template + paragraph · 128 words · English/Hindi

RedesignActivev3

No Website Intro v2

Soft opener · 96 words · 5 languages

No WebsiteActivev2

Follow-up · 3 day

Short bump · reply-checked

BothDraft

Asset Manager

Image URL + destination link + preview

Redesign Banner
redesign_banner_600.png

600px · alt: "Website redesign preview" · click tracking OFF

VerifiedHTTPS
Portfolio Grid
portfolio_grid_600.png

Links to codingmarble.com/portfolio

Verified
Before / After
before_after_600.png

Broken image detected

Blocked

Unified Inbox

Message-ID threaded · AI classified · human approval where required

ThreadsLive
No messages
Rahul · Bright Dental ClinicInterested · 0.96
Select a thread
Context
IntentInterested
Confidence0.96
LanguageEnglish
Lead stageInterested
Requires humanNo
CampaignRedesign · Batch 08
CountryIndia
Message-ID<msg-9f2..@cm>

Extracted facts

Service interestRedesign
Wants portfolioYes
Wants pricingYes
Meeting requestedSuggested

AI action guardrails

Portfolio: auto-approved list. Pricing: approval required. No SEO / revenue guarantees. No referral link in cold reply.

CRM Pipeline

Lead stages · AI-extracted facts · manual notes

New

0
Imported

Interested

0
Warm

Qualified

0
Sales-ready

Won this month

0
₹18.4L

Kanban view — Qualified & later

Qualified (0)

No data

Proposal (0)

No data

Negotiation (0)

No data

Won (0)

No data

AI Reply Agent

System prompt · knowledge base · guardrails

Auto-send settings

Enable AI auto-send
Only for safe intents
Interested (safe reply) Portfolio Requirements ack Meeting slot Auto-reply pause
Pricing Discount Contract Refund Legal / privacy Complaint Security risk

Knowledge base

Structured factsServices · packages · min prices · scheduling
RAG documentsCompany intro · process · case studies · FAQs · tone guide
!
Hostinger disclosure blockBlocked in first cold email
Prohibited claimsNo SEO / revenue / delivery guarantees
Prompt-injection filterUntrusted input isolated

Recent AI actions

TimeThreadIntentConfidenceActionHuman edit
No data available yet

Deliverability

Sender identity health · reputation monitoring

SPF

Pass
All senders

DKIM

Pass
Aligned

DMARC

Pass
quarantine

Postmaster

Good
Gmail

Complaint & bounce trend (7 days)

0Mon
0Tue
0Wed
0Thu
0Fri
0Sat
0Sun

Warning threshold 0.05% · pause 0.08% (before provider limit 0.10%)

Auto-pause history

!
Aug 3 · No Website · Batch 11Complaint spike 0.08% · paused 4h
Jul 28 · Redesign · Batch 05Resumed after bounce dropped to 1.1%
!
Jul 22 · No Website · Batch 09Provider rejection spike

Analytics

Reply-driven metrics · not vanity opens

Delivery rate

0

Human reply rate

0

Positive reply rate

0

Win rate

0
of proposals

Preset comparison — No Website vs Redesign

0Reply 3.4%
0Reply 2.3%

Revenue attribution

Won deals (30d)48
Revenue attributed₹18,40,000
Rev per 1,000 sent₹28,750
Avg deal₹38,300

Settings

Sender identities · API keys · workspace

Sender identities

hello@mail.codingmarble.comMarketing · SPF/DKIM/DMARC aligned
sales@codingmarble.comReply-to · IMAP + Gmail push
hello@seo.codingmarble.comSEO product sender
unsubscribe@codingmarble.comList-Unsubscribe mailbox

Backend connection

Not tested

Values save to localStorage. See Backend Guide tab for full integration steps.

Backend Integration Guide

Is HTML dashboard ko apne backend se connect karne ka complete steps

1. Yeh file kaise use karein

Ye single-file dashboard hai. Download karke index.html kisi bhi browser me open kar do — sab UI kaam karega. Backend connect karne ke liye niche steps follow karo.

  1. File save karo index.html naam se.
  2. Browser me double-click karke open karo (Chrome / Edge / Firefox).
  3. Settings tab me apna backend URL aur token daalo.
  4. Neeche diye JS snippets ko file me paste karke real API bind karo.

2. API base config

HTML ke <script> section me yeh function pehle se hai:

const API = {
  base: () => localStorage.getItem('cm_api_base') || 'http://localhost:8000',
  token: () => localStorage.getItem('cm_token') || '',
  headers: () => ({
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + API.token()
  }),
  get: (path) => fetch(API.base()+path, {headers: API.headers()}).then(r => r.json()),
  post: (path, body) => fetch(API.base()+path, {
    method:'POST', headers: API.headers(), body: JSON.stringify(body)
  }).then(r => r.json())
};

3. Backend endpoints jo yeh UI expect karti hai

GET  /dashboard/summary
GET  /deliverability/health

POST /imports                    (multipart file upload)
POST /imports/{id}/preview
POST /imports/{id}/mapping
POST /imports/{id}/validate
POST /imports/{id}/commit

GET  /contacts?country=&eligibility=&stage=&page=
PATCH /contacts/{id}
POST /contacts/{id}/suppress

POST /campaigns
POST /campaigns/{id}/preview
POST /campaigns/{id}/test
POST /campaigns/{id}/launch
POST /campaigns/{id}/pause
POST /campaigns/{id}/resume

GET  /inbox/threads
GET  /inbox/threads/{id}
POST /inbox/threads/{id}/draft
POST /inbox/threads/{id}/approve
POST /inbox/threads/{id}/reply

GET  /ai/settings
POST /ai/settings

POST /webhooks/email-provider
POST /webhooks/inbound-mail
POST /unsubscribe/{token}

4. Example — Dashboard live data

Overview tab ke numbers ko real API se replace karne ke liye niche wala code file ke script me daalo:

async function loadDashboard() {
  const data = await API.get('/dashboard/summary');
  document.querySelectorAll('#overview .card .num')[0].textContent = data.eligible;
  document.querySelectorAll('#overview .card .num')[1].textContent = data.queue_size;
  document.querySelectorAll('#overview .card .num')[2].textContent = data.sent_today;
  document.querySelectorAll('#overview .card .num')[3].textContent = data.replies_today;
  // etc.
}
loadDashboard();
setInterval(loadDashboard, 30000);

5. Example — Import upload

async function uploadImport(file, preset){
  const fd = new FormData();
  fd.append('file', file);
  fd.append('preset', preset); // NO_WEBSITE | WEBSITE_REDESIGN
  const r = await fetch(API.base()+'/imports', {
    method:'POST',
    headers:{'Authorization':'Bearer '+API.token()},
    body: fd
  });
  return r.json();
}

6. Example — Launch campaign with checklist

async function launchCampaign(id){
  const check = await API.post(`/campaigns/${id}/preflight`, {});
  if(!check.passed){
    alert('Blocked: '+check.blockers.map(b=>b.code).join(', '));
    return;
  }
  const res = await API.post(`/campaigns/${id}/launch`, {});
  showToast('Campaign launched: '+res.status);
}

7. Example — Inbox real-time

async function loadThreads(){
  const {items} = await API.get('/inbox/threads?limit=50');
  const list = document.querySelector('#inbox .pane:first-child');
  list.innerHTML = '';
  items.forEach(t => {
    const el = document.createElement('div');
    el.className = 'thread-item';
    el.innerHTML = `<b>${t.contact_name}</b><p>${t.preview}</p>
      <span class="pill ${t.intent==='UNSUBSCRIBE'?'error':'success'}">${t.intent}</span>`;
    list.appendChild(el);
  });
}
setInterval(loadThreads, 20000);

8. Example — AI draft approve

async function approveDraft(threadId, editedSubject, editedBody){
  return API.post(`/inbox/threads/${threadId}/approve`, {
    approved: true,
    edited_subject: editedSubject,
    edited_body: editedBody
  });
}

9. CORS setup (backend side)

// FastAPI example
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
  CORSMiddleware,
  allow_origins=["http://localhost:5500","https://dash.codingmarble.com"],
  allow_credentials=True,
  allow_methods=["*"],
  allow_headers=["*"],
)

10. Recommended enums (frontend + backend match)

CampaignPreset:  NO_WEBSITE | WEBSITE_REDESIGN | SEO_SERVICE | APP_DEVELOPMENT | EXISTING_CLIENT_UPSELL
Eligibility:     ELIGIBLE | NEEDS_REVIEW | SUPPRESSED | INVALID
Suppression:     UNSUBSCRIBED | HARD_BOUNCE | COMPLAINT | MANUAL_BLOCK | COUNTRY_RESTRICTION | DATA_DELETION
LeadStage:       IMPORTED | CONTACTED | DELIVERED | REPLIED | INTERESTED | QUALIFIED
                 | PROPOSAL_REQUIRED | PROPOSAL_SENT | NEGOTIATION | WON | LOST
                 | NOT_INTERESTED | UNSUBSCRIBED | INVALID
ThreadIntent:    INTERESTED | PORTFOLIO | PRICING | REQUIREMENTS | OBJECTION
                 | NOT_NOW | NOT_INTERESTED | UNSUBSCRIBE | SUPPORT | LEGAL
                 | OUT_OF_SCOPE | AUTOMATED_REPLY | SECURITY_RISK

11. Recommended payloads

// Create campaign
POST /campaigns
{
  "name": "Redesign · Batch 09",
  "preset": "WEBSITE_REDESIGN",
  "sender_identity_id": "sender_123",
  "template_mode": "TEMPLATE_PLUS_PARAGRAPH",
  "template_id": "tpl_44",
  "contact_segment_id": "seg_88",
  "schedule_at": null
}

// Preflight response
{
  "passed": false,
  "blockers": [
    {"code":"SENDER_AUTH_MISSING","message":"DKIM not aligned"},
    {"code":"BROKEN_LINK","message":"Image URL returns 404"}
  ],
  "warnings": [
    {"code":"FREQUENCY_CAP","message":"142 contacts contacted recently"}
  ]
}

// Suppression add (webhook trigger)
POST /webhooks/email-provider
{
  "event": "bounce",
  "type": "hard",
  "message_id": "<msg-abc@codingmarble>",
  "email": "info@oldsite.co.in"
}

12. Deployment tips

  • Local test: file directly open karo browser me, ya python3 -m http.server 5500 chala do.
  • Production: Nginx par static host karo — /var/www/dashboard/index.html.
  • Auth: initial login flow ke liye /auth/login add karo backend me, JWT token localStorage me store karo.
  • HTTPS: Let's Encrypt cert lagao — mail providers webhook only HTTPS accept karte hain.
  • Redis limiter: backend me global 20/min token bucket lagao — multiple workers ho to bhi total 20/min hi hona chahiye.
  • Queue worker: RabbitMQ ya BullMQ / Celery use karo — har recipient ek separate job.
  • Provider adapter: SES / Sendgrid / Postmark ke liye pluggable adapter banao, direct VPS SMTP se dur raho.

13. Build order (fastest path to production)

  1. Auth + sender identity setup + SPF/DKIM/DMARC
  2. Contacts table + shared suppression
  3. Import wizard + mapping profiles
  4. Campaign builder + preflight + Redis limiter
  5. Provider webhook (bounce / complaint) → suppression
  6. Inbox listener (Gmail push / IMAP IDLE)
  7. AI classifier + draft + approval queue
  8. Analytics + revenue attribution
✓ Action complete