mirror of
https://github.com/geoffsee/open-gsio.git
synced 2025-09-08 22:56:46 +00:00
change semantics
Update README deployment steps and add deploy:secrets script to package.json update local inference script and README update lockfile reconfigure package scripts for development update test execution pass server tests Update README with revised Bun commands and workspace details remove pnpm package manager designator create bun server
This commit is contained in:

committed by
Geoff Seemueller

parent
1055cda2f1
commit
497eb22ad8
4
packages/client/src/pages/+client.ts
Normal file
4
packages/client/src/pages/+client.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
// runs before anything else
|
||||
import UserOptionsStore from "../stores/UserOptionsStore";
|
||||
|
||||
UserOptionsStore.initialize();
|
24
packages/client/src/pages/+data.ts
Normal file
24
packages/client/src/pages/+data.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import Routes from "../renderer/routes";
|
||||
|
||||
export { data };
|
||||
export type Data = Awaited<ReturnType<typeof data>>;
|
||||
import type { PageContextServer } from "vike/types";
|
||||
|
||||
// sets the window title depending on the route
|
||||
const data = async (pageContext: PageContextServer) => {
|
||||
const getTitle = (path) => {
|
||||
return Routes[normalizePath(path)]?.heroLabel || "";
|
||||
};
|
||||
|
||||
const normalizePath = (path) => {
|
||||
if (!path) return "/";
|
||||
if (path.length > 1 && path.endsWith("/")) {
|
||||
path = path.slice(0, -1);
|
||||
}
|
||||
return path.toLowerCase();
|
||||
};
|
||||
return {
|
||||
// The page's <title>
|
||||
title: getTitle(pageContext.urlOriginal),
|
||||
};
|
||||
};
|
41
packages/client/src/pages/_error/+Page.tsx
Normal file
41
packages/client/src/pages/_error/+Page.tsx
Normal file
@@ -0,0 +1,41 @@
|
||||
// client error catcher
|
||||
import { usePageContext } from "../../renderer/usePageContext";
|
||||
import { Center, Text } from "@chakra-ui/react";
|
||||
|
||||
export { Page };
|
||||
|
||||
function Page() {
|
||||
const pageContext = usePageContext();
|
||||
|
||||
let msg: string;
|
||||
const { abortReason, abortStatusCode } = pageContext;
|
||||
if (abortReason?.notAdmin) {
|
||||
msg = "You cannot access this page because you aren't an administrator.";
|
||||
} else if (typeof abortReason === "string") {
|
||||
msg = abortReason;
|
||||
} else if (abortStatusCode === 403) {
|
||||
msg =
|
||||
"You cannot access this page because you don't have enough privileges.";
|
||||
} else if (abortStatusCode === 401) {
|
||||
msg =
|
||||
"You cannot access this page because you aren't logged in. Please log in.";
|
||||
} else {
|
||||
msg = pageContext.is404
|
||||
? "This page doesn't exist."
|
||||
: "Something went wrong. Try again (later).";
|
||||
}
|
||||
|
||||
return (
|
||||
<Center height="100vh">
|
||||
<Text>{msg}</Text>
|
||||
</Center>
|
||||
);
|
||||
}
|
||||
|
||||
declare global {
|
||||
namespace Vike {
|
||||
interface PageContext {
|
||||
abortReason?: string | { notAdmin: true };
|
||||
}
|
||||
}
|
||||
}
|
24
packages/client/src/pages/connect/+Page.tsx
Normal file
24
packages/client/src/pages/connect/+Page.tsx
Normal file
@@ -0,0 +1,24 @@
|
||||
import React from "react";
|
||||
import { Box, VStack } from "@chakra-ui/react";
|
||||
import ConnectComponent from "../../components/connect/ConnectComponent";
|
||||
import { Fragment } from "react";
|
||||
import { useIsMobile } from "../../components/contexts/MobileContext";
|
||||
|
||||
export default function ConnectPage() {
|
||||
const isMobile = useIsMobile();
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<VStack
|
||||
minH={"100%"}
|
||||
maxW={"40rem"}
|
||||
align="start"
|
||||
h={!isMobile ? "90vh" : "70vh"}
|
||||
>
|
||||
<Box maxW={"710px"} p={2} overflowY={"auto"} mt={isMobile ? 24 : 0}>
|
||||
<ConnectComponent />
|
||||
</Box>
|
||||
</VStack>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
26
packages/client/src/pages/index/+Page.tsx
Normal file
26
packages/client/src/pages/index/+Page.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
import React, { useEffect } from "react";
|
||||
import { Stack } from "@chakra-ui/react";
|
||||
import Chat from "../../components/chat/Chat";
|
||||
import clientChatStore from "../../stores/ClientChatStore";
|
||||
import { getModelFamily } from "../../components/chat/lib/SupportedModels";
|
||||
|
||||
// renders "/"
|
||||
export default function IndexPage() {
|
||||
useEffect(() => {
|
||||
try {
|
||||
let model = localStorage.getItem("recentModel");
|
||||
|
||||
if (getModelFamily(model as string)) {
|
||||
clientChatStore.setModel(model as string);
|
||||
}
|
||||
} catch (_) {
|
||||
console.log("using default model");
|
||||
}
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<Stack direction="column" height="100%" width="100%" spacing={0}>
|
||||
<Chat height="100%" width="100%" />
|
||||
</Stack>
|
||||
);
|
||||
}
|
27
packages/client/src/pages/privacy-policy/+Page.tsx
Normal file
27
packages/client/src/pages/privacy-policy/+Page.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
import React, { Fragment } from "react";
|
||||
import { Box, VStack } from "@chakra-ui/react";
|
||||
import PrivacyPolicy from "../../components/legal/LegalDoc";
|
||||
import privacy_policy from "./privacy_policy";
|
||||
import { useIsMobile } from "../../components/contexts/MobileContext";
|
||||
|
||||
export default function Page() {
|
||||
const isMobile = useIsMobile();
|
||||
return (
|
||||
<Fragment>
|
||||
<VStack
|
||||
width={"100%"}
|
||||
align={"center"}
|
||||
height={!isMobile ? "100%" : "100%"}
|
||||
overflowX={"auto"}
|
||||
>
|
||||
<Box
|
||||
overflowY={isMobile ? "scroll" : undefined}
|
||||
maxH={!isMobile ? "70vh" : "89vh"}
|
||||
mt={isMobile ? 24 : undefined}
|
||||
>
|
||||
<PrivacyPolicy text={privacy_policy} />
|
||||
</Box>
|
||||
</VStack>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
117
packages/client/src/pages/privacy-policy/privacy_policy.ts
Normal file
117
packages/client/src/pages/privacy-policy/privacy_policy.ts
Normal file
@@ -0,0 +1,117 @@
|
||||
const privacyPolicyUpdateDate = new Date().toISOString().split("T")[0];
|
||||
|
||||
export default `
|
||||
### Privacy Policy
|
||||
|
||||
_Last Updated: ${privacyPolicyUpdateDate}_
|
||||
|
||||
This Privacy Policy describes how **geoff.seemueller.io LC** ("**we**", "**us**", or "**our**") collects, uses, and shares personal information when you visit or interact with **geoff.seemueller.io** (the "**Site**"). By accessing or using our Site, you agree to the collection and use of information in accordance with this policy.
|
||||
|
||||
---
|
||||
|
||||
### 1. Information We Collect
|
||||
|
||||
**a. Automatically Collected Information**
|
||||
|
||||
When you visit our Site, we automatically collect certain information about your device and interaction with the Site:
|
||||
|
||||
- **IP Address**: We collect your IP address to understand where our visitors are coming from and to enhance security.
|
||||
- **Cookies and UUID**: We assign a unique identifier (UUID) to your device, stored in a cookie that expires in 30 years. This helps us recognize you on subsequent visits.
|
||||
- **User Agent**: Information about your browser type, version, and operating system.
|
||||
- **Referer**: The URL of the website that referred you to our Site.
|
||||
- **Performance Metrics**: Page load time, DNS time, page download time, redirect response time, TCP connect time, server response time, DOM interactive time, and content loaded time.
|
||||
- **Screen and Browser Information**: Screen resolution, viewport size, screen colors, document encoding, user language, and other similar data.
|
||||
|
||||
**b. Information Provided by You**
|
||||
|
||||
While we do not require you to provide personal information, any data you voluntarily submit through contact forms or other interactive features will be collected and processed in accordance with this Privacy Policy.
|
||||
|
||||
---
|
||||
|
||||
### 2. How We Use Your Information
|
||||
|
||||
We use the collected information for the following purposes:
|
||||
|
||||
- **Analytics and Performance Monitoring**: To analyze usage patterns and improve the functionality and user experience of our Site.
|
||||
- **Security and Fraud Prevention**: To protect our Site and users from malicious activities.
|
||||
- **Compliance with Legal Obligations**: To comply with applicable laws, regulations, and legal processes.
|
||||
- **Personalization**: To remember your preferences and personalize your experience on our Site.
|
||||
|
||||
---
|
||||
|
||||
### 3. Cookies and Similar Technologies
|
||||
|
||||
We use cookies to enhance your browsing experience:
|
||||
|
||||
- **What Are Cookies?** Cookies are small text files stored on your device when you visit a website.
|
||||
- **Purpose of Cookies**: We use a cookie to store your UUID, which helps us recognize your device on future visits.
|
||||
- **Cookie Duration**: Our cookies expire after 30 years unless deleted by you.
|
||||
- **Managing Cookies**: You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, some features of our Site may not function properly without cookies.
|
||||
|
||||
---
|
||||
|
||||
### 4. Sharing Your Information
|
||||
|
||||
We do not sell, trade, or rent your personal information to third parties.
|
||||
---
|
||||
|
||||
### 5. Data Retention
|
||||
|
||||
We retain your personal information only for as long as necessary to fulfill the purposes outlined in this Privacy Policy:
|
||||
- **UUID and Cookies**: Stored for up to 30 years unless you delete the cookie.
|
||||
- **Log Data**: Retained for analytical and security purposes for a reasonable period or as required by law.
|
||||
---
|
||||
|
||||
### 6. Your Rights and Choices
|
||||
|
||||
Depending on your jurisdiction, you may have the following rights regarding your personal information:
|
||||
|
||||
- **Access**: Request access to the personal data we hold about you.
|
||||
- **Correction**: Request correction of inaccurate personal data.
|
||||
- **Deletion**: Request deletion of your personal data.
|
||||
- **Restriction**: Request restriction of processing your personal data.
|
||||
- **Objection**: Object to the processing of your personal data.
|
||||
- **Data Portability**: Request the transfer of your personal data to another party.
|
||||
|
||||
To exercise these rights, please contact us at **support@seemueller.io**. We may need to verify your identity before fulfilling your request.
|
||||
|
||||
---
|
||||
|
||||
### 7. Security Measures
|
||||
|
||||
We implement reasonable security measures to protect your personal information from unauthorized access, alteration, disclosure, or destruction. However, no method of transmission over the internet or electronic storage is 100% secure.
|
||||
|
||||
---
|
||||
|
||||
### 8. International Data Transfers
|
||||
|
||||
Your information may be transferred to and maintained on servers located outside of your state, province, country, or other governmental jurisdiction where data protection laws may differ. By providing your information, you consent to such transfers.
|
||||
|
||||
---
|
||||
|
||||
### 9. Children's Privacy
|
||||
|
||||
Our Site is not intended for individuals under the age of 16. We do not knowingly collect personal information from children under 16. If you believe we have collected such information, please contact us to delete it.
|
||||
|
||||
---
|
||||
|
||||
### 10. Third-Party Links
|
||||
|
||||
Our Site may contain links to external websites that are not operated by us. We have no control over and assume no responsibility for the content or privacy practices of these sites.
|
||||
|
||||
---
|
||||
|
||||
### 11. Changes to This Privacy Policy
|
||||
|
||||
We may update this Privacy Policy from time to time:
|
||||
|
||||
- **Notification**: Changes will be posted on this page with an updated "Last Updated" date.
|
||||
- **Material Changes**: If significant changes are made, we will provide more prominent notice.
|
||||
---
|
||||
|
||||
### 12. Contact Us
|
||||
|
||||
If you have any questions or concerns about this Privacy Policy or our data practices, please contact us:
|
||||
|
||||
- **Email**: support@seemueller.io
|
||||
`;
|
27
packages/client/src/pages/terms-of-service/+Page.tsx
Normal file
27
packages/client/src/pages/terms-of-service/+Page.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
import React, { Fragment } from "react";
|
||||
import { Box, VStack } from "@chakra-ui/react";
|
||||
import TermsOfService from "../../components/legal/LegalDoc";
|
||||
import terms_of_service from "./terms_of_service";
|
||||
import { useIsMobile } from "../../components/contexts/MobileContext";
|
||||
|
||||
export default function Page() {
|
||||
const isMobile = useIsMobile();
|
||||
return (
|
||||
<Fragment>
|
||||
<VStack
|
||||
width={"100%"}
|
||||
align={"center"}
|
||||
height={!isMobile ? "100%" : "100%"}
|
||||
overflowX={"auto"}
|
||||
>
|
||||
<Box
|
||||
overflowY={isMobile ? "scroll" : undefined}
|
||||
maxH={!isMobile ? "70vh" : "89vh"}
|
||||
mt={isMobile ? 24 : undefined}
|
||||
>
|
||||
<TermsOfService text={terms_of_service} />
|
||||
</Box>
|
||||
</VStack>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
107
packages/client/src/pages/terms-of-service/terms_of_service.ts
Normal file
107
packages/client/src/pages/terms-of-service/terms_of_service.ts
Normal file
@@ -0,0 +1,107 @@
|
||||
const tosUpdateDate = new Date().toISOString().split("T")[0];
|
||||
|
||||
export default `
|
||||
### Terms of Service
|
||||
|
||||
_Last Updated: ${tosUpdateDate}_
|
||||
|
||||
Welcome to **geoff.seemueller.io** (the "Site"), operated by **geoff.seemueller.io LC** ("**we**", "**us**", or "**our**"). By accessing or using our Site, you agree to be bound by these Terms of Service ("Terms"). If you do not agree with these Terms, please do not use the Site.
|
||||
|
||||
---
|
||||
|
||||
### 1. Acceptance of Terms
|
||||
|
||||
By accessing or using the Site, you acknowledge that you have read, understood, and agree to be bound by these Terms and all applicable laws and regulations.
|
||||
|
||||
---
|
||||
|
||||
### 2. Use of the Site
|
||||
|
||||
**a. Eligibility**
|
||||
|
||||
You must be at least 16 years old to use this Site. By using the Site, you represent and warrant that you meet this requirement.
|
||||
|
||||
**b. Permitted Use**
|
||||
|
||||
You agree to use the Site solely for lawful purposes and in a way that does not infringe the rights of others or restrict or inhibit their use and enjoyment of the Site.
|
||||
|
||||
**c. Prohibited Activities**
|
||||
|
||||
You agree not to:
|
||||
|
||||
- Upload or transmit any harmful or malicious code.
|
||||
- Interfere with the security or integrity of the Site.
|
||||
- Use any automated means to access the Site without our permission.
|
||||
- Attempt to gain unauthorized access to any portion of the Site.
|
||||
|
||||
---
|
||||
|
||||
### 3. Intellectual Property Rights
|
||||
|
||||
All content on the Site—including text, graphics, logos, images, and software—is the property of **geoff.seemueller.io LC** or its content suppliers and is protected by intellectual property laws. Unauthorized use of any materials on the Site may violate copyright, trademark, and other laws.
|
||||
|
||||
---
|
||||
|
||||
### 4. User Content
|
||||
|
||||
**a. Submissions**
|
||||
|
||||
Any content you submit to the Site, such as comments or feedback, is your responsibility. By submitting content, you grant us a non-exclusive, royalty-free, worldwide license to use, reproduce, modify, and display such content.
|
||||
|
||||
**b. Content Standards**
|
||||
|
||||
Your submitted content must not be unlawful, threatening, defamatory, obscene, or otherwise objectionable.
|
||||
|
||||
---
|
||||
|
||||
### 5. Disclaimer of Warranties
|
||||
|
||||
The Site is provided on an "as is" and "as available" basis. We make no warranties, express or implied, regarding the Site's operation or the information, content, or materials included.
|
||||
|
||||
---
|
||||
|
||||
### 6. Limitation of Liability
|
||||
|
||||
In no event shall **geoff.seemueller.io LC** or its affiliates be liable for any indirect, incidental, special, consequential, or punitive damages arising out of or related to your use of the Site.
|
||||
|
||||
---
|
||||
|
||||
### 7. Indemnification
|
||||
|
||||
You agree to indemnify, defend, and hold harmless **geoff.seemueller.io LC** and its affiliates from any claims, liabilities, damages, losses, or expenses arising from your use of the Site or violation of these Terms.
|
||||
|
||||
---
|
||||
|
||||
### 8. Modifications to the Terms
|
||||
|
||||
We reserve the right to modify these Terms at any time:
|
||||
|
||||
- **Notification**: Changes will be posted on this page with an updated "Last Updated" date.
|
||||
- **Continued Use**: Your continued use of the Site after any changes signifies your acceptance of the new Terms.
|
||||
|
||||
---
|
||||
|
||||
### 9. Governing Law
|
||||
|
||||
These Terms are governed by and construed in accordance with the laws of the jurisdiction in which **geoff.seemueller.io LC** operates, without regard to its conflict of law principles.
|
||||
|
||||
---
|
||||
|
||||
### 10. Severability
|
||||
|
||||
If any provision of these Terms is found to be invalid or unenforceable, the remaining provisions shall remain in full force and effect.
|
||||
|
||||
---
|
||||
|
||||
### 11. Entire Agreement
|
||||
|
||||
These Terms constitute the entire agreement between you and **geoff.seemueller.io LC** regarding your use of the Site and supersede all prior agreements.
|
||||
|
||||
---
|
||||
|
||||
### 12. Contact Information
|
||||
|
||||
If you have any questions or concerns about these Terms, please contact us:
|
||||
|
||||
- **Email**: support@seemueller.io
|
||||
`;
|
Reference in New Issue
Block a user