Danilo Alessandro Vinciprova

Danilo Alessandro Vinciprova

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

Ho imparato a pensare al costruire come a parti che devono incastrarsi tra loro.

Progetto 05 / 06 · sito web

LocalVision Studio

Un prototipo di sito che offre siti web e video AI alle attività locali, costruito intorno a un “simulatore di upgrade per attività” interattivo. Un prototipo, non un lavoro per un cliente.

PrototipoNext.js, Tailwind CSS, Framer Motion

Panoramica

Screenshot

Livello di prova: Prova esistente

LocalVision Studio: screenshot della home page, desktop (1440 px).
LocalVision Studio: screenshot della home page, mobile (375 px).
Desktop 1440 × 900 e mobile 375 × 812, acquisiti il 29 settembre 2026 dal progetto in esecuzione in locale (non online).
Vedi la prova
  1. Affermazione

    LocalVision Studio: un prototipo di sito che offre siti web e video AI alle attività locali, costruito intorno a un “simulatore di upgrade per attività” interattivo. Un prototipo, non un lavoro per un cliente.

    Dichiarato da Danilo

  2. Prove

  3. Risultato

    Screenshot reali della pagina, presi dal progetto in esecuzione il 29/09/2026. Che l’abbia costruito Danilo è una sua dichiarazione.

In questa pagina

  1. 02 Simulatore: una registrazione dello schermo del simulatore di upgrade per attività
  2. 03 Codice: estratti del sorgente del simulatore

Non in questa pagina

  • Misurato: questo prototipo gira solo su un server di sviluppo locale, e i punteggi presi lì non sarebbero rappresentativi.

Simulatore

Quattro scelte (attività, problema, obiettivo, trasformazione); l’anteprima a destra segue ognuna.

Registrazione dello schermo

Livello di prova: Prova esistente

Registrazione dello schermo del simulatore di upgrade per attività di LocalVision (13 s, senza audio). Registrata il 29/09/2026 con Playwright dal progetto in esecuzione in locale: la scelta di un’attività, un problema, un obiettivo e una trasformazione nel simulatore.

Codice

Un unico oggetto di stato contiene le quattro scelte; i pulsanti di scelta sono un piccolo componente riutilizzabile.

src/components/Simulator.tsx righe 36–58

Raw: testo di src/components/Simulator.tsx, righe 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)
  }, [])

Livello di prova: Prova esistente

Sorgente di LocalVision: lo stato del simulatore · copiato il 29 settembre 2026 · sha256 9cb5d9fbbdf9…

src/components/Simulator.tsx righe 226–264

Raw: testo di src/components/Simulator.tsx, righe 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>
  )
}

Livello di prova: Prova esistente

Sorgente di LocalVision: i pulsanti di scelta · copiato il 29 settembre 2026 · sha256 68591b03c56d…