/* global React, ChamberChrome */ const { useState, useEffect } = React; function Feedback({ onBack }) { const moods = window.MOOD_OPTIONS || []; const [mood, setMood] = useState(null); const [text, setText] = useState(""); const [name, setName] = useState(""); const [submitted, setSubmitted] = useState(false); const [recent, setRecent] = useState([]); // Load + persist useEffect(() => { try { const saved = JSON.parse(localStorage.getItem("darshan.feedback") || "[]"); setRecent(saved.slice(-12).reverse()); } catch (e) {} }, []); const submit = () => { if (!mood || !text.trim()) return; const entry = { mood: mood.key, moodDev: mood.dev, moodEn: mood.en, text: text.trim(), name: name.trim() || "a traveller", at: new Date().toISOString(), }; try { const all = JSON.parse(localStorage.getItem("darshan.feedback") || "[]"); all.push(entry); localStorage.setItem("darshan.feedback", JSON.stringify(all)); setRecent([entry, ...recent].slice(0, 12)); } catch (e) {} setSubmitted(true); }; if (submitted) { return (
धन्यवाद

your residue is kept.

the archive has recorded a small, true {mood?.en?.toLowerCase()}.
walk well, {name.trim() || "traveller"} —

— rahul

); } return (

leave a small residue.

if a photograph moved you — even slightly — leave a word, a fragment, a single line. the archive listens.

भाव choose the small feeling
{moods.map(m => ( ))}
शब्द write a line, a fragment, an unfinished sentence
नाम and your name, if you wish to leave one
setName(e.target.value)} data-cursor />
{recent.length > 0 && (
पूर्व small residues, left by other travellers (stored only on this device)
    {recent.slice(0, 6).map((r, i) => (
  • {r.moodDev} {r.moodEn}
    "{r.text}"
    — {r.name}
  • ))}
)}
); } window.Feedback = Feedback;