- Implemented V3-style reactive search (Local Cache -> Remote Revalidation) for exhibitors. - Standardized search fields to 'name' for Exhibits and 'event_badge_full_name' for Lead Tracking. - Refactored Leads UI with standardized search components and grid layout. - Updated event routing to exclusively use string-based IDs (Triple-ID pattern). - Hardened 'ae_EventSession' type definitions to handle null values from V3 API/Dexie.
Aether (AE) Event Lead Retrieval Module (v3)
Overview
This module provides a comprehensive solution for event exhibitors to capture and manage leads. It supports exhibitor login, badge scanning for lead capture, manual lead entry, lead qualification (ranking/priority), and data export functionalities. It integrates with the Aether API for data synchronization and utilizes local caching for performance and offline capabilities.
Key Features
- Exhibitor Login: Secure access for exhibitors using a shared passcode or individual license keys (email-based).
- Lead Capture: Efficiently add new leads by scanning attendee badge QR codes or through manual data entry.
- Lead Management: A dedicated interface for exhibitors to view, sort, and manage their collected leads.
- Lead Qualification: Tools to rank and prioritize leads (e.g., sort, star/favorite) for follow-up.
- Data Export: Functionality to export collected lead data, typically to an Excel-compatible format.
- Real-time Synchronization: Data is synchronized with the backend Aether API.
- Local Caching: Utilizes IndexedDB (Dexie.js) for robust local data storage, enabling offline use and faster load times.
Data Model
The core data structures managed by this module are Exhibit and Exhibit_tracking.
Exhibit
Represents an exhibitor's presence at an event. It contains configuration for lead retrieval, such as:
event_exhibit_id_random: Unique identifier for the exhibit (primary key).code,name,description: Basic information about the exhibit.staff_passcode: For staff login.leads_api_access: Boolean indicating if lead retrieval API access is enabled.leads_custom_questions_json: Configuration for custom questions asked during lead capture.license_max,license_li_json: Details regarding lead retrieval licenses.
Exhibit_tracking
Represents a single lead captured by an exhibitor. It links an exhibitor to an attendee (badge) and stores details about the interaction:
event_exhibit_tracking_id_random: Unique identifier for the captured lead (primary key).event_exhibit_id_random: Links to theExhibitthat captured the lead.event_badge_id_random: Links to the attendee'sBadgeinformation.exhibitor_notes: Notes added by the exhibitor about the lead.responses_json: Responses to custom questions.- Contains duplicated badge information for convenience (e.g.,
event_badge_full_name,event_badge_email,event_badge_professional_title,event_badge_affiliations) to denormalize data for faster display.
Routing and Components
Routes
/events/[event_id]/(leads): The main entry point for the Leads module within a specific event, typically displays a list of available exhibits.+page.svelte: Renders the list of exhibits.+page.ts: Loads the data for available exhibits usingevents_func.handle_load_ae_obj_li__exhibit.+layout.svelte/+layout.ts: Provides a common layout and data for the module, including a submenu.
/events/[event_id]/(leads)/exhibit/[slug]: Dynamic route for managing leads for a specific exhibitor within an event. The[slug]corresponds toevent_exhibit_id_random.+page.svelte: The primary interface for an exhibitor, orchestrating lead capture and management components.+page.ts: Loads specificExhibitdata and associatedExhibit_tracking(leads) usingevents_func.handle_load_ae_obj_id__exhibitandevents_func.handle_load_ae_obj_li__exhibit_tracking.
Core Components (within src/routes/events/[event_id]/(leads)/exhibit/[slug]/)
leads_add_scan.svelte: Handles the process of adding new leads, either by scanning QR codes (badge) or manual entry.leads_list.svelte: Displays a sortable and filterable list of captured leads for the current exhibitor.leads_manage.svelte: Provides functionalities for managing individual leads, potentially including editing notes or qualification status.leads_payment.svelte: (If applicable) Component related to handling payment or license activation for lead retrieval features.leads_view_lead.svelte: Displays detailed information for a selected lead.
Technical Implementation
- Svelte v5 with Runes: The module adheres to Svelte v5's reactivity model, utilizing
$stateand$derivedfor reactive state management. - ID Convention (
id_random): All frontend operations, including routing and data fetching, consistently use the string-basedevent_exhibit_id_randomandevent_exhibit_tracking_id_randomas primary identifiers, rather than numericidvalues. - API Interaction: Data is fetched and synchronized with the backend FastAPI application through functions exposed in
src/lib/ae_events_functions.ts. - Local Database (Dexie.js): Data for
ExhibitandExhibit_trackingis cached in the browser's IndexedDB using Dexie.js, defined insrc/lib/ae_events/db_events.ts. This ensures data persistence and fast retrieval, especially for offline scenarios. - Styling: The UI is primarily styled using Tailwind CSS, having migrated from Skeleton UI to resolve previous rendering issues.