SPB Git

spb/zyquo-cloud-web Public MIT

Zyquo Cloud Web — every cloud model, one beautiful chat, entirely in your browser.

TypeScript 81.9% CSS 8.9% JavaScript 7.5% Shell 1.1% HTML 0.6%
2.3 KB · 64 lines tsx
Raw Blame History
1/*2 *  FirstRun.tsx3 *  Zyquo Cloud Web4 *5 *  Author: Simon-Pierre Boucher6 *  Mail: contact@spboucher.ai7 *8 *  First-run welcome: clean, honest, transparent about local storage.9 */1011import { useStore } from '../state/store'12import ZyquoGlyph from './ZyquoGlyph'1314export default function FirstRun() {15  const updateSettings = useStore((s) => s.updateSettings)16  const openSettings = useStore((s) => s.openSettings)1718  return (19    <div className="overlay">20      <div className="panel" style={{ width: 520 }}>21        <div className="settings-content" style={{ padding: 24 }}>22          <div style={{ display: 'flex', justifyContent: 'center', marginBottom: 16 }}>23            <ZyquoGlyph size={56} />24          </div>25          <h3 style={{ textAlign: 'center', fontSize: 18 }}>Welcome to Zyquo Cloud</h3>26          <p style={{ color: 'var(--z-text-secondary)', textAlign: 'center', marginTop: 4 }}>27            Every cloud model, one beautiful chat — running entirely in your browser.28          </p>29          <div className="first-run-note" style={{ marginTop: 16 }}>30            <span>31              <strong>No account. No backend. Nothing leaves this device.</strong>32            </span>33            <span>34              Your API keys and conversation history are stored <strong>in this browser</strong>35              {' '}(localStorage / IndexedDB) and are sent only to the AI provider you choose,36              directly. Keys in browser storage aren't a secure vault — anyone with access to this37              browser profile could read them. An optional passphrase lock is available in38              Settings → Advanced.39            </span>40            <span>Add a provider API key to begin.</span>41          </div>42          <div className="first-run-actions" style={{ marginTop: 16 }}>43            <button44              className="button"45              onClick={() => updateSettings({ firstRunAcknowledged: true })}46            >47              Explore first48            </button>49            <button50              className="button primary"51              onClick={() => {52                updateSettings({ firstRunAcknowledged: true })53                openSettings('providers')54              }}55            >56              Add a key57            </button>58          </div>59        </div>60      </div>61    </div>62  )63}64