Sistema de inputs inteligentes construido con Next.js para mejorar la experiencia de captura en formularios.
Este proyecto demuestra como combinar:
- Formateo en tiempo real.
- Validaciones ligeras en frontend.
- Feedback visual inmediato al usuario.
- Estado limpio para enviar al backend.
Importante: la validacion de negocio y seguridad final siempre debe ocurrir en backend.
La demo renderiza un formulario con cuatro campos:
namelastNameemailpassword
Cada campo aplica reglas segun su tipo (dataType):
nameylastName: elimina numeros, normaliza espacios y capitaliza palabras.email: valida formato con regex y pinta estados valid/invalid.password: valida 3 reglas (minimo 6, mayuscula, numero), muestra checklist y permite toggle ver/ocultar.
Ademas, se muestra en pantalla el payload resultante (formState) para visualizar exactamente que datos se enviarian al backend.
- Next.js 16 (App Router)
- React 19
- TypeScript (modo
strict) - Tailwind CSS v4
- ESLint con configuracion
next/core-web-vitalsynext/typescript - react-icons
El sistema sigue una estructura inspirada en Atomic Design:
src/components/smart-input-system/
atoms/
InputChecks.tsx # Checklist visual de password
molecules/
smartInput.tsx # Input inteligente reutilizable
organisms/
smart-input-system-demo.tsx # Pantalla demo y estado del formulario
shared/
formatters.ts # Formateadores
validators.ts # Validadores
type.ts # Tipos compartidos
- El componente
SmartInputrecibedataType,valueyonChange. handleChangedecide si formatea o valida segun el tipo de dato.- Retorna el valor procesado al estado padre.
- El componente padre mantiene el estado unificado del formulario.
- Node.js 20+
- npm 10+ (o yarn/pnpm/bun)
npm install
npm run devAbrir en navegador:
http://localhost:3000
npm run dev # entorno local
npm run build # build de produccion
npm run start # correr build
npm run lint # analisis estaticoSi quieres agregar un nuevo tipo de input inteligente (por ejemplo phone):
- Agrega el nuevo literal al tipo
DataTypeenshared/type.ts. - Crea su formatter o validator en
shared/formatters.tsoshared/validators.ts. - Integra la logica en
handleChangedemolecules/smartInput.tsx. - Usa el nuevo
dataTypedesde el formulario demo u otro formulario real.
- Mantener validaciones de UX en frontend, validaciones de negocio en backend.
- Evitar reglas complejas embebidas en UI; moverlas a
shared/. - Agregar pruebas unitarias para formatters y validators al crecer el sistema.
- Mantener nombres de
dataTypecortos, consistentes y semanticos.
Este repositorio esta orientado a demostracion y evolucion de un componente reutilizable.
Siguiente paso sugerido para produccion:
- extraer
SmartInputcomo paquete interno compartido, - sumar tests (unit + integration),
- y conectar con formularios reales del dominio.