Portfolio

Media & Publishing: VECTOR SOLUTIONS

Vector Solutions er et selskap anerkjent i Polen og hele Europa som en pioner i teknologibransjen, som endrer ansiktet til moderne kommunikasjon. Selskapets ...

#Nettsider
Media & Publishing: VECTOR SOLUTIONS

#Prosjektoversikt

Vector Solutions hører til VECTOR-gruppen i Gdynia, som har vært i drift siden 1988 og begynte med forsterkere for kabel-TV-installasjoner. I 2001 rullet selskapet ut DOCSIS i polske kabelnett, fra 2007 har det utviklet telemetrisystemer, og i dag sysselsetter det over to hundre ingeniører innen programvare, systemer og maskinvare. Kundene er kabeloperatører, telekomselskaper og TV-kringkastere, altså kjøpere som leser et datablad før de i det hele tatt ser på en forside.

Prosjektet kom til oss i 2017, samme år som gruppen åpnet den rebrandingprosessen den lukket i 2019 med opprettelsen av VECTOR BLUE HUB. Selve gjennomføringen tok rundt seks uker.

#Kundens bakgrunn

#Ledende posisjon i bransjen

Vector Solutions har bygget posisjonen sin over lang tid, og fem trekk går igjen:

  • Europeisk tilstedeværelse: virksomhet i Polen og over hele Europa
  • Fokus på innovasjon: kontinuerlig utvikling av nye tekniske løsninger
  • Sektorekspertise: inngående kjennskap til kabel-, telekom- og mediebransjen
  • Partnerskapstilnærming: samarbeidsrelasjoner med sentrale aktører i markedet
  • Løsningsportefølje: et bredt spekter av kommunikasjons- og infrastrukturteknologi

#Hva dette betydde for nettstedet

Tretti år i maskinvarebransjen setter spor i innholdsmodellen. Løsningskatalogen spenner over produkter fra flere teknologigenerasjoner: noe står fortsatt i drift hos operatører, noe er under utfasing, og dokumentasjonen for begge deler må være tilgjengelig samtidig. Nettstedet kunne derfor ikke være en brosjyre med fem tjenestefliser. Det måtte bære en modell der én løsning har mange varianter, hver variant sitt eget datablad, og der databladet i noen tilfeller bare er synlig for en innlogget partner.

Den andre konsekvensen handler om leseren. En ingeniør hos en kabeloperatør leter etter én bestemt parameter, ikke etter en fortelling om innovasjon. Søk og filtrering på tekniske attributter veide derfor tyngre enn det visuelle laget, og layouten kom uansett fra kunden.

#Teknisk gjennomføring

#Plattformarkitektur

Stacken er WordPress med et eget tema, Redis som objekt-cache, Varnish foran som side-cache og Cloudflare ytterst som kantlag. Tre cache-nivåer i én installasjon høres ut som overdrivelse helt til man ser at hvert nivå svarer på sin type forespørsel: Cloudflare leverer statiske ressurser og anonyme sider, Varnish holder på de sammensatte katalogvisningene som koster et titalls databasespørringer å bygge, og Redis korter ned de samme spørringene for alt som i det hele tatt når fram til PHP.

Den arkitektoniske spenningen i prosjektet ligger nøyaktig der cache møter personalisering. Nettstedet skal skille en anonym besøkende fra en innlogget partner og fra en intern medarbeider, og vise tre forskjellige versjoner av samme URL. Kantcache misliker dette per definisjon, siden hele gevinsten kommer av å gi mange brukere den samme byten. Løsningen var å dele opp lagene: sideskallet og katalogen er felles og caches hardt, mens alt som avhenger av rolle hentes med en egen forespørsel etter innlogging og aldri havner i Varnish.

