Complete CRM Feature Guide

Last Updated: October 27, 2025 Version: 2.0 Status: Production-Ready URL: https://crm.sagentix.ca


Table of Contents

  1. Overview
  2. Contact Management
  3. Distribution Lists
  4. Email Campaigns
  5. Analytics & Reporting
  6. Contact Tagging System
  7. Email Templates
  8. External Subscriptions
  9. CASL Compliance
  10. Security & Compliance
  11. Advanced Features
  12. API Reference
  13. Integration Options

Overview

What is the CRM?

A fully-featured, multi-tenant email marketing and CRM platform built on AWS serverless architecture. Designed for managing contacts, creating targeted email campaigns, and analyzing marketing performance.

Key Capabilities

Technology Stack

Frontend: - Vanilla JavaScript (no framework dependencies) - Chart.js 4.4.0 for analytics - Quill.js for WYSIWYG email editor - Amazon Cognito for authentication - CloudFront + S3 for hosting

Backend: - AWS Lambda (Python 3.11) - 32 serverless functions - API Gateway (REST API) - DynamoDB (11 tables) - On-demand billing - Amazon SES for email delivery - Amazon Cognito User Pools


Contact Management

Features

1. Create Contacts

Required Fields: - Email address (unique)

Optional Fields: - First name - Last name - Organization - Status (ACTIVE, UNSUBSCRIBED, BOUNCED, PENDING) - Source (Manual_Entry, Excel_Import, External_Subscription, etc.)

2. Edit Contacts

Inline Editing (NEW!): - Click on contact name to edit first/last name inline - Click on organization to edit inline - ✓ to save, ✕ to cancel - No modal required

Modal Editing: - Click "Edit" button for full edit modal - Update all fields at once - Validation on save

3. Visual Engagement Indicators (NEW!)

Automatic Categorization Based on Age: - 🔥 New Lead (0-7 days) - Red border/badge - ⭐ Recent (8-30 days) - Orange border/badge - 👤 Active (31-90 days) - Blue border/badge - 📋 Established (90+ days) - Gray border/badge

Status Badges: - ✓ Active (green) - Can receive emails - ✕ Unsubscribed (red) - Opted out - ⚠️ Bounced (yellow) - Email bounced - ⏳ Pending (gray) - Not yet confirmed

4. Search & Filter (Advanced 4-Way System)

Filter Options: 1. Text Search - Search by email, name, or organization 2. Status Filter - Active, Unsubscribed, Bounced 3. Engagement Filter - New Lead, Recent, Active, Established 4. Tag Filter - Filter by any tag

Combine multiple filters for precise segmentation.

5. Duplicate Detection (NEW!)

6. Export Contacts

7. Delete Contacts


Distribution Lists

User Interface

Aligned Grid Layout

Distribution lists are displayed in a clean, professional grid layout with perfect column alignment:

Display Columns: 1. List Name (300px fixed width) - List name with ellipsis overflow for long names 2. Created Date (130px) - Formatted as "Oct 27, 2024" 3. Member Count Badge (80px) - Circular gradient badge with 👥 icon and count 4. Action Buttons (flexible width, right-aligned) - All list operations

Visual Features: - Blue left border accent for each list item - Circular member count badge with blue gradient and shadow - Consistent spacing and alignment across all lists - Hover effects on action buttons - Responsive layout adapts to screen size

Action Buttons: - 🔗 Integration - Get integration code (primary button) - View Members - See list contacts - Edit - Update list details - Duplicate - Clone list with members - Delete - Remove list (danger button)

This layout makes it easy to scan multiple lists, compare member counts, and access common actions quickly.

Features

1. Create Lists

2. Manage List Members

Add Contacts: - Add existing contact by email - Create new contact and add simultaneously - View all list members

Remove Contacts: - Remove individual members - Bulk remove (future enhancement)

3. List Operations

4. Get Integration Code (NEW! 🔥)

