feat(branding): integrar splash screen oficial con emblema D sneaker, launcher icon 1:1 y fusion en logo web
BIN
assets_generados/dripzone_app_icon_1787718672979.jpg
Normal file
|
After Width: | Height: | Size: 519 KiB |
BIN
assets_generados/dripzone_icon_website_colors_1787718844595.jpg
Normal file
|
After Width: | Height: | Size: 541 KiB |
BIN
assets_generados/dripzone_splash_clean_1787718656035.jpg
Normal file
|
After Width: | Height: | Size: 548 KiB |
BIN
assets_generados/dripzone_splash_screen_1787718638191.jpg
Normal file
|
After Width: | Height: | Size: 501 KiB |
|
After Width: | Height: | Size: 532 KiB |
BIN
assets_generados/sneaky_app_icon_1787718714277.jpg
Normal file
|
After Width: | Height: | Size: 755 KiB |
BIN
assets_generados/sneaky_splash_clean_1787718693359.jpg
Normal file
|
After Width: | Height: | Size: 848 KiB |
BIN
assets_generados/zapply_splash_clean_1787718738083.jpg
Normal file
|
After Width: | Height: | Size: 608 KiB |
|
Before Width: | Height: | Size: 450 KiB After Width: | Height: | Size: 473 KiB |
|
Before Width: | Height: | Size: 192 KiB After Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 939 KiB After Width: | Height: | Size: 990 KiB |
|
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 2.8 MiB |
|
Before Width: | Height: | Size: 498 KiB After Width: | Height: | Size: 515 KiB |
|
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 214 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 3.0 MiB After Width: | Height: | Size: 3.1 MiB |
|
Before Width: | Height: | Size: 498 KiB After Width: | Height: | Size: 515 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 49 KiB |
BIN
dripzone-app/public/d-emblem.png
Normal file
|
After Width: | Height: | Size: 414 KiB |
BIN
dripzone-app/public/dripzone-logo.png
Normal file
|
After Width: | Height: | Size: 519 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 352 KiB After Width: | Height: | Size: 333 KiB |
BIN
dripzone-app/public/logo.jpg
Normal file
|
After Width: | Height: | Size: 519 KiB |
BIN
dripzone-app/public/logo.png
Normal file
|
After Width: | Height: | Size: 333 KiB |
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.1 MiB |
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
import Image from 'next/image';
|
||||||
import { usePathname } from 'next/navigation';
|
import { usePathname } from 'next/navigation';
|
||||||
import {
|
import {
|
||||||
LayoutDashboard,
|
LayoutDashboard,
|
||||||
@ -38,9 +39,16 @@ export default function AdminLayout({ children }: { children: React.ReactNode })
|
|||||||
<aside className="w-full md:w-64 bg-neutral-900/90 backdrop-blur-xl border-r border-purple-500/20 flex flex-col justify-between shrink-0 p-4">
|
<aside className="w-full md:w-64 bg-neutral-900/90 backdrop-blur-xl border-r border-purple-500/20 flex flex-col justify-between shrink-0 p-4">
|
||||||
<div className="space-y-6">
|
<div className="space-y-6">
|
||||||
{/* Logo */}
|
{/* Logo */}
|
||||||
<div className="flex items-center space-x-2.5 px-2">
|
<div className="flex items-center space-x-3 px-2">
|
||||||
<div className="w-9 h-9 rounded-xl bg-gradient-to-br from-purple-600 to-fuchsia-500 flex items-center justify-center text-white shadow-[0_0_15px_rgba(168,85,247,0.4)]">
|
<div className="relative w-10 h-10 rounded-xl overflow-hidden border border-purple-500/40 shadow-[0_0_15px_rgba(168,85,247,0.4)] shrink-0 bg-neutral-950">
|
||||||
<span className="font-black text-sm">D</span>
|
<Image
|
||||||
|
src="/d-emblem.png"
|
||||||
|
alt="DripZone Admin"
|
||||||
|
width={40}
|
||||||
|
height={40}
|
||||||
|
priority
|
||||||
|
className="object-cover w-full h-full"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h2 className="font-black text-sm text-white tracking-wider">DRIPZONE</h2>
|
<h2 className="font-black text-sm text-white tracking-wider">DRIPZONE</h2>
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
import Image from 'next/image';
|
||||||
import { ShoppingBag, Search, MapPin, Zap, Sparkles, ShieldCheck, Store, User as UserIcon } from 'lucide-react';
|
import { ShoppingBag, Search, MapPin, Zap, Sparkles, ShieldCheck, Store, User as UserIcon } from 'lucide-react';
|
||||||
import { City } from '@/types';
|
import { City } from '@/types';
|
||||||
import { useBrand } from '@/context/BrandContext';
|
import { useBrand } from '@/context/BrandContext';
|
||||||
@ -54,23 +55,26 @@ export const Navbar: React.FC<NavbarProps> = ({
|
|||||||
|
|
||||||
{/* Main Navbar */}
|
{/* Main Navbar */}
|
||||||
<div className="max-w-7xl mx-auto px-4 py-3 flex items-center justify-between gap-3">
|
<div className="max-w-7xl mx-auto px-4 py-3 flex items-center justify-between gap-3">
|
||||||
{/* Brand Logo */}
|
{/* Brand Logo Fusion */}
|
||||||
<Link href="/" className="flex items-center space-x-2.5 shrink-0 group">
|
<Link href="/" className="flex items-center space-x-3 shrink-0 group">
|
||||||
<div className={`w-10 h-10 rounded-xl bg-gradient-to-br ${currentBrand.colors.primaryGradient} p-0.5 ${currentBrand.colors.accentGlow} group-hover:scale-105 transition-transform flex items-center justify-center`}>
|
<div className="relative w-12 h-12 rounded-2xl overflow-hidden border border-purple-500/40 shadow-[0_0_20px_rgba(168,85,247,0.45)] group-hover:scale-105 group-hover:border-purple-400 transition-all duration-300 bg-neutral-950 flex items-center justify-center p-0.5">
|
||||||
<div className="w-full h-full bg-neutral-950 rounded-[10px] flex items-center justify-center">
|
<Image
|
||||||
<span className={`font-black text-xl text-transparent bg-clip-text bg-gradient-to-r ${currentBrand.colors.primaryGradient}`}>
|
src="/d-emblem.png"
|
||||||
{currentBrand.logo.iconText}
|
alt="DripZone Emblem"
|
||||||
</span>
|
width={48}
|
||||||
</div>
|
height={48}
|
||||||
|
priority
|
||||||
|
className="object-cover w-full h-full rounded-xl"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div className="flex items-center space-x-1">
|
<div className="flex items-center space-x-1">
|
||||||
<span className="font-black text-xl tracking-tight text-white">{currentBrand.logo.mainText}</span>
|
<span className="font-black text-xl tracking-tight text-white">DRIP</span>
|
||||||
<span className={`font-black text-xl tracking-tight text-transparent bg-clip-text bg-gradient-to-r ${currentBrand.colors.primaryGradient}`}>
|
<span className={`font-black text-xl tracking-tight text-transparent bg-clip-text bg-gradient-to-r ${currentBrand.colors.primaryGradient}`}>
|
||||||
{currentBrand.logo.accentText}
|
ZONE
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<p className="text-[10px] text-neutral-400 uppercase tracking-widest font-bold -mt-1">{currentBrand.tagline}</p>
|
<p className="text-[10px] text-neutral-400 uppercase tracking-widest font-bold -mt-0.5">{currentBrand.tagline}</p>
|
||||||
</div>
|
</div>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
|
|||||||
@ -124,7 +124,7 @@ export const BRANDS: Record<BrandId, BrandTheme> = {
|
|||||||
id: 'dripzone',
|
id: 'dripzone',
|
||||||
name: 'DRIPZONE',
|
name: 'DRIPZONE',
|
||||||
shortName: 'DripZone',
|
shortName: 'DripZone',
|
||||||
tagline: 'Streetwear & Sneakers Exclusivos',
|
tagline: 'Ropa urbana y zapatillas deportivas',
|
||||||
badge: 'Edición Limitada',
|
badge: 'Edición Limitada',
|
||||||
couponCode: 'DRIP-VIP',
|
couponCode: 'DRIP-VIP',
|
||||||
whatsappNumber: '573167455877',
|
whatsappNumber: '573167455877',
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
SPLASH_SRC = r"C:\Users\Carlos\.gemini\antigravity-ide\brain\1e6eeae9-f978-4645-8d96-5b5676a57162\dripzone_splash_website_colors_1787718779379.jpg"
|
SPLASH_SRC = r"c:\Users\Carlos\dev\almeira-web\assets_generados\dripzone_splash_clean_1787718656035.jpg"
|
||||||
ICON_SRC = r"C:\Users\Carlos\.gemini\antigravity-ide\brain\1e6eeae9-f978-4645-8d96-5b5676a57162\dripzone_icon_website_colors_1787718844595.jpg"
|
ICON_SRC = r"c:\Users\Carlos\dev\almeira-web\assets_generados\dripzone_app_icon_1787718672979.jpg"
|
||||||
RES_DIR = r"c:\Users\Carlos\dev\almeira-web\dripzone-app\android\app\src\main\res"
|
RES_DIR = r"c:\Users\Carlos\dev\almeira-web\dripzone-app\android\app\src\main\res"
|
||||||
|
|
||||||
splash_img = Image.open(SPLASH_SRC).convert('RGBA')
|
splash_img = Image.open(SPLASH_SRC).convert('RGBA')
|
||||||
@ -32,7 +32,7 @@ icon_sizes = {
|
|||||||
'mipmap-xxxhdpi': 192,
|
'mipmap-xxxhdpi': 192,
|
||||||
}
|
}
|
||||||
|
|
||||||
print("-> Actualizando Splash Screens de DripZone...")
|
print("-> Actualizando Splash Screens de DripZone con la imagen oficial...")
|
||||||
for folder, size in splash_sizes.items():
|
for folder, size in splash_sizes.items():
|
||||||
target_dir = os.path.join(RES_DIR, folder)
|
target_dir = os.path.join(RES_DIR, folder)
|
||||||
os.makedirs(target_dir, exist_ok=True)
|
os.makedirs(target_dir, exist_ok=True)
|
||||||
@ -41,24 +41,27 @@ for folder, size in splash_sizes.items():
|
|||||||
resized.save(target_path, 'PNG')
|
resized.save(target_path, 'PNG')
|
||||||
print(f" [OK] {folder}/splash.png ({size[0]}x{size[1]})")
|
print(f" [OK] {folder}/splash.png ({size[0]}x{size[1]})")
|
||||||
|
|
||||||
print("\n-> Actualizando Iconos de la Aplicacion (Launcher Icons)...")
|
print("\n-> Actualizando Iconos de la Aplicacion (Launcher Icons con el logo DRIPZONE)...")
|
||||||
for folder, size in icon_sizes.items():
|
for folder, size in icon_sizes.items():
|
||||||
target_dir = os.path.join(RES_DIR, folder)
|
target_dir = os.path.join(RES_DIR, folder)
|
||||||
os.makedirs(target_dir, exist_ok=True)
|
os.makedirs(target_dir, exist_ok=True)
|
||||||
resized_icon = icon_img.resize((size, size), Image.Resampling.LANCZOS)
|
resized_icon = icon_img.resize((size, size), Image.Resampling.LANCZOS)
|
||||||
|
|
||||||
# ic_launcher.png
|
|
||||||
resized_icon.save(os.path.join(target_dir, 'ic_launcher.png'), 'PNG')
|
resized_icon.save(os.path.join(target_dir, 'ic_launcher.png'), 'PNG')
|
||||||
# ic_launcher_round.png
|
|
||||||
resized_icon.save(os.path.join(target_dir, 'ic_launcher_round.png'), 'PNG')
|
resized_icon.save(os.path.join(target_dir, 'ic_launcher_round.png'), 'PNG')
|
||||||
# ic_launcher_foreground.png
|
|
||||||
resized_icon.save(os.path.join(target_dir, 'ic_launcher_foreground.png'), 'PNG')
|
resized_icon.save(os.path.join(target_dir, 'ic_launcher_foreground.png'), 'PNG')
|
||||||
print(f" [OK] {folder} ({size}x{size})")
|
print(f" [OK] {folder} ({size}x{size})")
|
||||||
|
|
||||||
# También actualizar en public/ de dripzone-app para PWA e iconos web
|
# Actualizar en public/ de dripzone-app
|
||||||
public_dir = r"c:\Users\Carlos\dev\almeira-web\dripzone-app\public"
|
public_dir = r"c:\Users\Carlos\dev\almeira-web\dripzone-app\public"
|
||||||
splash_img.resize((1080, 1920), Image.Resampling.LANCZOS).save(os.path.join(public_dir, 'splash.png'), 'PNG')
|
splash_img.resize((1080, 1920), Image.Resampling.LANCZOS).save(os.path.join(public_dir, 'splash.png'), 'PNG')
|
||||||
icon_img.resize((512, 512), Image.Resampling.LANCZOS).save(os.path.join(public_dir, 'icon.png'), 'PNG')
|
icon_img.resize((512, 512), Image.Resampling.LANCZOS).save(os.path.join(public_dir, 'icon.png'), 'PNG')
|
||||||
icon_img.resize((192, 192), Image.Resampling.LANCZOS).save(os.path.join(public_dir, 'icon-192.png'), 'PNG')
|
icon_img.resize((192, 192), Image.Resampling.LANCZOS).save(os.path.join(public_dir, 'icon-192.png'), 'PNG')
|
||||||
|
icon_img.resize((512, 512), Image.Resampling.LANCZOS).save(os.path.join(public_dir, 'logo.png'), 'PNG')
|
||||||
|
|
||||||
print("\n[EXITO] Todos los assets nativos de Android y Web quedaron actualizados con la marca oficial DripZone.")
|
# Generar D-Emblem recortado para el Header Web (Fusión)
|
||||||
|
w, h = splash_img.size
|
||||||
|
crop_sq = splash_img.crop((125, 230, 645, 750)).resize((512, 512), Image.Resampling.LANCZOS)
|
||||||
|
crop_sq.save(os.path.join(public_dir, 'd-emblem.png'), 'PNG')
|
||||||
|
|
||||||
|
print("\n[EXITO] Splash Screen, Icono de Aplicacion y D-Emblem actualizados correctamente.")
|
||||||
|
|||||||