Invictus Medical - schelet magazin

De la macheta la tema Shopify

Ce are programatorul in mana, ce ii mai trebuie, si in ce ordine se construieste. Documentul e scris ca sa poata fi dat direct lui Claude, sarcina cu sarcina.

Ce e deja rezolvat de macheta

  • Toate cotele: grila, spatiere, tipografie, culoare - se citesc direct din codul paginii
  • Comportamentul real: meniu in doua panouri, sertar mobil, filtre, galerie, ancore, bara lipita jos
  • Punctele de rupere si layoutul de telefon, deja verificate la 414 px
  • Ordinea sectiunilor pe cele trei pagini si ce sta deasupra liniei de plutire

Ce lipseste ca sa poata fi construit

  • Harta bloc din macheta → fisier de tema si sursa de date
  • Definitiile de metacampuri, fara care filtrele si tabelul tehnic nu au de unde sa se alimenteze
  • Configurarea filtrelor si a cautarii
  • Ordinea de lucru si criteriile de acceptanta

Toate patru sunt in documentul asta.

01Punct de plecare

Se pleaca de la Dawn, tema oficiala si gratuita Shopify, forkuita in depozit propriu. Nu se cumpara tema: la un catalog tehnic ajungem oricum sa rescriem cardul de produs, filtrele si meniul, iar o tema cumparata inseamna sa lupti cu deciziile altcuiva. Sectiunile proprii primesc prefixul inv-, ca sa se distinga instant de cele mostenite din Dawn.

CeCum
Mediu de lucruShopify CLI, tema de dezvoltare (shopify theme dev), niciodata direct pe tema publicata
VersionareDepozit git cu tema; fiecare etapa = ramura proprie si tema nepublicata pentru verificare
BackupExport JSON al temei live inainte de prima publicare
Date de test20 de produse pilot, reale, cu toate metacampurile completate - nu se construieste pe produse goale

02Harta: bloc din macheta → fisier de tema

Fiecare bloc vizibil in macheta are un fisier si o sursa de date. Coloana a treia e cea care conteaza: de acolo vine continutul, si daca sursa nu exista, blocul nu se poate construi.

Antet si subsol - se aplica pe toate paginile

BlocFisierSursa datelor
Bara utilitarasections/inv-topbar.liquidSetari de sectiune (telefon, WhatsApp, mesaj livrare)
Antet + cautaresections/inv-header.liquid in sections/header-group.jsonLogo din setari tema; cautare = /search cu sugestii (Predictive Search)
Meniu doua panouriacelasi fisier + snippets/inv-mega.liquidMeniu Shopify (Navigation) + metacamp de parinte pe colectie
Bara de increderesections/inv-trust.liquidSetari de sectiune, 4 blocuri repetabile
Sertar mobilsnippets/inv-drawer.liquidAcelasi meniu, randat pe doua niveluri
Subsolsections/inv-footer.liquid in footer-group.jsonMeniuri + setari (CUI, adresa, ANPC, plati)

Acasa - templates/index.json

BlocFisierSursa datelor
Herosections/inv-hero.liquidSetari: supratitlu, titlu, text, doua butoane, pastile, imagine
Comanda din nousections/inv-reorder.liquidUltimele comenzi ale clientului autentificat; ascuns cand nu e logat
Grila de categoriisections/inv-category-grid.liquidLista de colectii; numarul de produse = collection.products_count; subcategoriile din metacampul de copii
Alege dupa lucraresections/inv-tasks.liquidBlocuri repetabile, fiecare cu link spre o colectie dedicata
Cele mai cerutefeatured-collection (Dawn) cu cardul nostruColectie automata sortata dupa vanzari
De ce de la noisections/inv-why.liquidSetari, 4 blocuri
Producatorisections/inv-brands.liquidLista de vendori sau colectii de brand
Intrebari frecventesections/inv-faq.liquidBlocuri repetabile + marcaj FAQPage in snippets/inv-schema-faq.liquid

