Files
OSIT-AE-App-Svelte/src/routes/events/[event_id]/(leads)
Scott Idem 517c40bb11 Chore: silence debug logging across all pages (log_lvl → 0)
Set log_lvl to 0 in all pages and layouts that had it left at 1 or 2
from development. Also remove two hardcoded `log_lvl = 2` overrides
inside function bodies in reports_files.svelte and
reports_presenters.svelte that were forcing verbose output regardless
of the module-level setting.

Affected: launcher location page, leads pages (2), pres_mgmt reports (2),
presenter +page.ts, IDAA layouts (2), IDAA archives, IDAA recovery
meetings page, journals pages (2).
2026-03-10 14:23:28 -04:00
..

Aether (AE) Event Lead Retrieval Module (v3)

Overview

This is a major work in progress. It still needs the overall directory and file structure planned, documented, and created.

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. The actual DB table name is event_person_tracking. It was originally intended for generalized "tracking" of a person at an event. This would include other things like session attendance tracking, in addition to exhibitor lead retrieval. However, the initial implementation is focused solely on the lead retrieval use case for exhibitors.

Exhibit

Represents an exhibitor's presence at an event. It contains configuration for lead retrieval, such as:

  • event_exhibit_id: 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: Unique identifier for the captured lead (primary key).
  • event_exhibit_id: Links to the Exhibit that captured the lead.
  • event_badge_id: Links to the attendee's Badge information.
  • 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 using events_func.load_ae_obj_li__event_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 to event_exhibit_id.
    • +page.svelte: The primary interface for an exhibitor, orchestrating lead capture and management components.
    • +page.ts: Loads specific Exhibit data and associated Exhibit_tracking (leads) using events_func.load_ae_obj_id__event_exhibit and events_func.load_ae_obj_li__event_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 $state and $derived for reactive state management.
  • ID Convention (id): All frontend operations, including routing and data fetching, consistently use the string-based event_exhibit_id and event_exhibit_tracking_id as primary identifiers, rather than numeric id values.
  • 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 Exhibit and Exhibit_tracking is cached in the browser's IndexedDB using Dexie.js, defined in src/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.