One-Click Integration for Every Distribution List

Each distribution list now has a "🔗 Get Integration Code" button that automatically generates ready-to-use integration code for multiple channels. No manual configuration needed - everything is pre-filled with your actual API endpoints and list IDs.

Available Integration Types:

1. 🌐 Website Form Integration - Complete HTML subscription form with inline styling - Full JavaScript implementation for API calls - Success/error message handling - Ready to paste into any webpage - No dependencies required

2. ✉️ Email Signature Links - Plain URL format for text signatures - HTML format for rich email signatures - Pre-filled with list ID and tracking parameters - Opens subscription form when clicked

3. 📱 Social Media Integration - Pre-written post template with engaging copy - Includes subscription link - Optimized for LinkedIn, Twitter, Facebook - Ready-to-use hashtags included

4. 💼 LinkedIn Profile/Company Page - Formatted text for LinkedIn contact info section - Professional wording - Direct subscription link

How to Use: 1. Navigate to Distribution Lists 2. Click "🔗 Get Integration Code" on any list 3. Choose your integration type 4. Click "📋 Copy" button 5. Paste the code wherever you need it

Benefits: - ✅ Zero configuration - all URLs and IDs pre-filled - ✅ Professional, production-ready code - ✅ Copy-paste ready in seconds - ✅ List-specific - automatically customized per list - ✅ Multiple formats for different use cases

5. Use in Campaigns


Email Campaigns

Features

1. Create Campaigns

Required Information: - Distribution list selection - Email subject line - From name - From email address - Email body (HTML via Quill editor)

Optional Information: - Plain text version - Email template (select from saved templates) - Schedule for later (NEW! - UI implemented)

2. Campaign Status Tracking

Statuses: - DRAFT - Created but not sent - SENDING - Currently sending (live pulse animation) - SENT - Completed successfully - FAILED - Send operation failed

3. Campaign Statistics (6 Metrics Per Campaign)

4. Campaign Operations

Clone Campaign (NEW!): - One-click duplication - Creates draft copy with "Copy of [Name]" - Preserves all settings and content

Send Campaign: - Sends to all ACTIVE list members - Real-time progress tracking - Automatic CASL compliance checks

Delete Campaign: - Remove campaign - Keeps email send history

Bulk Operations (NEW!): - Select multiple campaigns with checkboxes - Bulk delete - Bulk export to CSV

5. Campaign Scheduling (UI Implemented)


Analytics & Reporting

Dashboard Features (4 Charts + 4 Stat Cards)

Stat Cards (Gradient Design)

  1. Total Campaigns - Purple gradient
  2. Emails Sent - Pink gradient
  3. Avg Delivery Rate - Blue gradient
  4. Total Contacts - Green gradient

Interactive Charts

1. Campaign Status Distribution (Doughnut Chart) - Visual breakdown by status - Green = SENT - Yellow = SENDING - Red = FAILED - Gray = DRAFT - Hover for exact counts

2. Email Delivery Overview (Pie Chart) - Delivered (green) - Bounced (yellow) - Failed (red) - Shows email infrastructure health

3. Contact Growth Timeline (Line Chart) - Month-by-month cumulative growth - Filled area chart with blue gradient - Shows subscriber acquisition trends

4. Top Performing Campaigns (Bar Chart) - Top 5 campaigns by delivery rate - Green horizontal bars - Percentage-based ranking

Export Capabilities


Contact Tagging System

Features (Fully Implemented)

1. Create Tags

Tag Modal: - Tag name input - 8 color options: Blue, Green, Orange, Red, Purple, Pink, Cyan, Lime - Live preview as you type - Color picker with selection indicators

2. Apply Tags to Contacts

3. View Tags

4. Remove Tags

5. Filter by Tags

Use Cases


Email Templates

Features

1. Create Templates

2. Use Templates

3. Manage Templates

4. Template Categories

Organize templates by purpose: - Newsletter - Promotional - Transactional - Event - Custom


