171 lines
6.3 KiB
Markdown
171 lines
6.3 KiB
Markdown
# 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):**
|
|
```bash
|
|
# 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:
|
|
|
|
```css
|
|
: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 |