Tre komponenter bar mest av funksjonaliteten. Tilbudssystemet lar selgeren sette sammen en løsning av moduler, legge på prisnivåer og pakker og produsere et ferdig forslag ut av den samme strukturen, med kobling mot faktureringssystemene så et tilbud ikke må skrives inn på nytt et annet sted. Porteføljevisningen presenterer casene med filtrering og progressiv innlasting, slik at listen kan være lang uten at forsiden av den blir tung. Sanntidsintegrasjonen henter inn data fra eksterne kilder og oppdaterer utvalgte deler av innholdet uten at noen må redigere en side manuelt.

#Frontend-opplevelse

Layout og plassering av elementene kom fra kunden, så vår del var å oversette det til maler, responsiv oppførsel og en innholdsmodell som lar seg vedlikeholde etter lansering. Estetikken var ikke tema for diskusjon, rekkefølgen på informasjonen var det.

Grensesnittet tilpasser innholdet til brukerprofilen, lar besøkende filtrere løsninger langs flere akser samtidig og sette dem opp mot hverandre i et sammenligningsverktøy. Flerdimensjonal filtrering er nettopp der en teknisk katalog pleier å velte: hvert attributt som legges til, multipliserer antallet mulige kombinasjoner, og en naiv implementasjon spør databasen én gang per filter. Her regnes attributtsettet ut én gang og holdes i Redis, og et enkelt klikk på et filter laster ikke siden på nytt, det bytter bare ut resultatlisten.

Oppsettet er mobil-først og følger WCAG 2.1, noe som i en produktkatalog først og fremst betyr at spesifikasjonstabellene har overskrifter knyttet til cellene, og at filtrene kan betjenes fra tastaturet. En tabell med tekniske parametre uten den koblingen er for en skjermleser en rekke tall uten mening, og det er denne tabellen som er hovedinnholdet på siden.

#Backend-systemer

Innholdsstyringen bygger på egne innholdstyper for løsninger og caser, med et taksonominivå som holder variantene fra hverandre uten at redaktøren må huske navnekonvensjoner. Flerspråklig innhold ligger i samme struktur, og godkjenningsflyten og versjonshistorikken er der av en praktisk grunn: når et datablad endres, må det gå an å se hva som sto der før, fordi en operatør kan ha bygget en installasjon på den forrige versjonen.

Brukeradministrasjonen dekker rollebasert tilgang, partnerportalen, kundekontoene og sporingen av leads inn mot CRM, samt et rapporteringspanel. Integrasjonslaget knytter dette til eksterne API-er, CRM, verktøy for markedsføringsautomatisering, analyseplattformer og betalingsbehandling. Poenget med å samle alt dette bak ett lag er ikke ryddighet for ryddighetens skyld: det gjør at et system kan byttes ut uten at malene må skrives om.

#Avanserte funksjoner

#Dynamiske tilbudssystemer

Tilbudskonfiguratoren setter sammen løsninger modulært, håndterer prisnivåer, respekterer regler for geografisk tilgjengelighet, legger på kampanjer og rabatter og genererer kontraktsutkast fra det samme oppsettet. Flernivåprising er den delen som er enkel å beskrive og vanskelig å bygge, fordi den ikke er en tabell, men et sett regler som må rangeres: partneravtale slår listepris, volum slår partneravtale, en tidsbegrenset kampanje kan slå begge, og et geografisk unntak kan slå ut hele greina. Rekkefølgen må ligge ett sted i koden, ikke være spredt utover malene, ellers svarer to visninger ulikt på samme spørsmål.

For enkeltkunder finnes egne priser for partnere, volumberegning, white-label-alternativer, API-tilgang for de største kontoene og egne verktøy for kontoadministrasjon. Alt dette lever bak innlogging, og det er grunnen til at ingen av disse visningene kan mellomlagres på kantlaget.

#Sanntidsdashbord

