From 4666d7871a9e064a3b3033c7c1daa9c3c4972d98 Mon Sep 17 00:00:00 2001
From: Logan Hunt <loganhunt@simponic.xyz>
Date: Thu, 19 Jan 2023 14:04:10 -0700
Subject: Web Client (#11)

* Github Oauth

* A simple frontend

* Add middleware proxy on dev

* Forward proxy and rewrite path, add oauth to frontend, increase jwt expiry time to 12 hours

* Some simple style changes

* Add keys as user

* Checkpoint - auth is broken

* Fix auth and use player model, unrelated to this pr: flip board if dark

* Close player session when password or key deleted or put

* Add build script - this branch is quickly becoming cringe

* Docker v2 - add migration and scripts, fix local storage and index that caused build issues

* Ignore keys, proxy api correctly nginx

* Finally nginx is resolved jesus christ

* Remove max screen dimension limits cuz cringe

* Cursor highlight

* Add password form, some minor frontend changes as well

* Remove cringe on home page

* Move to 127.0.0.1 loopback in env

* Add github id in player structs for tests
---
 front/src/routes/demo.jsx | 61 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)
 create mode 100644 front/src/routes/demo.jsx

(limited to 'front/src/routes/demo.jsx')

diff --git a/front/src/routes/demo.jsx b/front/src/routes/demo.jsx
new file mode 100644
index 0000000..b1a2f88
--- /dev/null
+++ b/front/src/routes/demo.jsx
@@ -0,0 +1,61 @@
+import { useEffect, useRef, useState } from "react";
+import { Link } from "react-router-dom";
+
+import * as AsciinemaPlayer from "asciinema-player";
+import "asciinema-player/dist/bundle/asciinema-player.css";
+
+const demoProps = {
+  theme: "tango",
+  startAt: 12,
+  autoPlay: true,
+};
+
+const demoCast = "/chessh.cast";
+const demoCastElementId = "demo";
+
+export const Demo = () => {
+  const player = useRef(null);
+  const [renderedPlayer, setRenderedPlayer] = useState(false);
+
+  useEffect(() => {
+    if (!renderedPlayer) {
+      AsciinemaPlayer.create(
+        demoCast,
+        document.getElementById(demoCastElementId),
+        demoProps
+      );
+      setRenderedPlayer(true);
+    }
+  }, [renderedPlayer, player]);
+
+  return (
+    <div className="demo-container">
+      <h1>
+        Welcome to <span style={{ color: "green" }}>> CheSSH!</span>
+      </h1>
+      <div className="flex-row-around">
+        <p>
+          CheSSH is a multiplayer, scalable, free, open source, and (optionally)
+          passwordless game of Chess over the SSH protocol, written in Elixir.
+        </p>
+        <a
+          className="button gold"
+          href="https://github.com/Simponic/chessh"
+          target="_blank"
+          rel="noreferrer"
+        >
+          🌟 Star Repo 🌟
+        </a>
+      </div>
+      <hr />
+      <div ref={player} id={demoCastElementId} />
+      <hr />
+      <div className="flex-row-around">
+        <h3>Would you like to play a game?</h3>
+        <Link className="button" to="/home">
+          Yes, Falken ⇒
+        </Link>
+      </div>
+    </div>
+  );
+};
-- 
cgit v1.3

