feat: integrate robot logo into web admin and Flutter app
- Add logo.svg (green robot character) to project root - Web admin: replace text "IT" badge with SVG logo in sidebar - Web admin: add logo image to login, register, invite pages - Web admin: add SVG favicon and apple-touch-icon metadata - Flutter: add flutter_svg dependency, replace text "IT0" with logo on login page Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
660616b08b
commit
2f228e4591
|
|
@ -0,0 +1,33 @@
|
|||
<svg width="64" height="64" viewBox="90 30 220 290" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Antenna stick -->
|
||||
<line x1="200" y1="88" x2="200" y2="58" stroke="#3CC98C" stroke-width="7" stroke-linecap="round"/>
|
||||
<!-- Antenna ball -->
|
||||
<circle cx="200" cy="50" r="12" fill="#3CC98C"/>
|
||||
|
||||
<!-- Ear left -->
|
||||
<rect x="108" y="148" width="20" height="46" rx="10" fill="#3CC98C"/>
|
||||
<!-- Ear right -->
|
||||
<rect x="272" y="148" width="20" height="46" rx="10" fill="#3CC98C"/>
|
||||
|
||||
<!-- Head -->
|
||||
<rect x="120" y="88" width="160" height="144" rx="46" fill="#3CC98C"/>
|
||||
|
||||
<!-- Left eye white -->
|
||||
<rect x="156" y="144" width="32" height="32" rx="10" fill="#ffffff"/>
|
||||
<!-- Left pupil -->
|
||||
<rect x="164" y="152" width="14" height="14" rx="4" fill="#2a5e45"/>
|
||||
|
||||
<!-- Right eye white -->
|
||||
<rect x="212" y="144" width="32" height="32" rx="10" fill="#ffffff"/>
|
||||
<!-- Right pupil -->
|
||||
<rect x="220" y="152" width="14" height="14" rx="4" fill="#2a5e45"/>
|
||||
|
||||
<!-- Smile -->
|
||||
<path d="M 172 200 Q 200 228 228 200" stroke="#ffffff" stroke-width="6" fill="none" stroke-linecap="round"/>
|
||||
|
||||
<!-- Body -->
|
||||
<rect x="152" y="244" width="96" height="56" rx="12" fill="#3CC98C"/>
|
||||
|
||||
<!-- Tie -->
|
||||
<rect x="192" y="244" width="16" height="30" rx="5" fill="#ffffff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
|
@ -0,0 +1,39 @@
|
|||
<svg width="400" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Background -->
|
||||
<rect width="400" height="400" fill="#ffffff"/>
|
||||
|
||||
<!-- Antenna stick -->
|
||||
<line x1="200" y1="88" x2="200" y2="58" stroke="#3CC98C" stroke-width="7" stroke-linecap="round"/>
|
||||
<!-- Antenna ball -->
|
||||
<circle cx="200" cy="50" r="12" fill="#3CC98C"/>
|
||||
|
||||
<!-- Ear left -->
|
||||
<rect x="108" y="148" width="20" height="46" rx="10" fill="#3CC98C"/>
|
||||
<!-- Ear right -->
|
||||
<rect x="272" y="148" width="20" height="46" rx="10" fill="#3CC98C"/>
|
||||
|
||||
<!-- Head -->
|
||||
<rect x="120" y="88" width="160" height="144" rx="46" fill="#3CC98C"/>
|
||||
|
||||
<!-- Left eye white -->
|
||||
<rect x="156" y="144" width="32" height="32" rx="10" fill="#ffffff"/>
|
||||
<!-- Left pupil -->
|
||||
<rect x="164" y="152" width="14" height="14" rx="4" fill="#2a5e45"/>
|
||||
|
||||
<!-- Right eye white -->
|
||||
<rect x="212" y="144" width="32" height="32" rx="10" fill="#ffffff"/>
|
||||
<!-- Right pupil -->
|
||||
<rect x="220" y="152" width="14" height="14" rx="4" fill="#2a5e45"/>
|
||||
|
||||
<!-- Smile -->
|
||||
<path d="M 172 200 Q 200 228 228 200" stroke="#ffffff" stroke-width="6" fill="none" stroke-linecap="round"/>
|
||||
|
||||
<!-- Body -->
|
||||
<rect x="152" y="244" width="96" height="56" rx="12" fill="#3CC98C"/>
|
||||
|
||||
<!-- Tie -->
|
||||
<rect x="192" y="244" width="16" height="30" rx="5" fill="#ffffff"/>
|
||||
|
||||
<!-- Text -->
|
||||
<text x="200" y="340" text-anchor="middle" font-family="'Helvetica Neue', Arial, sans-serif" font-size="24" font-weight="700" letter-spacing="6" fill="#3CC98C">AI AGENT</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
|
|
@ -111,6 +111,7 @@ export default function AcceptInvitePage() {
|
|||
return (
|
||||
<div className="w-full max-w-md p-8 space-y-6 bg-card rounded-lg border">
|
||||
<div className="text-center">
|
||||
<img src="/icons/logo.svg" alt="IT0" className="w-20 h-20 mx-auto mb-2" />
|
||||
<h1 className="text-3xl font-bold">{t('appTitle')}</h1>
|
||||
<p className="text-muted-foreground mt-2">{t('inviteTitle')}</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ export default function LoginPage() {
|
|||
return (
|
||||
<div className="w-full max-w-md p-8 space-y-6 bg-card rounded-lg border">
|
||||
<div className="text-center">
|
||||
<img src="/icons/logo.svg" alt="IT0" className="w-20 h-20 mx-auto mb-2" />
|
||||
<h1 className="text-3xl font-bold">{t('appTitle')}</h1>
|
||||
<p className="text-muted-foreground mt-2">{t('adminConsole')}</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ export default function RegisterPage() {
|
|||
return (
|
||||
<div className="w-full max-w-md p-8 space-y-6 bg-card rounded-lg border">
|
||||
<div className="text-center">
|
||||
<img src="/icons/logo.svg" alt="IT0" className="w-20 h-20 mx-auto mb-2" />
|
||||
<h1 className="text-3xl font-bold">{t('appTitle')}</h1>
|
||||
<p className="text-muted-foreground mt-2">{t('createAccount')}</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ const inter = Inter({ subsets: ['latin'] });
|
|||
export const metadata: Metadata = {
|
||||
title: 'IT0 Admin Console',
|
||||
description: 'IT Operations Intelligent Agent - Administration Console',
|
||||
icons: { icon: '/icons/favicon.svg', apple: '/icons/logo.svg' },
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
|
|
|||
|
|
@ -167,9 +167,7 @@ export function Sidebar() {
|
|||
{/* Logo area */}
|
||||
<div className={cn('border-b flex items-center', collapsed ? 'px-3 py-4 justify-center' : 'px-4 py-4')}>
|
||||
<div className="flex items-center gap-2.5 min-w-0">
|
||||
<div className="w-8 h-8 rounded-lg bg-primary/15 flex items-center justify-center shrink-0">
|
||||
<span className="text-primary font-bold text-sm">IT</span>
|
||||
</div>
|
||||
<img src="/icons/favicon.svg" alt="IT0" className="w-8 h-8 shrink-0" />
|
||||
{!collapsed && (
|
||||
<div className="min-w-0">
|
||||
<h1 className="text-sm font-semibold tracking-tight truncate">{t('appName')}</h1>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
<svg width="400" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Background -->
|
||||
<rect width="400" height="400" fill="#ffffff"/>
|
||||
|
||||
<!-- Antenna stick -->
|
||||
<line x1="200" y1="88" x2="200" y2="58" stroke="#3CC98C" stroke-width="7" stroke-linecap="round"/>
|
||||
<!-- Antenna ball -->
|
||||
<circle cx="200" cy="50" r="12" fill="#3CC98C"/>
|
||||
|
||||
<!-- Ear left -->
|
||||
<rect x="108" y="148" width="20" height="46" rx="10" fill="#3CC98C"/>
|
||||
<!-- Ear right -->
|
||||
<rect x="272" y="148" width="20" height="46" rx="10" fill="#3CC98C"/>
|
||||
|
||||
<!-- Head -->
|
||||
<rect x="120" y="88" width="160" height="144" rx="46" fill="#3CC98C"/>
|
||||
|
||||
<!-- Left eye white -->
|
||||
<rect x="156" y="144" width="32" height="32" rx="10" fill="#ffffff"/>
|
||||
<!-- Left pupil -->
|
||||
<rect x="164" y="152" width="14" height="14" rx="4" fill="#2a5e45"/>
|
||||
|
||||
<!-- Right eye white -->
|
||||
<rect x="212" y="144" width="32" height="32" rx="10" fill="#ffffff"/>
|
||||
<!-- Right pupil -->
|
||||
<rect x="220" y="152" width="14" height="14" rx="4" fill="#2a5e45"/>
|
||||
|
||||
<!-- Smile -->
|
||||
<path d="M 172 200 Q 200 228 228 200" stroke="#ffffff" stroke-width="6" fill="none" stroke-linecap="round"/>
|
||||
|
||||
<!-- Body -->
|
||||
<rect x="152" y="244" width="96" height="56" rx="12" fill="#3CC98C"/>
|
||||
|
||||
<!-- Tie -->
|
||||
<rect x="192" y="244" width="16" height="30" rx="5" fill="#ffffff"/>
|
||||
|
||||
<!-- Text -->
|
||||
<text x="200" y="340" text-anchor="middle" font-family="'Helvetica Neue', Arial, sans-serif" font-size="24" font-weight="700" letter-spacing="6" fill="#3CC98C">AI AGENT</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import '../../../../core/theme/app_colors.dart';
|
||||
import '../../data/providers/auth_provider.dart';
|
||||
|
|
@ -30,9 +31,10 @@ class _LoginPageState extends ConsumerState<LoginPage> {
|
|||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const Text(
|
||||
'IT0',
|
||||
style: TextStyle(fontSize: 48, fontWeight: FontWeight.bold),
|
||||
SvgPicture.asset(
|
||||
'assets/icons/logo.svg',
|
||||
width: 100,
|
||||
height: 100,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
const Text(
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ dependencies:
|
|||
# UI
|
||||
fl_chart: ^0.67.0
|
||||
flutter_markdown: ^0.7.0
|
||||
flutter_svg: ^2.0.10+1
|
||||
|
||||
# Push Notifications
|
||||
firebase_core: ^2.27.0
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
<svg width="400" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Background -->
|
||||
<rect width="400" height="400" fill="#ffffff"/>
|
||||
|
||||
<!-- Antenna stick -->
|
||||
<line x1="200" y1="88" x2="200" y2="58" stroke="#3CC98C" stroke-width="7" stroke-linecap="round"/>
|
||||
<!-- Antenna ball -->
|
||||
<circle cx="200" cy="50" r="12" fill="#3CC98C"/>
|
||||
|
||||
<!-- Ear left -->
|
||||
<rect x="108" y="148" width="20" height="46" rx="10" fill="#3CC98C"/>
|
||||
<!-- Ear right -->
|
||||
<rect x="272" y="148" width="20" height="46" rx="10" fill="#3CC98C"/>
|
||||
|
||||
<!-- Head -->
|
||||
<rect x="120" y="88" width="160" height="144" rx="46" fill="#3CC98C"/>
|
||||
|
||||
<!-- Left eye white -->
|
||||
<rect x="156" y="144" width="32" height="32" rx="10" fill="#ffffff"/>
|
||||
<!-- Left pupil -->
|
||||
<rect x="164" y="152" width="14" height="14" rx="4" fill="#2a5e45"/>
|
||||
|
||||
<!-- Right eye white -->
|
||||
<rect x="212" y="144" width="32" height="32" rx="10" fill="#ffffff"/>
|
||||
<!-- Right pupil -->
|
||||
<rect x="220" y="152" width="14" height="14" rx="4" fill="#2a5e45"/>
|
||||
|
||||
<!-- Smile -->
|
||||
<path d="M 172 200 Q 200 228 228 200" stroke="#ffffff" stroke-width="6" fill="none" stroke-linecap="round"/>
|
||||
|
||||
<!-- Body -->
|
||||
<rect x="152" y="244" width="96" height="56" rx="12" fill="#3CC98C"/>
|
||||
|
||||
<!-- Tie -->
|
||||
<rect x="192" y="244" width="16" height="30" rx="5" fill="#ffffff"/>
|
||||
|
||||
<!-- Text -->
|
||||
<text x="200" y="340" text-anchor="middle" font-family="'Helvetica Neue', Arial, sans-serif" font-size="24" font-weight="700" letter-spacing="6" fill="#3CC98C">AI AGENT</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
Loading…
Reference in New Issue