Danilo Alessandro Vinciprova

Danilo Alessandro Vinciprova

AI-Assisted Web Developer · React · Next.js · Claude Code

Aprendí a pensar en construir como en piezas que tienen que encajar entre sí.

Proyecto 05 / 06 · sitio web

LocalVision Studio

Un prototipo de web que ofrece webs y vídeos con IA a negocios locales, construido en torno a un “simulador de mejora de negocios” interactivo. Un prototipo, no un trabajo para un cliente.

PrototipoNext.js, Tailwind CSS, Framer Motion

Resumen

Capturas de pantalla

Nivel de prueba: Prueba existente

LocalVision Studio: captura de la página de inicio, escritorio (1440 px).
LocalVision Studio: captura de la página de inicio, móvil (375 px).
Escritorio 1440 × 900 y móvil 375 × 812, capturados el 29 de septiembre de 2026 desde el proyecto ejecutándose en local (no está en línea).
Ver la prueba
  1. Afirmación

    LocalVision Studio: un prototipo de web que ofrece webs y vídeos con IA a negocios locales, construido en torno a un “simulador de mejora de negocios” interactivo. Un prototipo, no un trabajo para un cliente.

    Declarado por Danilo

  2. Pruebas

  3. Resultado

    Capturas reales de la página, tomadas del proyecto en funcionamiento el 29/09/2026. Que lo construyera Danilo es una declaración suya.

En esta página

  1. 02 Simulador: una grabación de pantalla del simulador de mejora de negocios
  2. 03 Código: extractos del código fuente del simulador

No está en esta página

  • Medido: este prototipo solo funciona en un servidor de desarrollo local, y las puntuaciones tomadas allí no serían representativas.

Simulador

Cuatro elecciones (negocio, problema, objetivo, transformación); la vista previa de la derecha sigue cada una.

Grabación de pantalla

Nivel de prueba: Prueba existente

Grabación de pantalla del simulador de mejora de negocios de LocalVision (13 s, sin sonido). Grabada el 29/09/2026 con Playwright desde el proyecto ejecutándose en local: la elección de un negocio, un problema, un objetivo y una transformación en el simulador.

Código

Un único objeto de estado guarda las cuatro elecciones; los botones de elección son un pequeño componente reutilizable.

src/components/Simulator.tsx líneas 36–58

Raw: texto de src/components/Simulator.tsx, líneas 36–58
export function Simulator() {
  const { copy } = useLang()
  const [state, setState] = useState<SimState>({
    business: null,
    goal: null,
    problem: null,
    level: null,
  })
  const [active, setActive] = useState(0)

  const set = (patch: Partial<SimState>) => setState((s) => ({ ...s, ...patch }))

  // Picks made in the hero diagnosis column pre-fill the simulator.
  useEffect(() => {
    const onPick = (e: Event) => {
      const { kind, id } = (e as CustomEvent<{ kind: string; id: string }>).detail
      if (kind === 'business' || kind === 'goal' || kind === 'problem') {
        setState((s) => ({ ...s, [kind]: id }))
      }
    }
    window.addEventListener('lv-pick', onPick)
    return () => window.removeEventListener('lv-pick', onPick)
  }, [])

Nivel de prueba: Prueba existente

Código fuente de LocalVision: el estado del simulador · copiado el 29 de septiembre de 2026 · sha256 9cb5d9fbbdf9…

src/components/Simulator.tsx líneas 226–264

Raw: texto de src/components/Simulator.tsx, líneas 226–264
function Pills<T extends string>({
  options,
  selected,
  onSelect,
  accent,
}: {
  options: Option<T>[]
  selected: T | null
  onSelect: (v: T) => void
  accent: 'ember' | 'neon'
}) {
  const { lang } = useLang()
  return (
    <div className="flex flex-wrap gap-2.5">
      {options.map((opt) => {
        const on = selected === opt.id
        const ring =
          accent === 'neon'
            ? 'border-neon/70 bg-neon/10 text-cream glow-neon'
            : 'border-ember/70 bg-ember/10 text-cream glow-ember'
        return (
          <motion.button
            key={opt.id}
            type="button"
            whileTap={{ scale: 0.94 }}
            onClick={() => onSelect(opt.id)}
            className={`glass flex items-center gap-2 rounded-full px-4 py-2.5 text-sm font-medium transition-all ${
              on ? ring : 'text-cream-dim hover:text-cream'
            }`}
          >
            {on && <Check className="h-3.5 w-3.5" />}
            {opt[lang]}
          </motion.button>
        )
      })}
    </div>
  )
}

Nivel de prueba: Prueba existente

Código fuente de LocalVision: los botones de elección · copiado el 29 de septiembre de 2026 · sha256 68591b03c56d…