Panelet viser bransjetrender, måltall for teknologiadopsjon, markedsindikatorer, konkurrentdata og egne varslingsregler, med filtrerbare visninger, sammenligning over tid, geografisk kartlegging, eksport og planlagte rapporter. Det interessante i et slikt panel er ikke hvilke tall det viser, men hvor ofte det spør etter dem. Oppdateringsfrekvensen er satt per datakilde etter hvor raskt tallet faktisk endrer seg, ikke som én verdi for hele panelet.

#Personalisert brukeropplevelse

Personaliseringen bygger på en profil sammensatt av bransje, rolle og tidligere interesse, med atferdssporing og forslag basert på den. Nytten er konkret i denne katalogen: en som har lastet ned tre datablad for samme produktfamilie, skal se den familiens nye varianter først. Kostnaden er like konkret, og den betales i cache, som beskrevet over.

#Ytelse og skalerbarhet

#Teknisk optimalisering

Hastighetsarbeidet dekker rendering på serversiden for rask første visning, lazy loading av innhold under falsen, bildeoptimalisering, inlining av kritisk CSS og gjennomgang av databasespørringer. Cache-strategien er lagdelt slik som beskrevet, med egne levetider per innholdstype, caching av API-svar, retningslinjer for nettleseren og en gjennomtenkt måte å invalidere på. Invalidering er den delen folk hopper over: en cache som aldri tømmes er et arkiv, og en som tømmes ved hver lagring er ingen cache.

Skalerbarheten hviler på infrastruktur som kan vokse under last, lastbalansering, leserepliker av databasen og kontrollert degradering, altså at de tyngste delene kobles ut før hele siden gir opp.

#Sikkerhetstiltak

Sikkerheten omfatter TLS overalt, jevnlige revisjoner og penetrasjonstesting, brannmur for webapplikasjoner, DDoS-beskyttelse og inntrengningsdeteksjon, med Wordfence og Cloudflare som de synlige delene av dette. Databeskyttelsen dekker GDPR-etterlevelse, kryptering både i ro og under overføring, logging av tilganger, sikkerhetskopier og en plan for gjenoppretting. I en katalog der deler av spesifikasjonen er omfattet av taushetsplikt, er tilgangslogging ikke en formalitet, men svaret på spørsmålet om hvem som faktisk lastet ned hva.

#SEO og digital markedsføring

#Søkemotoroptimalisering

Teknisk SEO omfatter schema-markup for organisasjon og tjenester, XML-sitemaps, en ren URL-struktur, canonical-tagger og en plan for intern lenking. Innholdsarbeidet består av landingssider per bransjesegment, en teknisk ordliste, optimaliserte caser og lengre fagtekster. Ordlisten er verdt et eget ord: i en bransje der samme forkortelse betyr ulike ting hos ulike leverandører, er en definisjonsside både til hjelp for leseren og det som gjør at søkemotoren forstår hva resten av katalogen handler om.

Den internasjonale delen dekker hreflang for flere språk, landsspesifikke innholdsvarianter og optimalisering for lokale søk. Med WPML i bunnen er hovedjobben ikke å oversette, men å holde oversettelsene knyttet til hverandre når en variant legges til eller fjernes på ett språk.

#Analyse og innsikt

Analysen har ikke stått stille siden lansering. Implementasjonen fra 2017 startet på Universal Analytics, fordi Google Analytics 4 ikke fantes den gangen, og migreringen kom først som en del av vedlikeholdet. Det er verdt å si rett ut, fordi prosjektbeskrivelser ofte oppgir dagens stack som den prosjektet startet med, og da blir det umulig å skille en designbeslutning fra en senere utskiftning påtvunget av leverandøren.

Utover selve verktøyet omfatter målingen egendefinerte hendelser, traktanalyse og kartlegging av brukerreiser. I en teknisk katalog er den mest verdifulle hendelsen ikke et innsendt skjema, men en nedlastet spesifikasjon: den viser hvilken produktvariant ingeniøren på den andre siden faktisk vurderer, lenge før noen skriver en forespørsel. Rapporteringspanelet dekker trafikk, leadsgenerering, innholdsytelse, SEO-plasseringer og sammenligning mot konkurrenter.

