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:
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 48 KiB |
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user