Replace the text brand in the header and footer with the logo the source site
publishes for its footer (637x220 PNG, BRAND.logoSourceUrl):
- src/store/constants.ts: add BRAND (source URL, local path, dimensions).
- scripts/fetch-logo.ts: mirror it into public/images/brand/logo_footer.png
(idempotent, --force to refresh); `pnpm fetch:logo` runs it standalone.
- scripts/dev-server.ts: ensure the logo at boot, non-fatal on failure.
- public/index.html: <img class="brand__logo"> in the header (the wordmark is
dark on the light header) and <img class="footer__logo"> in the footer, on a
white plate because the footer is dark.
- public/styles.css: logo sizing (30px / 40px from 768px) + the footer plate.
- Hero: three slides (copy + real bouquet photo + price tag) with arrows,
dots, counter, autoplay, keyboard nav and touch swipe.
- Catalog: label the view toggle (Сетка/Список/Слайдер) so the
one-bouquet-per-screen slider view is discoverable.
- Remove the "281 real photos" claim from the meta description, hero perks
and trust strip; replace with "Фото перед вручением".
- Dev server: send Cache-Control: no-store for static assets and version the
/app.js + /styles.css links so refreshes always pick up the latest build.
Implement the data layer from docs/PLAN.md §4 (card #55):
- db/migrations/0001_init.sql: idempotent DDL for the 16 entities (category,
product, product_category, product_image, product_variant, product_feature,
cart, cart_item, customer, address, orders, order_item, payment, promo_code,
content_page, delivery_option) with relations and indexes; explicit index on
orders.number (product.slug/category.slug are unique-indexed by their keys).
- Currency BYN (R4/Q1): STORE_CURRENCY = 'BYN', money as integer minor units
(BYN * 100), no float, no interim currency, no FX conversion.
- Idempotent seed: 14 categories (11 visible + 3 hidden visible=false, R13) and
93 products from docs/CATALOG.md §3 (broken #59 excluded, R14) with prices,
old prices and badges; cross-listing, images, variants, PDP fields (R9),
store constants (CATALOG §6), 1 admin + 1 customer and 2 orders.
- scripts/{migrate,seed,verify}.ts + src/db: CLI entry points and an in-process
Postgres verification harness (satisfies `migrate` + `seed` on a clean clone).
- db/seed/0001_seed.sql: generated single-file SQL for the platform Data Tables
(`/db-forms`, run_sql) to converge tenant_1 without a Node process.
- Placeholder dev server + storefront currency/constants and money helpers.
Verified on a clean Postgres (PGlite): product = 93; category = 14 with
visible = 11; orders = 2; money integer BYN minor units (0 float rows).