diff --git a/packages/client/src/components/Info/InfoSidebar.tsx b/packages/client/src/components/Info/InfoSidebar.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..bff1b523a1303b701fe00f97b91c0c8aeb3811fa
--- /dev/null
+++ b/packages/client/src/components/Info/InfoSidebar.tsx
@@ -0,0 +1,57 @@
+import { Button, Link } from "@nextui-org/react";
+import { useAppContext } from "../../contexts/AppContext";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { faXmark } from "@fortawesome/free-solid-svg-icons";
+import { faDiscord } from "@fortawesome/free-brands-svg-icons";
+
+/**
+ * Information sidebar
+ *
+ * TODO: add customization for this post-event (#46)
+ *
+ * @returns
+ */
+export const InfoSidebar = () => {
+ const { infoSidebar, setInfoSidebar } = useAppContext();
+
+ return (
+
+
+ Information
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/packages/client/src/components/Welcome/WelcomeModal.tsx b/packages/client/src/components/Welcome/WelcomeModal.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..6455288683b821d24049cdf0cba986cbcea807ef
--- /dev/null
+++ b/packages/client/src/components/Welcome/WelcomeModal.tsx
@@ -0,0 +1,50 @@
+import {
+ Button,
+ Modal,
+ ModalBody,
+ ModalContent,
+ ModalFooter,
+ ModalHeader,
+ useDisclosure,
+} from "@nextui-org/react";
+
+/**
+ * Welcome popup
+ *
+ * TODO: customization post-event (#46)
+ *
+ * @returns
+ */
+export const WelcomeModal = () => {
+ const { isOpen, onClose } = useDisclosure({
+ defaultOpen: !localStorage.getItem("hide_welcome"),
+ });
+
+ const handleClose = () => {
+ localStorage.setItem("hide_welcome", "true");
+ onClose();
+ };
+
+ return (
+
+
+ {(onClose) => (
+ <>
+ Welcome
+
+ Welcome to Canvas!
+
+ Canvas is a collaborative pixel placing event that uses
+ Fediverse accounts
+
+ More information can be found in the top left
+
+
+
+
+ >
+ )}
+
+
+ );
+};
diff --git a/packages/client/src/contexts/AppContext.tsx b/packages/client/src/contexts/AppContext.tsx
index 5fd3a3f80e8081933701fcc2a8b07cbb44f3b51b..e713447b838e9c3dac64209ef1f31344736d7e9f 100644
--- a/packages/client/src/contexts/AppContext.tsx
+++ b/packages/client/src/contexts/AppContext.tsx
@@ -25,6 +25,8 @@ interface IAppContext {
loadChat: boolean;
setLoadChat: (v: boolean) => void;
+ infoSidebar: boolean;
+ setInfoSidebar: (v: boolean) => void;
settingsSidebar: boolean;
setSettingsSidebar: (v: boolean) => void;
pixelWhois?: { x: number; y: number; surrounding: string[][] };
@@ -79,6 +81,7 @@ export const AppContext = ({ children }: PropsWithChildren) => {
const [undo, setUndo] = useState<{ available: true; expireAt: number }>();
// overlays visible
+ const [infoSidebar, setInfoSidebar] = useState(false);
const [settingsSidebar, setSettingsSidebar] = useState(false);
const [pixelWhois, setPixelWhois] = useState<{
x: number;
@@ -204,6 +207,8 @@ export const AppContext = ({ children }: PropsWithChildren) => {
setHeatmapOverlay,
profile,
setProfile,
+ infoSidebar,
+ setInfoSidebar,
}}
>
{!config && (
diff --git a/packages/client/src/style.scss b/packages/client/src/style.scss
index e9c0b78b013ca4b72d0c16ed9677f24935e13107..01724ad9d7939dc8ddc44ead83c3b5e9873e53dd 100644
--- a/packages/client/src/style.scss
+++ b/packages/client/src/style.scss
@@ -158,6 +158,10 @@ main {
right: 0;
}
+ &-left {
+ left: 0;
+ }
+
header {
display: flex;
flex-direction: row;