Connecting your own services

Lumina Edu has five seams — five places where it hands a visitor to a service somebody else runs. It never runs one of those services itself, and it never embeds one: no third-party script, frame, map tile, font or tracker is loaded on any page, whatever you connect. A seam is a link, a name and a sentence that says where the link goes.

There is one integration that needs nobody at all: a dated session hands out its own calendar file. That one works the moment you install the ZIP.

The five seams

Seam Where you fill it in What appears on the site
Registration Settings → Site details → How people register, and per programme and per session The main action on a programme, a session and the final action band
Consultation Settings → Site details → How people register, and per programme "Book a consultation" wherever no registration address applies
Contact form Settings → Site details → Where else this site hands over The contact action, where your theme places the seam block
Directions Settings → Site details → Where else this site hands over A "Get directions" link beside your address — a link, never a map
Mailing list Settings → Site details → Where else this site hands over A "Join the mailing list" action

Each seam stores two things: an address, and the provider's name as you would say it out loud. Fill in both and the site tells a visitor where they are going before they go:

Register for this session Registration continues on Northline Bookings. This site does not process enrolment or payment.

Fill in only the address and the same control appears with the anonymous wording it has always had. Fill in neither and no control is rendered at all — not a greyed-out button, not a link to nowhere. An empty seam is silent.

What is not a seam, and why

These were considered and left out on purpose. If you need one, it is a link you add to a page yourself; nothing here pretends to manage it.

Which address wins

  1. The dated session's own address.
  2. The programme's address.
  3. Site details.
  4. For registration and consultation only: this site's own consultation page, so the action is never a dead end. That case prints no "continues on…" sentence, because nothing continues anywhere — the visitor stays here.

A session or programme address with no name of its own borrows the Site details name only when it is on the same host. A programme that books through a different provider stays honestly anonymous rather than wearing a name that is not that provider's.

Recipes

Each recipe is the same four questions. No product is named as compatible anywhere in this documentation: compatibility is a dated test on an exact version, and where one has been run it is recorded in Tested versions. What follows describes the shape of the thing to look for.

A booking or scheduling tool

The shape: a hosted page, one address per bookable thing, that opens a chooser and confirms by e-mail.

A form plugin, or a hosted form

The shape: either a page on your own site that a form plugin renders, or a page on the form service's domain.

A CRM or a mailing list

The shape: a hosted sign-up page, with its own consent text and its own unsubscribe link.

A calendar or scheduling page

The shape: a published calendar somebody can browse, or a per-person scheduling page.

Add to calendar: the integration with no account

Every session that has a published start date offers Add to calendar — in the session ledger and in the decision panel beside the main action. The file is generated by the plugin itself at ?lue_calendar=<session id>, served as text/calendar with the session's own file name. No account, no configuration, no request leaves your site, and it works on a plain permalink setting.

The event carries the start date, the programme title as its summary, the session's location text, and a link back to the programme page.

It is an all-day event, and that is deliberate. A session stores a date and a schedule label written for a person — "Tue & Thu · 18:30–20:00". Turning that sentence into a machine-readable instant would mean guessing an hour and a timezone, and a wrong hour in somebody's calendar is worse than no hour at all. The entry therefore covers the whole day, and the schedule label travels in the event's description, where a person reads it. Publish an end date on the session and the entry spans the whole run.

To test it: open a programme with a dated session, press Add to calendar, and open the downloaded file. Your calendar should show the programme title on the session's start date.

Destination profiles

A destination profile is a named map of seam to name and address. It exists so that a demonstration site and a real site can be the same installation in two states rather than two different builds.

Choose the profile in Settings → Site details → Where else this site hands over → Destination profile, or pin it where no editor and no importer can reach it by putting this in wp-config.php:

define( 'LUMINA_EDU_CORE_DESTINATION_PROFILE', 'placeholder' );

A profile's shape, for anyone registering one:

add_filter(
	'lumina_edu_core_destination_profiles',
	function ( $profiles ) {
		$profiles['my-demo'] = array(
			'label' => 'My demonstration services',
			'live'  => true,
			'seams' => array(
				'registration' => array(
					'url'  => 'https://booking.example.org/demo',
					'name' => 'Example Bookings',
				),
			),
		);
		return $profiles;
	}
);

Seams a live profile does not name fall through to Site details as usual, so a profile can supply one destination and leave the rest alone.

Before you launch

  1. Replace every demo address in Site details with your own, or empty the field.
  2. Give every seam you use a provider name, so the sentence beside the button says where it goes.
  3. Check the destination profile is the one you mean.
  4. Click every action on a published page, in a private window, and watch where it lands.
  5. Recheck the links whenever a provider changes — nothing on this site can notice that for you.