Files
sasa-maillist/web
2025-10-13 16:53:22 +00:00
..
2025-10-13 16:53:22 +00:00
2025-10-12 20:55:13 +00:00
2025-10-13 15:05:42 +00:00
2025-10-12 21:20:53 +00:00
2025-10-13 14:05:01 +00:00

Web Frontend for Mailing List Manager

This directory contains the web frontend for the Mailing List Manager - a clean, modern web interface for managing mailing lists and members.

Features

  • 🔐 Token-based Authentication - Secure access using API tokens
  • 📧 Mailing List Management - Create, edit, and delete mailing lists
  • 👥 Member Management - Add, edit, and remove members
  • 🔗 Subscription Management - Subscribe/unsubscribe members to/from lists
  • 📱 Responsive Design - Works on desktop, tablet, and mobile devices
  • 🎨 Clean UI - Modern, professional interface with intuitive navigation
  • Real-time Updates - Immediate feedback and data refresh

Architecture

Frontend Stack

  • HTML5 - Semantic markup with accessibility features
  • CSS3 - Modern styling with CSS Grid/Flexbox and custom properties
  • Vanilla JavaScript - No frameworks, just clean ES6+ code
  • Nginx - Static file serving with compression and caching

File Structure

web/
├── index.html           # Main HTML interface
├── static/
│   ├── css/
│   │   └── style.css    # Complete styling system
│   └── js/
│       ├── api.js       # API client for backend communication
│       ├── ui.js        # UI helpers and modal management
│       └── app.js       # Main application controller
├── Dockerfile           # Container configuration
├── nginx.conf           # Nginx server configuration
└── README.md           # This file

Usage

Accessing the Interface

Via Docker (Recommended):

# Ensure all services are running
sudo docker-compose up -d

# Access the web interface
open http://localhost:3000

For Development: You can also open index.html directly in a browser, but the API must be running on port 8000.

Getting Started

  1. Authenticate: Enter your API_TOKEN (from .env file) when prompted
  2. Manage Lists: Click the "Lists" tab to view and manage mailing lists
  3. Manage Members: Click the "Members" tab to add and edit member information
  4. Manage Subscriptions: Click "Subscriptions" button on any member to toggle their list memberships

The interface saves your token in browser storage, so you won't need to re-enter it on subsequent visits.

Features Overview

Authentication

  • Secure token-based authentication
  • Token persistence in browser storage
  • Automatic logout on authentication errors

Subscription Management (New & Improved!)

Member-Centric Subscription Management

The subscription management has been completely redesigned for the best user experience:

How to Use:

  1. Navigate to the Members tab
  2. Find the member you want to manage
  3. Click the "Subscriptions" button next to their name
  4. A modal appears showing all available mailing lists with toggle switches

Visual Interface:

  • Green toggle = Member is subscribed to this list
  • Gray toggle = Member is not subscribed to this list
  • Click anywhere on a list item to toggle subscription on/off

Batch Operations:

  • Make multiple changes (subscribe to some lists, unsubscribe from others)
  • The "Save Changes" button shows how many changes you've made (e.g., "Save 3 Changes")
  • All changes are saved together when you click "Save Changes"
  • Click "Cancel" to discard all changes

Benefits:

  • Fast - Toggle multiple subscriptions at once
  • Visual - See all subscriptions at a glance with color coding
  • Intuitive - Works like modern mobile app switches
  • Smart - Only saves actual changes, not unchanged items
  • Clear - Shows exactly how many changes you're about to save

Alternative: Legacy Bulk Subscription

For power users who prefer the old approach:

  1. Go to the Subscriptions tab
  2. Select list and member from dropdowns
  3. Click "Add Subscription"

This is still available but the member-centric approach is much more efficient for managing multiple subscriptions.

Mailing Lists

  • View all mailing lists in a clean table
  • Create new lists with name, email, and description
  • Edit existing list details
  • Delete lists with confirmation
  • View member count for each list
  • Status indicators (Active/Inactive)

Members

  • View all members with their details
  • Add new members with name and email
  • Edit member information
  • Delete members with confirmation
  • See which lists each member is subscribed to
  • Status management

Subscriptions

  • Member-centric subscription management - Click on any member to manage their subscriptions
  • Interactive toggle interface - Check/uncheck lists with visual toggles
  • Batch changes - Make multiple subscription changes and save them all at once
  • Real-time feedback - See subscription status instantly with visual indicators
  • Subscription overview - View all subscriptions organized by list
  • Quick add functionality - Legacy bulk subscription interface for power users

User Experience

  • Responsive Design - Works seamlessly on all device sizes
  • Loading States - Visual feedback during API operations
  • Error Handling - Clear error messages and graceful degradation
  • Notifications - Success/error notifications with auto-dismiss
  • Confirmation Dialogs - Prevent accidental deletions
  • Keyboard Shortcuts - Enter key support in forms
  • Accessibility - Semantic HTML and ARIA labels

API Integration

The frontend communicates with the FastAPI backend through a comprehensive API client:

  • Authentication - Bearer token authentication
  • Error Handling - Automatic error parsing and user-friendly messages
  • Loading States - Integrated loading indicators
  • Data Validation - Client-side form validation before API calls

Customization

Styling

The CSS uses CSS custom properties (variables) for easy theming:

:root {
    --primary-color: #2563eb;
    --success-color: #10b981;
    --danger-color: #ef4444;
    /* ... more variables */
}

Configuration

The API client automatically detects the backend URL based on the current hostname and can be configured for different environments.

Browser Support

  • Modern browsers (Chrome 60+, Firefox 55+, Safari 12+, Edge 79+)
  • Mobile browsers (iOS Safari 12+, Chrome Mobile 60+)
  • Progressive enhancement for older browsers