Dokumentation

Shopify-apparna på jaktarjakt.se och driftlagret runt dem.

Uppdaterad 2026-07-20. Täcker Feedreader, Vidlib och drift (backup/övervakning). Kan utökas med portalens övriga delar.

Översikt

Vad som körs och var.

Två Shopify-appar driver videobiblioteket och dropship-sortimentet på jaktarjakt.se (butik te30e0-uv.myshopify.com). Båda körs på AWS-servern under processhanteraren PM2 och startar om automatiskt vid krasch eller serveromstart.

AppVad den görPort
feedreaderHämtar leverantörernas produktflöden och håller produkter, lager och pris i synk i Shopify. Automatiserar order till leverantör.3010
wix-migrator (Vidlib)Videobiblioteket: synkar filmer från Vimeo/YouTube, bygger video- och kurssidor, grid med sök och filter.3011

Runt apparna finns ett driftlager: nattlig backup, en övervakning som larmar om något går ner, och automatisk omstart via PM2. Se avsnittet Drift.

Feedreader - Dropship-flöden

Leverantörernas XML-flöden blir produkter i Shopify.

Feedreader läser produktflöden (XML) från dina dropship-leverantörer och skapar eller uppdaterar motsvarande produkter i Shopify. Den håller lagersaldo och pris uppdaterade, och när en order kommer in skickas den vidare till rätt leverantör enligt reglerna du satt upp.

Hur synken fungerar

  • Schemalagd synk körs var 15:e minut (kan ställas per butik).
  • Synken kör bara skarpt när miljövariabeln SYNC_MODE=active. Det är en säkerhetsspärr: en test- eller stagingkopia kan aldrig råka skriva till den riktiga butiken.
  • Bara det som ändrats skrivs till Shopify (oförändrade varianter hoppas över).

Så lägger du till ett flöde

  1. Öppna Feedreader-appen från Shopify admin.
  2. Under Lägg till leverantörsflöde: fyll i namn, leverantör och flödets URL.
  3. Klicka Sync för att köra direkt, eller vänta på nästa schemalagda körning.
Bra att veta: priser och lager kommer direkt från leverantörens flöde. Det finns ännu inget påslags- eller marginalsteg, det leverantören anger blir Shopify-priset.

Produktkategorier

Rena kategorier i stället för leverantörernas röriga sökvägar.

Tidigare skrev leverantörsflödena in hela sökvägen i Shopifys produkttyp, t.ex. Accessoarer / Bälten & Hängslen / Bälten. Det gav 144 olika värden och ett djupt nästlat, oanvändbart Produkttyp-filter.

Nu översätter Feedreader varje sökväg till en ren struktur i två nivåer, plus kön och den ursprungliga sökvägen sparad separat:

FältVadExempel
Produkttyp huvudHuvudkategori, 24 rena värdenByxor, Jackor, Accessoarer
custom.underkategori underUnderkategori, 37 värdenJaktbyxor, Huvudbonader
custom.konKön, för separat filterDam, Herr
custom.category_pathUrsprunglig sökväg (referens)Byxor / Jaktbyxor / …

Kön vägs alltså inte in i kategorin: Dam / Jaktbyxor och Herr / Jaktbyxor blir båda Byxor. Så slipper filtret dubbletter, och kön kan bli ett eget filter.

Så visas det för kunden

I appen Search & Discovery i Shopify visas två filter sida vid sida: Produkttyp (huvudkategori) och Kategori (underkategori). Produkttyp-filtret finns redan. För att slå på Kategori-filtret: lägg till ett filter på metafältet custom.underkategori (och ev. custom.kon som Kön).

Hela katalogen skrivs om automatiskt allt eftersom produkterna synkas. Inget behöver köras manuellt.

Leverantörsregler

Hur en order skickas vidare till leverantören.

När en kund köper en dropship-produkt grupperar Feedreader orderraderna per leverantör och skickar iväg dem enligt den regel du satt upp för varje leverantör.

  • E-post eller SFTP: ordern skickas som fil/meddelande till leverantören.
  • Webhook: ordern postas till en URL.
  • Manuell: bara loggas, för hantering för hand.

Alla försök loggas i Order Log i appen, med möjlighet att köra om misslyckade. En retry-arbetare försöker om automatiskt (upp till 5 gånger).

Obs: e-postutskick kräver att e-post är konfigurerat. Se Övervakning & larm för hur e-post skickas via Microsoft Graph.

Vidlib - Videobibliotek

Filmer och kurser från Vimeo/YouTube, som sidor i butiken.

Vidlib synkar videor från Vimeo och YouTube till Shopify som metaobjekt, och ger varje video en egen sida. Det finns fyra typer:

TypVadSidadress
alla-filmerDe Wix-migrerade filmerna (huvudbiblioteket)/pages/alla-filmer/…
vimeo_videoFilmer synkade från Vimeo/pages/vimeo-videos/…
youtube_videoFilmer synkade från YouTube/pages/youtube-videos/…
kurserKurssidor med avsnitt (medlemslåsta)/pages/kurs/…

