30 KiB
.env
Environment configuration file containing NocoDB API credentials, table URLs, and sheet references for database integration. Contains sensitive API tokens and configuration URLs for the various NocoDB sheets used by the application.
.gitignore
Git ignore file specifying which files and directories should be excluded from version control, including environment files, logs, node_modules, and other temporary files.
ADMIN_IMPLEMENTATION.md
Summarizes the implementation of the admin panel and related backend/frontend changes for the NocoDB Map Viewer.
Instuctions.md
Project development instructions and rules for contributors to the canvassing map application.
README.md
Main documentation for the NocoDB Map Viewer project, including features, setup, and usage.
build-nocodb.md
Documents the development and requirements of the NocoDB automation script for table setup.
build-nocodb.sh
Bash script to automate creation of required NocoDB tables and default data for the app.
combined.log
Application log file containing all server events, errors, warnings, and informational messages in JSON format. Used for monitoring application health and debugging issues.
docker-compose.yml
Docker Compose file to orchestrate the map-viewer app container and its environment.
error.log
Dedicated error log file containing only error-level messages from the application for focused error monitoring and debugging.
test-addresses.csv
Sample CSV file containing test address data for development and testing purposes. Used for validating data import and geocoding functionality.
app/Dockerfile
Dockerfile for building the Node.js application image for deployment.
app/config/index.js
Handles environment config and NocoDB URL parsing for the backend.
app/controllers/authController.js
Controller for user authentication (login, logout, session check).
app/controllers/locationsController.js
Controller for CRUD operations on map locations.
app/controllers/passwordRecoveryController.js
Controller for handling password recovery requests via email. Validates email format, looks up users in the database, and sends password recovery emails while maintaining security by not revealing whether accounts exist.
app/controllers/settingsController.js
Controller for application settings, start location, and walk sheet config.
app/controllers/shiftsController.js
Controller for handling shift management, signup/cancellation, and admin operations on volunteer shifts. Includes comprehensive email functionality for sending shift details to all volunteers with professional HTML templates, user management within shifts, and calendar integration features.
app/controllers/publicShiftsController.js
Controller for handling public-facing shift signup functionality. Manages public shift viewing, temporary user account creation during signup, email confirmation for public signups, and integration with the existing shift system. Includes rate limiting, validation, and automated email notifications for new volunteers.
app/controllers/dataConvertController.js
Controller for handling CSV upload and batch geocoding of addresses. Parses CSV files, validates address data, uses the geocoding service to get coordinates, and provides real-time progress updates via Server-Sent Events (SSE). Enhanced with comprehensive error logging and downloadable processing reports that include both successful and failed geocoding attempts for review and debugging.
app/controllers/dashboardController.js
Controller for aggregating and calculating dashboard statistics from locations and users data.
app/controllers/usersController.js
Controller for user management (list, create, delete users, send login details via email). Features rich HTML email broadcasting to all users with live preview, temporary user support with expiration tracking, and comprehensive user role management.
app/controllers/cutsController.js
Controller for CRUD operations on map cuts (geographic polygon overlays). Handles cut creation, editing, deletion, and visibility management with admin-only access for modifications and public access for viewing public cuts.
app/controllers/listmonkController.js
Controller for managing Listmonk email list synchronization. Handles sync status checking, bulk synchronization operations for locations and users, list statistics retrieval, connection testing, and list reinitialization. Provides admin-only endpoints for managing the email marketing integration.
app/middleware/auth.js
Express middleware for authentication and admin access control.
app/middleware/rateLimiter.js
Express middleware for API rate limiting, with Cloudflare IP support.
app/package.json
Node.js project manifest, dependencies, and scripts for the backend app.
app/server.js
Main Express server entry point for the map application backend.
app/server copy.js
Legacy or backup version of the main server file, possibly for reference or migration.
app/services/email.js
Service for sending emails via SMTP, including password recovery emails and login details using nodemailer. Supports multiple SMTP providers and includes connection verification and error handling.
app/services/emailTemplates.js
Service for loading and rendering email templates with variable substitution. Handles HTML and plain text email generation with caching support and template variable replacement functionality.
app/services/geocoding.js
Service for geocoding and reverse geocoding using external APIs, with caching. Updated to include forwardGeocodeSearch function for returning multiple address search results for the unified search feature.
app/services/listmonk.js
Service for integrating with Listmonk email marketing platform. Handles API communication, list management, subscriber synchronization, and automatic segmentation. Creates and manages email lists for locations (segmented by support level, sign status) and users, with real-time sync capabilities and bulk operations support.
app/services/nocodb.js
Service for interacting with the NocoDB API (CRUD, config, etc).
app/services/qrcode.js
Service for generating QR codes and handling QR-related logic.
app/services/socrata.js
Service for integrating with Socrata API to access external government datasets. Handles API communication with Edmonton's open data platform for retrieving parcel and address information.
app/templates/email/password-recovery.txt
Plain text email template for password recovery notifications. Contains user-friendly formatting with password display and security warnings.
app/templates/email/password-recovery.html
HTML email template for password recovery notifications. Features responsive design with styled password display box and security warnings for better user experience.
app/templates/email/login-details.txt
Plain text email template for sending login credentials to users. Contains email, password, role, and login URL with security recommendations.
app/templates/email/login-details.html
HTML email template for sending login credentials to users. Features responsive design with styled credentials display and login button for better user experience.
app/templates/email/shift-details.html
Professional HTML email template for sending shift details to volunteers. Features responsive design with structured shift information display, status badges, important notes section, and branded layout for enhanced communication.
app/templates/email/shift-details.txt
Plain text email template for shift detail notifications sent to volunteers. Contains comprehensive shift information including date, time, location, volunteer count, status, and important instructions with professional formatting.
app/templates/email/user-broadcast.html
HTML email template for admin broadcasting messages to all users. Features rich text content support, responsive design, professional styling with typography, lists, links, and blockquotes for effective mass communication.
app/templates/email/user-broadcast.txt
Plain text email template for admin broadcast messages to all users. Provides clean, accessible format for mass communication with proper formatting and sender information.
app/templates/email/public-shift-signup-new.html
HTML email template for public shift signup confirmation sent to new users. Features responsive design with shift details, temporary account credentials, login instructions, and professional styling for volunteer onboarding experience.
app/templates/email/public-shift-signup-new.txt
Plain text email template for public shift signup confirmation sent to new users. Contains shift details, temporary account credentials, and login instructions in accessible format.
app/templates/email/public-shift-signup-existing.html
HTML email template for public shift signup confirmation sent to existing users. Features responsive design with shift details and account access instructions for returning volunteers.
app/templates/email/public-shift-signup-existing.txt
Plain text email template for public shift signup confirmation sent to existing users. Contains shift details and account access instructions in accessible format.
app/utils/helpers.js
Utility functions for geographic data, validation, and helpers used across the backend.
app/utils/logger.js
Winston logger configuration for backend logging.
app/public/admin.html
Admin panel HTML page for managing start location, walk sheet, shift management, user management, and email broadcasting. Features rich text editor with live preview for composing broadcast emails, shift volunteer management modals, comprehensive admin interface with user role controls, and quick access links to both NocoDB database management and Listmonk email marketing interfaces.
app/public/css/admin.css
Main entry point for admin panel CSS with modular imports. Refactored from a single large file into focused modules for better maintainability. Imports all admin-specific CSS modules including variables, layout, forms, user management, walk sheets, and responsive design.
app/public/css/admin/variables.css
CSS custom properties and theme configuration for the admin panel. Defines colors, spacing, typography, shadows, and z-index layers used consistently across all admin modules.
app/public/css/admin/layout.css
Layout components for the admin panel including container structure, sidebar navigation, content areas, map controls, and mobile menu components. Handles the overall admin interface layout and navigation.
app/public/css/admin/forms.css
Form and button styles for the admin interface. Includes form field styling, button variations (primary, secondary, danger, etc.), form actions, and special form field types like circles and validation states.
app/public/css/admin/status-messages.css
Status messages, notifications, and progress indicators for the admin panel. Handles toast notifications, progress bars, loading states, QR code generation status, and various status icons with animations.
app/public/css/admin/user-management.css
User management interface styles including user tables, role badges, expiration indicators, volunteer management components, and user form styling. Handles the complete user administration interface.
app/public/css/admin/walk-sheet.css
Walk sheet configuration and preview styles. Handles QR code display, printable walk sheet layout (8.5x11 paper), form field circles, notes sections, and print-specific styling for walk sheet generation.
app/public/css/admin/data-convert.css
Data conversion interface styles for CSV upload and processing. Includes file upload areas, processing progress indicators, results preview tables, drag-and-drop styling, and map integration for geocoding results display.
app/public/css/admin/nocodb-links.css
External database integration card styles for NocoDB connections. Provides styling for integration status cards, connection indicators, information boxes, and database management interface components.
app/public/css/admin/cuts-shifts.css
Geographic cuts and shift management interface styles. Handles cut drawing controls, form states, shift scheduling interface, map interaction components, and administrative controls for cuts and volunteer shifts.
app/public/css/admin/modals.css
Modal dialogs and email composition interface for the admin panel. Includes modal structure, email composition with rich text editing, progress tracking for email campaigns, and interactive dialog components.
app/public/css/admin/responsive.css
Responsive design and media queries for all admin panel components. Handles mobile, tablet, and desktop layout adaptations, touch-friendly interfaces, mobile navigation, and responsive table layouts.
app/public/css/modules/apartment-marker.css
Styles for apartment/multi-unit building markers. Defines square-shaped markers with hover effects and transitions for distinguishing multi-unit buildings from single-family homes on the map.
app/public/css/modules/apartment-popup.css
Styles for the apartment building popup, ensuring it is responsive and user-friendly.
app/public/css/modules/base.css
Contains base styles, including CSS variables for theming, resets, and default body styles.
app/public/css/modules/buttons.css
Defines styles for all button types, states (hover, disabled), and variants (primary, danger, etc.).
app/public/css/modules/cuts.css
Styles for the cut feature including drawing controls, polygon overlays, vertex markers, cut management interface, and responsive design for both admin and public views.
app/public/css/modules/cache-busting.css
Styles for the cache busting update notification that prompts users to refresh the page.
app/public/css/modules/dashboard.css
Styles for the dashboard panel including cards, charts, and responsive grid layouts.
app/public/css/modules/doc-search.css
Styles for the documentation search component in the header.
app/public/css/modules/unified-search.css
Styles for the unified search component that combines documentation and map address search functionality. Includes mode toggle buttons, search input styling, results display, and responsive design for both desktop and mobile.
app/public/css/modules/forms.css
Styles for form elements, input fields, and the slide-up edit footer.
app/public/css/modules/layout.css
Defines the main application layout, including the header, app container, and map container.
app/public/css/modules/leaflet-custom.css
Customizations for the Leaflet.js library, including popups and marker styles.
app/public/css/modules/listmonk.css
Styles for Listmonk email sync status indicators, notifications, and admin panel interface. Includes status badges, error/success notifications, progress bars, sync controls, and responsive design for email list management features.
app/public/css/modules/map-controls.css
Styles for map controls, such as the crosshairs and move controls.
app/public/css/modules/mobile-ui.css
Styles for mobile-specific UI elements like the mobile dropdown menu and floating sidebar.
app/public/css/modules/modal.css
Styles for all modal dialogs used throughout the application.
app/public/css/modules/nocodb-dropdown.css
Styles for NocoDB dropdown interface components. Provides styling for dropdown toggles, arrows, and menu behaviors used in database integration features.
app/public/css/modules/notifications.css
Styles for status messages and the global loading overlay.
app/public/css/modules/print.css
Print-specific styles to ensure the map prints correctly.
app/public/css/modules/qr-code.css
Styles for the QR code generation modal and related components.
app/public/css/modules/responsive.css
Contains all media queries for responsive design, adapting the layout for different screen sizes.
app/public/css/modules/start-location-marker.css
Defines the animated styles for the distinctive start location marker.
app/public/css/modules/temp-user.css
Styles for temporary user restrictions and visual indicators. Includes temp user badge styling and CSS rules for hiding restricted elements from temporary users.
app/public/css/shifts.css
CSS styles for the volunteer shifts page, including grid view, calendar view, and view toggle functionality.
app/public/css/public-shifts.css
CSS styles for the public volunteer opportunity signup page. Includes responsive design, shift card layouts, signup modal styling, success confirmations, loading states, and mobile-optimized interfaces for public users.
app/public/css/style.css
Main stylesheet that imports all modular CSS files from the public/css/modules/ directory. Acts as the central entry point for all application styles, organizing them into logical modules for better maintainability. Referenced in all HTML files to load the complete application styling system.
app/public/favicon.ico
Favicon for the web application.
app/public/index.html
Main map viewer HTML page for the canvassing application. Features the unified search system with keyboard shortcut support (Ctrl+K), responsive header with user authentication, mobile-friendly dropdown navigation, and comprehensive map interface. Includes the "Confirm Address" functionality that requires users to confirm the geocoded address before saving location data. Contains all necessary script imports for Leaflet.js, MarkerCluster, and the modular JavaScript application architecture.
app/public/login.html
Login page HTML for user authentication.
app/public/shifts.html
Volunteer shifts management and signup page HTML with both grid and calendar view options.
app/public/public-shifts.html
Public-facing volunteer opportunity signup page that doesn't require authentication. Features shift browsing, detailed information display, signup modal with account creation, and success confirmation flow for new volunteers.
app/public/user.html
User profile page HTML for displaying user information and account management.
app/public/css/user.css
CSS styles for the user profile page and user management components in the admin panel.
app/public/js/admin.js
Main Admin Panel Coordinator - Coordinates all admin modules and handles initialization. Contains the primary DOM ready handler that initializes all admin functionality, manages section routing, and provides coordination between all modular components. Maintains backward compatibility and global function exports.
app/public/js/admin-core.js
Admin Core Utilities Module - Contains essential admin panel utilities including viewport management, navigation between sections, mobile menu functionality, status messaging, HTML escaping, and debounce utilities. Provides the foundation for all other admin modules.
app/public/js/admin-auth.js
Admin Authentication Module - Handles all authentication-related functionality including admin verification, user session checks, logout processes, and admin info display for both desktop and mobile interfaces. Manages security and access control.
app/public/js/admin-map.js
Admin Map Management Module - Contains all map-related functionality including Leaflet map initialization, start location management, marker handling, coordinate input/output, crosshair display, and map interaction event handlers. Manages the campaign map configuration.
app/public/js/admin-walksheet.js
Walk Sheet Configuration Module - Manages walk sheet template configuration, preview generation, QR code creation and display, printing functionality, and form field management. Handles the generation of printable canvassing materials.
app/public/js/admin-shifts.js
Shift Management Module - Handles all shift-related operations including CRUD (Create, Read, Update, Delete) operations, shift display and formatting, public/private shift management, form handling, and shift status management. Core shift administration functionality.
app/public/js/admin-shift-volunteers.js
Shift Volunteer Management Module - Manages volunteer assignment to shifts through modal interfaces, handles adding/removing volunteers from shifts, provides email functionality for sending shift details to volunteers, and manages volunteer-specific progress tracking and notifications.
app/public/js/admin-users.js
User Management Module - Contains all user administration functionality including user CRUD operations, user display and table management, user role and type management (admin, user, temp), expiration tracking for temporary users, and individual user email functionality.
app/public/js/admin-email.js
Email Broadcasting Module - Handles mass email functionality including rich text editor with toolbar, email composition with live preview, progress tracking for bulk email operations, HTML email template management, and broadcast email status monitoring with detailed results display.
app/public/js/admin-integration.js
External Integration Module - Manages external service integrations including NocoDB database link initialization and management, Listmonk email service link configuration, admin-only integration controls, and dynamic link setup based on service availability.
app/public/js/dashboard.js
JavaScript for rendering dashboard charts and statistics using Chart.js in the admin panel.
app/public/js/user.js
JavaScript for user profile page functionality and user account management.
app/public/js/auth.js
JavaScript for authentication logic and user session management.
app/public/js/config.js
Global configuration constants for the frontend app.
app/public/js/location-manager.js
JavaScript for loading, displaying, and managing map locations on the frontend. Includes address confirmation validation that prevents saving locations until the geocoded address is confirmed by the user.
app/public/js/main.js
Main entry point for initializing the frontend application. Orchestrates the complete application startup sequence including domain configuration loading, user authentication verification, map initialization, and location loading. Manages the unified search system initialization, auto-refresh functionality, viewport handling for responsive design, and global error handling. Serves as the central coordinator for all application modules and features.
app/public/js/map-search.js
JavaScript module for handling map address search functionality. Provides search capabilities using the geocoding API, displays search results with temporary markers, and integrates with the location management system.
app/public/js/mkdocs-search.js
JavaScript module for integrating MkDocs Material's search functionality into the map application. Provides documentation search capabilities with automatic environment detection and URL configuration.
app/public/js/search-manager.js
JavaScript module for managing the unified search system that combines documentation and map address search. Handles mode switching, result display, keyboard shortcuts, and integration between docs search and map search functionalities.
app/public/js/map-manager.js
JavaScript for initializing and managing the Leaflet map instance.
app/public/js/map.js.backup
Backup or legacy version of the main map JavaScript logic.
app/public/js/shifts.js
JavaScript for volunteer shift signup, management, and UI logic with both grid and calendar view functionality. Features include view toggling, calendar navigation, shift color-coding, interactive shift popups, calendar integration (Google, Outlook, Apple), and enhanced user experience with dropdown actions. Updated to use shift titles directly from signup records with improved event handling.
app/public/js/public-shifts.js
JavaScript for the public volunteer opportunity signup page. Handles shift loading, filtering, signup modal management, form validation, API communication for public signups, success confirmations, and direct shift linking. Includes responsive design support and error handling for public users.
app/public/js/ui-controls.js
JavaScript for UI controls, event handlers, and user interaction logic. Includes address confirmation functionality that manages state for ensuring users confirm geocoded addresses before saving locations.
app/public/js/utils.js
Utility functions for the frontend (escaping HTML, parsing geolocation, etc).
app/public/js/data-convert.js
Frontend JavaScript for the Convert Data admin section. Handles file upload UI, drag-and-drop, real-time progress updates, visual representation of geocoding results on a map, and saving successful results to the database.
app/public/js/cut-drawing.js
JavaScript module for interactive polygon drawing functionality. Implements click-to-add-points drawing system for creating cut boundaries on the map using Leaflet.js drawing tools.
app/public/js/cut-controls.js
JavaScript module for cut display controls on the public map. Handles loading and rendering of public cuts as polygon overlays for authenticated users.
app/public/js/admin-cuts.js
JavaScript for the admin cut management interface. Provides complete CRUD functionality for cuts including interactive drawing, form management, cut list display, and import/export capabilities.
app/public/js/listmonk-status.js
JavaScript module for real-time Listmonk sync status monitoring. Displays connection status indicators in the UI, shows error notifications when sync fails, handles automatic status checking, and provides user feedback for email list synchronization health.
app/public/js/listmonk-admin.js
JavaScript for admin panel Listmonk management functionality. Handles bulk synchronization operations, progress tracking, list statistics display, connection testing, and admin interface interactions for email list management. Integrates with the admin panel UI for comprehensive Listmonk control.
app/public/js/auth.js
JavaScript for authentication logic and user session management. Includes temporary user restrictions, role-based UI visibility controls, and dynamic user interface updates based on user type and admin status.
app/public/js/cache-manager.js
JavaScript module for client-side cache management and version checking. Handles cache busting functionality to ensure users get the latest version of the application when updates are deployed.
app/public/js/config.js
Global configuration constants for the frontend app.
app/public/js/cut-controls.js
JavaScript module for cut display controls on the public map. Handles loading and rendering of public cuts as polygon overlays for authenticated users.
app/public/js/cut-drawing.js
JavaScript module for interactive polygon drawing functionality. Implements click-to-add-points drawing system for creating cut boundaries on the map using Leaflet.js drawing tools.
app/public/js/cut-manager.js
JavaScript module for managing cut operations and display functionality. Handles cut CRUD operations, layer management, and provides unified interface for cut-related features.
app/public/js/dashboard.js
JavaScript for rendering dashboard charts and statistics using Chart.js in the admin panel.
app/public/js/data-convert.js
Frontend JavaScript for the Convert Data admin section. Handles file upload UI, drag-and-drop, real-time progress updates, visual representation of geocoding results on a map, and saving successful results to the database.
app/public/js/database-search.js
JavaScript module for database search functionality. Handles searching through loaded location data on the client side with caching capabilities for improved performance.
app/public/js/external-layers.js
JavaScript module for managing external data layers on the map. Handles loading and display of external datasets like Edmonton parcel addresses with smart loading based on map bounds and zoom levels.
app/routes/admin.js
Express router for admin-only endpoints (start location, walk sheet config, NocoDB URLs, and Listmonk URLs). Provides secure access to both database management and email marketing platform URLs for admin users. Constructs Listmonk URLs using the public domain format (https://listmonk.domain) for proper external access.
app/routes/dashboard.js
Express router for dashboard API endpoints, providing stats for the admin dashboard.
app/routes/auth.js
Express router for authentication endpoints (login, logout, check).
app/routes/debug.js
Express router for debug endpoints (session info, table structure, etc).
app/routes/geocoding.js
Express router for geocoding and reverse geocoding endpoints. Updated to include /search endpoint for returning multiple address results for the unified search functionality.
app/routes/index.js
Main router that mounts all sub-routes for the backend API.
app/routes/locations.js
Express router for CRUD endpoints on map locations.
app/routes/listmonk.js
Express router for Listmonk email list management endpoints. Provides authenticated and admin-only routes for sync status checking, bulk synchronization operations, list statistics, connection testing, and list reinitialization. Includes proper authorization middleware to restrict admin functions.
app/routes/qr.js
Express router for QR code generation endpoints.
app/routes/settings.js
Express router for application settings endpoints (start location, walk sheet).
app/routes/shifts.js
Express router for volunteer shift management endpoints (public and admin).
app/routes/public.js
Express router for public-facing endpoints that don't require authentication. Handles public shift viewing and signup functionality with appropriate rate limiting and validation.
app/routes/users.js
Express router for user management endpoints (list, create, delete users).
app/routes/cuts.js
Express router for cut management endpoints. Provides CRUD operations for geographic polygon overlays with admin-only access for modifications and public read access for viewing public cuts.
app/routes/dataConvert.js
Express routes for data conversion features. Handles CSV file upload with multer middleware and provides endpoints for processing CSV files and saving geocoded results to the database.
app/routes/external.js
Express router for external data integration endpoints, including Socrata API integration for accessing and processing external government datasets.
app/utils/cacheBusting.js
Utility for managing cache busting functionality to ensure users get the latest version of the application when updates are deployed. Handles versioning and cache invalidation strategies.
listmonk-env-example.txt
Example environment configuration file showing the required Listmonk environment variables. Provides sample configuration for API URL, credentials, sync settings, and setup instructions for integrating with the Listmonk email marketing platform.