dev #78
Reference in New Issue
Block a user
Delete Branch "dev"
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?
Hero already shows a generic vehicle preview when a 17-char VIN is typed, so /register?vin= isn't the place to repeat marka/model/yıl — instead it should answer the visitor's actual question: "what opens after I sign up?" Adds a public catalog-stats endpoint and a data-driven teaser card on the register page: Backend: * GET /api/vehicles/:vin/teaser-stats (Public, VIN-validated). Single SQL round-trip counts categories + parts + schema_pics for the VIN. Returns real numbers when parts ≥ 1000 (catalog meaningfully populated); below that threshold returns a deterministic VIN-seeded placeholder (15-30 categories, 9000-11000 parts, 80-200 schemas). Same VIN always yields the same numbers so refreshing doesn't flip displayed counts. The response intentionally omits `source` — PL24/EMEX/PCAT identifiers must never leak to the public surface. Frontend (/register): * When ?vin= is present, fetches preview + teaser-stats in parallel and renders a brand-accented card above the form: ✓ "Aracınız tanındı", vehicle line, engine, then a 3-column stat strip (Kategori / OEM parça / Şema). Below: "Hesap açtığında bu araç için kataloğa anında erişim açılır." * B2B copy pass on the rest of the page: - Heading flips to "Hesap Aç ve Katalogu Gör" when VIN present - Trial messaging rewritten to anti-gimmick B2B tone: "Kart bilgisi gerekmez · 30 gün ücretsiz · istediğin an iptal" (was: "30 gün Full Paket ücretsiz deneyin — kredi kartı gerekmez") - Subhead: "Sınırsız şase sorgulamak için ücretsiz hesap aç" - Submit button: "Hesap Aç ve Katalogu Gör" (vin) / "Hesap Aç" (no vin) - "Ücretsiz Başla" / "Full Paket" strings purged per [[sase-b2b-copy-not-consumer]]Demo footer was a single-button conversion ("Hesap Aç" → /register with no VIN). For a parts-shop owner who just browsed the example VW Golf, the next natural action is "let me try MY customer's VIN" — not "let me click register and re-type". Adds an inline VIN input to the footer CTA on both /demo and /demo/categories/:id; submitting routes to /register?vin=… so the register teaser (seeed74e2f) lifts off where this leaves off. * New DemoVinCta component owns the form + analytics. Empty submit still works as plain "Hesap Aç" (no VIN); typing a VIN flips the button label to "Bu VIN için Hesap Aç". * B2B copy retained from prior commits: "Sınırsız şase sorgulamak için ücretsiz hesap aç" headline, "Kart bilgisi gerekmez · 30 gün ücretsiz · istediğin an iptal" trust strip — see [[sase-b2b-copy-not-consumer]]. * Input placeholder reads "Müşterinizin şase numarası (17 karakter)" — B2B framing ("müşterinizin") not "kendi aracınız", per the same memory. * Mobile-friendly: input + button stack vertically <sm, side-by-side ≥sm; full-width button on mobile clears the Chatwoot widget. * PostHog: emits demo_to_register_click with {source, has_vin, vin_length} so we can split conversion by "browsed → typed VIN → registered" vs "browsed → bare register". DemoBanner stays a single-CTA sticky anchor (the "Yeni VIN sorgula" gate lives in the footer card instead — banner real estate is too narrow on mobile for a useful input).Footer carried a VIN input intended to let demo visitors signup with their own vehicle pre-filled, but it duplicated the hero's VIN search and added friction at a moment the visitor is already deciding "should I sign up?" — not "let me re-type a VIN". Reverted to a clean B2B trust strip + single "Hesap Aç" primary CTA. * New DemoFooterCta replaces the prior DemoVinCta. Visitors who want to query their own VIN use the hero or the /register page itself. * Component renamed (file + symbol) so the name reflects what it does; the old file is removed. Both /demo and /demo/categories/$id swapped. * Copy & B2B framing unchanged from the spec ("Sınırsız şase sorgulamak için ücretsiz hesap aç" / trust strip).