feat: rebrand application from Padel Pro to SmashPoint

Complete rename across all layers: UI branding, package names
(@smashpoint/web, @smashpoint/shared), infrastructure (Docker,
DB config), seed data, documentation, and logo/favicon.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Ivan
2026-02-08 02:46:29 +00:00
parent 242b8bad3d
commit 45ceeba9e3
27 changed files with 152 additions and 147 deletions

View File

@@ -55,8 +55,8 @@ export default function SettingsPage() {
const [message, setMessage] = useState<{ type: "success" | "error"; text: string } | null>(null);
// Organization state
const [orgName, setOrgName] = useState("Padel Pro Demo");
const [orgEmail, setOrgEmail] = useState("info@padelpro.com");
const [orgName, setOrgName] = useState("SmashPoint Demo");
const [orgEmail, setOrgEmail] = useState("info@smashpoint.com");
const [orgPhone, setOrgPhone] = useState("+52 555 123 4567");
const [currency, setCurrency] = useState("MXN");
const [timezone, setTimezone] = useState("America/Mexico_City");

View File

@@ -11,29 +11,20 @@ function LoginContent() {
<div className="max-w-md text-center">
{/* Logo */}
<div className="mb-8 flex justify-center">
<div className="w-24 h-24 bg-white/10 backdrop-blur-sm rounded-2xl flex items-center justify-center border border-white/20">
<svg
viewBox="0 0 100 100"
className="w-16 h-16 text-white"
fill="currentColor"
>
{/* Padel racket stylized icon */}
<ellipse cx="50" cy="40" rx="28" ry="35" fill="none" stroke="currentColor" strokeWidth="4" />
<line x1="50" y1="75" x2="50" y2="95" stroke="currentColor" strokeWidth="6" strokeLinecap="round" />
<circle cx="35" cy="30" r="3" />
<circle cx="50" cy="25" r="3" />
<circle cx="65" cy="30" r="3" />
<circle cx="35" cy="45" r="3" />
<circle cx="50" cy="40" r="3" />
<circle cx="65" cy="45" r="3" />
<circle cx="42" cy="55" r="3" />
<circle cx="58" cy="55" r="3" />
<div className="w-24 h-24 bg-amber-500/20 backdrop-blur-sm rounded-2xl flex items-center justify-center border border-amber-400/30">
<svg viewBox="0 0 100 100" className="w-16 h-16" fill="none">
{/* Lightning bolt / smash icon */}
<path d="M55 10L20 55h25l-10 35L70 45H45l10-35z" fill="#FBBF24" />
{/* Impact sparks */}
<circle cx="78" cy="18" r="4" fill="#FBBF24" opacity="0.8" />
<circle cx="85" cy="28" r="2.5" fill="#FBBF24" opacity="0.6" />
<circle cx="72" cy="10" r="2" fill="#FBBF24" opacity="0.5" />
</svg>
</div>
</div>
{/* Title */}
<h1 className="text-4xl font-bold mb-4">Padel Pro</h1>
<h1 className="text-4xl font-bold mb-4">SmashPoint</h1>
{/* Tagline */}
<p className="text-xl text-primary-200 mb-8">
@@ -104,25 +95,15 @@ function LoginContent() {
<div className="w-full lg:w-1/2 flex flex-col justify-center items-center p-6 lg:p-12">
{/* Mobile Logo */}
<div className="lg:hidden mb-8 text-center text-white">
<div className="w-16 h-16 mx-auto mb-4 bg-white/10 backdrop-blur-sm rounded-xl flex items-center justify-center border border-white/20">
<svg
viewBox="0 0 100 100"
className="w-10 h-10 text-white"
fill="currentColor"
>
<ellipse cx="50" cy="40" rx="28" ry="35" fill="none" stroke="currentColor" strokeWidth="4" />
<line x1="50" y1="75" x2="50" y2="95" stroke="currentColor" strokeWidth="6" strokeLinecap="round" />
<circle cx="35" cy="30" r="3" />
<circle cx="50" cy="25" r="3" />
<circle cx="65" cy="30" r="3" />
<circle cx="35" cy="45" r="3" />
<circle cx="50" cy="40" r="3" />
<circle cx="65" cy="45" r="3" />
<circle cx="42" cy="55" r="3" />
<circle cx="58" cy="55" r="3" />
<div className="w-16 h-16 mx-auto mb-4 bg-amber-500/20 backdrop-blur-sm rounded-xl flex items-center justify-center border border-amber-400/30">
<svg viewBox="0 0 100 100" className="w-10 h-10" fill="none">
<path d="M55 10L20 55h25l-10 35L70 45H45l10-35z" fill="#FBBF24" />
<circle cx="78" cy="18" r="4" fill="#FBBF24" opacity="0.8" />
<circle cx="85" cy="28" r="2.5" fill="#FBBF24" opacity="0.6" />
<circle cx="72" cy="10" r="2" fill="#FBBF24" opacity="0.5" />
</svg>
</div>
<h1 className="text-2xl font-bold">Padel Pro</h1>
<h1 className="text-2xl font-bold">SmashPoint</h1>
<p className="text-sm text-primary-200 mt-1">Sistema de Gestion para Clubes de Padel</p>
</div>
@@ -130,7 +111,7 @@ function LoginContent() {
{/* Footer */}
<p className="mt-8 text-center text-sm text-primary-300">
&copy; {new Date().getFullYear()} Padel Pro. Todos los derechos reservados.
&copy; {new Date().getFullYear()} SmashPoint. Todos los derechos reservados.
</p>
</div>
</div>

View File

@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';
import { db } from '@/lib/db';
import { createBookingSchema } from '@padel-pro/shared';
import { createBookingSchema } from '@smashpoint/shared';
import { Decimal } from '@prisma/client/runtime/library';
// Helper function to check if a time is premium (after 18:00 or weekend)

View File

@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';
import { db } from '@/lib/db';
import { createClientSchema } from '@padel-pro/shared';
import { createClientSchema } from '@smashpoint/shared';
// GET /api/clients - List/search clients
export async function GET(request: NextRequest) {

6
apps/web/app/icon.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none">
<rect width="32" height="32" rx="8" fill="#F59E0B"/>
<path d="M17.5 3L6.5 17h8l-3 12L22.5 15H14.5l3-12z" fill="white"/>
<circle cx="25" cy="6" r="1.5" fill="white" opacity="0.8"/>
<circle cx="27" cy="9" r="1" fill="white" opacity="0.6"/>
</svg>

After

Width:  |  Height:  |  Size: 326 B

View File

@@ -5,10 +5,10 @@ import "./globals.css";
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
title: "Padel Pro",
title: "SmashPoint",
description: "Sistema de Gestión para Clubes de Pádel",
keywords: ["padel", "club", "reservas", "gestión", "deportes"],
authors: [{ name: "Padel Pro Team" }],
authors: [{ name: "SmashPoint Team" }],
};
export default function RootLayout({

View File

@@ -4,8 +4,19 @@ export default function Home() {
return (
<main className="min-h-screen flex flex-col items-center justify-center bg-gradient-to-br from-primary-50 to-primary-100">
<div className="text-center space-y-8 px-4">
{/* Logo */}
<div className="flex justify-center">
<div className="w-20 h-20 bg-amber-500 rounded-2xl flex items-center justify-center shadow-lg">
<svg viewBox="0 0 40 40" className="w-12 h-12 text-white" fill="none">
<path d="M22 4L8 22h10l-4 14L28 18H18l4-14z" fill="currentColor" />
<circle cx="32" cy="8" r="2" fill="currentColor" opacity="0.8" />
<circle cx="35" cy="12" r="1.2" fill="currentColor" opacity="0.6" />
<circle cx="30" cy="4" r="1" fill="currentColor" opacity="0.5" />
</svg>
</div>
</div>
<h1 className="text-5xl md:text-6xl font-bold text-primary-800">
Padel Pro
SmashPoint
</h1>
<p className="text-xl md:text-2xl text-primary-600 max-w-2xl mx-auto">
Sistema de Gestion para Clubes de Padel