#Resultater og effekt

Forretningsresultater: sterkere generering av kvalifiserte leads, bedre engasjement på nettstedet, høyere brukertilfredshet, mer aktivitet i partnerportalen og ekspansjon inn i nye europeiske markeder.

Operasjonell effekt: mindre manuelt arbeid med tilbud, automatisert tilpasning av tilbud, sanntidsintegrasjon som fjerner manuelle oppdateringer, en selvbetjent partnerportal som avlaster support og raskere innholdsstyring.

Salgseffekt: flere henvendelser på nett, høyere konvertering av leads fra nettstedet, kortere salgssyklus, større avtaler og bedre kundelojalitet.

#Teknisk ytelse

Her sto det tidligere en rekke vurderinger av ytelse og driftssikkerhet: raske sideinnlastinger, sunne Core Web Vitals, høy oppetid, ingen sikkerhetshendelser, god effekt av cachen. Ingen av dem lar seg knytte til en måling i dag. Nettstedet gikk live i 2017, og det som eventuelt ble målt, forsvant sammen med en postkasse ingen lenger har tilgang til. En vurdering uten kilde er ikke en mildere utgave av et tall uten kilde, det er den samme saken uten mulighet for etterprøving, så den fjernes i stedet for å formuleres forsiktigere.

Det som lar seg si ærlig, er hva ytelsesarbeidet faktisk rettet seg mot. Først at katalogvisningene ikke skulle nå PHP i det hele tatt, og det er Varnish-laget sin oppgave. Deretter å korte ned databasearbeidet bak de visningene som ikke kunne caches, fordi de avhenger av rollen til den innloggede brukeren. Til slutt cache-treffraten, som på et nettsted av denne typen er den ene størrelsen som avgjør om de to første betyr noe: en bom fører forespørselen helt ned til opprinnelsen uansett hvor godt opprinnelsen er justert.

Driftssikkerheten hviler på reservemekanismene beskrevet lenger ned, ikke på en oppgitt oppetid. Et utfall i ett av de eksterne systemene svekker én seksjon, ikke siden, og det er en egenskap som er synlig i koden framfor et tall noen må ta på tro.

#Utfordringer og løsninger

#Utfordring 1: komplekse integrasjonskrav

Problem: å integrere mot flere eksterne systemer (CRM, ERP, fakturering, bransjedatabaser) uten å ødelegge ytelsen.

Løsning: et mellomlag der WordPress ikke snakker direkte med kundens systemer, men går gjennom en egen adapter per system. Datahentingen er asynkron, slik at et utilgjengelig CRM ikke blokkerer rendering av siden, og svarene mellomlagres med egen levetid per kilde, fordi en prisliste endrer seg en gang i kvartalet mens en lagerstatus endrer seg i løpet av en time.

Den viktigste beslutningen gjaldt hva som skjer når en integrasjon faller ut. Standardoppførselen i mange plugins er å vise en feil eller en tom seksjon, noe som på en salgsside ser ut som om hele nettstedet er nede. Her har hver adapter en reserveverdi: siste kjente svar fra cachen, og finnes ikke den heller, en statisk variant av seksjonen. Den besøkende ser da en side uten sanntidspanelet, ikke en feilmelding. Effekten er at et nede system blir en hendelse for overvåkingen, ikke for brukeren.

#Utfordring 2: ytelse ved sanntidsdata

Problem: å vise levende datastrømmer uten å påvirke sideinnlastingen.

Løsning: sanntidsdata blokkerer ikke første rendering. Siden kommer komplett uten dem, og panelet hentes etter innlasting gjennom egne endepunkter som er delt i kritiske og de som kan vente. Referansedata som sjelden endrer seg, ligger på klientsiden, slik at neste besøk ikke spør serveren om det samme igjen.

