Compatibility

Fanatically Bridge

Keep your old Fanatically page includes working while you transition to Luster’s embed system.

Overview

When to Use the Fanatically Bridge

The Fanatically Bridge is for fanlisting owners who have already imported their Fanatically data into Luster but have not yet updated their fanlisting page code. It lets your old Fanatically show-fanatically-*.php includes keep working by routing them through Luster instead.

Use the bridge when:

  • You have imported your Fanatically data into Luster and want your existing pages to keep working immediately.
  • You plan to migrate your pages to Luster’s embed system gradually, one fanlisting at a time, rather than all at once.
  • You want a zero-downtime transition — visitors see working forms and displays the entire time.
The bridge is temporary.

It is meant to keep things running while you update your pages to use Luster’s native embed/ files. Once all your pages use embeds directly, you can remove the bridge files.

Installation

Setup

Import your data first.

The Fanatically Bridge relies on the ID mapping table (lstr_listing_external_refs) that is created during the import process. If you have not imported your Fanatically data into Luster yet, the bridge will not be able to resolve your listings. Run the Fanatically import before setting up the bridge.

  1. Download the Bridge

    In the Luster admin panel, go to Admin → Collective → Migration & Bridges and click Fanatically Bridge. This downloads a ZIP file.

  2. Unzip into Your Fanatically Folder

    The ZIP contains luster-bridge.php — already pre-configured with your Luster install path, no editing needed — plus every show-fanatically-*.php wrapper file, covering per-listing, collective, and KIM includes. Extract them into your Fanatically installation folder, replacing the original files.

  3. Done

    Your existing fanlisting pages will now render through Luster instead of Fanatically. No other changes are needed — the bridge auto-detects which listing to serve from Fanatically’s own $fanatically_listing_id variable.

If a page isn't resolving correctly:

See Troubleshooting below — the download fills in luster-bridge.php's path automatically, so this is only worth checking if something looks wrong after moving the files to a different server or path.

Under the Hood

How It Works

When a visitor loads one of your fanlisting pages, the following happens:

  1. Your page sets $fanatically_listing_id

    Your existing fanlisting page sets a $fanatically_listing_id variable, which is the numeric listing ID used by Fanatically.

  2. The page includes a show-fanatically-*.php file

    Your page includes a file like show-fanatically-join.php. Because you replaced the originals with bridge wrappers, it now loads the Luster bridge version instead of the old Fanatically code.

  3. The bridge resolves the listing

    The bridge reads $fanatically_listing_id and looks it up in the lstr_listing_external_refs table (with source fanatically) to find the corresponding Luster listing ID. This mapping table is created automatically during the Fanatically import.

  4. Luster renders the output

    The bridge passes the resolved listing ID to the corresponding Luster embed file (e.g. embed/join.php), which renders the form or display and outputs the HTML.

Reference

Supported Wrappers

The bridge includes replacement wrappers for every Fanatically show-fanatically-*.php file that has a real Luster equivalent. Each wrapper routes to the equivalent Luster embed.

Fanatically FileLuster EmbedWhat It Renders
show-fanatically-stats.phpembed/stats.phpListing statistics
show-fanatically-join.phpembed/join.phpJoin form
show-fanatically-members.phpembed/members.phpMember list
show-fanatically-update.phpembed/update.phpMember sign-in / update / delete membership
show-fanatically-delete.phpembed/update.phpAlso routes to the update embed — it already handles membership deletion as part of the same flow, so there is no separate Luster embed to point to
show-fanatically-rules.phpembed/rules-gate.phpMembership rules
show-fanatically-affiliates.phpembed/affiliates.phpAffiliates display + apply form (see Known Differences below)
show-fanatically-codes.phpembed/codes.phpFan codes display + donation form
show-fanatically-lostpass.phpembed/reset.phpPassword recovery (see Known Differences below)
show-fanatically-kim.phpembed/kim-list.php + embed/kim-signup.phpKIM member list and sign-up form, combined (see Known Differences below)
Fanatically FileLuster EmbedWhat It Renders
show-fanatically-owned.phpembed/owned.phpAll owned listings
show-fanatically-joined.phpembed/joined.phpAll joined listings
show-fanatically-wishlist.phpembed/wishlist.phpWishlist (requires the Wishlist add-on)
show-fanatically-latest-owned.phpembed/latest-listing.phpLatest owned listing spotlight (see Known Differences below)
show-fanatically-latest-joined.phpembed/latest-joined-listing.phpLatest joined listing spotlight (see Known Differences below)
show-fanatically-random-owned.phpembed/random-listing.phpRandom owned listing
show-fanatically-random-joined.phpembed/random-joined-listing.phpRandom joined listing
show-fanatically-collective-stats.phpembed/collective-stats.phpCollective-wide aggregate stats
show-fanatically-adopt.phpembed/adopt.phpAdoption listings + application form — always collective, since it never filters to one listing in either Fanatically or Luster
Reference

Not Supported

Two Fanatically files have no Luster equivalent to bridge to:

