Bonafide Nordic

bonafide.se är en B2B-plattform som förmedlar sport- och musikresepaket via ett nätverk av resebyråer och agenter. Genom att samla evenemang, filtrering och bokningsflöde på ett ställe förenklar plattformen för partners att erbjuda ett brett utbud av upplevelseresor, utan att själva behöva bygga upp systemet från grunden.

Min roll i projektet

Jag har tagit fram hela hemsidan – både design och teknik – utifrån kundens referenser och önskemål.

Läs mer om projektets tekniska lösningar

Kund

Bonafide Nordic AB

Bonafide – B2B-plattform för sport- och musikresor

Bonafide Nordic AB driver en B2B-plattform som säljer sport- och musikresepaket, men aldrig direkt till slutkund. Istället registrerar sig resebyråer och agenter som partners på plattformen, och det är via dem som slutkunder når evenemangen och skickar in sina förfrågningar.

Det här upplägget ställer särskilda krav på tekniken: data om tusentals evenemang måste hållas uppdaterad, varje partner behöver kunna visa upp utbudet på sin egen webbplats, och besökare ska snabbt kunna filtrera fram rätt resa bland ett stort och ständigt föränderligt utbud.

Import från Google Sheets till WordPress

Bonafides evenemangsdata hanteras internt i Google Sheets, där ett team löpande lägger till och uppdaterar matcher, konserter och resor. Kalkylarket valdes medvetet som arbetsyta eftersom det gör det enkelt och snabbt för teamet att lägga in nya event, utan att behöva använda WordPress post för post-baserade logik, vilket spar mycket tid. En synkroniseringslösning med Google Apps Script skickar sedan automatiskt eventdatan vidare till WordPress via REST API:et med ett enkelt knapptryck.

Skriptet tolkar bland annat sport utifrån vilken flik i kalkylarket eventet ligger i, och slår upp arena, stad och land automatiskt från en separat arenadatabas. Ett inbyggt kontrollsystem ser till att bara ändrade rader synkas, vilket gör att stora datamängder kan hanteras snabbt utan onödig belastning på webbplatsen.

Avancerad filterfunktion

Med tusentals evenemang i systemet är sökbarhet avgörande. Jag har byggt en filterfunktion där besökaren kan kombinera flera urval samtidigt – sport, liga, lag, land och stad – och listan uppdateras dynamiskt utan att sidan behöver laddas om.

Resultaten laddas in sida för sida via AJAX, vilket gör att sidan känns snabb även när utbudet växer. Filtreringen är samma lösning som återanvänds i whitelabel-vyerna, vilket gör att partners kan erbjuda en lika smidig upplevelse på sina egna webbplatser.

Whitelabel-lösning för partners

Varje partner får ett unikt, permanent inbäddningsbart filter att lägga in på sin egen webbplats. Lösningen bygger på tokenbaserad autentisering, där varje agent kopplas till en egen inbäddningssida med möjlighet att styra utseendet – bakgrundsfärg, marginaler och knappfärg – direkt via URL-parametrar.

På så vis kan varje resebyrå erbjuda Bonafides fulla utbud som en naturlig del av sin egen sajt, utan att besökaren märker att innehållet egentligen hämtas från en extern plattform.

AI-genererade bilder

Kunden ville visa upp exempel på olika sporter och kulturevenemang på startsidan. Autentiska bilder från riktiga matcher och evenemang är dock sällan tillgängliga i vanliga stockfotobibliotek. De ägs ofta av fotografer, bildbyråer eller arrangörer och licensieras separat, ibland endast för redaktionell användning. Resultatet blir att traditionella stocktjänster främst erbjuder mer generiska sport- och evenemangsbilder med svag koppling till verkliga matchsituationer.

Lösningen blev att istället generera fram bilderna med AI, med påhittade lagnamn och sponsorer för att undvika verkliga varumärken och eventuella juridiska konsekvenser. Bilderna visar äkta actionkänsla från respektive sport, bara utan koppling till specifika lag, spelare och företag. Dessutom kunde jag hålla en genomgående stilkänsla över samtliga bilder så att uttrycket harmoniserade, vilket gav startsidan ett enhetligt och sammanhållet intryck.

Ai-genererade bilder, ett smart sätt att kostadseffektivt kunna visa illustrativa sportbilder.

Automatisk databasrensning

Eftersom evenemang ständigt tillkommer och går ut riskerade databasen att svälla med inaktuell information, vilket i sin tur påverkade prestandan i filterfunktionen. Lösningen blev ett städskript som körs varje natt via cron, och som automatiskt markerar och rensar bort utgångna evenemang baserat på deras datum.

För att undvika tunga databasfrågor vid varje sidladdning beräknas och sparas evenemangets status i förväg, så att filtreringen alltid kan slå upp aktuella evenemang snabbt – oavsett hur stor databasen växer.

Tekniska lösningar

Specifika tekniska lösningar som webbplatsen innehåller.

WordPress-import

Synkroniseringen mellan Google Sheets och WordPress är byggd för flexibilitet i hur mycket som ska uppdateras vid varje tillfälle. Användaren kan välja att synka samtliga flikar i kalkylarket, enbart den flik som är aktiv, eller enskilda markerade rader – vilket gör det möjligt att snabbt uppdatera enstaka evenemang utan att köra en full synkronisering. Ett inbyggt kontrollsystem håller reda på vilka rader som redan är uppdaterade, och en trigger nollställer statusen automatiskt så fort en rad redigeras, så att endast faktiska ändringar skickas vidare till WordPress.

Whitelabel-lösning

Varje partner får ett unikt, permanent token kopplat till sitt konto, vilket gör det möjligt att bädda in Bonafides filterfunktion direkt på sin egen webbplats utan inloggning för slutkunden. Sidan känner av att den körs fristående och validerar token innan innehållet visas. Utseendet kan styras via URL-parametrar – bakgrundsfärg, marginaler och knappfärg – så att inbäddningen kan anpassas efter varje partners egen grafiska profil. Tack vare tokenkopplingen kan Bonafide alltid härleda inkomna förfrågningar till rätt agent, oavsett var i partnerkedjan förfrågan skickades in.

Databasstädning

För att hålla filterfunktionen snabb även när utbudet växer körs en automatisk städrutin varje natt. Skriptet går igenom samtliga evenemang och markerar dem som aktiva eller inaktiva baserat på deras datum, samt raderar evenemang som passerat 30 dagar efter slutdatum. Genom att beräkna och spara statusen i förväg slipper filtreringen belastande databasfrågor vid varje sidladdning, vilket håller sökningen snabb oavsett hur många evenemang som samlats i systemet över tid.