feat(tradein): white-label branded page for client «Практика» (#657) #672
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#672
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/tradein-657-brand"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Adds ?brand=praktika white-label re-skin ("отдельная страничка под практику" = branded experience over the existing /trade-in page, no new route):
Validation: tsc --noEmit clean. next lint not runnable in this bundle (no eslint.config.js, ESLint v9) — matched existing eslint-disable convention for the external .
Notes: hotlinked logo is the magenta MARK only (no full wordmark) — paired with text name; consider self-hosting vs hotlink for prod (CORS/availability). Manrope pulled via Google Fonts @import.
Milestone 6 (Praktika demo). Closes #657
?brand=praktika re-skin: useBrand hook (reads ?brand= slug, fetches /api/v1/brand/{slug}), runtime CSS-var override of accent palette + Manrope font (open replacement for paid HalvarMittel), client logo in Topbar, ?brand passthrough on the PDF link. No-op when ?brand= absent. Migration 084 fills the praktika brand row (#235F49 / #1FCECB, logo, footer). Closes #657White-label re-skin for Praktika (#657). Verified end-to-end: backend GET /api/v1/brand/{slug} + PDF ?brand= support + brands table/columns (slug,logo_url,primary_color,accent_color,footer_text) all exist on main; migration 084 UPDATEs existing praktika seed (idempotent, BEGIN/COMMIT, numbered to avoid 083 collision). Frontend: useBrand graceful null fallback (no-op without ?brand=), runtime CSS-var override with proper useEffect cleanup, encodeURIComponent on PDF query + slug, SSR-safe slug read, justified eslint-disable for external img. ADVISORY (non-blocking): Topbar logo hotlinks client live site (gk-praktika.ru/.../logo-pink.svg) and fallback-to-wordmark is keyed on logo_url being set, not load success -> broken external URL shows broken-image icon, not TI wordmark. Recommend self-hosting the asset + onError fallback; also verify logo-pink.svg is the correct asset vs green/cyan brand. APPROVE.