Fanatically FileWhy Not
show-fanatically-head.phpNot an HTML embed — it sets PHP variables ($fan_title, $fan_description, etc.) for use in your own <head> section. Luster has no equivalent “metadata as variables” embed. The bridge file still defines all the expected variables as safe empty values so existing templates do not break, but they will be blank.
show-fanatically-whatis.phpA static “what is a fanlisting” explainer paragraph. Luster has no equivalent embed — the bridge file for this one just renders a comment and nothing else.
Worth Knowing

Known Differences From Fanatically’s Original Behavior

These are not bugs — they are places where Luster’s embed does not work quite the same way as Fanatically’s original file. Worth knowing about before you rely on them:

  • Lost password (show-fanatically-lostpass.php): Fanatically generates a brand-new password and emails it to the member directly, in one step. Luster’s reset embed uses a two-step flow instead — the member requests a reset, gets an emailed link, then sets their own new password on a second page. Both end with the member able to log back in, but the actual experience is different.
  • KIM (show-fanatically-kim.php): Fanatically’s combined page preselects the current listing in the sign-up form’s dropdown. Luster’s sign-up form has no way to default that dropdown to a specific listing, so visitors will need to pick it manually even when arriving from that listing’s own page.
  • Affiliates (show-fanatically-affiliates.php): Fanatically guarantees its apply form appears somewhere on the page even with a customized display template. Luster’s affiliates embed only shows the apply form inline when the affiliate section template references the right tokens — if you have customized that template and removed them, the apply form will not appear via this bridge. This only affects sites with a customized affiliate template; Luster’s default template always includes the tokens.
  • Latest owned / latest joined: “latest” does not mean quite the same thing in both. Fanatically picks by the highest internal database ID — effectively “most recently added”. Luster orders by a business date field instead: Latest owned orders by the listing’s opened date and only considers listings that actually have one set; Latest joined orders by date joined, but listings with no date set are still included, sorted after everything that has one. These usually agree with Fanatically’s ID-based pick, but can diverge if a date is backdated, left blank, or edited after the fact.
Advanced

Manual Override

If the bridge cannot auto-detect your listing from the $fanatically_listing_id variable, or if you want to skip the ID mapping lookup entirely, you can set the Luster listing ID manually before the include.

PHP
$luster_listing_id = 5;
require 'show-fanatically-join.php';

When $luster_listing_id (or $luster_fanlisting_id) is set before the include, the bridge uses it directly and skips the $fanatically_listing_id lookup.

CSS

Styling

The bridge renders forms and displays using Luster’s HTML output, which means the output uses Luster’s CSS classes (fl-form, fl-field, fl-input, etc.) instead of Fanatically’s old classes.

To style the output, you have two options:

  • Add Luster’s public stylesheet to your fanlisting pages. This gives you sensible defaults immediately — see the Baseline Stylesheet reference for the one-time setup line and the ?luster_css link it enables (used instead of a direct path, so your pages don't expose your server's real install path).
  • Write your own CSS targeting the fl-* classes. See the CSS Class Migration Reference for the full mapping of old Fanatically class names to Luster equivalents.
Old CSS will not apply.

If you had custom styles targeting Fanatically class names, those styles will have no effect on the bridge output. You need to update them to target the equivalent fl-* classes.

The bridge always renders through Luster’s own templates — it doesn’t carry over your old Fanatically display/email template customizations. If you want those translated instead of rebuilt from scratch, see Bringing Over Your Templates on the import page.

Help

Troubleshooting

“Luster compat: listing not found” message appears

This means the bridge could not match $fanatically_listing_id to a Luster listing. The most common cause is that the Fanatically data has not been imported into Luster yet. The bridge relies on the lstr_listing_external_refs table, which is populated during the import. Run the Fanatically import first, or set $luster_listing_id manually if you are not using the import wizard.

This message will not appear for show-fanatically-affiliates.php, show-fanatically-codes.php, or show-fanatically-adopt.php — those support a collective/site-wide mode with no listing set at all, matching Fanatically’s own files.

Blank output (nothing renders)

Check that luster-bridge.php is in the same folder as the wrapper files, and that the LUSTER_PATH constant inside it points to the correct absolute server path of your Luster installation. The path should point to the Luster root directory (the folder containing bootstrap.php), not the public/ subdirectory.

PHP errors or white screen

Make sure your server meets Luster’s requirements (PHP 8.1+). Also verify that the Luster installation itself is working by visiting the admin panel directly.

KIM or Wishlist wrappers show nothing

These wrappers require the corresponding Luster add-on to be installed. Go to Admin → Add-ons in the Luster admin panel and make sure the KIM List or Wishlist add-on is installed.

Forms submit but nothing happens

The bridge forms submit to Luster’s public endpoint. Make sure Luster’s app_url and embed_base_url config values are set correctly, and that the Luster public/ directory is accessible from the web.

Styles look wrong

The bridge outputs Luster HTML, not Fanatically HTML. Your old Fanatically CSS classes will not apply. Add Luster’s public stylesheet to your pages, or update your CSS to target fl-* classes. See the CSS Class Migration Reference.