Oppdateringsintervallet velges ut fra hvor raskt tallet faktisk endrer seg, ikke satt til én verdi for hele panelet. Den forskjellen avgjør regningen: å spørre om alt hvert femte sekund ser imponerende ut i en demo og produserer trafikk noen betaler for i årevis, uten å gi leseren en eneste opplysning vedkommende ikke ville hatt et minutt senere.

#Utfordring 3: kompleksitet med flere brukerroller

Problem: å betjene ulike brukertyper (partnere, kunder, potensielle kunder, interne ansatte) med forskjellige behov og tillatelser.

Løsning: rollebasert tilgangskontroll med egne dashbordvisninger for partner, kunde og intern medarbeider, og en meny som skjuler det en rolle ikke har tilgang til i stedet for å lede til en avvisningsside.

Fellen i slike systemer er alltid den samme: rettigheter sjekkes i grensesnittet i stedet for ved dataene. En skjult lenke i menyen beskytter ikke mot at noen skriver adressen inn for hånd, og i en katalog der deler av spesifikasjonen er omfattet av en fortrolighetsavtale, er det ikke kosmetikk. Rollesjekken ligger derfor ved uthentingen av innholdet, og visningslaget gjenspeiler bare det som allerede er avgjort lenger nede. Den samme mekanismen bestemmer cache-nøkkelen, slik at en partner aldri får servert en side som ble bygget for noen med andre rettigheter.

#Utfordring 4: topper under store arrangementer

Problem: store produktlanseringer skapte kraftige trafikktopper.

Løsning: statiske ressurser leveres fra CDN, databasespørringene ble gjennomgått med tanke på dem som vokser lineært med størrelsen på katalogen, og ikke-kritiske operasjoner, som utsending av varsler eller oppdatering av søkeindeksen, ble lagt i kø og skjer utenfor brukerens forespørsel.

Lasttesten før en produktlansering kjørte vi på en produksjonskopi, ikke på en tom installasjon, og det er den viktigste setningen i dette avsnittet. Ytelsen til WordPress med en katalog på flere tusen varianter og et titalls integrasjoner har ingenting å gjøre med ytelsen til en fersk installasjon med et demotema. Flaskehalsen viste seg ikke å være PHP, men treffraten i cachen: ved en lansering går trafikken inn på én adresse ingen har besøkt før, så hele bølgen treffer backend samtidig. Å varme opp cachen før kunngjøringen publiseres er billigere enn å kjøpe kapasitet som står ubrukt resten av kvartalet.

#Løpende support og videreutvikling

#Vedlikeholdsprogram

Den tekniske ivaretakelsen består av overvåking og varsling, jevnlige sikkerhetsoppdateringer, periodiske ytelsesgjennomganger, lasttesting før større produktkunngjøringer og penetrasjonstesting. Innholdssiden dekker nye caser, oppdatering av produktporteføljen, integrasjon av bransjenyheter, SEO-vedlikehold og analyserapportering.

#Kontinuerlig forbedring

Funksjonsutviklingen planlegges i perioder, med brukertilbakemeldinger, vurdering av ny teknologi, iterasjoner på ytelse og oppdateringer som styrker sikkerheten. Den rådgivende delen handler om å forankre den digitale strategien, følge teknologitrender, sammenligne mot konkurrenter og arbeide med konvertering og brukeropplevelse.

#Oppsummering av teknologistacken

#Kjerneplattform

WordPress i siste stabile versjon, et eget Vector Solutions-tema, Advanced Custom Fields Pro for innholdsmodellen, en egen pluginpakke for de spesialiserte funksjonene og WPML for flerspråkligheten.

#Ytelse og sikkerhet

Redis for objekt-caching, Varnish for side-caching, Cloudflare som CDN og sikkerhetslag, Wordfence for plattformsikkerheten og WP Rocket for frontend-optimaliseringen.

