Configura tu proyecto
Los valores committeados que hacen tuyo el kit, y las banderas que deciden qué funciones opcionales existen.
La configuración vive en dos lugares. Lo que cambia entre máquinas es una variable de entorno, se lee de .env y está cubierto en El archivo de entorno. Lo que pertenece al producto es un valor committeado en config/ y viaja con el repositorio. Esta guía cubre los valores committeados que un desarrollador cambia cuando arranca un proyecto, las variables de entorno que leen, y cada bandera con exactamente lo que apaga.
Nombre, inicio y clave del proyecto
Clave en config/app.php |
Valor | Qué hace |
|---|---|---|
name |
env('APP_NAME', 'Laravel') |
El título del navegador, el texto alternativo del logotipo y el nombre del remitente del correo a través de MAIL_FROM_NAME="${APP_NAME}". Pon APP_NAME en .env. |
home_route |
/app |
A dónde llega una persona después de iniciar sesión, registrarse, verificar su correo, restablecer o confirmar una contraseña, abrir /home, y a dónde vuelve un administrador cuando deja de suplantar a alguien. Cámbialo cuando tu área autenticada viva en otro lugar. |
project |
weblabor-base |
La carpeta bajo docs/ que guarda tus guías y tu changelog y la carpeta bajo resources/views/landing/ que guarda tu landing y tus páginas de características. Cámbiala una vez, cuando arranca el proyecto. Revisa Hazlo tuyo. |
Logotipo e icono
'logo' => 'images/logo.svg',
'icon' => 'images/icon.svg',
Ambas son rutas dentro de public/, resueltas con asset(). El logotipo es la imagen ancha del encabezado del layout de la aplicación. El icono es la cuadrada: el favicon, la imagen sobre las pantallas de inicio de sesión, registro, verificación y contraseña, el encabezado compacto en pantallas pequeñas, la imagen de una notificación en el centro de notificaciones y en un web push, y la imagen base que php artisan pwa:generate-assets propone cuando genera los iconos y las pantallas de carga de la PWA. Reemplaza los dos archivos o apunta las claves a los tuyos.
Administradores y cuentas sembradas
'sudo' => [
'[email protected]',
],
'default_users' => [
'[email protected]',
],
php artisan db:seed lee ambas listas. Por cada correo de cualquiera de ellas crea la cuenta cuando todavía no existe, incluyendo una borrada con soft delete:
- El nombre es la parte antes de la
@, en mayúsculas iniciales:[email protected]esAdmin. - El correo queda verificado al instante, así que la cuenta inicia sesión sin código.
- La contraseña es la parte antes de la
@al revés:[email protected]inicia sesión connimda.
La lista sudo hace dos cosas más. El seeder da a cada una de esas cuentas el rol que nombra admin_role, y cuando la contraseña sigue siendo la generada marca la cuenta para que el siguiente inicio de sesión la mande a cambiarla antes de llegar a cualquier otra cosa. La lista también define quién es superadministrador en tiempo de ejecución: $user->sudo es verdadero para cualquier cuenta cuyo correo esté en ella, lo que abre la DevZone en /admin/dev, permite leer el registro de actividad y evita que otros administradores borren la cuenta. Revisa Sudo y superadministradores.
default_users no recibe rol ni cambio forzado de contraseña. Úsala para las cuentas de prueba que quieres en cada entorno que siembras.
La lista está committeada, así que pon tu propio correo ahí antes del primer seed y deja [email protected] fuera de producción.
Banderas de funciones
config/features.php decide qué partes opcionales del producto existen. Cada bandera lee una variable de entorno y su valor por omisión es false, así que un .env recién creado las tiene todas apagadas. Enciende una escribiendo la variable:
FEATURE_ANNOUNCEMENTS=true
FEATURE_PLANS_ENABLED=true
FEATURE_ADDONS_ENABLED=true
FEATURE_TRACKING_ENABLED=true
FEATURE_REFERRALS_ENABLED=true
.env.example sólo lista FEATURE_PLANS_ENABLED y FEATURE_ADDONS_ENABLED; agrega las demás tú mismo.
| Clave | Variable de entorno | Apagada en el sitio público y la cuenta | Apagada en el panel de administración |
|---|---|---|---|
announcements |
FEATURE_ANNOUNCEMENTS |
El desplegable del megáfono desaparece del encabezado, la entrada Avisos desaparece de la barra lateral de la cuenta, y /account/announcements y cada página de aviso responden 404. |
El recurso Avisos desaparece del menú y sus páginas responden 403: su política niega toda acción. |
plans_enabled |
FEATURE_PLANS_ENABLED |
"Mis planes" desaparece de la barra lateral de la cuenta y /account/plans responde 403. La revisión de suscripción en /app deja pasar a todos, porque no hay plan activo. La suscripción automática al plan gratuito al registrarse no hace nada. |
El recurso Planes desaparece del menú, las métricas de cobro desaparecen del dashboard, y la sincronización diaria de tipos de cambio no se programa a menos que los complementos estén encendidos. El recurso además necesita STRIPE_SECRET para aparecer. |
addons_enabled |
FEATURE_ADDONS_ENABLED |
/account/add-ons y cada página de detalle de complemento responden 404, y el catálogo de complementos no se ofrece en la página de planes. |
El recurso Complementos desaparece del menú y sus páginas responden 403. |
tracking_enabled |
FEATURE_TRACKING_ENABLED |
Nada visible cambia. No se crea sesión de seguimiento para una visita, toda llamada a trackingEvent() se ignora, y nada se envía a la Conversions API de Facebook aunque FACEBOOK_ACCESS_TOKEN y FACEBOOK_PIXEL_ID estén puestos. |
Tipos de evento, Sesiones y Eventos de seguimiento desaparecen del menú y responden 403, las dos pestañas de seguimiento desaparecen del detalle de un usuario, y "Eventos de seguimiento" desaparece de las métricas del dashboard. |
referrals.enabled |
FEATURE_REFERRALS_ENABLED |
La entrada Referidos desaparece de la barra lateral de la cuenta y /account/referrals responde 404. Un ?referrer=CODIGO en una URL se ignora, no se registra ningún referido al registrarse y nunca se crea una recompensa. |
"Suscripciones por referido" desaparece de las métricas del dashboard. No hay recurso de administración para referidos. |
El menú de administración oculta un recurso cuando su política niega viewAny, y todas las políticas de arriba niegan todo mientras su bandera está apagada. Por eso una sección que no ves tampoco se alcanza escribiendo su URL.
Las subclaves de referidos
El arreglo referrals lleva los números del programa además de su interruptor. El flujo está en Referidos.
| Clave | Variable de entorno | Valor por omisión | Qué hace |
|---|---|---|---|
referrals.enabled |
FEATURE_REFERRALS_ENABLED |
false |
El interruptor descrito arriba. |
referrals.registration_reward |
FEATURE_REFERRALS_REGISTRATION_REWARD |
10 |
Monto abonado a quien refiere cuando una persona referida se registra. 0 no crea recompensa de registro. |
referrals.subscription_reward_percent |
FEATURE_REFERRALS_SUBSCRIPTION_REWARD_PERCENT |
10 |
Porcentaje de cada factura de suscripción pagada por una persona referida que se abona a quien la refirió. 0 no crea recompensa de suscripción. |
referrals.currency |
FEATURE_REFERRALS_CURRENCY |
mxn |
Moneda de la recompensa de registro, y de una recompensa de suscripción cuando la factura de Stripe no trae moneda. Código ISO en minúsculas. |
referrals.cookie_days |
FEATURE_REFERRALS_COOKIE_DAYS |
30 |
Días que el código de quien refiere permanece en la cookie del visitante después de llegar con ?referrer=CODIGO. Un valor menor a 1 se lee como 1. |
La trampa del despliegue
Como toda bandera está apagada por omisión, una sección que funciona en tu máquina y falta en el servidor es casi siempre una variable que nunca se escribió en el .env del servidor. El síntoma es silencioso: no hay error, la entrada del menú simplemente no está. Escribe las banderas también en el servidor y limpia la caché de configuración después de cambiarlas. Revisa Despliega tu proyecto.
El resto de config/app.php
| Clave | Valor | Qué hace |
|---|---|---|
timezone |
UTC |
La zona horaria en que se guardan las fechas, y la que ve un visitante sin cuenta. Déjala en UTC; cada cuenta tiene la suya. Revisa Zonas horarias y fechas. |
locale |
env('APP_LOCALE', 'es') |
El idioma fuera de una petición web: comandos de consola, trabajos en cola y rutas de API. Las peticiones web resuelven su propio idioma y nunca lo leen. |
languages |
['es' => 'Spanish', 'en' => 'English'] |
Los idiomas a los que un visitante puede cambiar y que una cuenta puede elegir. |
fallback_locale |
es |
El idioma cuando nada más decide, y al que cae una traducción que falta. Revisa Idiomas y traducciones. |
pwa |
env('APP_PWA', false) |
Enciende el service worker y el comportamiento de PWA. Revisa Web push y la PWA. |
country_code_fallback |
env('COUNTRY_CODE_FALLBACK', 'US') |
El país que se asume cuando la IP del visitante es privada, que es toda petición en desarrollo local. Revisa Detecta el país del visitante. |
Las claves de permisos deciden qué genera php artisan db:seed para el panel de administración. El flujo completo está en Roles y permisos.
| Clave | Valor por omisión | Qué hace |
|---|---|---|
discover_front_permissions |
true |
Genera los permisos create, retrieve, update y delete para cada recurso de administración que tiene modelo. |
allow_permisisons_deletion |
true |
Borra con soft delete los permisos que ya no se generan ni se listan. La clave se escribe exactamente así en el archivo y en el seeder. |
permissions |
[] |
Permisos extra como 'nombre del permiso' => 'web'. |
admin_role |
admin |
El rol que recibe todos los permisos y se asigna a las cuentas sudo. |
default_role |
null |
Un rol creado al sembrar para los usuarios comunes, por ejemplo 'default'. null no crea ninguno. |
default_role_permissions |
[] |
Permisos que recibe default_role la primera vez que se crea. |
Los valores committeados de config/pricing.php
Importan una vez que FEATURE_PLANS_ENABLED o FEATURE_ADDONS_ENABLED está encendida. Cómo usarlos está en Crea y da precio a un plan y en Pruebas gratuitas y cupones.
| Clave | Variable de entorno | Valor por omisión | Qué hace |
|---|---|---|---|
primary_currency |
ninguna | mxn |
La moneda a la que se convierten los ingresos en el dashboard de administración y la base de las instantáneas diarias de tipo de cambio. Cámbiala en el archivo. |
exchange_rates.provider |
ninguna | frankfurter |
El proveedor de tipos de cambio. frankfurter es el único que el kit implementa. |
exchange_rates.endpoint |
ninguna | https://api.frankfurter.app |
De dónde se obtienen los tipos de cambio. |
exchange_rates.timeout |
ninguna | 10 |
Segundos de espera al proveedor. |
coupons.enabled |
BILLING_COUPONS_ENABLED |
true |
Muestra el campo de código promocional en Stripe Checkout. Los códigos se crean en el dashboard de Stripe. |
freeTrial.enabled |
BILLING_FREE_TRIAL_ENABLED |
false |
Da a cada suscripción nueva un periodo de prueba. |
freeTrial.days |
BILLING_FREE_TRIAL_DAYS |
14 |
Duración de ese periodo. |
intervals |
ninguna | monthly, yearly |
Las frecuencias de cobro que un precio puede tener. Cada entrada tiene interval (month o year), label, count (intervalos por ciclo) y active. Agregar una agrega una columna al formulario de precios del panel. |
Los tipos de cambio los obtiene php artisan billing:sync-exchange-rates, programado a diario a las 12:00 mientras los planes o los complementos están encendidos, para las fechas que tuvieron una suscripción pagada en una moneda distinta de la principal.