Funcionalidad en Next.js App Router con Server Actions
Implementa una funcionalidad completa en Next.js (App Router) con Server Actions, validación con Zod, estados de carga y error, y tests. Pensado para ChatGPT, Claude y Microsoft Copilot. Incluye 5 variables personalizables y se copia gratis en un clic.
Avanzado · Código · Pendiente de revisión editorial
Prompt
Actúa como ingeniero frontend senior especializado en Next.js (App Router), React Server Components y TypeScript estricto.
Necesito implementar la funcionalidad «{{funcionalidad}}» en una aplicación Next.js {{version_next}}.
Persistencia de datos: {{persistencia}}.
Autenticación: {{autenticacion}}.
Reglas de negocio y campos del formulario: {{reglas}}.
Entrega, en este orden:
1. Árbol de archivos dentro de `app/` y `lib/` (rutas, `page.tsx`, `loading.tsx`, `error.tsx`, componentes cliente y servidor), justificando qué es Server Component y qué es Client Component.
2. Esquema de validación con Zod compartido entre cliente y servidor, con mensajes de error en español.
3. La Server Action completa (`'use server'`): comprobación de sesión y permisos, validación, escritura en la base de datos, `revalidatePath` o `revalidateTag` y un objeto de respuesta tipado `{ ok, errors, message }`.
4. El formulario con `useActionState` y `useFormStatus` (en Next.js 14 con React 18, usa `useFormState` de `react-dom` en lugar de `useActionState`): errores por campo, botón deshabilitado durante el envío y foco en el primer campo con error.
5. Gestión de errores: errores esperados frente a inesperados, qué se registra en logs y qué ve el usuario.
6. Tests: unitarios del esquema y de la acción (con la capa de datos simulada) y un test end-to-end con Playwright del flujo feliz.
7. Lista de comprobación de seguridad: CSRF, autorización en el servidor, límites de tamaño y datos sensibles que nunca deben llegar al cliente.
Restricciones:
- TypeScript estricto, sin `any`.
- No inventes nombres de tablas ni de variables de entorno: usa [COMPLETAR] si faltan.
- Si te falta información para decidir algo importante, pregúntame antes de escribir el código.Cómo usarlo
- Describe la funcionalidad y las reglas de negocio con el máximo detalle posible.
- Indica tu versión de Next.js y cómo guardas los datos (Prisma, Drizzle, Supabase…).
- Pega el prompt en tu asistente y copia los archivos uno a uno en tu proyecto.
- Ejecuta los tests y sustituye los marcadores [COMPLETAR] antes de desplegar.
Ejemplo de uso
Funcionalidad: crear y editar reservas de sala · Next.js 15 · Persistencia: PostgreSQL con Prisma · Autenticación: Auth.js con roles admin y empleado.
Resultado de ejemplo
3. Server Action app/bookings/actions.ts
El esquema Zod vive en lib/validation/booking.ts (un archivo 'use server' solo puede exportar funciones asíncronas). El nombre del modelo Prisma booking es una suposición: [COMPLETAR] si el tuyo es distinto.
'use server';
import { revalidatePath } from 'next/cache';
import { auth } from '@/auth';
import { prisma } from '@/lib/prisma';
import { bookingSchema } from '@/lib/validation/booking';
export type ActionState = {
ok: boolean;
errors?: Partial<Record<'roomId' | 'start' | 'end', string[]>>;
message?: string;
};
export async function createBooking(_prev: ActionState, formData: FormData): Promise<ActionState> {
const session = await auth();
if (!session?.user?.id) return { ok: false, message: 'Inicia sesión para reservar.' };
const parsed = bookingSchema.safeParse(Object.fromEntries(formData));
if (!parsed.success) return { ok: false, errors: parsed.error.flatten().fieldErrors };
const { roomId, start, end } = parsed.data;
const overlap = await prisma.booking.findFirst({
where: { roomId, start: { lt: end }, end: { gt: start } },
});
if (overlap) return { ok: false, errors: { start: ['La sala ya está reservada en ese horario.'] } };
await prisma.booking.create({ data: { roomId, start, end, userId: session.user.id } });
revalidatePath('/bookings');
return { ok: true, message: 'Reserva creada.' };
}
La sesión y el solapamiento se comprueban siempre en el servidor; la validación de cliente es solo para dar feedback rápido. En producción, el control de solapamientos debería reforzarse con una restricción de exclusión en PostgreSQL…
Datos clave
- Categoría
- Programación y desarrollo · Next.js
- Tipo de resultado
- Código
- Nivel
- Avanzado
- Pensado para
- ChatGPT, Claude y Microsoft Copilot
- Verificado en
- Pendiente de verificación editorial
- Variables
- Funcionalidad, Versión de Next.js, Persistencia de datos, Autenticación y Reglas y campos
- Idioma
- Español
- Precio
- Gratis, sin registro
- Actualizado
- 07/11/2026
Preguntas frecuentes
¿Por qué usar Server Actions en lugar de una API Route?
Para formularios y mutaciones internas de la propia app, las Server Actions reducen código, se integran con la revalidación de caché y funcionan sin JavaScript en el cliente. Si la operación la consumen terceros, una API Route sigue siendo la mejor opción.
¿Basta con validar en el cliente?
No. La validación en el cliente mejora la experiencia, pero la Server Action debe volver a validar y comprobar permisos, porque cualquiera puede invocarla directamente.
¿Para qué sirve este prompt?
Implementa una funcionalidad completa en Next.js (App Router) con Server Actions, validación con Zod, estados de carga y error, y tests.
¿Con qué herramientas de IA funciona?
Está pensado para ChatGPT, Claude y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.
¿Cómo personalizo el prompt?
Pulsa «Personalizar» y rellena las variables (Funcionalidad, Versión de Next.js, Persistencia de datos, Autenticación y Reglas y campos). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.
¿Necesito experiencia para usarlo?
Es de nivel avanzado: está pensado para personas con experiencia en el tema que sepan evaluar y ajustar el resultado.
¿Este prompt es gratis?
Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.
¿Puedo fiarme del resultado de la IA?
Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.