External Subscriptions

Public Subscription Forms

Overview

Allow people to subscribe to your distribution lists without logging into the CRM. Perfect for website signup forms, landing pages, or social media links.

Features

1. Public Subscription Endpoint

POST https://zqkprqp60h.execute-api.ca-central-1.amazonaws.com/Prod/public/subscribe

2. Required Data:

{
  "email": "subscriber@example.com",
  "listId": "4f41dfcd-7848-407a-a67d-ef1041f8a1f6",
  "firstName": "John",  // optional
  "lastName": "Doe"      // optional
}

3. Automatic Processing: - Creates contact if doesn't exist - Adds to specified distribution list - Sets source as "External_Subscription" - Sends confirmation (optional) - CASL compliant

Implementation Examples

HTML Form:

<form id="subscribe-form">
  <input type="email" name="email" required placeholder="Your email">
  <input type="text" name="firstName" placeholder="First name">
  <input type="text" name="lastName" placeholder="Last name">
  <button type="submit">Subscribe</button>
</form>

<script>
document.getElementById('subscribe-form').addEventListener('submit', async (e) => {
  e.preventDefault();
  const formData = new FormData(e.target);

  const response = await fetch('https://zqkprqp60h.execute-api.ca-central-1.amazonaws.com/Prod/public/subscribe', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      email: formData.get('email'),
      firstName: formData.get('firstName'),
      lastName: formData.get('lastName'),
      listId: '4f41dfcd-7848-407a-a67d-ef1041f8a1f6'
    })
  });

  if (response.ok) {
    alert('Subscribed successfully!');
  }
});
</script>

JavaScript/React:

async function subscribe(email, firstName, lastName) {
  const response = await fetch('https://zqkprqp60h.execute-api.ca-central-1.amazonaws.com/Prod/public/subscribe', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      email,
      firstName,
      lastName,
      listId: '4f41dfcd-7848-407a-a67d-ef1041f8a1f6'
    })
  });

  const data = await response.json();
  return data;
}

Use Cases

  1. Website Footer: Newsletter signup
  2. Landing Pages: Lead capture forms
  3. Blog: Subscribe to updates
  4. Webinars: Event registration
  5. Social Media: Link in bio → signup form
  6. QR Codes: Print materials → mobile signup

CASL Compliance

Canadian Anti-Spam Legislation Features

1. Unsubscribe Mechanism

Every Email Includes: - Unsubscribe link in footer - One-click unsubscribe (no login required) - Immediate processing - Confirmation message

Unsubscribe Endpoint:

GET /public/unsubscribe?token=<contact-specific-token>

2. Consent Tracking

Recorded for Each Contact: - Source of acquisition - Date added - Subscription status - Unsubscribe date (if applicable)

3. Email Requirements

All campaign emails automatically include: - Sender identification (from name/email) - Subject line (no deceptive subjects) - Unsubscribe mechanism - Physical address (configurable)

4. Status Management


Security & Compliance

PBMM-Compliant Inactivity Timeout (NEW! 🔒)

Automatic Session Management for Protected B Security

The CRM platform implements a 15-minute inactivity timeout that meets Canadian PBMM (Protected B, Medium Integrity, Medium Availability) compliance standards.

How It Works

  1. Activity Monitoring
  2. Timer starts automatically after login
  3. Tracks mouse movements, keyboard input, scrolling, and touch events
  4. Any activity resets the 15-minute countdown

  5. Warning System

  6. At 14 minutes of inactivity, a warning modal appears
  7. Live countdown shows remaining seconds (60 seconds)
  8. Clear explanation of security requirement

  9. User Options

  10. "Stay Logged In" - Extends session and resets timer
  11. "Logout Now" - Immediate logout
  12. Automatic logout if no action taken

  13. Automatic Logout

  14. Occurs at exactly 15 minutes of inactivity
  15. JWT tokens removed from session
  16. Cognito session terminated
  17. User redirected to login page
  18. Clear message: "You have been logged out due to inactivity"

