Compare commits
2 commits
master
...
ep/Jul27-2
Author | SHA1 | Date | |
---|---|---|---|
8c21184145 | |||
455ceb11e4 |
34 changed files with 1107 additions and 1098 deletions
|
@ -14,7 +14,7 @@ jobs:
|
||||||
deploy-edge:
|
deploy-edge:
|
||||||
steps:
|
steps:
|
||||||
- name: Oasis Setup
|
- name: Oasis Setup
|
||||||
uses: https://forgejo.dunemask.dev/elysium/oasis-action@master
|
uses: https://gitea.dunemask.dev/elysium/oasis-action@master
|
||||||
with:
|
with:
|
||||||
gitea-token: ${{ env.GITEA_TOKEN }}
|
gitea-token: ${{ env.GITEA_TOKEN }}
|
||||||
kubeconfig: ${{ env.KUBECONFIG_BASE64 }}
|
kubeconfig: ${{ env.KUBECONFIG_BASE64 }}
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
printWidth: 120
|
|
||||||
semi: true
|
|
||||||
singleQuote: false
|
|
||||||
trailingComma: all
|
|
||||||
bracketSpacing: true
|
|
||||||
arrowParens: always
|
|
||||||
requirePragma: false
|
|
||||||
insertPragma: false
|
|
|
@ -13,7 +13,7 @@ COPY src src
|
||||||
COPY index.html .
|
COPY index.html .
|
||||||
COPY vite.config.js .
|
COPY vite.config.js .
|
||||||
# Build static web files
|
# Build static web files
|
||||||
RUN npm run build
|
RUN npm run build:react
|
||||||
# Set working directory to nginx asset directory
|
# Set working directory to nginx asset directory
|
||||||
# Remove default nginx static assets
|
# Remove default nginx static assets
|
||||||
WORKDIR /usr/share/nginx/html
|
WORKDIR /usr/share/nginx/html
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# Nile
|
# Nile
|
||||||
|
|
||||||
Nile is a modern digital portfolio for Dunemask
|
Nile is a modern digital portfolio for Dunemask
|
||||||
|
|
||||||
# WIP
|
# WIP
|
38
index.html
38
index.html
|
@ -23,14 +23,35 @@
|
||||||
name="keywords"
|
name="keywords"
|
||||||
content="Web Developer React, Fullstack Development, Web Developer Portfolio, Elijah Parker, Dunemask, React Developer, QA Software Developer"
|
content="Web Developer React, Fullstack Development, Web Developer Portfolio, Elijah Parker, Dunemask, React Developer, QA Software Developer"
|
||||||
/>
|
/>
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon.png?v=jan27deltaburn" />
|
<link
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicons/favicon-32x32.png?v=jan27deltaburn" />
|
rel="apple-touch-icon"
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicons/favicon-16x16.png?v=jan27deltaburn" />
|
sizes="180x180"
|
||||||
|
href="/favicons/apple-touch-icon.png?v=jan27deltaburn"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="icon"
|
||||||
|
type="image/png"
|
||||||
|
sizes="32x32"
|
||||||
|
href="/favicons/favicon-32x32.png?v=jan27deltaburn"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="icon"
|
||||||
|
type="image/png"
|
||||||
|
sizes="16x16"
|
||||||
|
href="/favicons/favicon-16x16.png?v=jan27deltaburn"
|
||||||
|
/>
|
||||||
<link rel="manifest" href="/favicons/site.webmanifest?v=jan27deltaburn" />
|
<link rel="manifest" href="/favicons/site.webmanifest?v=jan27deltaburn" />
|
||||||
<link rel="mask-icon" href="/favicons/safari-pinned-tab.svg?v=jan27deltaburn" color="#ffc40d" />
|
<link
|
||||||
|
rel="mask-icon"
|
||||||
|
href="/favicons/safari-pinned-tab.svg?v=jan27deltaburn"
|
||||||
|
color="#ffc40d"
|
||||||
|
/>
|
||||||
<link rel="shortcut icon" href="/favicons/favicon.ico?v=jan27deltaburn" />
|
<link rel="shortcut icon" href="/favicons/favicon.ico?v=jan27deltaburn" />
|
||||||
<meta name="msapplication-TileColor" content="#ffc40d" />
|
<meta name="msapplication-TileColor" content="#ffc40d" />
|
||||||
<meta name="msapplication-config" content="/favicons/browserconfig.xml?v=jan27deltaburn" />
|
<meta
|
||||||
|
name="msapplication-config"
|
||||||
|
content="/favicons/browserconfig.xml?v=jan27deltaburn"
|
||||||
|
/>
|
||||||
<meta name="theme-color" content="#5d5d5d" />
|
<meta name="theme-color" content="#5d5d5d" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -125,13 +146,16 @@
|
||||||
<script>
|
<script>
|
||||||
function loaderInitScript() {
|
function loaderInitScript() {
|
||||||
function showLoader() {
|
function showLoader() {
|
||||||
const mediaCover = document.getElementById("loading-content-media-cover");
|
const mediaCover = document.getElementById(
|
||||||
|
"loading-content-media-cover",
|
||||||
|
);
|
||||||
if (mediaCover === null || mediaCover.style === null) return;
|
if (mediaCover === null || mediaCover.style === null) return;
|
||||||
mediaCover.style.display = "block";
|
mediaCover.style.display = "block";
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDocumentStateChange(e) {
|
function onDocumentStateChange(e) {
|
||||||
if (document.readyState === "interactive") setTimeout(showLoader, 2000);
|
if (document.readyState === "interactive")
|
||||||
|
setTimeout(showLoader, 2000);
|
||||||
}
|
}
|
||||||
document.addEventListener("readystatechange", onDocumentStateChange);
|
document.addEventListener("readystatechange", onDocumentStateChange);
|
||||||
}
|
}
|
||||||
|
|
1413
package-lock.json
generated
1413
package-lock.json
generated
File diff suppressed because it is too large
Load diff
32
package.json
32
package.json
|
@ -6,11 +6,10 @@
|
||||||
"author": "Dunemask",
|
"author": "Dunemask",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "vite preview --host",
|
"start": "vite --host",
|
||||||
"start:dev": "vite --host",
|
"start:dev": "vite",
|
||||||
"start:analyzer": "USE_ANALYZER=true vite build",
|
"build:react": "vite build",
|
||||||
"build": "vite build",
|
"lint": "npx prettier -w src/ index.html vite.config.js"
|
||||||
"format": "prettier -w src/ index.html vite.config.js"
|
|
||||||
},
|
},
|
||||||
"browserslist": {
|
"browserslist": {
|
||||||
"production": [
|
"production": [
|
||||||
|
@ -25,19 +24,18 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@emotion/react": "^11.13.0",
|
"@emotion/react": "^11.11.1",
|
||||||
"@emotion/styled": "^11.13.0",
|
"@emotion/styled": "^11.11.0",
|
||||||
"@mui/icons-material": "^5.16.7",
|
"@mui/icons-material": "^5.14.3",
|
||||||
"@mui/material": "^5.16.7",
|
"@mui/material": "^5.14.5",
|
||||||
"@vitejs/plugin-react": "4.3.1",
|
"@vitejs/plugin-react": "4.0.4",
|
||||||
"prettier": "^3.3.3",
|
"prettier": "^3.0.2",
|
||||||
"react": "^18.3.1",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.3.1",
|
"react-dom": "^18.2.0",
|
||||||
"react-icons": "^5.2.1",
|
"react-icons": "^4.10.1",
|
||||||
"react-material-ui-carousel": "^3.4.2",
|
"react-material-ui-carousel": "^3.4.2",
|
||||||
"react-router-dom": "^6.26.0",
|
"react-router-dom": "^6.15.0",
|
||||||
"vite": "5.4.0",
|
"vite": "4.4.9"
|
||||||
"vite-bundle-analyzer": "^0.10.5"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"react-responsive-carousel": "^3.2.23"
|
"react-responsive-carousel": "^3.2.23"
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
<svg viewBox="0 0 212 212" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<metadata
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
>
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work rdf:about="https://codeberg.org/forgejo/meta/src/branch/readme/branding#logo">
|
|
||||||
<dc:title>Forgejo logo</dc:title>
|
|
||||||
<cc:creator rdf:resource="https://caesarschinas.com/"><cc:attributionName>Caesar Schinas</cc:attributionName></cc:creator>
|
|
||||||
<cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<style type="text/css">
|
|
||||||
circle {
|
|
||||||
fill: none;
|
|
||||||
stroke: #000;
|
|
||||||
stroke-width: 15;
|
|
||||||
}
|
|
||||||
path {
|
|
||||||
fill: none;
|
|
||||||
stroke: #000;
|
|
||||||
stroke-width: 25;
|
|
||||||
}
|
|
||||||
.orange {
|
|
||||||
stroke:#ff6600;
|
|
||||||
}
|
|
||||||
.red {
|
|
||||||
stroke:#d40000;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<g transform="translate(6,6)">
|
|
||||||
<path d="M58 168 v-98 a50 50 0 0 1 50-50 h20" class="orange" />
|
|
||||||
<path d="M58 168 v-30 a50 50 0 0 1 50-50 h20" class="red" />
|
|
||||||
<circle cx="142" cy="20" r="18" class="orange" />
|
|
||||||
<circle cx="142" cy="88" r="18" class="red" />
|
|
||||||
<circle cx="58" cy="180" r="18" class="red" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 11 KiB |
|
@ -42,7 +42,12 @@ export default function Navbar() {
|
||||||
<ListItemText sx={{ textAlign: "center" }}>Back</ListItemText>
|
<ListItemText sx={{ textAlign: "center" }}>Back</ListItemText>
|
||||||
</ListItemButton>
|
</ListItemButton>
|
||||||
{links.map((l, i) => (
|
{links.map((l, i) => (
|
||||||
<ListItemButton key={i} component={Link} to={l.url} onClick={toggleMiniNavOpen}>
|
<ListItemButton
|
||||||
|
key={i}
|
||||||
|
component={Link}
|
||||||
|
to={l.url}
|
||||||
|
onClick={toggleMiniNavOpen}
|
||||||
|
>
|
||||||
<ListItemText
|
<ListItemText
|
||||||
sx={{ textAlign: "center" }}
|
sx={{ textAlign: "center" }}
|
||||||
primary={l.title.charAt(0).toUpperCase() + l.title.slice(1)}
|
primary={l.title.charAt(0).toUpperCase() + l.title.slice(1)}
|
||||||
|
@ -63,7 +68,13 @@ export default function Navbar() {
|
||||||
>
|
>
|
||||||
<Toolbar disableGutters sx={{ display: "flex", padding: "0 10px" }}>
|
<Toolbar disableGutters sx={{ display: "flex", padding: "0 10px" }}>
|
||||||
<a href="/">
|
<a href="/">
|
||||||
<IconButton size="large" edge="start" color="inherit" aria-label="menu" sx={{ mr: -0.5 }}>
|
<IconButton
|
||||||
|
size="large"
|
||||||
|
edge="start"
|
||||||
|
color="inherit"
|
||||||
|
aria-label="menu"
|
||||||
|
sx={{ mr: -0.5 }}
|
||||||
|
>
|
||||||
<img src="/images/logo-micro.png" width="40" height="40" />
|
<img src="/images/logo-micro.png" width="40" height="40" />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</a>
|
</a>
|
||||||
|
@ -72,7 +83,13 @@ export default function Navbar() {
|
||||||
</Typography>
|
</Typography>
|
||||||
{miniNav && (
|
{miniNav && (
|
||||||
<Box sx={{ marginLeft: "auto" }}>
|
<Box sx={{ marginLeft: "auto" }}>
|
||||||
<IconButton size="large" edge="start" color="inherit" aria-label="menu" onClick={toggleMiniNavOpen}>
|
<IconButton
|
||||||
|
size="large"
|
||||||
|
edge="start"
|
||||||
|
color="inherit"
|
||||||
|
aria-label="menu"
|
||||||
|
onClick={toggleMiniNavOpen}
|
||||||
|
>
|
||||||
<MenuIcon />
|
<MenuIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
|
@ -3,6 +3,7 @@ import Toolbar from "@mui/material/Toolbar";
|
||||||
import Delta from "./pages/delta/Delta.jsx";
|
import Delta from "./pages/delta/Delta.jsx";
|
||||||
import Resume from "./pages/resume/Resume.jsx";
|
import Resume from "./pages/resume/Resume.jsx";
|
||||||
import { useScrollToLocation } from "./hooks.jsx";
|
import { useScrollToLocation } from "./hooks.jsx";
|
||||||
|
import Upgrades from "./Upgrades.jsx";
|
||||||
|
|
||||||
const redirects = [
|
const redirects = [
|
||||||
{ path: "/r1", rewrite: "/resume" },
|
{ path: "/r1", rewrite: "/resume" },
|
||||||
|
@ -15,11 +16,12 @@ export default function Routing() {
|
||||||
<div className="view">
|
<div className="view">
|
||||||
<Toolbar disableGutters />
|
<Toolbar disableGutters />
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/" element={<Delta />} />
|
<Route path="/" element={<Upgrades />} />
|
||||||
|
{/*<Route path="/" element={<Delta />} />
|
||||||
<Route path="/resume" element={<Resume />} />
|
<Route path="/resume" element={<Resume />} />
|
||||||
{redirects.map((r, i) => (
|
{redirects.map((r, i) => (
|
||||||
<Route key={i} path={r.path} element={<Navigate to={r.rewrite} />} />
|
<Route key={i} path={r.path} element={<Navigate to={r.rewrite} />} />
|
||||||
))}
|
))} */}
|
||||||
<Route path="*" element={<Navigate to="/" replace />} />
|
<Route path="*" element={<Navigate to="/" replace />} />
|
||||||
<Route path="/*" element={<Navigate to="/" replace />} />
|
<Route path="/*" element={<Navigate to="/" replace />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
|
|
54
src/Upgrades.jsx
Normal file
54
src/Upgrades.jsx
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
import Typography from "@mui/material/Typography";
|
||||||
|
import Box from "@mui/material/Box";
|
||||||
|
import Link from "@mui/material/Link";
|
||||||
|
|
||||||
|
// Function to format a date as MMM DD, YYYY
|
||||||
|
function formatDate(date) {
|
||||||
|
const months = [
|
||||||
|
"JAN",
|
||||||
|
"FEB",
|
||||||
|
"MAR",
|
||||||
|
"APR",
|
||||||
|
"MAY",
|
||||||
|
"JUN",
|
||||||
|
"JUL",
|
||||||
|
"AUG",
|
||||||
|
"SEP",
|
||||||
|
"OCT",
|
||||||
|
"NOV",
|
||||||
|
"DEC",
|
||||||
|
];
|
||||||
|
const month = months[date.getMonth()];
|
||||||
|
const day = ("0" + date.getDate()).slice(-2);
|
||||||
|
const year = date.getFullYear();
|
||||||
|
return `${month} ${day}, ${year}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the current date
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
// Get the date 2 weeks from now
|
||||||
|
const twoWeeksFromNow = new Date();
|
||||||
|
twoWeeksFromNow.setDate(now.getDate() + 14);
|
||||||
|
|
||||||
|
export default function Upgrades() {
|
||||||
|
return (
|
||||||
|
<Box height="calc(100vh - 8.8rem)" display="flex">
|
||||||
|
<Box my="auto" mx="auto" flexWrap="wrap" textAlign="center">
|
||||||
|
<Typography variant="h4">Servers currently upgrading!</Typography>
|
||||||
|
<br />
|
||||||
|
<Typography variant="h5">
|
||||||
|
Process Started {formatDate(now)} and will end{" "}
|
||||||
|
{formatDate(twoWeeksFromNow)}
|
||||||
|
</Typography>
|
||||||
|
<Typography variant="h6">
|
||||||
|
{" "}
|
||||||
|
If you need to get in contact with me sooner, please email me at{" "}
|
||||||
|
<Link href="mailto:elijahglennparker@outlook.com">
|
||||||
|
elijahglennparker@outlook.com
|
||||||
|
</Link>
|
||||||
|
</Typography>
|
||||||
|
</Box>
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
}
|
|
@ -4,7 +4,10 @@ import "@css/experience-display.css";
|
||||||
export default function ExperienceDisplay(props) {
|
export default function ExperienceDisplay(props) {
|
||||||
const { title, subtitle, children } = props;
|
const { title, subtitle, children } = props;
|
||||||
return (
|
return (
|
||||||
<Box className="experience-display" sx={{ borderLeft: "2px solid #F3AC20", paddingLeft: "20px", mt: "1rem" }}>
|
<Box
|
||||||
|
className="experience-display"
|
||||||
|
sx={{ borderLeft: "2px solid #F3AC20", paddingLeft: "20px", mt: "1rem" }}
|
||||||
|
>
|
||||||
<Typography variant="h6">{title}</Typography>
|
<Typography variant="h6">{title}</Typography>
|
||||||
<Typography variant="body2" sx={{ opacity: 0.7 }}>
|
<Typography variant="body2" sx={{ opacity: 0.7 }}>
|
||||||
{subtitle}
|
{subtitle}
|
||||||
|
|
|
@ -15,7 +15,10 @@ export default function LogoBackground() {
|
||||||
width: "100%",
|
width: "100%",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<img src="/images/logo-micro.png" style={{ minWidth: "260px", width: "50%", maxWidth: 512 }} />
|
<img
|
||||||
|
src="/images/logo-micro.png"
|
||||||
|
style={{ minWidth: "260px", width: "50%", maxWidth: 512 }}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
border: 2px solid #f3ac20;
|
border: 2px solid #f3ac20;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
margin-left: -28.8px;
|
margin-left: -28px;
|
||||||
margin-top: -16px;
|
margin-top: -16px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,9 @@ import useMediaQuery from "@mui/material/useMediaQuery";
|
||||||
import { useTheme } from "@mui/material/styles";
|
import { useTheme } from "@mui/material/styles";
|
||||||
|
|
||||||
const dob = new Date(2002, 4, 3);
|
const dob = new Date(2002, 4, 3);
|
||||||
const age = Math.abs(new Date(Date.now() - dob.getTime()).getUTCFullYear() - 1970);
|
const age = Math.abs(
|
||||||
|
new Date(Date.now() - dob.getTime()).getUTCFullYear() - 1970,
|
||||||
|
);
|
||||||
|
|
||||||
function AboutContact(props) {
|
function AboutContact(props) {
|
||||||
const { title, info } = props;
|
const { title, info } = props;
|
||||||
|
@ -78,10 +80,13 @@ export default function About() {
|
||||||
About
|
About
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body1">
|
<Typography variant="body1">
|
||||||
Hello! I'm Elijah Parker, a fullstack software engineer from Utah. I have a passion for developing
|
Hello! I'm Elijah Parker, a fullstack software engineer from Utah.
|
||||||
software that achieves "the impossible". I have experience using a wide variety of technologies including
|
I have a passion for developing software that achieves "the
|
||||||
React, Python, Java, and Kubernetes. I'm currently seeking an entry-level part time position or internship
|
impossible". I have experience using a wide variety of
|
||||||
with flexible hours to accommodate pursuit of a bachelorette degree.
|
technologies including React, Python, Java, and Kubernetes. I'm
|
||||||
|
currently seeking an entry-level part time position or internship
|
||||||
|
with flexible hours to accommodate pursuit of a bachelorette
|
||||||
|
degree.
|
||||||
</Typography>
|
</Typography>
|
||||||
<Box
|
<Box
|
||||||
className="about-contacts"
|
className="about-contacts"
|
||||||
|
@ -97,7 +102,10 @@ export default function About() {
|
||||||
<AboutContact
|
<AboutContact
|
||||||
title="Email"
|
title="Email"
|
||||||
info={
|
info={
|
||||||
<a href="mailto:elijahglennparker@outlook.com" style={{ textDecoration: "none", fontSize: "14px" }}>
|
<a
|
||||||
|
href="mailto:elijahglennparker@outlook.com"
|
||||||
|
style={{ textDecoration: "none", fontSize: "14px" }}
|
||||||
|
>
|
||||||
elijahglennparker@outlook.com
|
elijahglennparker@outlook.com
|
||||||
</a>
|
</a>
|
||||||
}
|
}
|
||||||
|
@ -106,12 +114,14 @@ export default function About() {
|
||||||
</Box>
|
</Box>
|
||||||
<Box className="about-contacts-right" sx={{ minWidth: "50%" }}>
|
<Box className="about-contacts-right" sx={{ minWidth: "50%" }}>
|
||||||
<AboutContact title="Age" info={age} />
|
<AboutContact title="Age" info={age} />
|
||||||
<AboutContact title="Freelance" info="Contact me" />
|
<AboutContact title="Freelance" info="Available" />
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
<Typography variant="body1" sx={{ mt: "2rem" }}>
|
<Typography variant="body1" sx={{ mt: "2rem" }}>
|
||||||
Additionally, I have worked with a wide range of tools and frameworks including Git, PostgreSQL, MongoDB,
|
Additionally, I have worked with a wide range of tools and
|
||||||
Docker, Kubernetes, Garden, JavaFX, MaterialUI, Spring Boot, Express, Gitlab, Gitea CI/CD.
|
frameworks including Git, PostgreSQL, MongoDB, Docker, Kubernetes,
|
||||||
|
Garden, JavaFX, MaterialUI, Spring Boot, Express, Gitlab, Gitea
|
||||||
|
CI/CD.
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
|
@ -58,9 +58,23 @@ export default function Contact() {
|
||||||
flexWrap: "wrap",
|
flexWrap: "wrap",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<ContactStrip icon={LocationOnIcon} title="Location" info="Springville, Utah" />
|
<ContactStrip
|
||||||
<ContactStrip icon={MailIcon} title="Email" info="elijahglennparker@outlook.com" />
|
icon={LocationOnIcon}
|
||||||
{<ContactStrip icon={PhoneIphoneIcon} title="Text/Call" info="+1 (385) 595 8161" />}
|
title="Location"
|
||||||
|
info="Springville, Utah"
|
||||||
|
/>
|
||||||
|
<ContactStrip
|
||||||
|
icon={MailIcon}
|
||||||
|
title="Email"
|
||||||
|
info="elijahglennparker@outlook.com"
|
||||||
|
/>
|
||||||
|
{
|
||||||
|
<ContactStrip
|
||||||
|
icon={PhoneIphoneIcon}
|
||||||
|
title="Text/Call"
|
||||||
|
info="+1 (385) 595 8161"
|
||||||
|
/>
|
||||||
|
}
|
||||||
</Box>
|
</Box>
|
||||||
<Box
|
<Box
|
||||||
className="messaging"
|
className="messaging"
|
||||||
|
@ -128,7 +142,9 @@ export default function Contact() {
|
||||||
sx={{ m: "0 auto", width: "100%", maxWidth: "16em" }}
|
sx={{ m: "0 auto", width: "100%", maxWidth: "16em" }}
|
||||||
component={Link}
|
component={Link}
|
||||||
to={`mailto:elijahglennparker@outlook.com?subject=${contactSubject} | ${contactName} | ${contactEmail}&body=${contactBody}`}
|
to={`mailto:elijahglennparker@outlook.com?subject=${contactSubject} | ${contactName} | ${contactEmail}&body=${contactBody}`}
|
||||||
disabled={!(contactSubject && contactBody && contactName && contactEmail)}
|
disabled={
|
||||||
|
!(contactSubject && contactBody && contactName && contactEmail)
|
||||||
|
}
|
||||||
>
|
>
|
||||||
Send Message
|
Send Message
|
||||||
</ContactMessageButton>
|
</ContactMessageButton>
|
||||||
|
|
|
@ -3,7 +3,10 @@ import Typography from "@mui/material/Typography";
|
||||||
export default function ContactStrip(props) {
|
export default function ContactStrip(props) {
|
||||||
const { title, info, icon: Icon } = props;
|
const { title, info, icon: Icon } = props;
|
||||||
return (
|
return (
|
||||||
<Box className="static-contact" sx={{ display: "flex", mb: "2rem", width: "100%" }}>
|
<Box
|
||||||
|
className="static-contact"
|
||||||
|
sx={{ display: "flex", mb: "2rem", width: "100%" }}
|
||||||
|
>
|
||||||
<Box
|
<Box
|
||||||
className="contact-strip"
|
className="contact-strip"
|
||||||
style={{
|
style={{
|
||||||
|
@ -15,7 +18,10 @@ export default function ContactStrip(props) {
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Box sx={{ textAlign: "left", display: "flex" }}>
|
<Box sx={{ textAlign: "left", display: "flex" }}>
|
||||||
<Icon className="contact-icon" style={{ transition: "all 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms" }} />
|
<Icon
|
||||||
|
className="contact-icon"
|
||||||
|
style={{ transition: "all 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms" }}
|
||||||
|
/>
|
||||||
<Typography variant="h4">{title}</Typography>
|
<Typography variant="h4">{title}</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
<Box sx={{ width: "100%", mt: ".25rem", display: "inline-flex" }}>
|
<Box sx={{ width: "100%", mt: ".25rem", display: "inline-flex" }}>
|
||||||
|
|
|
@ -15,32 +15,50 @@ export default function Education() {
|
||||||
}}
|
}}
|
||||||
id="education"
|
id="education"
|
||||||
>
|
>
|
||||||
<Typography variant="h2" sx={{ margin: "1rem auto", fontSize: 30, pb: ".5rem" }}>
|
<Typography
|
||||||
|
variant="h2"
|
||||||
|
sx={{ margin: "1rem auto", fontSize: 30, pb: ".5rem" }}
|
||||||
|
>
|
||||||
Education
|
Education
|
||||||
</Typography>
|
</Typography>
|
||||||
<Box className="education-list">
|
<Box className="education-list">
|
||||||
<ExperienceDisplay title="Computer Science Student" subtitle="Jan 2024 - Present">
|
<ExperienceDisplay
|
||||||
|
title="Computer Science Student"
|
||||||
|
subtitle="Jan 2024 - Present"
|
||||||
|
>
|
||||||
<Typography sx={{ pt: "1rem" }}>
|
<Typography sx={{ pt: "1rem" }}>
|
||||||
Pursuing B.S. in Computer Science: Software Engineering program, completed 27 credits. Anticipated
|
Pursuing B.S. in Computer Science: Software Engineering program,
|
||||||
graduation December 2027
|
completed 11 credits. Anticipated graduation December 2027
|
||||||
</Typography>
|
</Typography>
|
||||||
</ExperienceDisplay>
|
</ExperienceDisplay>
|
||||||
<ExperienceDisplay title="Full Stack Web Development" subtitle="Dec 2018 - May 2020 | Bottega devCamp">
|
<ExperienceDisplay
|
||||||
|
title="Full Stack Web Development"
|
||||||
|
subtitle="Dec 2018 - May 2020 | Bottega devCamp"
|
||||||
|
>
|
||||||
<Typography sx={{ pt: "1rem" }}>
|
<Typography sx={{ pt: "1rem" }}>
|
||||||
Certificate of Competency in advanced Python, database foundations, system analysis, UML, and advanced web
|
Certificate of Competency in advanced Python, database foundations,
|
||||||
development using HTML, JavaScript, React, XML, and JSON
|
system analysis, UML, and advanced web development using HTML,
|
||||||
|
JavaScript, React, XML, and JSON
|
||||||
</Typography>
|
</Typography>
|
||||||
</ExperienceDisplay>
|
</ExperienceDisplay>
|
||||||
<ExperienceDisplay title="High School Diploma" subtitle="Aug 2017 - May 2020 | American Fork Highschool">
|
<ExperienceDisplay
|
||||||
|
title="High School Diploma"
|
||||||
|
subtitle="Aug 2017 - May 2020 | American Fork Highschool"
|
||||||
|
>
|
||||||
<Typography sx={{ pt: "1rem" }}>
|
<Typography sx={{ pt: "1rem" }}>
|
||||||
GPA 3.9, CS Department Choice Award, Co-founder and President Computer Science Club, 4 years programming,
|
GPA 3.9, CS Department Choice Award, Co-founder and President
|
||||||
student tutor, AP courses in Computer Science, Calculus, Mechanics, and Government
|
Computer Science Club, 4 years programming, student tutor, AP
|
||||||
|
courses in Computer Science, Calculus, Mechanics, and Government
|
||||||
</Typography>
|
</Typography>
|
||||||
</ExperienceDisplay>
|
</ExperienceDisplay>
|
||||||
<ExperienceDisplay title="Cyber Security and Networking" subtitle="Jan 2019 - May 2019 | AFA’s CyberPatriot">
|
<ExperienceDisplay
|
||||||
|
title="Cyber Security and Networking"
|
||||||
|
subtitle="Jan 2019 - May 2019 | AFA’s CyberPatriot"
|
||||||
|
>
|
||||||
<Typography sx={{ pt: "1rem" }}>
|
<Typography sx={{ pt: "1rem" }}>
|
||||||
2nd Place state networking security challenge, curriculum included Ubuntu security policies and PAM,
|
2nd Place state networking security challenge, curriculum included
|
||||||
networking, init systems, advanced command line, processes, and scheduled tasks
|
Ubuntu security policies and PAM, networking, init systems, advanced
|
||||||
|
command line, processes, and scheduled tasks
|
||||||
</Typography>
|
</Typography>
|
||||||
</ExperienceDisplay>
|
</ExperienceDisplay>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
|
@ -9,8 +9,17 @@ import Typography from "@mui/material/Typography";
|
||||||
export default function Environments() {
|
export default function Environments() {
|
||||||
return (
|
return (
|
||||||
<Box style={{ padding: 10 }}>
|
<Box style={{ padding: 10 }}>
|
||||||
<Accordion style={{ boxShadow: "none" }} defaultExpanded disableGutters square>
|
<Accordion
|
||||||
<AccordionSummary content={{ margin: 0 }} expandIcon={<ExpandMoreIcon />} style={{ margin: 0 }}>
|
style={{ boxShadow: "none" }}
|
||||||
|
defaultExpanded
|
||||||
|
disableGutters
|
||||||
|
square
|
||||||
|
>
|
||||||
|
<AccordionSummary
|
||||||
|
content={{ margin: 0 }}
|
||||||
|
expandIcon={<ExpandMoreIcon />}
|
||||||
|
style={{ margin: 0 }}
|
||||||
|
>
|
||||||
<Typography variant="h3">Environment</Typography>
|
<Typography variant="h3">Environment</Typography>
|
||||||
</AccordionSummary>
|
</AccordionSummary>
|
||||||
<AccordionDetails>
|
<AccordionDetails>
|
||||||
|
@ -34,7 +43,10 @@ export default function Environments() {
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<p>Section about deployment of applications to a Kubernetes cluster.</p>
|
<p>
|
||||||
|
Section about deployment of applications to a Kubernetes
|
||||||
|
cluster.
|
||||||
|
</p>
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
<Box
|
<Box
|
||||||
|
@ -58,7 +70,10 @@ export default function Environments() {
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<p>Section about deployment using Garden for development and production</p>
|
<p>
|
||||||
|
Section about deployment using Garden for development and
|
||||||
|
production
|
||||||
|
</p>
|
||||||
</Box>
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
</AccordionDetails>
|
</AccordionDetails>
|
||||||
|
|
|
@ -15,36 +15,17 @@ export default function Experience() {
|
||||||
}}
|
}}
|
||||||
id="experience"
|
id="experience"
|
||||||
>
|
>
|
||||||
<Typography variant="h2" sx={{ margin: "1rem auto", fontSize: 30, pb: ".5rem" }}>
|
<Typography
|
||||||
|
variant="h2"
|
||||||
|
sx={{ margin: "1rem auto", fontSize: 30, pb: ".5rem" }}
|
||||||
|
>
|
||||||
Experience
|
Experience
|
||||||
</Typography>
|
</Typography>
|
||||||
<Box className="experience-list">
|
<Box className="experience-list">
|
||||||
<ExperienceDisplay
|
<ExperienceDisplay
|
||||||
title="Fullstack Software Engineer"
|
title="Software Engineer Intern"
|
||||||
subtitle="Jan 2024 - Present | AppRabbit, Springville UT"
|
subtitle="Jun - Nov 2021 | Podium, Lehi UT"
|
||||||
>
|
>
|
||||||
<Typography variant="body1" sx={{ fontWeight: 600, pt: "1rem" }}>
|
|
||||||
Technologies used: <span style={{ fontFamily: "inherit", fontSize: "14px" }}>React, NestJS, Flutter</span>
|
|
||||||
</Typography>
|
|
||||||
<ul style={{ paddingLeft: "25px" }}>
|
|
||||||
<li>
|
|
||||||
<Typography>
|
|
||||||
Developed a highly scalable multi-platform mobile app build system and monitoring solution as project
|
|
||||||
lead
|
|
||||||
</Typography>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<Typography>Automated creation of Owncast livestreaming servers on Digital Ocean</Typography>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<Typography>Implemented strict API policies and authorization systems</Typography>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<Typography>Used Stripe to manage user subscriptions and client data</Typography>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</ExperienceDisplay>
|
|
||||||
<ExperienceDisplay title="Software Engineer Intern" subtitle="Jun - Nov 2021 | Podium, Lehi UT">
|
|
||||||
<Typography variant="body1" sx={{ fontWeight: 600, pt: "1rem" }}>
|
<Typography variant="body1" sx={{ fontWeight: 600, pt: "1rem" }}>
|
||||||
Technologies used:{" "}
|
Technologies used:{" "}
|
||||||
<span
|
<span
|
||||||
|
@ -59,18 +40,30 @@ export default function Experience() {
|
||||||
<ul style={{ paddingLeft: "25px" }}>
|
<ul style={{ paddingLeft: "25px" }}>
|
||||||
<li>
|
<li>
|
||||||
<Typography>
|
<Typography>
|
||||||
Created fullstack application using React and Express to manage QA data as solo developer
|
Developed automated end to end UI & API tests and automated
|
||||||
|
collection of test coverage
|
||||||
</Typography>
|
</Typography>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<Typography>Modularized API testing resources as project lead</Typography>
|
<Typography>
|
||||||
</li>
|
Modularized API testing resources as project lead
|
||||||
<li>
|
</Typography>
|
||||||
<Typography>Improved performance of core QA services by 20%</Typography>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<Typography>
|
<Typography>
|
||||||
Developed automated end to end UI & API tests and automated collection of test coverage
|
Automated scripting framework to gauge product reliability as
|
||||||
|
project lead
|
||||||
|
</Typography>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<Typography>
|
||||||
|
Improved performance of core QA services by 20%
|
||||||
|
</Typography>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<Typography>
|
||||||
|
Created fullstack application using React and Express to manage
|
||||||
|
QA data as solo developer
|
||||||
</Typography>
|
</Typography>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -9,8 +9,9 @@ export default function Header() {
|
||||||
React Fullstack Software Engineer
|
React Fullstack Software Engineer
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body1">
|
<Typography variant="body1">
|
||||||
Specializing in DevOps tools and code reliability. If you're a business seeking to improve developer velocity
|
Specializing in DevOps tools and code reliability. If you're a
|
||||||
or are looking to hire, contact me{" "}
|
business seeking to improve developer velocity or are looking to hire,
|
||||||
|
contact me{" "}
|
||||||
<a
|
<a
|
||||||
href="/#contact"
|
href="/#contact"
|
||||||
style={{
|
style={{
|
||||||
|
|
|
@ -4,7 +4,7 @@ import Chip from "@mui/material/Chip";
|
||||||
import useMediaQuery from "@mui/material/useMediaQuery";
|
import useMediaQuery from "@mui/material/useMediaQuery";
|
||||||
import { useTheme } from "@mui/material/styles";
|
import { useTheme } from "@mui/material/styles";
|
||||||
import Typography from "@mui/material/Typography";
|
import Typography from "@mui/material/Typography";
|
||||||
import { SiForgejo } from "react-icons/si";
|
import { SiGitea } from "react-icons/si";
|
||||||
|
|
||||||
function ProjectLanguages(props) {
|
function ProjectLanguages(props) {
|
||||||
const { languages, smallMode } = props;
|
const { languages, smallMode } = props;
|
||||||
|
@ -23,7 +23,11 @@ function ProjectLanguages(props) {
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{languages.map((l, i) => (
|
{languages.map((l, i) => (
|
||||||
<Chip key={i} label={l} sx={{ borderRadius: "5px", margin: smallMode ? ".25rem" : "" }} />
|
<Chip
|
||||||
|
key={i}
|
||||||
|
label={l}
|
||||||
|
sx={{ borderRadius: "5px", margin: smallMode ? ".25rem" : "" }}
|
||||||
|
/>
|
||||||
))}
|
))}
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
@ -57,7 +61,11 @@ export default function ProjectTile({
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div style={{ width: "100%" }}>
|
<div style={{ width: "100%" }}>
|
||||||
<img src={image} style={{ width: "90%", maxWidth: 512, marginLeft: "auto" }} onClick={imageClick} />
|
<img
|
||||||
|
src={image}
|
||||||
|
style={{ width: "90%", maxWidth: 512, marginLeft: "auto" }}
|
||||||
|
onClick={imageClick}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Box
|
<Box
|
||||||
|
@ -96,12 +104,12 @@ export default function ProjectTile({
|
||||||
<a
|
<a
|
||||||
href={link ?? "/"}
|
href={link ?? "/"}
|
||||||
style={{
|
style={{
|
||||||
color: "#ef6723",
|
color: "#609926",
|
||||||
opacity: gitHov ? ".8" : "1",
|
opacity: gitHov ? ".8" : "1",
|
||||||
display: "flex",
|
display: "flex",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<SiForgejo
|
<SiGitea
|
||||||
size="1.5em"
|
size="1.5em"
|
||||||
style={{
|
style={{
|
||||||
padding: 5,
|
padding: 5,
|
||||||
|
|
|
@ -9,8 +9,17 @@ import Box from "@mui/material/Box";
|
||||||
export default function Projects() {
|
export default function Projects() {
|
||||||
return (
|
return (
|
||||||
<Box style={{ padding: 10 }}>
|
<Box style={{ padding: 10 }}>
|
||||||
<Accordion style={{ boxShadow: "none", margin: 0 }} defaultExpanded disableGutters square>
|
<Accordion
|
||||||
<AccordionSummary content={{ margin: 0 }} expandIcon={<ExpandMoreIcon />} style={{ margin: 0 }}>
|
style={{ boxShadow: "none", margin: 0 }}
|
||||||
|
defaultExpanded
|
||||||
|
disableGutters
|
||||||
|
square
|
||||||
|
>
|
||||||
|
<AccordionSummary
|
||||||
|
content={{ margin: 0 }}
|
||||||
|
expandIcon={<ExpandMoreIcon />}
|
||||||
|
style={{ margin: 0 }}
|
||||||
|
>
|
||||||
<h3>Projects</h3>
|
<h3>Projects</h3>
|
||||||
</AccordionSummary>
|
</AccordionSummary>
|
||||||
<AccordionDetails>
|
<AccordionDetails>
|
||||||
|
|
|
@ -15,7 +15,12 @@ export default function Projects() {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box style={{ padding: 10, scrollMarginTop: "4rem" }} id="portfolio">
|
<Box style={{ padding: 10, scrollMarginTop: "4rem" }} id="portfolio">
|
||||||
<PhotoHover image={image} open={open} setOpen={setOpen} alt={"Missing Project Photo"} />
|
<PhotoHover
|
||||||
|
image={image}
|
||||||
|
open={open}
|
||||||
|
setOpen={setOpen}
|
||||||
|
alt={"Missing Project Photo"}
|
||||||
|
/>
|
||||||
<div style={{ display: "flex" }}>
|
<div style={{ display: "flex" }}>
|
||||||
<Typography variant="h2" sx={{ margin: "2rem auto", fontSize: 30 }}>
|
<Typography variant="h2" sx={{ margin: "2rem auto", fontSize: 30 }}>
|
||||||
Projects
|
Projects
|
||||||
|
@ -25,45 +30,50 @@ export default function Projects() {
|
||||||
image="/portfolio/projects/minecluster.png"
|
image="/portfolio/projects/minecluster.png"
|
||||||
title="Minecluster"
|
title="Minecluster"
|
||||||
year="2023"
|
year="2023"
|
||||||
link="https://forgejo.dunemask.dev/elysium/minecluster"
|
link="https://gitea.dunemask.dev/elysium/minecluster"
|
||||||
openPhoto={openPhoto}
|
openPhoto={openPhoto}
|
||||||
languages={["React", "Express", "Kubernetes"]}
|
languages={["React", "Express", "Kubernetes"]}
|
||||||
>
|
>
|
||||||
Deploy and monitor MInecraft servers in your kubernetes cluster. Easily scales and provides a stateful
|
Deploy and monitor MInecraft servers in your kubernetes cluster. Easily
|
||||||
experience to make managing multiple servers simple.
|
scales and provides a stateful experience to make managing multiple
|
||||||
|
servers simple.
|
||||||
</ProjectTile>
|
</ProjectTile>
|
||||||
<ProjectTile
|
<ProjectTile
|
||||||
image="/portfolio/projects/qualiteer.png"
|
image="/portfolio/projects/qualiteer.png"
|
||||||
title="Qualiteer"
|
title="Qualiteer"
|
||||||
year="2022"
|
year="2022"
|
||||||
link="https://forgejo.dunemask.dev/elysium/qualiteer"
|
link="https://gitea.dunemask.dev/elysium/qualiteer"
|
||||||
openPhoto={openPhoto}
|
openPhoto={openPhoto}
|
||||||
languages={["React", "Express", "Kubernetes", "PostgreSQL", "RabbitMQ"]}
|
languages={["React", "Express", "Kubernetes", "PostgreSQL", "RabbitMQ"]}
|
||||||
>
|
>
|
||||||
Manage failing tests and silence unecessary alerts. Check the state of your services worldwide and improve
|
Manage failing tests and silence unecessary alerts. Check the state of
|
||||||
developer confidence with a simple interface.
|
your services worldwide and improve developer confidence with a simple
|
||||||
|
interface.
|
||||||
</ProjectTile>
|
</ProjectTile>
|
||||||
<ProjectTile
|
<ProjectTile
|
||||||
image="/portfolio/projects/khufu.png"
|
image="/portfolio/projects/khufu.png"
|
||||||
title="Khufu"
|
title="Khufu"
|
||||||
year="2021"
|
year="2021"
|
||||||
link="https://forgejo.dunemask.dev/elysium/khufu"
|
link="https://gitea.dunemask.dev/elysium/khufu"
|
||||||
openPhoto={openPhoto}
|
openPhoto={openPhoto}
|
||||||
languages={["React", "Express"]}
|
languages={["React", "Express"]}
|
||||||
>
|
>
|
||||||
Basic cloud file management built on React class components. Simple interface allows users to upload, delete,
|
Basic cloud file management built on React class components. Simple
|
||||||
and multiple files.
|
interface allows users to upload, delete, and multiple files.
|
||||||
</ProjectTile>
|
</ProjectTile>
|
||||||
<ProjectTile
|
<ProjectTile
|
||||||
image="/portfolio/projects/codepen.png"
|
image="/portfolio/projects/codepen.png"
|
||||||
title="Codepen"
|
title="Codepen"
|
||||||
year="2020"
|
year="2020"
|
||||||
link="https://github.com/Dunemask/Codepen-Website-Replication"
|
link="https://gitea.dunemask.dev/dunemask/codepen"
|
||||||
openPhoto={openPhoto}
|
openPhoto={openPhoto}
|
||||||
languages={["HTML5", "CSS"]}
|
languages={["HTML5", "CSS"]}
|
||||||
>
|
>
|
||||||
Visual replication of the website{" "}
|
Visual replication of the website{" "}
|
||||||
<a href="https://codepen.io" style={{ color: "black", fontFamily: "inherit", fontSize: "inherit" }}>
|
<a
|
||||||
|
href="https://codepen.io"
|
||||||
|
style={{ color: "black", fontFamily: "inherit", fontSize: "inherit" }}
|
||||||
|
>
|
||||||
codepen.io
|
codepen.io
|
||||||
</a>{" "}
|
</a>{" "}
|
||||||
webpage in 2020. Simple demonstration of css and html
|
webpage in 2020. Simple demonstration of css and html
|
||||||
|
@ -72,22 +82,24 @@ export default function Projects() {
|
||||||
image="/portfolio/projects/movieplayer.png"
|
image="/portfolio/projects/movieplayer.png"
|
||||||
title="Media Player"
|
title="Media Player"
|
||||||
year="2018"
|
year="2018"
|
||||||
link="https://github.com/Dunemask/dunemask.github.io/blob/a1315519ac111fb2c7568362586bcebc4d94d019/files/java/MoviePlayer.jar"
|
link="https://legacy-21.dunemask.net/files/java/MoviePlayer.jar"
|
||||||
openPhoto={openPhoto}
|
openPhoto={openPhoto}
|
||||||
languages={["Java", "JavaFX"]}
|
languages={["Java", "JavaFX"]}
|
||||||
>
|
>
|
||||||
Simple media player built on javafx. Player supports media seeking, playback controls, and speed distortion.
|
Simple media player built on javafx. Player supports media seeking,
|
||||||
|
playback controls, and speed distortion.
|
||||||
</ProjectTile>
|
</ProjectTile>
|
||||||
<ProjectTile
|
<ProjectTile
|
||||||
image="/portfolio/projects/voxelcraft.png"
|
image="/portfolio/projects/voxelcraft.png"
|
||||||
title="Voxelcraft"
|
title="Voxelcraft"
|
||||||
year="2018"
|
year="2018"
|
||||||
link="https://forgejo.dunemask.dev/dunemask/voxelcraft"
|
link="https://gitea.dunemask.dev/dunemask/voxelcraft"
|
||||||
openPhoto={openPhoto}
|
openPhoto={openPhoto}
|
||||||
languages={["JavaFX"]}
|
languages={["JavaFX"]}
|
||||||
>
|
>
|
||||||
Voxel game built on a simple rendering engine written with JavaFX. Generate your terrain and form your ideal
|
Voxel game built on a simple rendering engine written with JavaFX.
|
||||||
world by exploring and harvesting resources.
|
Generate your terrain and form your ideal world by exploring and
|
||||||
|
harvesting resources.
|
||||||
</ProjectTile>
|
</ProjectTile>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,7 +4,14 @@ import CardContent from "@mui/material/CardContent";
|
||||||
import CardMedia from "@mui/material/CardMedia";
|
import CardMedia from "@mui/material/CardMedia";
|
||||||
import Typography from "@mui/material/Typography";
|
import Typography from "@mui/material/Typography";
|
||||||
|
|
||||||
export default function SkillPaper({ src, bgColor, fgColor, heading, Icon, openPhoto }) {
|
export default function SkillPaper({
|
||||||
|
src,
|
||||||
|
bgColor,
|
||||||
|
fgColor,
|
||||||
|
heading,
|
||||||
|
Icon,
|
||||||
|
openPhoto,
|
||||||
|
}) {
|
||||||
const mediaClick = () => openPhoto(src);
|
const mediaClick = () => openPhoto(src);
|
||||||
return (
|
return (
|
||||||
<Box>
|
<Box>
|
||||||
|
@ -14,7 +21,11 @@ export default function SkillPaper({ src, bgColor, fgColor, heading, Icon, openP
|
||||||
backgroundColor: bgColor,
|
backgroundColor: bgColor,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<img src={src} title={`${heading} Pluralsight Score`} onClick={mediaClick} />
|
<img
|
||||||
|
src={src}
|
||||||
|
title={`${heading} Pluralsight Score`}
|
||||||
|
onClick={mediaClick}
|
||||||
|
/>
|
||||||
<CardContent sx={{ color: fgColor, backgroundColor: bgColor }}>
|
<CardContent sx={{ color: fgColor, backgroundColor: bgColor }}>
|
||||||
<Typography variant="h5" component="div">
|
<Typography variant="h5" component="div">
|
||||||
<div style={{ display: "inline-flex" }}>
|
<div style={{ display: "inline-flex" }}>
|
||||||
|
|
|
@ -26,9 +26,27 @@ export default function Skills() {
|
||||||
const testoutCertClick = () => openPhoto("/portfolio/linux-cert.png");
|
const testoutCertClick = () => openPhoto("/portfolio/linux-cert.png");
|
||||||
|
|
||||||
const skills = [
|
const skills = [
|
||||||
<SkillPaper src="/portfolio/iq/python.png" fgColor="white" bgColor="#3f7ed4" heading="Python" Icon={FaPython} />,
|
<SkillPaper
|
||||||
<SkillPaper src="/portfolio/iq/react.png" fgColor="black" bgColor="#61dafb" heading="React" Icon={FaReact} />,
|
src="/portfolio/iq/python.png"
|
||||||
<SkillPaper src="/portfolio/iq/java.png" fgColor="white" bgColor="#ea8c10 " heading="Java" Icon={FaJava} />,
|
fgColor="white"
|
||||||
|
bgColor="#3f7ed4"
|
||||||
|
heading="Python"
|
||||||
|
Icon={FaPython}
|
||||||
|
/>,
|
||||||
|
<SkillPaper
|
||||||
|
src="/portfolio/iq/react.png"
|
||||||
|
fgColor="black"
|
||||||
|
bgColor="#61dafb"
|
||||||
|
heading="React"
|
||||||
|
Icon={FaReact}
|
||||||
|
/>,
|
||||||
|
<SkillPaper
|
||||||
|
src="/portfolio/iq/java.png"
|
||||||
|
fgColor="white"
|
||||||
|
bgColor="#ea8c10 "
|
||||||
|
heading="Java"
|
||||||
|
Icon={FaJava}
|
||||||
|
/>,
|
||||||
<SkillPaper
|
<SkillPaper
|
||||||
src="/portfolio/iq/javascript.png"
|
src="/portfolio/iq/javascript.png"
|
||||||
fgColor="black"
|
fgColor="black"
|
||||||
|
@ -36,14 +54,25 @@ export default function Skills() {
|
||||||
heading="Javascript"
|
heading="Javascript"
|
||||||
Icon={SiJavascript}
|
Icon={SiJavascript}
|
||||||
/>,
|
/>,
|
||||||
<SkillPaper src="/portfolio/iq/html.png" fgColor="white" bgColor="#e9562f" heading="HTML 5" Icon={FaHtml5} />,
|
<SkillPaper
|
||||||
|
src="/portfolio/iq/html.png"
|
||||||
|
fgColor="white"
|
||||||
|
bgColor="#e9562f"
|
||||||
|
heading="HTML 5"
|
||||||
|
Icon={FaHtml5}
|
||||||
|
/>,
|
||||||
];
|
];
|
||||||
|
|
||||||
const openSkill = (skillIndex) => openPhoto(skills[skillIndex].props.src);
|
const openSkill = (skillIndex) => openPhoto(skills[skillIndex].props.src);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box style={{ padding: 10, scrollMarginTop: "4rem" }} id="achievements">
|
<Box style={{ padding: 10, scrollMarginTop: "4rem" }} id="achievements">
|
||||||
<PhotoHover image={image} open={open} setOpen={setOpen} alt={"Certificate"} />
|
<PhotoHover
|
||||||
|
image={image}
|
||||||
|
open={open}
|
||||||
|
setOpen={setOpen}
|
||||||
|
alt={"Certificate"}
|
||||||
|
/>
|
||||||
<Box
|
<Box
|
||||||
style={{
|
style={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
|
@ -72,7 +101,8 @@ export default function Skills() {
|
||||||
sx={{
|
sx={{
|
||||||
maxWidth: 374,
|
maxWidth: 374,
|
||||||
margin: "10px auto",
|
margin: "10px auto",
|
||||||
boxShadow: "0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
boxShadow:
|
||||||
|
"0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
|
@ -86,7 +116,8 @@ export default function Skills() {
|
||||||
Fullstack Certification
|
Fullstack Certification
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body2">
|
<Typography variant="body2">
|
||||||
Certificate of profeciency in Python3, React, CSS, and Javascript
|
Certificate of profeciency in Python3, React, CSS, and
|
||||||
|
Javascript
|
||||||
</Typography>
|
</Typography>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
@ -94,7 +125,8 @@ export default function Skills() {
|
||||||
sx={{
|
sx={{
|
||||||
maxWidth: 374,
|
maxWidth: 374,
|
||||||
margin: "10px auto",
|
margin: "10px auto",
|
||||||
boxShadow: "0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
boxShadow:
|
||||||
|
"0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
||||||
backgroundColor: "#c3802b",
|
backgroundColor: "#c3802b",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
@ -112,7 +144,9 @@ export default function Skills() {
|
||||||
<Typography gutterBottom variant="h5" component="div">
|
<Typography gutterBottom variant="h5" component="div">
|
||||||
Linux Administration Certificate
|
Linux Administration Certificate
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body2">Certificate of profeciency in Linux client administration</Typography>
|
<Typography variant="body2">
|
||||||
|
Certificate of profeciency in Linux client administration
|
||||||
|
</Typography>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
</Box>
|
</Box>
|
||||||
|
@ -133,10 +167,15 @@ export default function Skills() {
|
||||||
maxWidth: 374,
|
maxWidth: 374,
|
||||||
display: "block",
|
display: "block",
|
||||||
margin: "auto",
|
margin: "auto",
|
||||||
boxShadow: "0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
boxShadow:
|
||||||
|
"0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Suspense fallback={<Skeleton variant="rectangular" width="374px" height="100%" />}>
|
<Suspense
|
||||||
|
fallback={
|
||||||
|
<Skeleton variant="rectangular" width="374px" height="100%" />
|
||||||
|
}
|
||||||
|
>
|
||||||
<Carousel
|
<Carousel
|
||||||
showArrows={true}
|
showArrows={true}
|
||||||
showStatus={false}
|
showStatus={false}
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
|
import Avatar from "@mui/material/Avatar";
|
||||||
import Box from "@mui/material/Box";
|
import Box from "@mui/material/Box";
|
||||||
import Card from "@mui/material/Card";
|
import Card from "@mui/material/Card";
|
||||||
import CardContent from "@mui/material/CardContent";
|
import CardContent from "@mui/material/CardContent";
|
||||||
import Typography from "@mui/material/Typography";
|
import Typography from "@mui/material/Typography";
|
||||||
|
import MailIcon from "@mui/icons-material/Mail";
|
||||||
import GitHubIcon from "@mui/icons-material/GitHub";
|
import GitHubIcon from "@mui/icons-material/GitHub";
|
||||||
import LinkedInIcon from "@mui/icons-material/LinkedIn";
|
import LinkedInIcon from "@mui/icons-material/LinkedIn";
|
||||||
|
import { FaGitlab } from "react-icons/fa";
|
||||||
|
import { SiGitea } from "react-icons/si";
|
||||||
|
|
||||||
export default function Social() {
|
export default function Social() {
|
||||||
return (
|
return (
|
||||||
|
@ -40,77 +44,91 @@ export default function Social() {
|
||||||
sx={{
|
sx={{
|
||||||
maxWidth: 256,
|
maxWidth: 256,
|
||||||
margin: "3rem auto",
|
margin: "3rem auto",
|
||||||
boxShadow: "0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
boxShadow:
|
||||||
|
"0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
||||||
overflow: "visible",
|
overflow: "visible",
|
||||||
textDecoration: "none",
|
textDecoration: "none",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<CardContent>
|
<div style={{ position: "relative", overflow: "visible" }}>
|
||||||
<Typography variant="h5" component="div" style={{ color: "#0073b1", display: "flex" }}>
|
<Avatar
|
||||||
Linkedin
|
style={{
|
||||||
|
width: "4rem",
|
||||||
|
height: "4rem",
|
||||||
|
position: "absolute",
|
||||||
|
top: "-2rem",
|
||||||
|
left: "-2rem",
|
||||||
|
backgroundColor: "#0073b1",
|
||||||
|
}}
|
||||||
|
>
|
||||||
<LinkedInIcon
|
<LinkedInIcon
|
||||||
style={{
|
style={{
|
||||||
width: "24px",
|
width: "2.125rem",
|
||||||
height: "24px",
|
height: "2.125rem",
|
||||||
color: "inherit",
|
color: "white",
|
||||||
marginTop: "auto",
|
|
||||||
marginBottom: "auto",
|
|
||||||
marginLeft: "auto",
|
|
||||||
marginRight: ".25rem",
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
</Avatar>
|
||||||
|
</div>
|
||||||
|
<CardContent sx={{ backgroundColor: "white", marginTop: "1rem" }}>
|
||||||
|
<Typography
|
||||||
|
variant="h5"
|
||||||
|
component="div"
|
||||||
|
style={{ color: "#0073b1" }}
|
||||||
|
>
|
||||||
|
Linkedin
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body2" component="div" mt=".25rem">
|
<Typography variant="body2" component="div">
|
||||||
Hard working fullstack developer Seeking entry-level part time position or internship with flexible
|
Hard working fullstack developer Seeking entry-level part time
|
||||||
hours to accommodate pursuit of a B.S. degree.
|
position or internship with flexible hours to accommodate
|
||||||
|
pursuit of a B.S. degree.
|
||||||
</Typography>
|
</Typography>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
<Card
|
<Card
|
||||||
style={{ margin: "2rem" }}
|
style={{ margin: "2rem" }}
|
||||||
component={Link}
|
component={Link}
|
||||||
to={"https://forgejo.dunemask.dev/elysium"}
|
to={"https://gitea.dunemask.dev/elysium"}
|
||||||
sx={{
|
sx={{
|
||||||
maxWidth: 256,
|
maxWidth: 256,
|
||||||
margin: "3rem auto",
|
margin: "3rem auto",
|
||||||
boxShadow: "0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
boxShadow:
|
||||||
|
"0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
||||||
overflow: "visible",
|
overflow: "visible",
|
||||||
textDecoration: "none",
|
textDecoration: "none",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<CardContent>
|
<div style={{ position: "relative", overflow: "visible" }}>
|
||||||
|
<Avatar
|
||||||
|
style={{
|
||||||
|
width: "4rem",
|
||||||
|
height: "4rem",
|
||||||
|
position: "absolute",
|
||||||
|
top: "-2rem",
|
||||||
|
left: "-2rem",
|
||||||
|
backgroundColor: "rgb(96, 153, 38)",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<SiGitea
|
||||||
|
style={{
|
||||||
|
width: "2.25rem",
|
||||||
|
height: "2.25rem",
|
||||||
|
color: "white",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Avatar>
|
||||||
|
</div>
|
||||||
|
<CardContent sx={{ backgroundColor: "white", marginTop: "1rem" }}>
|
||||||
<Typography
|
<Typography
|
||||||
variant="h5"
|
variant="h5"
|
||||||
component="div"
|
component="div"
|
||||||
sx={{
|
style={{ color: "rgb(96, 153, 38)" }}
|
||||||
backgroundImage: "linear-gradient(to right, var(--tw-gradient-stops))",
|
|
||||||
"--tw-gradient-from": "#f59e0b var(--tw-gradient-from-position)",
|
|
||||||
"--tw-gradient-stops": "var(--tw-gradient-from), var(--tw-gradient-to)",
|
|
||||||
"--tw-gradient-to": "#dc2626 var(--tw-gradient-to-position)",
|
|
||||||
backgroundClip: "text",
|
|
||||||
color: "transparent",
|
|
||||||
"--tw-gradient-from-position": "0%",
|
|
||||||
"--tw-gradient-via-position": "50%",
|
|
||||||
"--tw-gradient-to-position": "100%",
|
|
||||||
display: "flex",
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
Forgejo
|
Gitea
|
||||||
<img
|
|
||||||
src="/images/forgejo.svg"
|
|
||||||
width="24px"
|
|
||||||
height="24px"
|
|
||||||
style={{
|
|
||||||
marginLeft: "auto",
|
|
||||||
marginRight: ".25rem",
|
|
||||||
marginTop: "auto",
|
|
||||||
marginBottom: "auto",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body2" component="div" mt=".25rem">
|
<Typography variant="body2" component="div">
|
||||||
Portfolio showcasing integration with CI/CD and Kubernetes. Technologies include React, Express,
|
Portfolio showcasing integration with CI/CD and Kubernetes.
|
||||||
Python, Helm, and Docker
|
Technologies include React, Express, Python, Helm, and Docker
|
||||||
</Typography>
|
</Typography>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
@ -122,26 +140,44 @@ export default function Social() {
|
||||||
sx={{
|
sx={{
|
||||||
maxWidth: 256,
|
maxWidth: 256,
|
||||||
margin: "3rem auto",
|
margin: "3rem auto",
|
||||||
boxShadow: "0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
boxShadow:
|
||||||
|
"0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
||||||
overflow: "visible",
|
overflow: "visible",
|
||||||
textDecoration: "none",
|
textDecoration: "none",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<CardContent>
|
<div style={{ position: "relative", overflow: "visible" }}>
|
||||||
<Typography variant="h5" component="div" style={{ color: "#24292f", display: "flex" }}>
|
<Avatar
|
||||||
Github
|
style={{
|
||||||
|
width: "4rem",
|
||||||
|
height: "4rem",
|
||||||
|
position: "absolute",
|
||||||
|
top: "-2rem",
|
||||||
|
left: "-2rem",
|
||||||
|
backgroundColor: "#24292f",
|
||||||
|
}}
|
||||||
|
>
|
||||||
<GitHubIcon
|
<GitHubIcon
|
||||||
style={{
|
style={{
|
||||||
color: "inherit",
|
width: "2.5rem",
|
||||||
marginLeft: "auto",
|
height: "2.5rem",
|
||||||
marginTop: "auto",
|
color: "white",
|
||||||
marginRight: ".25rem",
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
</Avatar>
|
||||||
|
</div>
|
||||||
|
<CardContent sx={{ backgroundColor: "white", marginTop: "1rem" }}>
|
||||||
|
<Typography
|
||||||
|
variant="h5"
|
||||||
|
component="div"
|
||||||
|
style={{ color: "#24292f" }}
|
||||||
|
>
|
||||||
|
Github
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="body2" component="div" mt=".25rem">
|
<Typography variant="body2" component="div">
|
||||||
Archived projects specializing in Java, Python, Javascript, HTML, and CSS. Built projects solo and in
|
Archived projects specializing in Java, Python, Javascript,
|
||||||
teams as project lead, and principal contributor.
|
HTML, and CSS. Built projects solo and in teams as project
|
||||||
|
lead, and principal contributor.
|
||||||
</Typography>
|
</Typography>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
|
@ -23,7 +23,8 @@ export default function ContactCard(props) {
|
||||||
width: 320,
|
width: 320,
|
||||||
maxWidth: "100%",
|
maxWidth: "100%",
|
||||||
margin: 2,
|
margin: 2,
|
||||||
boxShadow: "0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
boxShadow:
|
||||||
|
"0 10px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<CardContent sx={{ alignItems: "center", textAlign: "center", pb: 0 }}>
|
<CardContent sx={{ alignItems: "center", textAlign: "center", pb: 0 }}>
|
||||||
|
@ -41,6 +42,7 @@ export default function ContactCard(props) {
|
||||||
mb: 1,
|
mb: 1,
|
||||||
zIndex: 5,
|
zIndex: 5,
|
||||||
backgroundColor: "rgba(0, 115, 177,.1)",
|
backgroundColor: "rgba(0, 115, 177,.1)",
|
||||||
|
borderColor: "white",
|
||||||
color: "#0073b1",
|
color: "#0073b1",
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
@ -50,10 +52,22 @@ export default function ContactCard(props) {
|
||||||
</Typography>
|
</Typography>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
<CardActions style={{ display: "flex", justifyContent: "center" }}>
|
<CardActions style={{ display: "flex", justifyContent: "center" }}>
|
||||||
<IconButton size="sm" variant="plain" component={Link} to={linkedin} sx={{ color: "#0073b1" }}>
|
<IconButton
|
||||||
|
size="sm"
|
||||||
|
variant="plain"
|
||||||
|
component={Link}
|
||||||
|
to={linkedin}
|
||||||
|
sx={{ color: "#0073b1" }}
|
||||||
|
>
|
||||||
<LinkedInIcon />
|
<LinkedInIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
<IconButton size="sm" variant="plain" color="neutral" component={Link} to={email}>
|
<IconButton
|
||||||
|
size="sm"
|
||||||
|
variant="plain"
|
||||||
|
color="neutral"
|
||||||
|
component={Link}
|
||||||
|
to={email}
|
||||||
|
>
|
||||||
<MailIcon />
|
<MailIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</CardActions>
|
</CardActions>
|
||||||
|
|
|
@ -38,7 +38,12 @@ export default function ReferenceCard(props) {
|
||||||
textAlign: "center",
|
textAlign: "center",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Typography variant="h5" component={Link} to={linkedin} sx={{ textDecoration: "none", color: "inherit" }}>
|
<Typography
|
||||||
|
variant="h5"
|
||||||
|
component={Link}
|
||||||
|
to={linkedin}
|
||||||
|
sx={{ textDecoration: "none", color: "inherit" }}
|
||||||
|
>
|
||||||
{name}
|
{name}
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="h6">{title}</Typography>
|
<Typography variant="h6">{title}</Typography>
|
||||||
|
|
|
@ -2,8 +2,7 @@ apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: { { include "nile.fullname" . } }
|
name: { { include "nile.fullname" . } }
|
||||||
labels:
|
labels: { { - include "nile.labels" . | nindent 4 } }
|
||||||
{{- include "nile.labels" . | nindent 4 }}
|
|
||||||
spec:
|
spec:
|
||||||
type: { { .Values.service.type } }
|
type: { { .Values.service.type } }
|
||||||
ports:
|
ports:
|
||||||
|
@ -11,5 +10,4 @@ spec:
|
||||||
targetPort: http
|
targetPort: http
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
name: http
|
name: http
|
||||||
selector:
|
selector: { { - include "nile.selectorLabels" . | nindent 4 } }
|
||||||
{{- include "nile.selectorLabels" . | nindent 4 }}
|
|
||||||
|
|
12
values.yaml
12
values.yaml
|
@ -25,10 +25,12 @@ serviceAccount:
|
||||||
|
|
||||||
podAnnotations: {}
|
podAnnotations: {}
|
||||||
|
|
||||||
podSecurityContext: {}
|
podSecurityContext:
|
||||||
|
{}
|
||||||
# fsGroup: 2000
|
# fsGroup: 2000
|
||||||
|
|
||||||
securityContext: {}
|
securityContext:
|
||||||
|
{}
|
||||||
# capabilities:
|
# capabilities:
|
||||||
# drop:
|
# drop:
|
||||||
# - ALL
|
# - ALL
|
||||||
|
@ -46,7 +48,8 @@ containerPort:
|
||||||
ingress:
|
ingress:
|
||||||
enabled: false
|
enabled: false
|
||||||
className: ""
|
className: ""
|
||||||
annotations: {}
|
annotations:
|
||||||
|
{}
|
||||||
# kubernetes.io/ingress.class: nginx
|
# kubernetes.io/ingress.class: nginx
|
||||||
# kubernetes.io/tls-acme: "true"
|
# kubernetes.io/tls-acme: "true"
|
||||||
hosts:
|
hosts:
|
||||||
|
@ -59,7 +62,8 @@ ingress:
|
||||||
# hosts:
|
# hosts:
|
||||||
# - tut.local
|
# - tut.local
|
||||||
|
|
||||||
resources: {}
|
resources:
|
||||||
|
{}
|
||||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||||
# choice for the user. This also increases chances charts run on environments with little
|
# choice for the user. This also increases chances charts run on environments with little
|
||||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||||
|
|
|
@ -1,19 +1,14 @@
|
||||||
import { defineConfig } from "vite";
|
import { defineConfig } from "vite";
|
||||||
import react from "@vitejs/plugin-react";
|
import react from "@vitejs/plugin-react";
|
||||||
import { analyzer } from "vite-bundle-analyzer";
|
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
|
|
||||||
const plugins = [react()];
|
|
||||||
if (process.env.USE_ANALYZER === "true") plugins.push(analyzer());
|
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
return defineConfig({
|
return defineConfig({
|
||||||
plugins,
|
plugins: [react()],
|
||||||
server: {
|
server: {
|
||||||
port: process.env.VITE_DEV_PORT ?? 5173,
|
port: process.env.VITE_DEV_PORT ?? 5173,
|
||||||
host: "0.0.0.0",
|
host: "0.0.0.0",
|
||||||
hmr: {
|
hmr: {
|
||||||
protocol: process.env.VITE_DEV_PROTOCOL ?? "wss",
|
protocol: process.env.VITE_DEV_PROTOCOL ?? "ws",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
build: {
|
build: {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue