innoboxrr-affiliate-saas
es un sistema completo para la gestión de afiliados en plataformas Laravel. Permite integrar funcionalidades clave para manejar programas de afiliados, links, clics, conversiones, pagos y más. Su arquitectura está orientada a microservicios con extensión modular, y aprovecha filtros, relaciones personalizadas, y un sistema robusto de metadatos.
- Seguimiento de clics, links y conversiones.
- Relación completa entre afiliados, programas, clics y pagos.
- Creación de programas de afiliación por workspace.
- Asignación automática de links.
- Registro y seguimiento de pagos a afiliados.
- Metadatos editables para registrar detalles bancarios, condiciones o estados de revisión.
- Total de clics, conversiones, payout pendientes y aprobados.
- Integración con dashboards.
composer require innoboxrr/affiliate-saas
php artisan vendor:publish --tag=affiliate-saas-config
php artisan vendor:publish --tag=affiliate-saas-migrations
php artisan migrate
return [
'user_class' => App\Models\User::class,
'workspace_class' => App\Models\Workspace::class,
];
Representa al usuario afiliado. Tiene relación con User
, Workspace
, AffiliateLink
, AffiliateConversion
y AffiliateMeta
.
Contiene la URL personalizada de cada afiliado dentro de un programa. Pertenece a un AffiliateProgram
y Affiliate
.
Guarda los clics realizados sobre los links de afiliado. Relaciona con AffiliateLink
y contiene AffiliateConversion
.
Registra una conversión (ej. compra). Puede estar relacionada con un AffiliateClick
, AffiliateLink
, AffiliatePayout
, y mediante BelongsToThrough
con el Affiliate
.
Contiene el pago a uno o más afiliados. Puede tener metas y conversiones asociadas.
Definición de un programa de afiliación. Tiene links, assets y afiliados asociados.
Recursos publicitarios (banners, videos, PDF) relacionados a un programa.
Todos los modelos tienen sus propios Traits de relaciones, organizados en:
Innoboxrr\AffiliateSaas\Models\Traits\Relations
Esto permite desacoplar la lógica y mantener los modelos limpios.
Cada modelo tiene su filtro EagerLoadingFilter
para cargar relaciones condicionalmente con base en los datos entrantes.
Ejemplo:
if ($data->load_relation == true) {
$query->with(['affiliate', 'link']);
}
Esto se genera automáticamente según las relaciones del modelo y permite una carga flexible.
El paquete define políticas reutilizables para acciones como:
- Crear programas
- Gestionar links
- Ver conversiones
Se encuentran en:
App\Services\User\Affiliate\Traits
Y se importan desde un trait general:
use App\Services\User\Affiliate\AffiliatePolicies;
Puedes exponer estos modelos vía API para integrarlos a frontends como Vue o Inertia, usando recursos, policies y autorizaciones.
Ejemplo de estructura de rutas:
Route::middleware(['auth:sanctum'])->group(function () {
Route::apiResource('affiliate-programs', AffiliateProgramController::class);
Route::apiResource('affiliate-links', AffiliateLinkController::class);
});
Aquí tienes la sección Instalación adaptada de forma profesional, clara y completa para el paquete innoboxrr-vue-affiliate
, con todos los nombres, rutas y componentes cambiados y organizados con precisión:
Instala el paquete desde npm o usando un enlace local:
npm install innoboxrr-vue-affiliate
También puedes usar
npm link
si estás trabajando en desarrollo local del paquete.
Agrega el paquete AffiliateApp
a tu aplicación principal:
import { createApp } from 'vue';
import AffiliateApp from 'innoboxrr-vue-affiliate';
const app = createApp(App);
app.use(AffiliateApp);
Puedes sobrescribir los textos por defecto en distintos idiomas con tu propio archivo de traducciones:
import AffiliatePackage from 'innoboxrr-vue-affiliate';
const customLocales = {
es: {
'Affiliate Program': 'Programa de Afiliados',
'Create Affiliate': 'Crear Afiliado',
// ...otros textos
},
};
app.use(AffiliatePackage, {
translateOptions: {
defaultLang: 'es',
locales: customLocales,
}
});
Genera una vista específica para la sección de afiliados:
Archivo: AffiliateView.vue
<template>
<AffiliateApp />
</template>
<script>
export default {
name: 'AffiliateView',
};
</script>
Incluye las rutas del paquete como hijos de tu ruta principal /affiliate
:
Archivo: routes/index.js
import affiliateRoutes from 'innoboxrr-vue-affiliate/routes';
export default [
{
path: '/affiliate',
name: 'AdminAffiliate',
component: () => import('./../views/AffiliateView.vue'),
meta: {
title: 'Afiliados',
},
children: [
...affiliateRoutes,
],
},
];
Agrega alias personalizados para facilitar las importaciones desde el paquete:
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@affiliate': path.resolve(__dirname, 'node_modules/innoboxrr-vue-affiliate/'),
'@affiliateComponents': path.resolve(__dirname, 'node_modules/innoboxrr-vue-affiliate/src/components'),
'@affiliateModels': path.resolve(__dirname, 'node_modules/innoboxrr-vue-affiliate/src/models'),
'@affiliatePages': path.resolve(__dirname, 'node_modules/innoboxrr-vue-affiliate/src/pages'),
'@affiliateStore': path.resolve(__dirname, 'node_modules/innoboxrr-vue-affiliate/src/store'),
},
},
});
Asegúrate de que Tailwind procese también los archivos del paquete:
const { addDynamicIconSelectors } = require('@iconify/tailwind');
const colors = require('tailwindcss/colors');
const defaultTheme = require('tailwindcss/defaultTheme');
module.exports = {
content: [
'./node_modules/innoboxrr-vue-affiliate/**/*.vue',
'./node_modules/innoboxrr-vue-affiliate/**/*.js',
'./node_modules/innoboxrr-vue-affiliate/**/*.blade.php',
],
darkMode: 'class',
theme: {
extend: {},
},
plugins: [],
};
- [x] Relaciones completas entre modelos
- [x] Métricas de actividad
- [x] Sistema de payout
- [ ] Dashboard interactivo
- [ ] Integración con Stripe/PayPal
- [ ] Interfaz frontend en Vue
Sigue los pasos de instalación local para desarrollo. Las PRs y sugerencias son bienvenidas.
innoboxrr-affiliate-saas
está licenciado bajo MIT License.