Så synkar du filmer

  1. Öppna Vidlib-appen i Shopify admin, gå till Vimeo (eller YouTube).
  2. Bläddra i mappträdet och klicka Sync på en mapp eller en enskild film.
  3. Mappens namn blir filmens kategori. Kryssa i låst för medlemsvideor.

Kurser

En kurs är ett kurser-metaobjekt (titel, trailer, beskrivning) plus flera avsnitt (filmerkurser) som kopplas till kursen. Avsnitten är medlemslåsta och visas bara för inloggade kunder.

Grid & filter

Kundens sök- och filterupplevelse på filmsidorna.

Filmsidorna (t.ex. /pages/filmer) visar ett rutnät av videokort. Kunden kan smalna av med:

  • Sök: fritextsök på titel och text.
  • Kategori: rullgardin med de riktiga kategorierna (mappnamnen).
  • Typ: Kurser eller Filmer (visas bara när båda finns).
  • Åtkomst: Gratis eller För medlemmar (visas bara när det finns låsta).
  • Sortering: Senaste, Titel A-Ö, eller Längd.

Allt filtrerande sker direkt i webbläsaren, med träffräknare, tomt-läge och en Rensa-knapp. Vilka filter som visas styrs i temat (sektionen Vidlib Content Layout).

Video-SEO

Strukturerad data så Google förstår filmerna.

Varje videosida skickar med en komplett VideoObject som strukturerad data (JSON-LD): namn, beskrivning, thumbnail, uppladdningsdatum, längd (ISO 8601) samt embed- och content-URL. Det var det Google Search Console saknade ("Missing field description"), nu åtgärdat på alla filmtyper.

  • Saknar en film beskrivning fylls en standardtext i, så fältet aldrig saknas.
  • Låsta filmer märks isAccessibleForFree: false och visar en inloggningsuppmaning i stället för spelaren. Sidan syns i Google, men själva filmen är kvar bakom inloggning.
  • Varje film har en egen sida (kanonisk URL). Gridsidorna länkar dit, och Shopifys sitemap listar dem.
Efter ändringar: gå in i Search Console och klicka Validera korrigering på video-ärendet. Google crawlar om och rensar varningen (kan ta några dagar).

Backup

Nattlig säkerhetskopiering av all appdata.

Ett skript (/home/ubuntu/apps/backup-apps.sh) körs varje natt 03:30 och sparar en ögonblicksbild i /home/ubuntu/backups/, med 14 dagars historik. Varje ögonblicksbild innehåller:

  • Feedreaders Postgres-databas (produkter, flöden, tokens) som .dump.
  • Vidlibs data (segment, sidlayouter, inställningar, token) som .tar.gz.
  • En checksummefil för integritet.

Så återställer du

# Feedreaders databas
pg_restore -d "$DATABASE_URL" --clean /home/ubuntu/backups/<datum>/feedreader-db.dump

# Vidlibs data
tar -xzf /home/ubuntu/backups/<datum>/vidlib-data.tar.gz -C /home/ubuntu/apps/wix-migrator/backend/data
Att förbättra: kopiorna ligger i dagsläget på samma server. De skyddar mot databaskorruption, felaktig deploy och råkade raderingar, men inte mot att hela servern försvinner. Nästa steg är att spegla dem till en plats utanför servern (t.ex. S3), vilket kräver en bucket med skrivrättighet.

Övervakning & larm

Upptäcker om en app går ner och larmar via e-post.

En vakthund (/home/ubuntu/apps/healthcheck.sh) körs var 5:e minut och kollar båda apparnas hälsokontroll och PM2-status. Den är läsande och kan inte skada något.

  • Larmar när en app blir otillgänglig, sedan som mest en gång i timmen så länge den är nere, och skickar ett återställningsmeddelande när den är uppe igen. Inget spam.
  • E-post via Microsoft Graph: larmen mejlas till daniel.bjorck@3fmediagroup.com. Skickas via samma Graph-appregistrering som 3F-portalen redan använder (behörigheten Mail.Send). Ingen SMTP behövs.
  • Alla larm loggas dessutom i /home/ubuntu/monitor/alerts.log.

Testa larmet

node /home/ubuntu/apps/send-alert.js --verify        # bekräftar Graph-anslutning
node /home/ubuntu/apps/send-alert.js "[TEST]" "Hej"  # skickar ett testmejl

Deploy & utveckling

Var koden finns och hur en ändring går live.

AppKatalogGitHub
feedreader/home/ubuntu/apps/feedreaderdbjorck/shopify-app
wix-migrator/home/ubuntu/apps/wix-migratordbjorck/wix-migrator

Backend (båda apparna)

cd /home/ubuntu/apps/<app>/backend   # feedreader har inte /backend
npm run build            # kompilerar TypeScript till dist/
pm2 restart <app>         # startar om med ny kod

Vidlibs temafiler

Video- och gridsidornas Liquid ligger i temat. De pushas med hjälpskript i wix-migrator/backend/scripts/ (t.ex. deploy-video-templates.js --push), som skriver in filerna i det aktiva temat.

Både apparna kan nu pusha till GitHub från servern via deploy-nycklar (SSH). Deploy och temapush görs manuellt; automatiska tester och CI är nästa steg på förbättringslistan.