diff --git a/src/App.jsx b/src/App.jsx
index 4f03aa1..26c5c85 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,122 +1,49 @@
-import { useState } from 'react'
-import reactLogo from './assets/react.svg'
-import viteLogo from './assets/vite.svg'
-import heroImg from './assets/hero.png'
+import { useState, useEffect } from 'react'
+import { generateToken, loadState, saveState } from './api.js'
+import { createState } from './gameState.js'
+import Game from './Game.jsx'
import './App.css'
-function App() {
- const [count, setCount] = useState(0)
+const TOKEN_KEY = 'otivm_token'
- return (
- <>
-
-
-
-
Get started
-
- Edit src/App.jsx and save to test HMR
-
-
-
-
+export default function App() {
+ const [state, setState] = useState(null)
+ const [token, setToken] = useState(null)
+ const [loading, setLoading] = useState(true)
-
+ useEffect(() => {
+ async function bootstrap() {
+ let tok = localStorage.getItem(TOKEN_KEY)
+ if (!tok) {
+ tok = generateToken()
+ localStorage.setItem(TOKEN_KEY, tok)
+ }
+ setToken(tok)
+ const saved = await loadState(tok)
+ if (saved) {
+ setState(saved)
+ } else {
+ const fresh = createState(tok)
+ setState(fresh)
+ await saveState(tok, fresh)
+ }
+ setLoading(false)
+ }
+ bootstrap()
+ }, [])
-
-
-
-
Documentation
-
Your questions, answered
-
-
-
-
-
Connect with us
-
Join the Vite community
-
-
-
+ async function onStateChange(newState) {
+ setState(newState)
+ await saveState(token, newState)
+ }
-
-
- >
- )
+ if (loading) {
+ return (
+
+ Consulting the ledger...
+
+ )
+ }
+
+ return
}
-
-export default App
Connect with us
-Join the Vite community
---
-
-
- GitHub
-
-
- -
-
-
- Discord
-
-
- -
-
-
- X.com
-
-
- -
-
-
- Bluesky
-
-
-
-