Appearance
LGL Sync
Little Green Light (LGL) is where Upstate International tracks people, memberships, and donation history for reporting and stewardship. Keeping LGL current is essential for clean reports, accurate outreach, and confidence that every payment is categorized correctly.
UIEngine feeds LGL automatically. UIEngine is where purchases and account updates happen, and LGL is the long-term source of truth for reporting and relationship management. This page explains what updates are sent, when they run, what each status means, and what staff should do when something does not go through.
What Syncs to LGL
People (Contact Records)
This sync updates the person in LGL when someone creates or updates an account in UIEngine.
What triggers it:
- A person creates an account through UIEngine.
- A person’s profile/contact details are updated.
- A purchase flow needs a person record in LGL and one is missing or out of date.
What information goes to LGL:
- First name and last name.
- Email address.
- Phone number.
- Mailing address (street, city, state, postal code, country).
Important conditions staff should know:
- The system first looks for an existing person in LGL using name + email.
- If a match is found, it updates that existing person in LGL.
- If no match is found, it creates a new person in LGL.
- If the linked LGL record has a different email than UIEngine, the old link is dropped and the system tries matching again before creating a new record.
- UIEngine also stores a unique identifier on each LGL record that links it back to the UIEngine account. This helps the system find the right person even if a name has a slight variation, and prevents creating duplicate records when the same person is matched twice.
TIP
If a person has duplicate records in LGL, contact Andrew. Matching is strong, but it can still mislink records when names or emails are not perfectly aligned.
Memberships
This sync keeps membership history in LGL aligned with what was purchased or renewed in UIEngine.
What triggers it:
- A membership purchase is completed.
- A membership renewal is completed.
- A membership update flow marks a member as active with new dates.
What information goes to LGL:
- Membership level/tier mapping.
- Membership start date.
- Membership end date.
- Current/active membership state.
- Internal note text that this record came from website sync.
Important conditions staff should know:
- If the person is not yet linked in LGL, the person record is synced first.
- When a new membership is written in LGL, the prior active membership record is automatically closed first.
- Scholarship members can be added to scholarship groups in LGL (full scholarship group or partial scholarship group), based on scholarship level in UIEngine.
- After someone buys a membership, the system queues two separate sync tasks: one to record the payment in LGL as a gift, and one to create or update the membership record. They run one after the other—payment first, then membership. The membership update is not handled inside the payment sync step.
INFO
When a new membership is recorded in LGL, the previous membership record is automatically closed. This is normal and expected.
Payments as Gift Records
This sync creates the donation/gift record in LGL whenever a payment is completed in UIEngine.
What triggers it:
- A completed membership payment.
- A completed class payment.
- A completed event payment.
- A completed donation.
- A completed cart checkout containing one or many items.
What information goes to LGL:
- Payment amount.
- Payment date.
- Payment method category mapping.
- Fund assignment.
- Campaign name assignment (when configured).
- Internal note text tying the LGL gift record back to the UIEngine payment.
Gift type + fund mapping by payment category:
| Payment Category | LGL Fund | LGL Gift Type |
|---|---|---|
| Membership payments | Membership | Other Income |
| Language class enrollments | Language Classes | Other Income |
| Event registrations | Cultural Event | Other Income |
| Donations | General Donation | Gift |
| Cart checkout with mixed items | Split across the matching funds above | Other Income or Gift per line, matching each item’s category |
Membership, class, and event payments are classified as Other Income because they are exchanged for a product or service — not charitable gifts. Donations are classified as Gift because they are voluntary contributions. These values are configurable at https://ui-admin.fly.dev/admin/settings/lgl under Fund & Campaign Mappings.
How payment types map to funds:
- Membership payments -> Membership fund.
- Class enrollment payments -> Language Classes fund.
- Event registration payments -> Cultural Event fund (exact label follows your Settings mapping).
- Donations -> General Donation fund (exact label follows your Settings mapping).
- Cart purchases with mixed items -> split into separate gift records, each sent to the right fund.
Important conditions staff should know:
- Only completed payments are sent.
- Pending payments are not sent.
- Failed payments are not sent.
- If a payment was already sent, the system does not send it again unless staff uses a forced re-send option in the LGL tools.
- For membership purchases, the gift record and the membership record are sent in two separate sync tasks, in order (payment first, then membership). See Memberships above for how that works.
INFO
Only completed payments sync. Pending or failed payments do not create gift records in LGL.
Class Enrollments
Class enrollments are represented in LGL through the related payment gift record, not as a separate class enrollment record.
What triggers it:
- A class enrollment is paid.
What information goes to LGL:
- The payment amount and date.
- The fund mapping for Language Classes.
Important conditions staff should know:
- The class enrollment itself is tracked in UIEngine.
- In LGL, the financial representation is the gift record tied to the class fund.
- There is not a separate standalone “enrollment object” created in LGL for classes.
INFO
You may see a separate sync task appear in the queue labeled “enrollment” — this is a housekeeping task that confirms the account link and records an audit entry. It does not create a second record in LGL. The class still appears in LGL as the gift record from the payment.
Event Registrations
Event registrations follow the same financial pattern as classes.
What triggers it:
- An event registration is paid.
What information goes to LGL:
- The payment amount and date.
- The fund mapping for Events.
Important conditions staff should know:
- Event registration value appears in LGL through the related gift record.
- There is no separate standalone event registration record created in LGL; the financial record is the source in LGL.
Family Relationships
This sync links family members in LGL so related people are connected correctly.
What triggers it:
- A family member is linked to a primary account in UIEngine.
What information goes to LGL:
- The primary person in LGL.
- The related family member in LGL.
- The relationship type configuration selected for this relationship.
Important conditions staff should know:
- Both people must exist in LGL first; if one is missing, UIEngine syncs that person record first.
- If the relationship was already recorded in LGL, it is skipped to avoid duplication.
When Sync Happens
- Automatic processing runs every 30 seconds.
- During each run, pending sync tasks are picked up and sent to LGL.
- The system respects LGL request limits (no more than 300 requests per 5 minutes, with spacing between requests).
- Staff do not need to run manual sync for normal day-to-day activity.
TIP
There is usually a short delay (often under a minute) between a completed purchase and the update appearing in LGL. This is normal.
How to Check Sync Status
The LGL Sync Hub (/admin/system/lgl)
Use https://ui-admin.fly.dev/admin/system/lgl as your main LGL dashboard.
What you can see:
- Users tab: whether a person has linked to LGL.
- Payments tab: unsent and sent payments, including LGL gift record links.
- Memberships tab: membership sync state.
- Relationships tab: family relationship sync state.
- Queue tab: LGL sync task list with status, attempts, and errors.
- Connection banner showing whether LGL is connected.
What you can do:
- Use Test Connection.
- Run manual send actions such as Sync Now or Queue from the relevant tab.
- Refresh views to confirm a status change.
The Sync Task List (/admin/sync)
Use https://ui-admin.fly.dev/admin/sync for all system sync tasks.
What you can see:
- All sync tasks across systems — LGL jobs and WordPress migration/sync jobs can both appear in this queue (use filters to narrow down if the page offers them).
- Task status (pending, running, succeeded, failed).
- What type of record each task was sending.
- Attempt count and latest error text.
What you can do:
- Filter to failed tasks.
- Use Retry on a failed task.
System Health (/admin/system)
Use https://ui-admin.fly.dev/admin/system as a quick daily snapshot.
What you can see:
- Whether LGL is connected.
- Pending and failed task counts.
- Quick links into deeper pages for sync checks.
What Sync Statuses Mean
| Status | What it means | What to do |
|---|---|---|
| Pending | Waiting to be sent to LGL | Nothing. It should run automatically on the next cycle. |
| Running | Being sent to LGL right now | Nothing. Wait for completion. |
| Succeeded | Successfully sent to LGL | Nothing. All good. |
| Failed | Could not be sent to LGL | Follow the steps in “What to Do When Sync Fails.” |
| Cancelled | Permanently unresolvable task that was stopped automatically | Nothing. Informational only. |
What to Do When Sync Fails
Try retrying first
- Go to https://ui-admin.fly.dev/admin/sync.
- Filter to failed tasks.
- Find the failed task.
- Click Retry.
- Refresh and confirm whether it changes to succeeded.
A single failed task often clears with one retry (for example, a brief service interruption).
INFO
Not all failed sync tasks are the same:
- Some failures are temporary and recover with one retry (for example, a brief network issue or LGL being temporarily unavailable).
- Other failures are permanent and will keep failing until the underlying issue is fixed.
Common permanent-failure patterns:
- The task points to a person record that no longer exists in UIEngine.
- A payment or enrollment was removed before sync finished.
- A required mapping is missing in Settings -> LGL (for example, a fund mapping or membership level mapping).
From version 1.1 onward, permanently unresolvable tasks are automatically marked Cancelled instead of being retried forever. In the sync task list, Cancelled tasks are informational and require no action.
When to contact Andrew instead
Contact Andrew if:
- Many tasks fail at the same time.
- The same task fails repeatedly after multiple retries.
- The LGL connection in System pages shows not connected.
- You see a pattern (for example, membership tasks failing while payment tasks succeed).
- A task has already failed more than twice after retrying.
If a task fails more than twice after retrying, stop retrying and contact Andrew. Repeated retries on a permanent failure do not fix the issue and add noise to the sync task list.
WARNING
Do not change settings in https://ui-admin.fly.dev/admin/settings/lgl unless Andrew specifically directs you to. Incorrect settings can stop syncing and can send payments to the wrong fund.
What Sync Does NOT Do
- Sync is one-way only: UIEngine -> LGL.
- Changes made in LGL do not flow back into UIEngine.
- Deleting a record in UIEngine does not delete it from LGL.
- If contact details are changed in LGL only, later sync from UIEngine can overwrite those details.
INFO
When a person’s contact information is updated in UIEngine (name, email, phone, or address), the next sync updates that same person’s record in LGL. The system aims to update existing contact information rather than adding duplicates. If you notice duplicate email or phone entries on a constituent record in LGL, contact Andrew to investigate.
INFO
If you need a permanent change to a person’s contact details, make the change in UIEngine so future sync keeps it consistent.
LGL Sync Settings (Andrew’s Territory)
Staff should know these controls exist, but should not edit them.
These settings are managed at **https://ui-admin.fly.dev/admin/settings/lgl**:
- Fund mapping (which payment type goes to which fund in LGL).
- Membership level mapping (Gateway, Crossroads, Patron -> matching levels in LGL).
- Payment type mapping (how payment methods are categorized in LGL).
- LGL connection details (credentials and environment mode).
- Relationship type configuration and sync behavior switches.
WARNING
These settings should only be changed by Andrew. A wrong fund mapping can put payments into the wrong LGL fund and affect reporting until corrected.
Quick Reference Table
| If you want to... | Go to... |
|---|---|
| Check if a person’s record synced to LGL | https://ui-admin.fly.dev/admin/system/lgl -> Users tab |
| Check if a payment created a gift record in LGL | https://ui-admin.fly.dev/admin/system/lgl -> Payments tab |
| See all failed sync tasks | https://ui-admin.fly.dev/admin/sync -> filter by failed |
| Retry a failed sync task | https://ui-admin.fly.dev/admin/sync -> find task -> Retry |
| Check overall LGL connection health | https://ui-admin.fly.dev/admin/system |
| Check LGL sync configuration | https://ui-admin.fly.dev/admin/settings/lgl (Andrew only) |
Need help? Contact Andrew.