Why This Matters

Technical Details


Advanced Features

1. Inline Editing

2. Bulk Operations

Campaigns: - Select multiple with checkboxes - Bulk delete - Bulk export to CSV - Selection counter

Contacts: - Ready for bulk operations (can be implemented)

3. Empty States

Professional onboarding screens when no data exists: - Campaigns (purple gradient) - "Create Your First Campaign" - Contacts (green gradient) - "Add Contact" or "Import from Excel" - Lists (pink gradient) - "Create Your First List"

4. Campaign Cloning

5. Excel Import


API Reference

Base URL

https://zqkprqp60h.execute-api.ca-central-1.amazonaws.com/Prod

Authentication

All authenticated endpoints require:

Authorization: Bearer <JWT_TOKEN>

Obtain token via Amazon Cognito login.

Endpoints

Contacts

Method Endpoint Description
GET /contacts List all contacts
GET /contacts?status=ACTIVE Filter by status
POST /contacts Create contact
PUT /contacts/{contactId} Update contact
DELETE /contacts/{contactId} Delete contact

Lists

Method Endpoint Description
GET /lists List all distribution lists
POST /lists Create list
PUT /lists/{listId} Update list
DELETE /lists/{listId} Delete list
GET /lists/{listId}/members Get list members
POST /lists/{listId}/members Add contacts to list
DELETE /lists/{listId}/members/{contactId} Remove from list

Campaigns

Method Endpoint Description
GET /campaigns List all campaigns
POST /campaigns Create campaign
GET /campaigns/{campaignId} Get campaign details
POST /campaigns/{campaignId}/send Send campaign
POST /campaigns/{campaignId}/clone Clone campaign
DELETE /campaigns/{campaignId} Delete campaign

Tags

Method Endpoint Description
GET /contacts/{contactId}/tags List contact tags
POST /contacts/{contactId}/tags Add tag to contact
DELETE /contacts/tags/{tagId} Remove tag

Templates

Method Endpoint Description
GET /templates List all templates
POST /templates Create template
GET /templates/{templateId} Get template
PUT /templates/{templateId} Update template
DELETE /templates/{templateId} Delete template

Public Endpoints (No Authentication)

Method Endpoint Description
POST /public/subscribe External subscription
GET /public/unsubscribe One-click unsubscribe

Integration Options

1. Website Integration

Newsletter Signup Form: - Add HTML form to website - POST to /public/subscribe endpoint - Specify your listId - Style to match your branding

Example locations: - Website footer - Blog sidebar - Landing pages - Contact page

2. LinkedIn Integration (Planned)

Potential Integrations: - LinkedIn Lead Gen Forms → CRM import - Profile scrapers → contact creation - Connection exports → bulk import - Message campaigns → tracking

Implementation Status: Not yet implemented Effort Required: Medium (2-4 hours) Dependencies: LinkedIn API access or third-party tools

3. Email Signature

Add subscription link:

<a href="https://yourwebsite.com/subscribe">
  Subscribe to our newsletter
</a>

4. Social Media

Link in Bio: - Instagram/TikTok → Landing page with signup form - Twitter/X → Link to subscription page - Facebook → Page CTA button

5. QR Codes

Print materials: - Generate QR code pointing to subscription form - Business cards - Flyers - Event materials

6. Zapier/Make.com (Future)

Automation potential: - Form submissions → CRM contacts - Webinar registrations → Distribution list - E-commerce orders → Customer list - CRM unsubscribes → Update other platforms

Status: Not yet implemented Effort: Low-Medium (webhook endpoints ready)

7. API Integration

Direct API calls: - Integrate with custom applications - Mobile apps - Other SaaS platforms - Internal tools

Authentication: Cognito JWT tokens Documentation: See API Reference above


Database Schema

