TPUS — eine Plattform, viele touristische Regionen.
Ein abobasiertes Tourismusportal, das touristische Inhalte aus dem discover.swiss-Netzwerk bündelt — produktiv u.a. bei Uri Tourismus, Schwyz Tourismus, der Erlebnisregion Mythen und ein paar kleineren Regionen im Einsatz.
Ausgangslage
Tourismusorganisationen pflegen Angebote, Touren und Events in vielen Quellen. Eine eigene, gepflegte Website ist teuer — und veraltet schnell.
Lösung
TPUS ist eine abobasierte Plattform: Inhalte aus dem discover.swiss-Netzwerk (Guidle, Outdooractive und weitere Quellen) fliessen automatisch ein, die Region pflegt nur das Eigene. Eine Codebasis, beliebig viele Regionen — jede mit eigenem Auftritt.
Ergebnis
Produktiv im Einsatz — live u.a. bei Uri Tourismus, bei Schwyz Tourismus und der Erlebnisregion Mythen. Neue Regionen gehen in Tagen statt Monaten online.
Mehr zur Plattform auf der Produktseite: TPUS — Tourismusportal.
Wie wir dieses Projekt einordnen.
Mehrmandantenfähige Plattform mit drei automatisierten Daten-Integrationen, die laufend synchron gehalten werden.
Touristische Inhalte werden automatisch importiert und aktuell gehalten — die Region pflegt nur ihre eigenen Inhalte.
Ein eigenständiges Produkt statt Einzelprojekt: Skalierung über viele Regionen mit einer Codebasis.
- discover.swisstouristische Stammdaten
- GuidleEvents & Veranstaltungen
- OutdooractiveTouren & Routen
Ein Blick auf ein kniffliges Detail.
private function pushToQueue(string $id, string $action)
{
// Azure Storage credentials
$connectionString = App::env("DISCOVER_SWISS_QUEUE_CONNECTION_STRING");
$queueName = "craft-cms";
// Message payload
$timestamp = date("c"); // ISO 8601 format
$messageData = [
'id' => $id,
'timestamp' => $timestamp,
'action' => $action
];
$messagePayload = base64_encode(json_encode($messageData));
try {
// Create queue client
$queueClient = QueueRestProxy::createQueueService($connectionString);
\Craft::info("Pushing $id to queue \"$queueName\" ... ", __METHOD__);
// Send message to queue
$result = $queueClient->createMessage($queueName, $messagePayload);
} catch (ServiceException $e) {
\Craft::error("Error sending message: " . $e->getMessage(), __METHOD__);
}
}
Wie das System aufgebaut ist.




