diff --git a/docs/develop.md b/docs/develop.md
new file mode 100644
index 000000000..ef9906b24
--- /dev/null
+++ b/docs/develop.md
@@ -0,0 +1,7 @@
+---
+sidemenu: false
+order: 1000
+hide: true
+---
+
+
diff --git a/docs/examples/demos/demo1.tsx b/docs/examples/demos/demo1.tsx
new file mode 100644
index 000000000..5d66a91c4
--- /dev/null
+++ b/docs/examples/demos/demo1.tsx
@@ -0,0 +1,72 @@
+import { useRequest } from 'ahooks';
+import { Spin } from 'antd';
+import React, { useMemo } from 'react';
+import { MemoryRouter as Router } from 'react-router-dom';
+import {
+  createRouteSwitch,
+  RouteRedirectProps,
+  AdminLayout,
+  AuthLayout,
+  RouteSchemaRenderer,
+  ConfigProvider,
+  ClientSDK,
+} from '@nocobase/client';
+import { UseRequestProvider } from 'ahooks';
+import { extend } from 'umi-request';
+
+const request = extend({
+  prefix: process.env.API_URL,
+  timeout: 30000,
+});
+
+request.use(async (ctx, next) => {
+  const { headers } = ctx.req.options as any;
+  const token = localStorage.getItem('NOCOBASE_TOKEN');
+  if (token) {
+    headers['Authorization'] = `Bearer ${token}`;
+    headers['X-Hostname'] = process.env.API_HOSTNAME;
+  }
+  await next();
+});
+
+const client = new ClientSDK({
+  request,
+});
+
+console.log('process.env.API_URL', process.env.API_URL);
+
+// console.log = () => {}
+
+const RouteSwitch = createRouteSwitch({
+  components: {
+    AdminLayout,
+    AuthLayout,
+    RouteSchemaRenderer,
+  },
+});
+
+const App = () => {
+  const { data, loading } = useRequest('routes:getAccessible', {
+    formatResult: (result) => result?.data,
+  });
+
+  if (loading) {
+    return