Skip to content

Carduri de partajare 1200×630 pentru fiecare pagină cu poză

Vitalie requested to merge 41_share-cards into main

shareImage a plecat gol peste tot, deci partajarea folosea poza paginii — iar nicio poză de pagină n-are forma 1,91:1 la care se decupează cardul mare. La un produs vertical se vedea mijlocul aparatului, fără cap și fără mâner; un articol pierdea o treime din înălțime.

109 carduri, construite din pozele care există deja: 31 de produse, 6 colecții și 72 de articole. Cele patru colecții fără poză proprie folosesc deja cardul implicit și n-au nevoie de niciunul.

Două tratamente

  • Produsul se compune, nu se decupează — aparatul întreg pe aceeași dală #F7F5F5 pe care stă în magazin, wordmark negru sus-stânga. Nu i se taie niciodată nimic.
  • Fotografia se decupează, cu wordmark alb peste o umbră care acoperă doar colțul din stânga-jos.

De ce decupajul e reglabil, nu o poziție fixă

Măsurat pe fotografiile reale:

  • decupajul „inteligent" al bibliotecii (sharp.strategy.attention) a tăiat capetele ambilor oameni din poza colecției Hypervolt;
  • decupajul centrat a tăiat capul unuia dintre ei;
  • decupajul de sus, bun la colecție, a tăiat rola din articolul de foam rolling — subiectul textului.

Decupajul e o fracțiune din surplusul de înălțime luat de sus. Toate cele 78 de fotografii au fost apoi privite una câte una pe planșe de contact: unsprezece aveau nevoie de altă fracțiune și o poartă în share-cards.json. Trei sunt tăiate chiar în poza sursă — încadrarea de pe hyperice.com — și niciun decupaj nu le poate repara.

Adresa cardului

Adresa unui card e adresa sursei, sub /share, întotdeauna .jpg. Așa nimic nu trebuie să știe cum arată un handle sau un slug: scriptul de seed calculează aceeași adresă din imaginea pe care entitatea o are deja.

backend/prisma/set-share-images.ts completează shareImage doar unde e gol — o alegere făcută din panou bate orice generăm noi. Și scrie o adresă doar pentru un card pe care generatorul raportează că l-a construit, deci nu poate anunța niciodată un 404.

Ordinea contează: se rulează după deploy-ul care aduce fișierele, niciodată înainte. Ca rename-image-extensions.ts.

Verificat

  • generatorul: 31 de produse, 78 de fotografii, 109 în total; 6,4 MB, media 59 KB, cel mai mare 190 KB — sub pragul de 300 KB din #7 (closed);
  • scriptul, rulat pe o copie a bazei de dezvoltare: 32 de produse, 6 colecții, 72 de articole completate; a doua rulare completează 0, deci e idempotent;
  • o alegere pusă manual pe un produs a supraviețuit rulării;
  • dev.db neatinsă;
  • backend: build curat, typecheck curat pe scriptul nou, 489 de teste în 31 de fișiere.

Jobul de CI care îl rulează pe producție vine în MR separat — orice diff pe .gitlab-ci.yml lasă MR-ul fără pipeline.

Part of #41 (closed) Part of #8 (closed)

Merge request reports