feat(frontend): branding "B2BCall by Handix" — logos novos em todo o app

Usuário forneceu 3 logos novos (B2BCall horizontal, B2BCall quadrado, Handix —
empresa mãe). Processados com sharp (trim de whitespace + resize) e salvos em
apps/frontend/public/branding/, substituindo o antigo b2blogo.png (mesmo desenho,
só com mais espaço em branco ao redor).

Achado ao processar: Logo_Handix.png original era RGB sem canal alpha (fundo branco
opaco) — aplicar o mesmo filtro brightness-0 invert já usado no logo B2BCall pro
painel escuro do login virava um retângulo branco sólido. Corrigido recolorindo
pixels próximos de branco como transparentes via sharp antes de salvar.

Sidebar (tenant e platform) ganha o ícone do B2BCall ao lado do nome do tenant/
"PLATFORM" no cabeçalho (canto superior esquerdo); topbar ganha o logo da Handix
com link pra www.handix.com.br (canto superior direito, escondido no mobile). Login
ganha "BY HANDIX" abaixo do logo principal e um rodapé com o logo da Handix + link.

Testado ponta a ponta via Puppeteer: login, dashboard tenant/platform (claro e
escuro), sidebar recolhida, drawer mobile.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
This commit is contained in:
2026-08-30 11:01:55 -03:00
parent 4b927e9d9e
commit a15ea26cb5
20 changed files with 65 additions and 8 deletions

View File

@@ -34,7 +34,7 @@ export function MobileNavDrawer({ items }: { items: NavSection[] }) {
>
<Dialog.Title className="sr-only">Navegação</Dialog.Title>
<div className="flex h-16 items-center justify-between border-b border-border px-4">
<Image src="/branding/b2blogo.png" alt="B2BCall" width={110} height={27} />
<Image src="/branding/b2bcall-horizontal.png" alt="B2BCall" width={110} height={36} />
<Dialog.Close asChild>
<button
type="button"

View File

@@ -1,6 +1,7 @@
"use client";
import { useState } from "react";
import Image from "next/image";
import { ChevronLeft, ChevronRight } from "lucide-react";
import { cn } from "@/lib/utils";
import { NavList } from "./nav-list";
@@ -21,7 +22,12 @@ export function Sidebar({ items, railLabel }: { items: NavSection[]; railLabel:
)}
>
<div className="flex h-16 items-center justify-between border-b border-border px-4">
{!collapsed && <span className="text-sm font-semibold tracking-wide text-foreground">{railLabel}</span>}
{!collapsed && (
<div className="flex min-w-0 items-center gap-2.5">
<Image src="/branding/b2bcall-quadrado.png" alt="" width={28} height={23} className="shrink-0" />
<span className="truncate text-sm font-semibold tracking-wide text-foreground">{railLabel}</span>
</div>
)}
<button
type="button"
onClick={() => setCollapsed((c) => !c)}

View File

@@ -1,5 +1,6 @@
"use client";
import Image from "next/image";
import { useRouter, usePathname } from "next/navigation";
import { LogOut } from "lucide-react";
import { ThemeToggle } from "../platform-shell/theme-toggle";
@@ -27,6 +28,16 @@ export function Topbar({ items, fallbackTitle, userLabel }: { items: NavSection[
</div>
</div>
<div className="flex shrink-0 items-center gap-2 sm:gap-4">
<a
href="https://www.handix.com.br"
target="_blank"
rel="noopener noreferrer"
title="Handix — empresa desenvolvedora do B2BCall"
className="hidden shrink-0 opacity-70 transition-opacity hover:opacity-100 sm:block"
>
<Image src="/branding/handix-logo.png" alt="Handix" width={38} height={31} />
</a>
<div className="hidden h-6 w-px bg-border sm:block" aria-hidden />
<ThemeToggle />
<div className="hidden h-6 w-px bg-border sm:block" aria-hidden />
<span className="hidden max-w-[220px] truncate text-sm text-muted-foreground sm:inline">{userLabel}</span>