Una aplicación web construida con Next.js que permite a usuarios autenticados generar tests automáticamente para su código usando inteligencia artificial (Claude API).
- Autenticación completa con Clerk
- Pagos integrados con Stripe (plan básico y premium)
- Generación de tests con IA usando Claude (Anthropic API)
- Múltiples lenguajes soportados (JavaScript, TypeScript, Python, Java, C#, Go)
- Sistema de límites por plan de suscripción
- UI moderna con Tailwind CSS y ShadCN
- Logs de uso para tracking de generaciones
- Node.js 18+
- Una cuenta en Clerk
- Una cuenta en Stripe
- Una API key de Anthropic Claude
- Clonar el repositorio
git clone https://github.com/ingfranciscastillo/ai-test-generator
cd ai-test-generator
- Instalar dependencias
npm install
- Configurar variables de entorno
cp .env.example .env.local
Edita .env.local
con tus credenciales:
# Clerk Auth
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxxxx
CLERK_SECRET_KEY=sk_test_xxxxx
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/dashboard
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/dashboard
# Stripe
STRIPE_SECRET_KEY=sk_test_xxxxx
STRIPE_WEBHOOK_SECRET=whsec_xxxxx
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_xxxxx
# Anthropic Claude API
ANTHROPIC_API_KEY=sk-ant-xxxxx
# App URL
NEXT_PUBLIC_APP_URL=http://localhost:3000
- Ejecutar en desarrollo
bun run dev
La aplicación estará disponible en http://localhost:3000
- Crea una aplicación en Clerk Dashboard
- Configura los métodos de autenticación que prefieras
- Copia las API keys al archivo
.env.local
- Crea una cuenta en Stripe Dashboard
- Crea un producto "Premium Plan" con precio recurrente mensual
- Copia el Price ID y actualiza
PREMIUM_PRICE_ID
en:app/api/create-checkout/route.ts
components/PricingModal.tsx
- Configura un webhook endpoint apuntando a
/api/webhooks/stripe
- Escucha estos eventos:
checkout.session.completed
customer.subscription.created
customer.subscription.updated
customer.subscription.deleted
invoice.payment_failed
- Crea una cuenta en Anthropic Console
- Genera una API key
- Cópiala al archivo
.env.local
├── app/
│ ├── (auth)/ # Páginas de autenticación
│ ├── actions/ # Server Actions
│ ├── api/ # API Routes
│ ├── dashboard/ # Dashboard principal
│ └── globals.css # Estilos globales
├── components/
│ ├── ui/ # Componentes base UI
│ ├── TestGenerator.tsx # Generador principal
│ ├── UserNav.tsx # Navegación usuario
│ └── PricingModal.tsx # Modal de pricing
├── lib/
│ ├── subscription.ts # Lógica de suscripciones
│ ├── usage-logs.ts # Sistema de logs
│ └── utils.ts # Utilidades
└── hooks/
└── use-toast.ts # Hook para notificaciones
- Plan Básico: 3 generaciones por mes
- Plan Premium: Generaciones ilimitadas
- JavaScript (Jest, Mocha, Vitest)
- TypeScript (Jest, Vitest)
- Python (pytest, unittest)
- Java (JUnit)
- C# (NUnit, xUnit)
- Go (testing package)
El sistema usa un prompt estructurado que:
- Analiza el código de entrada
- Identifica el lenguaje y framework apropiado
- Genera tests completos con casos edge
- Incluye validaciones y manejo de errores
- Estados de suscripción de usuarios
- Logs de uso y generaciones
- Histórial de tests generados
-- Usuarios y suscripciones
CREATE TABLE user_subscriptions (
user_id VARCHAR PRIMARY KEY,
is_premium BOOLEAN DEFAULT FALSE,
generations_used INTEGER DEFAULT 0,
max_generations INTEGER DEFAULT 3,
stripe_customer_id VARCHAR,
stripe_subscription_id VARCHAR,
reset_date TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW()
);
-- Logs de uso
CREATE TABLE usage_logs (
id UUID PRIMARY KEY,
user_id VARCHAR NOT NULL,
language VARCHAR NOT NULL,
code_length INTEGER,
success BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT NOW()
);
- Conecta tu repositorio a Vercel
- Configura las variables de entorno
- Despliega automáticamente
Asegúrate de configurar todas las variables de entorno en tu plataforma de despliegue y actualizar las URLs:
NEXT_PUBLIC_APP_URL=https://tu-dominio.com
- ✅ Autenticación requerida para todas las funciones
- ✅ Validación de suscripción en el servidor
- ✅ Rate limiting por plan de usuario
- ✅ Webhooks seguros con Stripe
- ✅ Validación de entrada para prevenir injection
Edita en lib/subscription.ts
:
maxGenerations: 3, // Cambiar límite plan básico
- Actualiza
SUPPORTED_LANGUAGES
encomponents/TestGenerator.tsx
- Modifica el prompt en
app/actions/generate-test.ts
- Ajusta la lógica de extensiones de archivo
Los componentes UI están en components/ui/
y usan Tailwind CSS. Puedes:
- Cambiar colores en
tailwind.config.ts
- Modificar estilos en
app/globals.css
- Personalizar componentes individuales
- Verifica que las API keys de Clerk estén correctas
- Asegúrate de que el middleware esté configurado
- Verifica la API key de Anthropic
- Revisa los logs del servidor para errores específicos
- Confirma que el usuario no haya excedido límites
- Verifica webhook de Stripe esté configurado
- Revisa que el Price ID sea correcto
- Confirma que los eventos de webhook estén habilitados
Para reportar bugs o solicitar características:
- Abre un issue en GitHub
- Incluye logs relevantes
- Describe pasos para reproducir el problema
- Histórial de tests generados
- Exportación en lote
- Más frameworks de testing
- Tests de integración automáticos
- Dashboard de analytics
- API pública
MIT License - ver archivo LICENSE para detalles.