Categorie - templates/collection.json

BlocFisierSursa datelor
Firimiturisnippets/inv-breadcrumbs.liquidMetacamp de parinte pe colectie + marcaj BreadcrumbList
Titlu + introduceresections/inv-collection-head.liquidcollection.title + metacamp intro
Pastile subcategoriiacelasi fisierColectiile copil din metacamp
Bara de control + filtre + grilasections/main-collection-product-grid.liquid (Dawn, rescris)Search & Discovery peste metacampuri; produsele din colectie
Card de produssnippets/inv-product-card.liquidTitlu, SKU, lot, valabilitate, stoc, pret, adaugare in cos
Paginareacelasi fisierpaginate, 24-36 pe pagina. Nu derulare infinita
Cum alegisections/inv-howto.liquidMetacamp howto (text bogat, cu tabel)
Text categorie + intrebarisections/inv-collection-body.liquidMetacampuri body si faq
Categorii inruditesections/inv-related-collections.liquidMetacamp lista de colectii

Produs - templates/product.json

BlocFisierSursa datelor
Galeriemain-product (Dawn) cu media rescrisaImaginile produsului; prima se incarca prioritar
Coloana de cumpararesnippets/inv-buy-box.liquidTitlu, vendor, SKU al variantei, pret cu si fara TVA, stoc, formular de cos
Data estimata de livraresnippets/inv-delivery-eta.liquidCalcul din setari (ora limita, zile lucratoare) + prag de greutate
Caseta lot si pastraresnippets/inv-lotbox.liquidMetacampuri lot, expiry, storage; ascunsa cand lipsesc
Ce contine pachetulsnippets/inv-kit.liquidMetacamp kit_contents
Ancoresections/inv-anchors.liquidStatic; continutul ramane in pagina, fara taburi
Descriere structuratamain-product blocul de descriereproduct.description, cu subtitluri dupa sablon fix
Tabel date tehnicesnippets/inv-spec-table.liquidAceleasi metacampuri ca filtrele - o sursa, doua afisari
Documentesnippets/inv-docs.liquidMetacamp lista de fisiere (fisa tehnica, IFU, CE)
Se foloseste cuproduct-recommendations + metacamp manualRecomandari Shopify, suprascrise de lista manuala unde exista
Intrebari produssnippets/inv-product-faq.liquidMetacamp faq + marcaj FAQPage
Pareriextensie de aplicatie (Judge.me / Loox)Aplicatie, nu tema. Starea goala se stilizeaza
Bara lipita jossnippets/inv-sticky-buy.liquidPret + adaugare in cos, doar sub 900 px
Marcaj Productsnippets/inv-schema-product.liquidsku, gtin, brand, pret, moneda, disponibilitate

03Metacampuri - fara ele nu merge nimic

Astea sunt fundatia. Filtrele din categorie si tabelul tehnic de pe produs se alimenteaza din aceleasi definitii. Se creeaza inainte de a scrie prima linie de Liquid, cu acces activat pentru magazin, altfel nu apar nici in tema, nici in filtre.

CheieTipUnde apareObligatoriu
product.custom.spec_*text sau numar cu unitateTabel tehnic + filtre (cate unul per atribut real al categoriei)Da
product.custom.lottextCaseta lot, card de produsLa marfa cu termen
product.custom.expirydataValabilitate, filtru "valabilitate minima"La marfa cu termen
product.custom.storagetextConditii de pastrareLa marfa cu termen
product.custom.ce_marktextEticheta de conformitate langa codDa
product.custom.kit_contentslista de textCe contine pachetulLa kituri
product.custom.docslista de fisiereFisa tehnica, IFU, declaratie CEDa
product.custom.faqtext bogat sau metaobiectIntrebari despre produsNu
product.custom.goes_withlista de produseSe foloseste impreuna cuNu
collection.custom.parentreferinta colectieMeniu pe trei niveluri, firimituriDa
collection.custom.childrenlista de colectiiPastile de subcategorii, grila de pe AcasaDa
collection.custom.introtext bogatIntroducerea de deasupra grileiDa
collection.custom.bodytext bogatTextul de sub produseDa
collection.custom.howtotext bogatGhidul de selectie si tabelul comparativNu
collection.custom.faqtext bogatIntrebari de categorieNu
Regula de aur: daca o valoare apare in tabelul tehnic, produsul trebuie sa apara si in filtrul corespunzator. Aceeasi definitie alimenteaza ambele. Se verifica automat: numarul din filtru trebuie sa fie egal cu numarul de produse care au valoarea aia.