Tables (11 Total)

  1. CrmContacts-dev - Contact records
  2. CrmDistributionLists-dev - Email lists
  3. CrmListMemberships-dev - List-contact relationships
  4. CrmCampaigns-dev - Email campaigns
  5. CrmEmailSends-dev - Individual email send records
  6. CrmEmailTemplates-dev - Saved templates
  7. CrmContactTags-dev - Contact tags
  8. CrmEmailOpens-dev - Email open tracking (ready, not implemented)
  9. CrmEmailClicks-dev - Link click tracking (ready, not implemented)
  10. CrmContactActivities-dev - Contact timeline (ready, not implemented)
  11. CrmContactNotes-dev - Contact notes (ready, not implemented)

Multi-Tenancy

All tables include tenantId for complete data isolation: - Users can only access their tenant's data - Enforced at API and database level - Supports unlimited tenants


Performance & Scalability

Current Configuration

DynamoDB: - On-demand billing (pay per request) - Auto-scaling - No capacity planning needed - Handles traffic spikes automatically

Lambda: - 256 MB memory (most functions) - 512 MB for campaign sending - 15-second timeout (most) - 300-second for sending

Email Sending: - Amazon SES - 14 emails/second rate - Automatic throttling - Bounce/complaint handling

Capacity

Current limits: - Contacts: Unlimited - Lists: Unlimited - Campaigns: Unlimited - Emails/month: 62,000 free, then $0.10/1000 - Concurrent users: Unlimited (API Gateway auto-scales)


Security Features

Authentication

Authorization

Data Security

Compliance


Cost Optimization

Current Monthly Cost: $15-35

Breakdown: - DynamoDB (11 tables): $5-15 - Lambda (32 functions): $0-5 - S3 Storage: $0.10-2 - CloudFront: $0-1 - CloudWatch Logs: $0.50-2 - SES Email: $0-10

Optimizations Applied: - ✅ On-demand DynamoDB billing - ✅ 90-day log retention - ✅ S3 lifecycle policies - ✅ No reserved capacity waste - ✅ Appropriate Lambda sizing


Future Enhancements

Planned Features

  1. Email Open/Click Tracking - Database ready, needs implementation
  2. Contact Timeline - View all contact interactions
  3. Contact Notes - Add notes to contacts
  4. Custom Contact Fields - Define your own fields
  5. A/B Testing - Test subject lines and content
  6. Advanced Segmentation - Complex filtering logic
  7. Drag-and-Drop Email Builder - Visual email design
  8. Campaign Automation - Scheduled sends, drip campaigns
  9. LinkedIn Integration - Import connections
  10. Mobile App - iOS/Android apps

Community Contributions

This is a proprietary system, but feature requests are welcome!


Support & Troubleshooting

Common Issues

1. Changes not appearing: - Hard refresh: Cmd+Shift+R (Mac) or Ctrl+F5 (Windows) - Wait 1-2 minutes for CloudFront invalidation - Clear browser cache

2. Login issues: - Check email/password - Check Cognito user pool status - Verify user confirmed

3. Emails not sending: - Verify SES is not in sandbox mode - Check sender email is verified - Review CloudWatch logs

4. Import failing: - Check Excel file format (.xlsx) - Verify required columns present - Check file size (<5 MB)

Getting Help


Conclusion

This CRM platform provides commercial-grade email marketing capabilities with:

✅ Full contact management ✅ Targeted email campaigns ✅ Visual analytics ✅ CASL compliance ✅ External subscriptions ✅ Advanced segmentation ✅ Cost-optimized infrastructure ✅ Scalable architecture

Total Cost: $15-35/month Commercial Equivalent: $200-800/month Your Savings: 95%+

For detailed deployment instructions, see DEPLOYMENT.md. For architecture details, see ARCHITECTURE.md. For development guidelines, see DEVELOPMENT_GUIDE.md.


Version: 2.0 Last Updated: October 27, 2025 Production URL: https://crm.sagentix.ca