Carduri de partajare 1200×630 pentru fiecare pagină cu poză
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ă
#F7F5F5pe 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.dbneatinsă; - 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)