04Filtre, cautare, navigatie

ZonaCum se faceDe stiut inainte
FiltreAplicatia Search & Discovery, filtre construite peste metacampuri, disponibilitate si pretNumarul de filtre e limitat - se verifica plafonul in aplicatie inainte sa promiti 8 filtre pe categorie. Filtrele functioneaza pe paginile de colectie si de cautare
CautareCautarea nativa + sinonime din aceeasi aplicatieSe testeaza pe catalogul real ca SKU-ul intoarce produsul. Daca nu, se trece pe un motor dedicat - decizia se ia devreme, nu la final
Sugestii instantPredictive Search, cu poza, pret si stoc in rezultatSe randeaza din snippets/inv-search-suggest.liquid
Trei niveluriMeniu Shopify pentru afisare + metacampuri parinte/copii pentru relatiiColectiile sunt plate si adresa e fixa /collections/<nume>. Ierarhia nu se poate face din adrese
Adresa produsuluiDoar /products/<nume>Nu se genereaza legaturi de tip /collections/x/products/y - fac dubluri
Filtre in adresaParametri de tip ?filter.p.m...Primesc noindex si canonic spre colectia curata

05Ce nu se face in tema

RecenziiAplicatie dedicata cu extensie de tema. In tema se stilizeaza doar starea goala si blocul de afisare.
Feed pentru reclameSe face in Feed Tool, nu in tema.
Preturi si stocVin din produs si inventar. Tema doar afiseaza, nu calculeaza.
Plata la termen pe firmaRegula comerciala, nu tema. Pe plan standard se rezolva prin proforma si validare manuala.
Documente PDFFisiere in Shopify, legate prin metacamp. Nu se pun in cod.
Continut de categorieTextele si intrebarile se scriu si se incarca in metacampuri, nu se codeaza in sabloane.

06Ordinea de lucru

Sapte etape, fiecare cu un livrabil care se poate verifica singur. Nu se trece la urmatoarea pana cea curenta nu trece proba.

  1. Fundatia

    Fork Dawn, variabilele de culoare, tipografie si spatiere copiate din macheta in assets/inv-tokens.css. Antet, meniu in doua panouri, sertar mobil, bara de incredere, subsol.

    Proba: meniul se deschide pe desktop, sertarul pe telefon, zero depasire orizontala la 414 px
  2. Metacampuri

    Toate definitiile din capitolul 03, cu acces activat pentru magazin. Completate pe cele 20 de produse pilot.

    Proba: metacampurile se citesc in tema si apar in lista de filtre din aplicatie
  3. Pagina de produs

    Galerie, coloana de cumparare, lot, kit, ancore, tabel tehnic, documente, intrebari, marcaj Product, bara lipita jos.

    Proba: pe cele 20 de produse pilot, fara camp gol si fara bloc rupt cand un metacamp lipseste
  4. Pagina de categorie

    Firimituri, intro, pastile, bara de control, filtre, grila, paginare, ghid de selectie, text si intrebari.

    Proba: filtrele intorc acelasi numar ca tabelele tehnice ale produselor
  5. Acasa

    Hero, comanda din nou, grila de categorii, alege dupa lucrare, cele mai cerute, dovezi, producatori, intrebari.

    Proba: toate legaturile duc in colectii reale, niciun link mort
  6. Telefon si viteza

    Trecere pe toate cele trei sabloane la 414 px. Imaginea principala prioritara, restul lenese.

    Proba: zero depasire orizontala, LCP sub 2,5 s pe mobil pe produs si categorie
  7. Predare

    Import complet de catalog, verificare finala, publicare temei.

    Proba: lista din capitolul 07, bifata integral