#Integrasjoner

Salesforce CRM, HubSpot for markedsføringsautomatisering, betalingsgatewayer, faktureringssystemer og egne API-integrasjoner mot flere eksterne systemer. Google Analytics 4 kom til i vedlikeholdsfasen, mens lanseringen i 2017 gikk på Universal Analytics.

#Utviklingsverktøy

Git for versjonskontroll, Docker for lokalt utviklingsmiljø, GitHub Actions for CI/CD og en arbeidsflyt med eget testmiljø.

#Gjennomføringen i praksis

Hele arbeidet tok rundt seks uker, regnet fra omfangsanalysen til publisering. Layout og plassering av elementene kom fra kunden, så den fasen som i andre prosjekter spiser mest kalender, falt bort her. Tiden gikk i stedet til innholdsmodellen og integrasjonene, altså til de delene som ikke vises på en skisse, men som avgjør om nettstedet lar seg vedlikeholde etter lansering.

Den avgjørende beslutningen ble tatt i testfasen. Stiene som bærer trafikk, sjekket vi på en produksjonskopi, ikke på en ren installasjon med demodata. Forskjellen er vesentlig med en katalog av denne størrelsen: en spørring som svarer på et par titalls millisekunder med tjue produkter, kan vokse med to størrelsesordener når det står flere tusen varianter bak den, og på en tom installasjon ser ingen det. Det samme gjelder cachen, hvis effekt bare lar seg måle på en reell fordeling av besøk.

Etter lansering gikk prosjektet over i vedlikehold: overvåking og varsling, jevnlige sikkerhetsoppdateringer, periodiske ytelsesgjennomganger og lasttesting før større produktkunngjøringer. Det siste punktet er ingen formalitet, for det er nettopp lanseringene som sender trafikk inn på adresser ingen har besøkt før, altså akkurat det scenarioet der cachen ikke hjelper.

#Konklusjon

Vector Solutions-prosjektet viser hvordan en gjennomarbeidet WordPress-implementering kan fungere som den digitale ryggraden for et teknologiselskap som arbeider i front av europeisk telekommunikasjon. Ved å kombinere integrasjon av data fra eksterne kilder, personaliserte brukeropplevelser og en cache-arkitektur som tåler reell trafikk, fikk selskapet en plattform som både viser fram hva det lager og bærer det daglige arbeidet med partnere og tilbud.

Vector Solutions må ha katalogen, arbeidsflyten og systemene kunden allerede bruker, på samme nettsted. Uten de koblingene stopper siden når katalogen vokser.

Artikkel-FAQ

Ofte stilte spørsmål

Praktiske svar for å bruke temaet i faktisk arbeid.

SEO-readyGEO-readyAEO-ready4 Q&A
Hvilket omfang hadde prosjektet VECTOR SOLUTIONS?#
VECTOR SOLUTIONS er et prosjekt i kategorien Nettsider, levert i 2017.
Hvordan gikk leveransen for VECTOR SOLUTIONS?#
Byggingen tok rundt seks uker og gikk live i 2017. Layouten kom fra kunden. På den bygget jeg maler og innholdsmodell, og stiene som bærer trafikk testet jeg på en produksjonskopi, ikke på en tom installasjon.
Hva var hardest teknisk i VECTOR SOLUTIONS?#
Ytelse under reell trafikk og cache. VECTOR SOLUTIONS krevde et testmiljø nær produksjon.
Hvilken del av VECTOR SOLUTIONS kan gjenbrukes på et nytt bygg?#
Det som følger med er arbeidsmåten. Det som ikke følger med er innholdsmodellen og integrasjonene, skrevet mot én kundes data og en brief i kategorien Nettsider. Et nytt bygg starter med en omfangsanalyse, og tilbudet kommer etter den.

Trenger du FAQ tilpasset bransje og marked? Vi lager en versjon som støtter dine forretningsmål.

Ta kontakt