diff --git a/frontend/src/components/NotFound.js b/frontend/src/components/Todo.js
similarity index 100%
rename from frontend/src/components/NotFound.js
rename to frontend/src/components/Todo.js
diff --git a/frontend/src/dev/README.md b/frontend/src/dev/README.md
new file mode 100644
index 0000000..489f276
--- /dev/null
+++ b/frontend/src/dev/README.md
@@ -0,0 +1,66 @@
+This directory contains utility files which enable some visual features of the
+[React Buddy](https://plugins.jetbrains.com/plugin/17467-react-buddy/) plugin.
+Files in the directory should be committed to source control.
+
+
+React Buddy palettes describe reusable components and building blocks. `React Palette` tool window becomes available when an editor with React components is active. You can drag and drop items from the tool window to the code editor or JSX Outline. Alternatively, you can insert components from the palette using code generation action (`alt+insert` / `⌘ N`).
+
+Add components to the palette using `Add to React Palette` intention or via palette editor (look for the corresponding link in `palette.tsx`). There are some ready-to-use palettes for popular React libraries which are published as npm packages and can be added as a dependency:
+
+```jsx
+import AntdPalette from "@react-buddy/palette-antd";
+import ReactIntlPalette from "@react-buddy/palette-react-intl";
+
+export const PaletteTree = () => (
+
+
+
+
+
+
+
+
+ Card content
+
+
+
+
+
+
+
+
+
+)
+```
+
+
+React Buddy explicitly registers any previewed component in the `previews.tsx` file so that you can specify required props.
+
+```jsx
+
+
+
+```
+
+You can add some global initialization logic for the preview mode in `useInitital.ts`,
+e.g. implicitly obtain user session:
+
+```typescript
+export const useInitial: () => InitialHookStatus = () => {
+ const [loading, setLoading] = useState(false);
+ const [error, setError] = useState(false);
+
+ useEffect(() => {
+ setLoading(true);
+ async function login() {
+ const response = await loginRequest(DEV_LOGIN, DEV_PASSWORD);
+ if (response?.status !== 200) {
+ setError(true);
+ }
+ setLoading(false);
+ }
+ login();
+ }, []);
+ return { loading, error };
+};
+```
\ No newline at end of file
diff --git a/frontend/src/dev/index.js b/frontend/src/dev/index.js
new file mode 100644
index 0000000..d703b95
--- /dev/null
+++ b/frontend/src/dev/index.js
@@ -0,0 +1,9 @@
+import React from "react"
+import {useInitial} from "./useInitial"
+
+const ComponentPreviews = React.lazy(() => import("./previews"))
+
+export {
+ ComponentPreviews,
+ useInitial
+}
\ No newline at end of file
diff --git a/frontend/src/dev/palette.jsx b/frontend/src/dev/palette.jsx
new file mode 100644
index 0000000..8e09715
--- /dev/null
+++ b/frontend/src/dev/palette.jsx
@@ -0,0 +1,25 @@
+import { Fragment } from "react"
+import {
+ Category,
+ Component,
+ Variant,
+ Palette,
+} from "@react-buddy/ide-toolbox"
+
+export const PaletteTree = () => (
+
+
+
+
+
+
+
+
+
+)
+
+export function ExampleLoaderComponent() {
+ return (
+ Loading...
+ )
+}
\ No newline at end of file
diff --git a/frontend/src/dev/previews.jsx b/frontend/src/dev/previews.jsx
new file mode 100644
index 0000000..d57a7a9
--- /dev/null
+++ b/frontend/src/dev/previews.jsx
@@ -0,0 +1,11 @@
+import { Previews } from '@react-buddy/ide-toolbox'
+import { PaletteTree } from './palette'
+
+const ComponentPreviews = () => {
+ return (
+ }>
+
+ )
+}
+
+export default ComponentPreviews
\ No newline at end of file
diff --git a/frontend/src/dev/useInitial.js b/frontend/src/dev/useInitial.js
new file mode 100644
index 0000000..44be041
--- /dev/null
+++ b/frontend/src/dev/useInitial.js
@@ -0,0 +1,15 @@
+import { useState } from 'react'
+
+export const useInitial = () => {
+ const [status, setStatus] = useState({
+ loading: false,
+ error: false
+ })
+ /*
+ Implement hook functionality here.
+ If you need to execute async operation, set loading to true and when it's over, set loading to false.
+ If you caught some errors, set error status to true.
+ Initial hook is considered to be successfully completed if it will return {loading: false, error: false}.
+ */
+ return status
+}