07Definitia de gata

CriteriuCum se masoara
Fara depasire orizontaladocument.documentElement.scrollWidth egal cu latimea ecranului, la 414 px, pe cele trei sabloane
VitezaLCP sub 2,5 s pe mobil, pe produs si pe categorie
Marcaj validProduct, BreadcrumbList si FAQPage trec testul Google de rezultate imbogatite
Filtre corecteNumarul afisat in filtru = numarul real de produse cu acea valoare
Cautare dupa codZece coduri reale, luate la intamplare, intorc produsul corect
Fara continut fabricatZero recenzii inventate, zero preturi taiate fictiv, zero note fara pareri reale
Stari goaleCategorie fara rezultate, produs fara pareri, produs fara lot - toate arata intentionat
TastaturaMeniul, filtrele si galeria se pot folosi fara mouse, cu focus vizibil

08Cum se lucreaza cu Claude

Claude construieste bine cand primeste o sarcina inchisa, cu sursa si criteriu de acceptanta. Nu ii dai "fa magazinul", ii dai o sectiune. Astea trei lucruri i se pun in fata la fiecare sarcina.

  1. Accesul

    Depozitul temei local, aplicatia Shopify CLI conectata la magazinul de dezvoltare, si un token de Admin API cu drepturi pe teme, produse si metacampuri.

  2. Referinta

    Linkul machetei si al acestui document. Codul machetei se citeste direct din pagina, deci Claude poate lua cotele exacte, nu aproximari.

  3. Sarcina

    Un singur bloc din harta de la capitolul 02, cu fisierul tinta si proba de trecere.

Sablon de sarcina

# Context
Tema: fork Dawn, depozit local. Magazin de dezvoltare conectat prin Shopify CLI.
Referinta vizuala: https://design.devrika.ro/01-invictus-desktop-mobil.html
Specificatia: https://design.devrika.ro/00-PREDARE-DESIGNER.html
Harta si metacampuri: https://design.devrika.ro/04-IMPLEMENTARE-SHOPIFY.html

# Sarcina
Construieste blocul "Card de produs" din harta (capitolul 02, pagina Categorie).
Fisier tinta: snippets/inv-product-card.liquid

Cerinte:
- Ordinea in card: cod produs, titlu (max 3 randuri), lot si valabilitate,
  stoc, pret cu TVA, buton de adaugare in cos
- Cotele exacte se iau din macheta, clasa .pcard (citeste codul paginii)
- Lotul si valabilitatea vin din metacampurile custom.lot si custom.expiry
  si se ascund cand lipsesc, fara sa lase spatiu gol
- Stocul are punct colorat SI text; niciodata doar culoare

# Proba de trecere
- Randat intr-o colectie cu 24 de produse, la 1440 px si la 414 px
- Zero depasire orizontala la 414 px
- Un produs fara lot arata corect, fara gaura in card
- Fara stiluri scrise inline; totul in assets/inv-*.css
Regula de verificare: dupa fiecare sectiune, Claude ruleaza proba si arata rezultatul masurat, nu declara "gata". Daca proba nu e definita, sectiunea nu se incepe.
Ce nu se cere lui Claude: sa scrie continut de produs sau de categorie inventat, sa genereze recenzii, sau sa mute in tema lucruri care apartin aplicatiilor. Continutul vine de la noi.

Revizia A - 28.07.2026 - Devrika