+
}
+ title={
+ <>
+ Powered by
HyperTuner
+ >
+ }
+ subTitle={
+ <>
+ Created with
by
Piotr Rogowski,
+ licensed under
MIT.
+ >
+ }
+ extra={[
+
}
+ onClick={() => window.open('https://github.com/sponsors/karniv00l', '_blank')}
+ >
+ Sponsor
+ ,
+
}
+ onClick={() => window.open('https://github.com/hyper-tuner/hyper-tuner-cloud', '_blank')}
+ >
+ Source
+ ,
+ ]}
+ />
+
+);
+
+export default About;
diff --git a/src/routes.ts b/src/routes.ts
index 0aa6c46..08b5022 100644
--- a/src/routes.ts
+++ b/src/routes.ts
@@ -25,5 +25,7 @@ export enum Routes {
EMAIL_VERIFICATION = '/auth/email-verification/:token',
OAUTH_CALLBACK = '/auth/oauth-callback/:provider',
+ ABOUT = '/about',
+
REDIRECT_PAGE_OAUTH_CALLBACK = 'oauth',
}
diff --git a/vite.config.ts b/vite.config.ts
index 68bc7d5..879b5e3 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,40 +1,108 @@
-import { defineConfig } from 'vite';
+import {
+ defineConfig,
+ loadEnv,
+} from 'vite';
import react from '@vitejs/plugin-react';
import { visualizer } from 'rollup-plugin-visualizer';
+import { createHtmlPlugin } from 'vite-plugin-html';
+import { VitePWA } from 'vite-plugin-pwa';
-// https://vitejs.dev/config/
-export default defineConfig({
- build: {
- outDir: 'build',
- sourcemap: true,
- rollupOptions: {
- output: {
- manualChunks: {
- react: ['react', 'react-dom'],
- antdResult: ['antd/es/result'],
- antdTable: ['antd/es/table'],
- antdIcons: ['@ant-design/icons'],
- uplot: ['uplot'],
- sentry: ['@sentry/react', '@sentry/browser', '@sentry/tracing'],
- kbar: ['kbar'],
- perfectScrollbar: ['perfect-scrollbar'],
- pako: ['pako'],
- mlgConverter: ['mlg-converter'],
+export default ({ mode }) => {
+ const env = loadEnv(mode, process.cwd());
+
+ return defineConfig({
+ build: {
+ outDir: 'build',
+ sourcemap: true,
+ rollupOptions: {
+ output: {
+ manualChunks: {
+ react: ['react', 'react-dom'],
+ antdResult: ['antd/es/result'],
+ antdTable: ['antd/es/table'],
+ antdIcons: ['@ant-design/icons'],
+ uplot: ['uplot'],
+ sentry: ['@sentry/react', '@sentry/browser', '@sentry/tracing'],
+ kbar: ['kbar'],
+ perfectScrollbar: ['perfect-scrollbar'],
+ pako: ['pako'],
+ mlgConverter: ['mlg-converter'],
+ },
},
},
},
- },
- server: {
- open: true,
- host: '0.0.0.0',
- },
- css: {
- preprocessorOptions: {
- less: { javascriptEnabled: true },
+ server: {
+ open: true,
+ host: '0.0.0.0',
},
- },
- plugins: [
- react(),
- visualizer(),
- ],
-});
+ css: {
+ preprocessorOptions: {
+ less: { javascriptEnabled: true },
+ },
+ },
+ plugins: [
+ react(),
+ visualizer(),
+ createHtmlPlugin({
+ template: '/index.html',
+ inject: {
+ data: {
+ metaTitle: env.VITE_META_TITLE,
+ metaDescription: env.VITE_META_DESCRIPTION,
+ metaImage: `${env.VITE_WEB_URL}/img/screen2.png`,
+ metaUrl: env.VITE_WEB_URL,
+ metaThemeColor: env.VITE_META_THEME_COLOR,
+ },
+ },
+ }),
+ VitePWA({
+ registerType: null,
+ devOptions: { enabled: true },
+ manifest: {
+ name: env.VITE_META_TITLE,
+ short_name: env.VITE_META_TITLE,
+ description: env.VITE_META_DESCRIPTION,
+ start_url: '.',
+ display: 'standalone',
+ theme_color: env.VITE_META_THEME_COLOR,
+ background_color: env.VITE_META_THEME_COLOR,
+ icons: [
+ {
+ src: '/icons/icon.ico',
+ type: 'image/x-icon',
+ sizes: '256x256',
+ },
+ {
+ src: '/icons/icon.png',
+ type: 'image/png',
+ sizes: '512x512',
+ },
+ ],
+ screenshots: [
+ {
+ src: '/img/screen1.png',
+ sizes: '3008x2050',
+ type: 'image/png',
+ platform: 'wide',
+ label: 'Tune view',
+ },
+ {
+ src: '/img/screen2.png',
+ sizes: '3008x2050',
+ type: 'image/png',
+ platform: 'wide',
+ label: 'Log viewer',
+ },
+ {
+ src: '/img/screen3.png',
+ sizes: '3008x2050',
+ type: 'image/png',
+ platform: 'wide',
+ label: 'Tooth log viewer',
+ },
+ ],
+ },
+ }),
+ ],
+ });
+};