Initial commit: SmoothSchedule multi-tenant scheduling platform

This commit includes:
- Django backend with multi-tenancy (django-tenants)
- React + TypeScript frontend with Vite
- Platform administration API with role-based access control
- Authentication system with token-based auth
- Quick login dev tools for testing different user roles
- CORS and CSRF configuration for local development
- Docker development environment setup

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-11-27 01:43:20 -05:00
commit 2e111364a2
567 changed files with 96410 additions and 0 deletions

View File

@@ -0,0 +1,688 @@
{
"common": {
"loading": "Cargando...",
"error": "Error",
"success": "Exitoso",
"save": "Guardar",
"saveChanges": "Guardar Cambios",
"cancel": "Cancelar",
"delete": "Eliminar",
"edit": "Editar",
"create": "Crear",
"update": "Actualizar",
"close": "Cerrar",
"confirm": "Confirmar",
"back": "Atrás",
"next": "Siguiente",
"search": "Buscar",
"filter": "Filtrar",
"actions": "Acciones",
"settings": "Configuración",
"reload": "Recargar",
"viewAll": "Ver Todo",
"learnMore": "Más Información",
"poweredBy": "Desarrollado por",
"required": "Requerido",
"optional": "Opcional",
"masquerade": "Suplantar",
"masqueradeAsUser": "Suplantar como Usuario"
},
"auth": {
"signIn": "Iniciar sesión",
"signOut": "Cerrar Sesión",
"signingIn": "Iniciando sesión...",
"username": "Nombre de usuario",
"password": "Contraseña",
"enterUsername": "Ingresa tu nombre de usuario",
"enterPassword": "Ingresa tu contraseña",
"welcomeBack": "Bienvenido de nuevo",
"pleaseEnterDetails": "Por favor ingresa tus datos para iniciar sesión.",
"authError": "Error de Autenticación",
"invalidCredentials": "Credenciales inválidas",
"orContinueWith": "O continuar con",
"loginAtSubdomain": "Por favor inicia sesión en el subdominio de tu negocio. El personal y los clientes no pueden iniciar sesión desde el sitio principal.",
"forgotPassword": "¿Olvidaste tu contraseña?",
"rememberMe": "Recordarme",
"twoFactorRequired": "Se requiere autenticación de dos factores",
"enterCode": "Ingresa el código de verificación",
"verifyCode": "Verificar Código"
},
"nav": {
"dashboard": "Panel",
"scheduler": "Agenda",
"customers": "Clientes",
"resources": "Recursos",
"payments": "Pagos",
"messages": "Mensajes",
"staff": "Personal",
"businessSettings": "Configuración del Negocio",
"profile": "Perfil",
"platformDashboard": "Panel de Plataforma",
"businesses": "Negocios",
"users": "Usuarios",
"support": "Soporte",
"platformSettings": "Configuración de Plataforma"
},
"dashboard": {
"title": "Panel",
"welcome": "¡Bienvenido, {{name}}!",
"todayOverview": "Resumen de Hoy",
"upcomingAppointments": "Próximas Citas",
"recentActivity": "Actividad Reciente",
"quickActions": "Acciones Rápidas",
"totalRevenue": "Ingresos Totales",
"totalAppointments": "Citas Totales",
"newCustomers": "Nuevos Clientes",
"pendingPayments": "Pagos Pendientes"
},
"scheduler": {
"title": "Agenda",
"newAppointment": "Nueva Cita",
"editAppointment": "Editar Cita",
"deleteAppointment": "Eliminar Cita",
"selectResource": "Seleccionar Recurso",
"selectService": "Seleccionar Servicio",
"selectCustomer": "Seleccionar Cliente",
"selectDate": "Seleccionar Fecha",
"selectTime": "Seleccionar Hora",
"duration": "Duración",
"notes": "Notas",
"status": "Estado",
"confirmed": "Confirmada",
"pending": "Pendiente",
"cancelled": "Cancelada",
"completed": "Completada",
"noShow": "No Presentado",
"today": "Hoy",
"week": "Semana",
"month": "Mes",
"day": "Día",
"timeline": "Línea de Tiempo",
"agenda": "Agenda",
"allResources": "Todos los Recursos"
},
"customers": {
"title": "Clientes",
"description": "Administra tu base de clientes y consulta el historial.",
"addCustomer": "Agregar Cliente",
"editCustomer": "Editar Cliente",
"customerDetails": "Detalles del Cliente",
"name": "Nombre",
"fullName": "Nombre Completo",
"email": "Correo Electrónico",
"emailAddress": "Dirección de Correo",
"phone": "Teléfono",
"phoneNumber": "Número de Teléfono",
"address": "Dirección",
"city": "Ciudad",
"state": "Estado",
"zipCode": "Código Postal",
"tags": "Etiquetas",
"tagsPlaceholder": "ej. VIP, Referido",
"tagsCommaSeparated": "Etiquetas (separadas por coma)",
"appointmentHistory": "Historial de Citas",
"noAppointments": "Sin citas aún",
"totalSpent": "Total Gastado",
"totalSpend": "Gasto Total",
"lastVisit": "Última Visita",
"nextAppointment": "Próxima Cita",
"contactInfo": "Información de Contacto",
"status": "Estado",
"active": "Activo",
"inactive": "Inactivo",
"never": "Nunca",
"customer": "Cliente",
"searchPlaceholder": "Buscar por nombre, correo o teléfono...",
"filters": "Filtros",
"noCustomersFound": "No se encontraron clientes que coincidan con tu búsqueda.",
"addNewCustomer": "Agregar Nuevo Cliente",
"createCustomer": "Crear Cliente",
"errorLoading": "Error al cargar clientes"
},
"staff": {
"title": "Personal y Administración",
"description": "Administra cuentas de usuario y permisos.",
"inviteStaff": "Invitar Personal",
"name": "Nombre",
"role": "Rol",
"bookableResource": "Recurso Reservable",
"makeBookable": "Hacer Reservable",
"yes": "Sí",
"errorLoading": "Error al cargar personal",
"inviteModalTitle": "Invitar Personal",
"inviteModalDescription": "El flujo de invitación de usuarios iría aquí."
},
"resources": {
"title": "Recursos",
"description": "Administra tu personal, salas y equipos.",
"addResource": "Agregar Recurso",
"editResource": "Editar Recurso",
"resourceDetails": "Detalles del Recurso",
"resourceName": "Nombre del Recurso",
"name": "Nombre",
"type": "Tipo",
"resourceType": "Tipo de Recurso",
"availability": "Disponibilidad",
"services": "Servicios",
"schedule": "Horario",
"active": "Activo",
"inactive": "Inactivo",
"upcoming": "Próximas",
"appointments": "citas",
"viewCalendar": "Ver Calendario",
"noResourcesFound": "No se encontraron recursos.",
"addNewResource": "Agregar Nuevo Recurso",
"createResource": "Crear Recurso",
"staffMember": "Miembro del Personal",
"room": "Sala",
"equipment": "Equipo",
"resourceNote": "Los recursos son marcadores de posición para programación. El personal puede asignarse a las citas por separado.",
"errorLoading": "Error al cargar recursos"
},
"services": {
"title": "Servicios",
"addService": "Agregar Servicio",
"editService": "Editar Servicio",
"name": "Nombre",
"description": "Descripción",
"duration": "Duración",
"price": "Precio",
"category": "Categoría",
"active": "Activo"
},
"payments": {
"title": "Pagos",
"transactions": "Transacciones",
"invoices": "Facturas",
"amount": "Monto",
"status": "Estado",
"date": "Fecha",
"method": "Método",
"paid": "Pagado",
"unpaid": "Sin Pagar",
"refunded": "Reembolsado",
"pending": "Pendiente",
"viewDetails": "Ver Detalles",
"issueRefund": "Emitir Reembolso",
"sendReminder": "Enviar Recordatorio",
"paymentSettings": "Configuración de Pagos",
"stripeConnect": "Stripe Connect",
"apiKeys": "Claves API"
},
"settings": {
"title": "Configuración",
"businessSettings": "Configuración del Negocio",
"businessSettingsDescription": "Administra tu marca, dominio y políticas.",
"domainIdentity": "Dominio e Identidad",
"bookingPolicy": "Política de Reservas y Cancelaciones",
"savedSuccessfully": "Configuración guardada exitosamente",
"general": "General",
"branding": "Marca",
"notifications": "Notificaciones",
"security": "Seguridad",
"integrations": "Integraciones",
"billing": "Facturación",
"businessName": "Nombre del Negocio",
"subdomain": "Subdominio",
"primaryColor": "Color Primario",
"secondaryColor": "Color Secundario",
"logo": "Logo",
"uploadLogo": "Subir Logo",
"timezone": "Zona Horaria",
"language": "Idioma",
"currency": "Moneda",
"dateFormat": "Formato de Fecha",
"timeFormat": "Formato de Hora",
"oauth": {
"title": "Configuración OAuth",
"enabledProviders": "Proveedores Habilitados",
"allowRegistration": "Permitir Registro vía OAuth",
"autoLinkByEmail": "Vincular cuentas automáticamente por correo",
"customCredentials": "Credenciales OAuth Personalizadas",
"customCredentialsDesc": "Usa tus propias credenciales OAuth para una experiencia de marca blanca",
"platformCredentials": "Credenciales de Plataforma",
"platformCredentialsDesc": "Usando credenciales OAuth proporcionadas por la plataforma",
"clientId": "ID de Cliente",
"clientSecret": "Secreto de Cliente",
"paidTierOnly": "Las credenciales OAuth personalizadas solo están disponibles para planes de pago"
}
},
"profile": {
"title": "Configuración de Perfil",
"personalInfo": "Información Personal",
"changePassword": "Cambiar Contraseña",
"twoFactor": "Autenticación de Dos Factores",
"sessions": "Sesiones Activas",
"emails": "Direcciones de Correo",
"preferences": "Preferencias",
"currentPassword": "Contraseña Actual",
"newPassword": "Nueva Contraseña",
"confirmPassword": "Confirmar Contraseña",
"passwordChanged": "Contraseña cambiada exitosamente",
"enable2FA": "Habilitar Autenticación de Dos Factores",
"disable2FA": "Deshabilitar Autenticación de Dos Factores",
"scanQRCode": "Escanear Código QR",
"enterBackupCode": "Ingresar Código de Respaldo",
"recoveryCodes": "Códigos de Recuperación"
},
"platform": {
"title": "Administración de Plataforma",
"dashboard": "Panel de Plataforma",
"overview": "Resumen de Plataforma",
"overviewDescription": "Métricas globales de todos los inquilinos.",
"mrrGrowth": "Crecimiento MRR",
"totalBusinesses": "Negocios Totales",
"totalUsers": "Usuarios Totales",
"monthlyRevenue": "Ingresos Mensuales",
"activeSubscriptions": "Suscripciones Activas",
"recentSignups": "Registros Recientes",
"supportTickets": "Tickets de Soporte",
"supportDescription": "Resolver problemas reportados por inquilinos.",
"reportedBy": "Reportado por",
"priority": "Prioridad",
"businessManagement": "Gestión de Negocios",
"userManagement": "Gestión de Usuarios",
"masquerade": "Suplantar",
"masqueradeAs": "Suplantar a",
"exitMasquerade": "Salir de Suplantación",
"businesses": "Negocios",
"businessesDescription": "Administrar inquilinos, planes y acceso.",
"addNewTenant": "Agregar Nuevo Inquilino",
"searchBusinesses": "Buscar negocios...",
"businessName": "Nombre del Negocio",
"subdomain": "Subdominio",
"plan": "Plan",
"status": "Estado",
"joined": "Registrado",
"userDirectory": "Directorio de Usuarios",
"userDirectoryDescription": "Ver y administrar todos los usuarios de la plataforma.",
"searchUsers": "Buscar usuarios por nombre o email...",
"allRoles": "Todos los Roles",
"user": "Usuario",
"role": "Rol",
"email": "Email",
"noUsersFound": "No se encontraron usuarios con los filtros seleccionados.",
"roles": {
"superuser": "Superusuario",
"platformManager": "Administrador de Plataforma",
"businessOwner": "Propietario de Negocio",
"staff": "Personal",
"customer": "Cliente"
},
"settings": {
"title": "Configuración de Plataforma",
"description": "Configurar ajustes e integraciones de la plataforma",
"tiersPricing": "Niveles y Precios",
"oauthProviders": "Proveedores OAuth",
"general": "General",
"oauth": "Proveedores OAuth",
"payments": "Pagos",
"email": "Correo Electrónico",
"branding": "Marca"
}
},
"errors": {
"generic": "Algo salió mal. Por favor intenta de nuevo.",
"networkError": "Error de red. Por favor verifica tu conexión.",
"unauthorized": "No estás autorizado para realizar esta acción.",
"notFound": "El recurso solicitado no fue encontrado.",
"validation": "Por favor verifica tu entrada e intenta de nuevo.",
"businessNotFound": "Negocio No Encontrado",
"wrongLocation": "Ubicación Incorrecta",
"accessDenied": "Acceso Denegado"
},
"validation": {
"required": "Este campo es requerido",
"email": "Por favor ingresa una dirección de correo válida",
"minLength": "Debe tener al menos {{min}} caracteres",
"maxLength": "Debe tener como máximo {{max}} caracteres",
"passwordMatch": "Las contraseñas no coinciden",
"invalidPhone": "Por favor ingresa un número de teléfono válido"
},
"time": {
"minutes": "minutos",
"hours": "horas",
"days": "días",
"today": "Hoy",
"tomorrow": "Mañana",
"yesterday": "Ayer",
"thisWeek": "Esta Semana",
"thisMonth": "Este Mes",
"am": "AM",
"pm": "PM"
},
"marketing": {
"tagline": "Orquesta tu negocio con precisión.",
"description": "La plataforma de agendamiento todo en uno para negocios de todos los tamaños. Gestiona recursos, personal y reservas sin esfuerzo.",
"copyright": "Smooth Schedule Inc.",
"nav": {
"features": "Características",
"pricing": "Precios",
"about": "Nosotros",
"contact": "Contacto",
"login": "Iniciar Sesión",
"getStarted": "Comenzar",
"startFreeTrial": "Prueba Gratuita"
},
"hero": {
"headline": "Programación Simple",
"subheadline": "La plataforma todo en uno para gestionar citas, recursos y clientes. Comienza gratis, escala según crezcas.",
"cta": "Comenzar Prueba Gratuita",
"secondaryCta": "Ver Demo",
"trustedBy": "Más de 1,000 empresas confían en nosotros"
},
"features": {
"title": "Todo lo que Necesitas",
"subtitle": "Características poderosas para tu negocio de servicios",
"scheduling": {
"title": "Programación Inteligente",
"description": "Calendario drag-and-drop con disponibilidad en tiempo real, recordatorios automáticos y detección de conflictos."
},
"resources": {
"title": "Gestión de Recursos",
"description": "Gestiona personal, salas y equipos. Configura disponibilidad, habilidades y reglas de reserva."
},
"customers": {
"title": "Portal de Clientes",
"description": "Portal de autoservicio para clientes. Ver historial, gestionar citas y guardar métodos de pago."
},
"payments": {
"title": "Pagos Integrados",
"description": "Acepta pagos online con Stripe. Depósitos, pagos completos y facturación automática."
},
"multiTenant": {
"title": "Soporte Multi-Ubicación",
"description": "Gestiona múltiples ubicaciones o marcas desde un solo panel con datos aislados."
},
"whiteLabel": {
"title": "Marca Blanca",
"description": "Dominio personalizado, branding y elimina la marca SmoothSchedule para una experiencia sin costuras."
},
"analytics": {
"title": "Analíticas e Informes",
"description": "Rastrea ingresos, citas y tendencias de clientes con hermosos dashboards."
},
"integrations": {
"title": "Integraciones Poderosas",
"description": "Conecta con Google Calendar, Zoom, Stripe y más. Acceso API para integraciones personalizadas."
}
},
"howItWorks": {
"title": "Comienza en Minutos",
"subtitle": "Tres pasos simples para transformar tu programación",
"step1": {
"title": "Crea tu Cuenta",
"description": "Regístrate gratis y configura tu perfil de negocio en minutos."
},
"step2": {
"title": "Añade tus Servicios",
"description": "Configura tus servicios, precios y recursos disponibles."
},
"step3": {
"title": "Comienza a Reservar",
"description": "Comparte tu enlace de reservas y deja que los clientes agenden al instante."
}
},
"pricing": {
"title": "Precios Simples y Transparentes",
"subtitle": "Comienza gratis, actualiza según crezcas. Sin cargos ocultos.",
"monthly": "Mensual",
"annual": "Anual",
"annualSave": "Ahorra 20%",
"perMonth": "/mes",
"period": "mes",
"popular": "Más Popular",
"mostPopular": "Más Popular",
"getStarted": "Comenzar",
"contactSales": "Contactar Ventas",
"freeTrial": "14 días de prueba gratis",
"noCredit": "Sin tarjeta de crédito requerida",
"features": "Características",
"tiers": {
"free": {
"name": "Gratis",
"description": "Perfecto para comenzar",
"price": "0",
"features": [
"Hasta 2 recursos",
"Programación básica",
"Gestión de clientes",
"Integración directa con Stripe",
"Subdominio (negocio.smoothschedule.com)",
"Soporte comunitario"
],
"transactionFee": "2.5% + $0.30 por transacción"
},
"professional": {
"name": "Profesional",
"description": "Para negocios en crecimiento",
"price": "29",
"annualPrice": "290",
"features": [
"Hasta 10 recursos",
"Dominio personalizado",
"Stripe Connect (menores comisiones)",
"Marca blanca",
"Recordatorios por email",
"Soporte email prioritario"
],
"transactionFee": "1.5% + $0.25 por transacción"
},
"business": {
"name": "Negocio",
"description": "Para equipos establecidos",
"price": "79",
"annualPrice": "790",
"features": [
"Recursos ilimitados",
"Todas las características Profesional",
"Gestión de equipo",
"Analíticas avanzadas",
"Acceso API",
"Soporte telefónico"
],
"transactionFee": "0.5% + $0.20 por transacción"
},
"enterprise": {
"name": "Empresarial",
"description": "Para grandes organizaciones",
"price": "Personalizado",
"features": [
"Todas las características Negocio",
"Integraciones personalizadas",
"Gerente de éxito dedicado",
"Garantías SLA",
"Contratos personalizados",
"Opción on-premise"
],
"transactionFee": "Comisiones de transacción personalizadas"
}
}
},
"testimonials": {
"title": "Amado por Negocios en Todas Partes",
"subtitle": "Mira lo que dicen nuestros clientes"
},
"stats": {
"appointments": "Citas Programadas",
"businesses": "Negocios",
"countries": "Países",
"uptime": "Tiempo de Actividad"
},
"signup": {
"title": "Crea tu Cuenta",
"subtitle": "Comienza tu prueba gratis hoy. Sin tarjeta de crédito requerida.",
"steps": {
"business": "Negocio",
"account": "Cuenta",
"plan": "Plan",
"confirm": "Confirmar"
},
"businessInfo": {
"title": "Cuéntanos sobre tu negocio",
"name": "Nombre del Negocio",
"namePlaceholder": "ej., Salón y Spa Acme",
"subdomain": "Elige tu Subdominio",
"checking": "Verificando disponibilidad...",
"available": "¡Disponible!",
"taken": "Ya está en uso"
},
"accountInfo": {
"title": "Crea tu cuenta de administrador",
"firstName": "Nombre",
"lastName": "Apellido",
"email": "Correo Electrónico",
"password": "Contraseña",
"confirmPassword": "Confirmar Contraseña"
},
"planSelection": {
"title": "Elige tu Plan"
},
"confirm": {
"title": "Revisa tus Datos",
"business": "Negocio",
"account": "Cuenta",
"plan": "Plan Seleccionado",
"terms": "Al crear tu cuenta, aceptas nuestros Términos de Servicio y Política de Privacidad."
},
"errors": {
"businessNameRequired": "El nombre del negocio es requerido",
"subdomainRequired": "El subdominio es requerido",
"subdomainTooShort": "El subdominio debe tener al menos 3 caracteres",
"subdomainInvalid": "El subdominio solo puede contener letras minúsculas, números y guiones",
"subdomainTaken": "Este subdominio ya está en uso",
"firstNameRequired": "El nombre es requerido",
"lastNameRequired": "El apellido es requerido",
"emailRequired": "El correo electrónico es requerido",
"emailInvalid": "Ingresa un correo electrónico válido",
"passwordRequired": "La contraseña es requerida",
"passwordTooShort": "La contraseña debe tener al menos 8 caracteres",
"passwordMismatch": "Las contraseñas no coinciden",
"generic": "Algo salió mal. Por favor intenta de nuevo."
},
"success": {
"title": "¡Bienvenido a Smooth Schedule!",
"message": "Tu cuenta ha sido creada exitosamente.",
"yourUrl": "Tu URL de reservas",
"checkEmail": "Te hemos enviado un email de verificación. Por favor verifica tu email para activar todas las funciones.",
"goToLogin": "Ir al Inicio de Sesión"
},
"back": "Atrás",
"next": "Siguiente",
"creating": "Creando cuenta...",
"createAccount": "Crear Cuenta",
"haveAccount": "¿Ya tienes una cuenta?",
"signIn": "Iniciar sesión"
},
"faq": {
"title": "Preguntas Frecuentes",
"subtitle": "¿Tienes preguntas? Tenemos respuestas.",
"questions": {
"trial": {
"question": "¿Ofrecen prueba gratuita?",
"answer": "¡Sí! Todos los planes de pago incluyen 14 días de prueba gratis. No se requiere tarjeta de crédito para comenzar."
},
"cancel": {
"question": "¿Puedo cancelar en cualquier momento?",
"answer": "Absolutamente. Puedes cancelar tu suscripción en cualquier momento sin cargos de cancelación."
},
"payment": {
"question": "¿Qué métodos de pago aceptan?",
"answer": "Aceptamos todas las tarjetas de crédito principales a través de Stripe, incluyendo Visa, Mastercard y American Express."
},
"migrate": {
"question": "¿Puedo migrar desde otra plataforma?",
"answer": "¡Sí! Nuestro equipo puede ayudarte a migrar tus datos existentes desde otras plataformas de programación."
},
"support": {
"question": "¿Qué tipo de soporte ofrecen?",
"answer": "El plan gratuito incluye soporte comunitario. Profesional y superiores tienen soporte por email, y Negocio/Empresarial tienen soporte telefónico."
},
"customDomain": {
"question": "¿Cómo funcionan los dominios personalizados?",
"answer": "Los planes Profesional y superiores pueden usar tu propio dominio (ej., reservas.tunegocio.com) en lugar de nuestro subdominio."
}
}
},
"about": {
"title": "Sobre Smooth Schedule",
"subtitle": "Estamos en una misión para simplificar la programación para negocios en todas partes.",
"story": {
"title": "Nuestra Historia",
"content": "Smooth Schedule fue fundado con una simple creencia: la programación no debería ser complicada. Hemos construido una plataforma que facilita a negocios de todos los tamaños gestionar sus citas, recursos y clientes."
},
"mission": {
"title": "Nuestra Misión",
"content": "Empoderar negocios de servicios con las herramientas que necesitan para crecer, mientras dan a sus clientes una experiencia de reserva sin problemas."
},
"values": {
"title": "Nuestros Valores",
"simplicity": {
"title": "Simplicidad",
"description": "Creemos que el software poderoso aún puede ser simple de usar."
},
"reliability": {
"title": "Confiabilidad",
"description": "Tu negocio depende de nosotros, así que nunca comprometemos el tiempo de actividad."
},
"transparency": {
"title": "Transparencia",
"description": "Sin cargos ocultos, sin sorpresas. Lo que ves es lo que obtienes."
},
"support": {
"title": "Soporte",
"description": "Estamos aquí para ayudarte a tener éxito, en cada paso del camino."
}
}
},
"contact": {
"title": "Contáctanos",
"subtitle": "¿Tienes preguntas? Nos encantaría saber de ti.",
"form": {
"name": "Tu Nombre",
"namePlaceholder": "Juan Pérez",
"email": "Correo Electrónico",
"emailPlaceholder": "tu@ejemplo.com",
"subject": "Asunto",
"subjectPlaceholder": "¿Cómo podemos ayudarte?",
"message": "Mensaje",
"messagePlaceholder": "Cuéntanos más sobre tus necesidades...",
"submit": "Enviar Mensaje",
"sending": "Enviando...",
"success": "¡Gracias por contactarnos! Te responderemos pronto.",
"error": "Algo salió mal. Por favor intenta de nuevo."
},
"info": {
"email": "soporte@smoothschedule.com",
"phone": "+1 (555) 123-4567",
"address": "123 Schedule Street, San Francisco, CA 94102"
},
"sales": {
"title": "Habla con Ventas",
"description": "¿Interesado en nuestro plan Empresarial? A nuestro equipo de ventas le encantaría conversar."
}
},
"cta": {
"ready": "¿Listo para comenzar?",
"readySubtitle": "Únete a miles de negocios que ya usan SmoothSchedule.",
"startFree": "Comenzar Prueba Gratuita",
"noCredit": "Sin tarjeta de crédito requerida"
},
"footer": {
"product": "Producto",
"company": "Empresa",
"legal": "Legal",
"features": "Características",
"pricing": "Precios",
"integrations": "Integraciones",
"about": "Nosotros",
"blog": "Blog",
"careers": "Carreras",
"contact": "Contacto",
"terms": "Términos",
"privacy": "Privacidad",
"cookies": "Cookies",
"allRightsReserved": "Todos los derechos reservados."
}
}
}