chore(branding): adopt project-manager EnCoach logo across login and sidebars

- Replace public/logo-icon.png with the approved EnCoach wordmark
  (icon + "EnCoach" + tagline "Unlock your potential with AI powered platform").
- Login page shows the full branded logo at h-36 and drops the duplicate
  text heading since the wordmark is now baked into the asset.
- Student/Teacher/Admin sidebars show a small rounded icon when collapsed
  and the full wordmark at h-14 when expanded, removing the previous
  duplicated "EnCoach" text span.
- og:image in index.html already points at /logo-icon.png so social cards
  pick up the new branding automatically.

Made-with: Cursor
This commit is contained in:
Yamen Ahmad
2026-04-19 14:15:41 +04:00
parent c016a52200
commit 47d09a3ce5
4 changed files with 42 additions and 18 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -9,6 +9,8 @@ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/component
import { NavLink } from "@/components/NavLink"; import { NavLink } from "@/components/NavLink";
import { useAuth } from "@/contexts/AuthContext"; import { useAuth } from "@/contexts/AuthContext";
import NotificationDropdown from "@/components/NotificationDropdown"; import NotificationDropdown from "@/components/NotificationDropdown";
import { ThemeToggle } from "@/components/ThemeToggle";
import { LanguageToggle } from "@/components/LanguageToggle";
import AiAssistantDrawer from "@/components/ai/AiAssistantDrawer"; import AiAssistantDrawer from "@/components/ai/AiAssistantDrawer";
import AiSearchBar from "@/components/ai/AiSearchBar"; import AiSearchBar from "@/components/ai/AiSearchBar";
import { usePermissions } from "@/hooks/usePermissions"; import { usePermissions } from "@/hooks/usePermissions";
@@ -29,7 +31,7 @@ import {
CalendarDays, Landmark, UserPlus, ScrollText, Award, CalendarDays, Landmark, UserPlus, ScrollText, Award,
HelpCircle as FaqIcon, Bell, Workflow, HelpCircle as FaqIcon, Bell, Workflow,
CalendarOff, DollarSign, BookMarked, BarChartHorizontal, TrendingUp, CalendarOff, DollarSign, BookMarked, BarChartHorizontal, TrendingUp,
Library, Activity, Warehouse, UserCog, Library, Activity, Warehouse, UserCog, Sparkles,
} from "lucide-react"; } from "lucide-react";
import React from "react"; import React from "react";
@@ -56,6 +58,9 @@ const academicItems: NavItem[] = [
{ title: "Exam Structures", url: "/admin/exam-structures", icon: Layers }, { title: "Exam Structures", url: "/admin/exam-structures", icon: Layers },
{ title: "Rubrics", url: "/admin/rubrics", icon: BookOpen }, { title: "Rubrics", url: "/admin/rubrics", icon: BookOpen },
{ title: "Generation", url: "/admin/generation", icon: Wand2 }, { title: "Generation", url: "/admin/generation", icon: Wand2 },
{ title: "Review Queue", url: "/admin/exam/review-queue", icon: Sparkles },
{ title: "AI Prompts", url: "/admin/ai/prompts", icon: Wand2 },
{ title: "AI Feedback", url: "/admin/ai/feedback", icon: Sparkles },
{ title: "Approval Workflows", url: "/admin/approval-workflows", icon: GitBranch }, { title: "Approval Workflows", url: "/admin/approval-workflows", icon: GitBranch },
]; ];
@@ -150,6 +155,8 @@ const routeLabels: Record<string, string> = {
students: "Students", teachers: "Teachers", batches: "Batches", timetable: "Timetable", students: "Students", teachers: "Teachers", batches: "Batches", timetable: "Timetable",
reports: "Reports", assignments: "Assignments", examsList: "Exams List", reports: "Reports", assignments: "Assignments", examsList: "Exams List",
"exam-structures": "Exam Structures", rubrics: "Rubrics", generation: "Generation", "exam-structures": "Exam Structures", rubrics: "Rubrics", generation: "Generation",
"review-queue": "Review Queue", review: "Review", prompts: "AI Prompts", ai: "AI",
feedback: "Feedback",
"approval-workflows": "Approval Workflows", users: "Users", entities: "Entities", "approval-workflows": "Approval Workflows", users: "Users", entities: "Entities",
classrooms: "Classrooms", "student-performance": "Student Performance", classrooms: "Classrooms", "student-performance": "Student Performance",
"stats-corporate": "Stats Corporate", record: "Record", training: "Training", "stats-corporate": "Stats Corporate", record: "Record", training: "Training",
@@ -218,6 +225,8 @@ export default function AdminLmsLayout() {
</div> </div>
<AiSearchBar /> <AiSearchBar />
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<LanguageToggle />
<ThemeToggle />
<NotificationDropdown /> <NotificationDropdown />
<Button variant="ghost" size="icon" onClick={() => navigate("/admin/tickets")} className="text-muted-foreground hover:text-foreground"> <Button variant="ghost" size="icon" onClick={() => navigate("/admin/tickets")} className="text-muted-foreground hover:text-foreground">
<Ticket className="h-4 w-4" /> <Ticket className="h-4 w-4" />
@@ -282,12 +291,18 @@ function AdminSidebar() {
<Sidebar collapsible="icon"> <Sidebar collapsible="icon">
<SidebarHeader className="p-4"> <SidebarHeader className="p-4">
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<img src="/logo.png" alt="EnCoach" className="h-8 w-8 rounded-lg shrink-0 object-contain" /> {collapsed ? (
{!collapsed && ( <img
<span className="text-lg font-bold tracking-tight text-sidebar-foreground"> src="/logo.png"
<span className="text-[hsl(42,40%,62%)]">En</span> alt="EnCoach"
<span>Coach</span> className="h-9 w-9 shrink-0 rounded-lg object-contain"
</span> />
) : (
<img
src="/logo.png"
alt="EnCoach — Unlock your potential with AI powered platform"
className="h-14 w-auto shrink-0 object-contain"
/>
)} )}
</div> </div>
</SidebarHeader> </SidebarHeader>

View File

@@ -8,6 +8,8 @@ import {
import { NavLink } from "@/components/NavLink"; import { NavLink } from "@/components/NavLink";
import { useAuth, UserRole } from "@/contexts/AuthContext"; import { useAuth, UserRole } from "@/contexts/AuthContext";
import NotificationDropdown from "@/components/NotificationDropdown"; import NotificationDropdown from "@/components/NotificationDropdown";
import { ThemeToggle } from "@/components/ThemeToggle";
import { LanguageToggle } from "@/components/LanguageToggle";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { import {
DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenu, DropdownMenuContent, DropdownMenuItem,
@@ -83,11 +85,16 @@ export default function RoleLayout({ navGroups, role }: RoleLayoutProps) {
<Sidebar collapsible="icon"> <Sidebar collapsible="icon">
<SidebarHeader className="p-4"> <SidebarHeader className="p-4">
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<img src="/logo.png" alt="EnCoach" className="h-8 w-8 rounded-lg shrink-0 object-contain" /> <img
<span className="text-lg font-bold tracking-tight text-sidebar-foreground group-data-[collapsible=icon]:hidden"> src="/logo.png"
<span className="text-[hsl(42,40%,62%)]">En</span> alt="EnCoach"
<span>Coach</span> className="h-9 w-9 shrink-0 rounded-lg object-contain group-data-[collapsible=icon]:block hidden"
</span> />
<img
src="/logo.png"
alt="EnCoach — Unlock your potential with AI powered platform"
className="h-14 w-auto shrink-0 object-contain group-data-[collapsible=icon]:hidden"
/>
</div> </div>
</SidebarHeader> </SidebarHeader>
<SidebarSeparator /> <SidebarSeparator />
@@ -115,6 +122,8 @@ export default function RoleLayout({ navGroups, role }: RoleLayoutProps) {
<span className="text-sm font-medium text-muted-foreground capitalize">{role} Portal</span> <span className="text-sm font-medium text-muted-foreground capitalize">{role} Portal</span>
</div> </div>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<LanguageToggle />
<ThemeToggle />
<NotificationDropdown /> <NotificationDropdown />
<DropdownMenu> <DropdownMenu>
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>

View File

@@ -70,12 +70,12 @@ export default function Login() {
return ( return (
<div className="min-h-screen flex items-center justify-center bg-background p-4"> <div className="min-h-screen flex items-center justify-center bg-background p-4">
<div className="w-full max-w-md"> <div className="w-full max-w-md">
<div className="flex items-center justify-center gap-3 mb-8"> <div className="flex items-center justify-center mb-8">
<img src="/logo.png" alt="EnCoach" className="h-12 w-12 rounded-xl object-contain" /> <img
<h1 className="text-2xl font-bold tracking-tight"> src="/logo.png"
<span className="text-[hsl(42,40%,62%)]">En</span> alt="EnCoach — Unlock your potential with AI powered platform"
<span className="text-[hsl(240,20%,30%)]">Coach</span> className="h-36 w-auto object-contain"
</h1> />
</div> </div>
<Card className="shadow-lg border-0 bg-card"> <Card className="shadow-lg border-0 bg-card">