mirror of
https://github.com/geoffsee/open-gsio.git
synced 2025-09-08 22:56:46 +00:00
Remove unused ResumeComponent
, ServicesComponent
, and related sections. Update theming for SupportThisSiteModal
, adjust DogecoinIcon
, and refine Cloudflare worker references.
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
"server:dev": "bun build:client && (cd packages/server && bun run dev)",
|
||||
"build": "(cd packages/cloudflare-workers/open-gsio && bun run deploy:dry-run)",
|
||||
"build:client": "(cd packages/client && bun run vite build)",
|
||||
"deploy": "(cd packages/cloudflare-workers && bun run deploy)",
|
||||
"deploy": "(cd packages/cloudflare-workers/open-gsio && bun run deploy)",
|
||||
"deploy:secrets": "wrangler secret bulk secrets.json -c packages/cloudflare-workers/open-gsio/wrangler.jsonc",
|
||||
"openai:local:mlx": "packages/scripts/start_inference_server.sh mlx-omni-server",
|
||||
"openai:local:ollama": "packages/scripts/start_inference_server.sh ollama",
|
||||
|
@@ -6,6 +6,7 @@ const TealDogecoinIcon = (props) => (
|
||||
as="svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
stroke={"currentColor"}
|
||||
fill="currentColor"
|
||||
boxSize={props.boxSize || "1em"}
|
||||
{...props}
|
||||
@@ -26,8 +27,8 @@ const TealDogecoinIcon = (props) => (
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M17.5001 9.54053C16.4888 6.92891 13.9888 6.44507 13.9888 6.44507H6.85606L6.88358 9.10523H8.30406V15.0454H6.85596V17.7007H13.7913C15.4628 17.7007 16.8026 16.0211 16.8026 16.0211C18.9482 12.9758 17.5 9.54053 17.5 9.54053H17.5001ZM13.8285 14.2314C13.8285 14.2314 13.2845 15.0163 12.6927 15.0163H11.5087L11.4806 9.11173H13.0001C13.0001 9.11173 13.7041 9.25894 14.1959 10.6521C14.1959 10.6521 14.848 12.6468 13.8285 14.2314Z"
|
||||
fill="white"
|
||||
fill-opacity="0.8"
|
||||
// fill="white"
|
||||
// fill-opacity="0.8"
|
||||
/>
|
||||
</Box>
|
||||
);
|
||||
|
@@ -1,62 +0,0 @@
|
||||
import React, { useCallback, useMemo } from "react";
|
||||
import { Box, Flex, useMediaQuery } from "@chakra-ui/react";
|
||||
import { resumeData } from "../../static-data/resume_data";
|
||||
import SectionContent from "./SectionContent";
|
||||
import SectionButton from "./SectionButton";
|
||||
|
||||
const sections = ["professionalSummary", "skills", "experience", "education"];
|
||||
|
||||
export default function ResumeComponent() {
|
||||
const [activeSection, setActiveSection] = React.useState(
|
||||
"professionalSummary",
|
||||
);
|
||||
const [isMobile] = useMediaQuery("(max-width: 1243px)");
|
||||
|
||||
const handleSectionClick = useCallback((section) => {
|
||||
setActiveSection(section);
|
||||
}, []);
|
||||
|
||||
const capitalizeFirstLetter = useCallback((word) => {
|
||||
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
||||
}, []);
|
||||
|
||||
const sectionButtons = useMemo(
|
||||
() =>
|
||||
sections.map((section) => (
|
||||
<SectionButton
|
||||
key={section}
|
||||
onClick={() => handleSectionClick(section)}
|
||||
activeSection={activeSection}
|
||||
section={section}
|
||||
mobile={isMobile}
|
||||
callbackfn={capitalizeFirstLetter}
|
||||
/>
|
||||
)),
|
||||
[activeSection, isMobile, handleSectionClick, capitalizeFirstLetter],
|
||||
);
|
||||
|
||||
return (
|
||||
<Box p={"unset"}>
|
||||
<Flex
|
||||
direction={isMobile ? "column" : "row"}
|
||||
mb={8}
|
||||
wrap="nowrap"
|
||||
gap={isMobile ? 2 : 4}
|
||||
minWidth="0"
|
||||
>
|
||||
{sectionButtons}
|
||||
</Flex>
|
||||
<Box
|
||||
bg="background.secondary"
|
||||
color="text.primary"
|
||||
borderRadius="md"
|
||||
boxShadow="md"
|
||||
borderWidth={1}
|
||||
borderColor="brand.300"
|
||||
minHeight="300px"
|
||||
>
|
||||
<SectionContent activeSection={activeSection} resumeData={resumeData} />
|
||||
</Box>
|
||||
</Box>
|
||||
);
|
||||
}
|
@@ -1,32 +0,0 @@
|
||||
import React from "react";
|
||||
import { Button } from "@chakra-ui/react";
|
||||
import { ChevronRight } from "lucide-react";
|
||||
|
||||
function SectionButton(props: {
|
||||
onClick: () => void;
|
||||
activeSection: string;
|
||||
section: string;
|
||||
mobile: boolean;
|
||||
callbackfn: (word) => string;
|
||||
}) {
|
||||
return (
|
||||
<Button
|
||||
mt={1}
|
||||
onClick={props.onClick}
|
||||
variant={props.activeSection === props.section ? "solid" : "outline"}
|
||||
colorScheme="brand"
|
||||
rightIcon={<ChevronRight size={16} />}
|
||||
size="md"
|
||||
width={props.mobile ? "100%" : "auto"}
|
||||
>
|
||||
{props.section
|
||||
.replace(/([A-Z])/g, " $1")
|
||||
.trim()
|
||||
.split(" ")
|
||||
.map(props.callbackfn)
|
||||
.join(" ")}
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
|
||||
export default SectionButton;
|
@@ -1,98 +0,0 @@
|
||||
import React from "react";
|
||||
import {
|
||||
Box,
|
||||
Grid,
|
||||
GridItem,
|
||||
Heading,
|
||||
ListItem,
|
||||
Text,
|
||||
UnorderedList,
|
||||
VStack,
|
||||
} from "@chakra-ui/react";
|
||||
|
||||
const fontSize = "md";
|
||||
|
||||
const ProfessionalSummary = ({ professionalSummary }) => (
|
||||
<Box>
|
||||
<Grid
|
||||
templateColumns="1fr"
|
||||
gap={4}
|
||||
maxW={["100%", "100%", "100%"]}
|
||||
mx="auto"
|
||||
className="about-container"
|
||||
>
|
||||
<GridItem
|
||||
colSpan={1}
|
||||
maxW={["100%", "100%", "container.md"]}
|
||||
justifySelf="center"
|
||||
minH={"100%"}
|
||||
>
|
||||
<Grid templateColumns="1fr" gap={4} overflowY={"auto"}>
|
||||
<GridItem>
|
||||
<Text fontSize="md">{professionalSummary}</Text>
|
||||
</GridItem>
|
||||
</Grid>
|
||||
</GridItem>
|
||||
</Grid>
|
||||
</Box>
|
||||
);
|
||||
|
||||
const Skills = ({ skills }) => (
|
||||
<VStack align={"baseline"} spacing={6} mb={4}>
|
||||
<UnorderedList spacing={2} mb={0}>
|
||||
<Box>
|
||||
{skills?.map((skill, index) => (
|
||||
<ListItem p={1} key={index}>
|
||||
{skill}
|
||||
</ListItem>
|
||||
))}
|
||||
</Box>
|
||||
</UnorderedList>
|
||||
</VStack>
|
||||
);
|
||||
|
||||
const Experience = ({ experience }) => (
|
||||
<VStack align="start" spacing={6} mb={4}>
|
||||
{experience?.map((job, index) => (
|
||||
<Box key={index} width="100%">
|
||||
<Heading as="h3" size="md" mb={2}>
|
||||
{job.title}
|
||||
</Heading>
|
||||
<Text fontWeight="bold">{job.company}</Text>
|
||||
<Text color="gray.500" mb={2}>
|
||||
{job.timeline}
|
||||
</Text>
|
||||
<Text>{job.description}</Text>
|
||||
</Box>
|
||||
))}
|
||||
</VStack>
|
||||
);
|
||||
|
||||
const Education = ({ education }) => (
|
||||
<UnorderedList spacing={2} mb={4}>
|
||||
{education?.map((edu, index) => <ListItem key={index}>{edu}</ListItem>)}
|
||||
</UnorderedList>
|
||||
);
|
||||
|
||||
const SectionContent = ({ activeSection, resumeData }) => {
|
||||
const components = {
|
||||
professionalSummary: ProfessionalSummary,
|
||||
skills: Skills,
|
||||
experience: Experience,
|
||||
education: Education,
|
||||
};
|
||||
|
||||
const ActiveComponent = components[activeSection];
|
||||
|
||||
return (
|
||||
<Box p={4} minHeight="300px" width="100%">
|
||||
{ActiveComponent ? (
|
||||
<ActiveComponent {...resumeData} />
|
||||
) : (
|
||||
<Text>Select a section to view details.</Text>
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default SectionContent;
|
@@ -1,64 +0,0 @@
|
||||
// ServicesComponent.js
|
||||
import React, { useCallback, useMemo } from "react";
|
||||
import { Box, Flex, useMediaQuery } from "@chakra-ui/react";
|
||||
import { servicesData } from "../../static-data/services_data";
|
||||
import SectionButton from "../resume/SectionButton";
|
||||
import ServicesSectionContent from "./ServicesComponentSection";
|
||||
|
||||
const sections = ["servicesOverview", "offerings"];
|
||||
|
||||
export default function ServicesComponent() {
|
||||
const [activeSection, setActiveSection] = React.useState("servicesOverview");
|
||||
const [isMobile] = useMediaQuery("(max-width: 1243px)");
|
||||
|
||||
const handleSectionClick = useCallback((section) => {
|
||||
setActiveSection(section);
|
||||
}, []);
|
||||
|
||||
const capitalizeFirstLetter = useCallback((word) => {
|
||||
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
||||
}, []);
|
||||
|
||||
const sectionButtons = useMemo(
|
||||
() =>
|
||||
sections.map((section) => (
|
||||
<SectionButton
|
||||
key={section}
|
||||
onClick={() => handleSectionClick(section)}
|
||||
activeSection={activeSection}
|
||||
section={section}
|
||||
mobile={isMobile}
|
||||
callbackfn={capitalizeFirstLetter}
|
||||
/>
|
||||
)),
|
||||
[activeSection, isMobile, handleSectionClick, capitalizeFirstLetter],
|
||||
);
|
||||
|
||||
return (
|
||||
<Box p={"unset"}>
|
||||
<Flex
|
||||
direction={isMobile ? "column" : "row"}
|
||||
mb={8}
|
||||
wrap="nowrap"
|
||||
gap={isMobile ? 2 : 4}
|
||||
minWidth="0" // Ensures flex items can shrink if needed
|
||||
>
|
||||
{sectionButtons}
|
||||
</Flex>
|
||||
<Box
|
||||
bg="background.secondary"
|
||||
color="text.primary"
|
||||
borderRadius="md"
|
||||
boxShadow="md"
|
||||
borderWidth={1}
|
||||
borderColor="brand.300"
|
||||
minHeight="300px"
|
||||
>
|
||||
<ServicesSectionContent
|
||||
activeSection={activeSection}
|
||||
data={servicesData}
|
||||
/>
|
||||
</Box>
|
||||
</Box>
|
||||
);
|
||||
}
|
@@ -1,40 +0,0 @@
|
||||
import React from "react";
|
||||
import { Box, Heading, Text, VStack } from "@chakra-ui/react";
|
||||
|
||||
const ServicesOverview = ({ servicesOverview }) => (
|
||||
<Text fontSize="md">{servicesOverview}</Text>
|
||||
);
|
||||
|
||||
const Offerings = ({ offerings }) => (
|
||||
<VStack align="start" spacing={6} mb={4}>
|
||||
{offerings.map((service, index) => (
|
||||
<Box key={index}>
|
||||
<Heading as="h3" size="md" mb={2}>
|
||||
{service.title}
|
||||
</Heading>
|
||||
<Text mb={4}>{service.description}</Text>
|
||||
</Box>
|
||||
))}
|
||||
</VStack>
|
||||
);
|
||||
|
||||
const ServicesSectionContent = ({ activeSection, data }) => {
|
||||
const components = {
|
||||
servicesOverview: ServicesOverview,
|
||||
offerings: Offerings,
|
||||
};
|
||||
|
||||
const ActiveComponent = components[activeSection];
|
||||
|
||||
return (
|
||||
<Box p={4} minHeight="300px" width="100%">
|
||||
{ActiveComponent ? (
|
||||
<ActiveComponent {...data} />
|
||||
) : (
|
||||
<Text>Select a section to view details.</Text>
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default ServicesSectionContent;
|
@@ -89,8 +89,11 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
||||
motionPreset="slideInBottom"
|
||||
zIndex={zIndex}
|
||||
>
|
||||
<ModalOverlay />
|
||||
<ModalContent bg="gray.800" color="text.primary">
|
||||
<ModalOverlay
|
||||
bg='bg.primary'
|
||||
backdropFilter='blur(10px) hue-rotate(90deg)'
|
||||
/>
|
||||
<ModalContent bg="bg.primary" color="text.primary" >
|
||||
<ModalHeader textAlign="center" mb={2}>
|
||||
Support
|
||||
</ModalHeader>
|
||||
@@ -103,7 +106,7 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
||||
<Tabs
|
||||
align="center"
|
||||
variant="soft-rounded"
|
||||
colorScheme="teal"
|
||||
// colorScheme="teal"
|
||||
isFitted
|
||||
>
|
||||
<TabList mb={2} w={"20%"}>
|
||||
@@ -111,11 +114,13 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
||||
<Tab
|
||||
p={4}
|
||||
key={method.name}
|
||||
color={"text.primary"}
|
||||
bg={clientTransactionStore.selectedMethod=== method.name ? "bg.primary": "bg.secondary"}
|
||||
onClick={() => {
|
||||
clientTransactionStore.setSelectedMethod(method.name);
|
||||
}}
|
||||
>
|
||||
<Box p={1} w={"fit-content"}>
|
||||
<Box p={1} w={"fit-content"} >
|
||||
<method.icon />{" "}
|
||||
</Box>
|
||||
{method.name}
|
||||
@@ -137,8 +142,8 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
||||
clientTransactionStore.setDonerId(e.target.value)
|
||||
}
|
||||
type="text"
|
||||
bg="gray.700"
|
||||
color="white"
|
||||
bg="bg.secondary"
|
||||
color="text.primary"
|
||||
w="100%"
|
||||
/>
|
||||
<Text>Enter the amount you wish to donate:</Text>
|
||||
@@ -151,14 +156,14 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
||||
clientTransactionStore.setAmount(e.target.value)
|
||||
}
|
||||
type="number"
|
||||
bg="gray.700"
|
||||
color="white"
|
||||
bg="bg.secondary"
|
||||
// color="white"
|
||||
w="100%"
|
||||
/>
|
||||
<Button
|
||||
onClick={handleConfirmAmount}
|
||||
size="md"
|
||||
colorScheme="teal"
|
||||
// colorScheme="teal"
|
||||
>
|
||||
Confirm Amount
|
||||
</Button>
|
||||
@@ -181,7 +186,7 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
bg="gray.700"
|
||||
bg="bg.secondary"
|
||||
p={4}
|
||||
borderRadius="md"
|
||||
wordBreak="unset"
|
||||
@@ -196,7 +201,7 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
||||
<Button
|
||||
onClick={handleCopy}
|
||||
size="md"
|
||||
colorScheme="teal"
|
||||
// colorScheme="teal"
|
||||
mb={4}
|
||||
>
|
||||
{hasCopied ? "Address Copied!" : "Copy Address"}
|
||||
@@ -213,7 +218,7 @@ const SupportThisSiteModal = observer(({ isOpen, onClose, zIndex }) => {
|
||||
</VStack>
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
<Button variant="outline" mr={3} onClick={onClose} colorScheme="gray">
|
||||
<Button variant="outline" mr={3} onClick={onClose} >
|
||||
Close
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import Server from "@open-gsio/server";
|
||||
import ServerCoordinator from "packages/server/durable-objects/ServerCoordinator";
|
||||
import ServerCoordinator from "@open-gsio/server/durable-objects/ServerCoordinator";
|
||||
|
||||
export {ServerCoordinator}
|
||||
|
||||
|
@@ -11,6 +11,8 @@
|
||||
"dependencies": {
|
||||
"@cloudflare/vite-plugin": "^1.3.1",
|
||||
"vite": "6.3.5",
|
||||
"wrangler": "^4.18.0"
|
||||
"wrangler": "^4.18.0",
|
||||
"@open-gsio/server": "workspace:*",
|
||||
"@open-gsio/client": "workspace:*"
|
||||
}
|
||||
}
|
||||
|
@@ -28,7 +28,7 @@
|
||||
"migrations": [
|
||||
{
|
||||
"new_classes": [
|
||||
"SiteCoordinator"
|
||||
"ServerCoordinator"
|
||||
],
|
||||
"tag": "v1"
|
||||
}
|
||||
|
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"OPENAI_API_KEY": "",
|
||||
"OPENAI_API_ENDPOINT": "",
|
||||
"PERIGON_API_KEY": "",
|
||||
"EVENTSOURCE_HOST": "",
|
||||
"GROQ_API_KEY": "",
|
||||
"ANTHROPIC_API_KEY": "",
|
||||
"FIREWORKS_API_KEY": "",
|
||||
"GEMINI_API_KEY": "",
|
||||
"XAI_API_KEY": "",
|
||||
"CEREBRAS_API_KEY": ""
|
||||
"CEREBRAS_API_KEY": "",
|
||||
"CLOUDFLARE_API_KEY": "",
|
||||
"CLOUDFLARE_ACCOUNT_ID": ""
|
||||
}
|
Reference in New Issue
Block a user