Skip to content

Commit

Permalink
First commit, setup everything!
Browse files Browse the repository at this point in the history
  • Loading branch information
ofluffydev committed Jul 2, 2024
0 parents commit c7be59c
Show file tree
Hide file tree
Showing 16 changed files with 4,754 additions and 0 deletions.
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
43 changes: 43 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// noinspection JSUnusedGlobalSymbols

import {fixupConfigRules} from "@eslint/compat";
import reactRefresh from "eslint-plugin-react-refresh";
import globals from "globals";
import tsParser from "@typescript-eslint/parser";
import path from "node:path";
import {fileURLToPath} from "node:url";
import js from "@eslint/js";
import {FlatCompat} from "@eslint/eslintrc";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname, recommendedConfig: js.configs.recommended, allConfig: js.configs.all
});

export default [{
ignores: ["**/dist", "**/unlighthouse.config.js", "eslint.config.mjs"],
}, ...fixupConfigRules(compat.extends("eslint:recommended", "plugin:@typescript-eslint/strict-type-checked", "plugin:@typescript-eslint/stylistic-type-checked", "plugin:react-hooks/recommended",)), {
plugins: {
"react-refresh": reactRefresh,
},

languageOptions: {
globals: {
...globals.browser,
},

parser: tsParser, ecmaVersion: "latest", sourceType: "module",

parserOptions: {
project: ["./tsconfig.json", "./tsconfig.node.json"],
tsconfigRootDir: "D:\\Coding\\Kaden Frisk\\Website\\V2",
},
},

rules: {
"react-refresh/only-export-components": ["warn", {
allowConstantExport: true,
}],
},
}];
12 changes: 12 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Kaden Frisk</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="src/tsx/main.tsx"></script>
</body>
</html>
75 changes: 75 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{
"name": "website",
"private": true,
"version": "2.0.1",
"description": "My corner of the internet, showcases all my work, services, and blog posts.",
"type": "module",
"author": "Kaden Frisk",
"license": "TODO: Add license",
"repository": {
"type": "git",
"url": "TODO: Add repository URL"
},
"engines": {
"node": ">=14.0.0"
},
"browserslist": [
"chrome >= 60"
],
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview",
"test": "jest",
"update": "yarn upgrade --latest"
},
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router": "^6.22.3",
"react-router-dom": "^6.22.3"
},
"devDependencies": {
"@eslint/compat": "^1.1.0",
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "^9.6.0",
"@types/eslint__js": "^8.42.3",
"@types/jest": "^29.0.0",
"@types/react": "^18.2.66",
"@types/react-dom": "^18.2.22",
"@typescript-eslint/eslint-plugin": "^7.2.0",
"@typescript-eslint/parser": "^7.2.0",
"@vitejs/plugin-react-swc": "^3.5.0",
"eslint": "^9.6.0",
"eslint-plugin-react": "^7.34.1",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.6",
"globals": "^15.7.0",
"jest": "^29.0.0",
"sass": "^1.74.1",
"sitemap-ts": "^1.7.3",
"typescript": "^5.5.3",
"typescript-eslint": "^7.15.0",
"vite": "^5.2.0",
"vite-plugin-sitemap": "^0.6.2"
},
"keywords": [
"TODO: Add relevant keywords"
],
"homepage": "https://kadenfrisk.com",
"bugs": {
"url": "https://kadenfrisk.com/support/bugs"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix",
"prettier --write"
]
}
}
174 changes: 174 additions & 0 deletions src/styles/App.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap');

body {
background: #2e2e2e;
margin: 0;
color: white;
}

.app {
display: flex;
flex-direction: column;
min-height: 100vh;
}

.main-content {
flex-grow: 1;
padding: 20px;
padding-top: 80px; // Add padding to prevent content from being hidden behind the sticky header
}

header .header {
width: 100vw;
overflow-x: visible;
}

.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px;
background-color: #333;
position: fixed; // Make the header sticky
top: 0;
left: 0;
right: 0;
z-index: 1000;
transition: background-color 0.3s ease; // Add transition for background color

.logo {
.brand {
font-size: 1.5em;
font-family: "Open Sans", sans-serif;
font-optical-sizing: auto;
font-weight: 800;
font-style: normal;
font-variation-settings: "wdth" 100;
}
}

.navigation {
display: none;

&.open {
display: flex;
justify-content: center;
align-items: center;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.8);
z-index: 998;

ul {
opacity: 1;
transform: translateY(0);
transition: opacity 0.3s ease, transform 0.3s ease; // Add transitions for opacity and transform
}
}

ul {
list-style-type: none;
margin: 0;
padding: 0;
text-align: center;
opacity: 0;
transform: translateY(-20px);

li {
margin-bottom: 20px;

.nav-link {
color: white;
text-decoration: none;
padding: 10px;
font-size: 1.5em;

&:hover {
background-color: #555;
}
}
}
}
}

.hamburger {
display: block;
cursor: pointer;
z-index: 999;

span {
display: block;
width: 25px;
height: 3px;
background-color: white;
margin-bottom: 5px;
transition: transform 0.3s ease, opacity 0.3s ease; // Add transitions for transform and opacity
}

&.open {
span:nth-child(1) {
transform: rotate(45deg) translate(5px, 5px);
}

span:nth-child(2) {
opacity: 0;
}

span:nth-child(3) {
transform: rotate(-45deg) translate(7px, -8px);
}
}
}

@media (min-width: 768px) {
.navigation {
display: block;

&.open {
position: static;
background-color: transparent;

ul {
opacity: 1;
transform: translateY(0);
transition: none;
}
}

ul {
display: flex;
justify-content: flex-end;
opacity: 1;
transform: translateY(0);

li {
margin-left: 20px;
margin-bottom: 0;
}
}
}

.hamburger {
display: none;
}
}
}

.open-sans-titles {
font-family: "Open Sans", sans-serif;
font-optical-sizing: auto;
font-weight: 800;
font-style: normal;
font-variation-settings: "wdth" 100;
}

.open-sans-nav-items {
font-family: "Open Sans", sans-serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
font-variation-settings: "wdth" 100;
}
13 changes: 13 additions & 0 deletions src/tsx/App.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import Header from './Header';
import {Outlet} from "react-router-dom";

export default function App() {
return (
<div className="app">
<Header />
<main className="main-content">
<Outlet />
</main>
</div>
)
}
8 changes: 8 additions & 0 deletions src/tsx/Contact.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
function Contact() {
return(
<>
<p>Contact Page!</p>
</>
);
}
export default Contact;
38 changes: 38 additions & 0 deletions src/tsx/ErrorPage.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import {isRouteErrorResponse, Link, useRouteError} from "react-router-dom";

export default function ErrorPage() {
const error = useRouteError();
console.error(error);

if (isRouteErrorResponse(error)) {
if (error.status === 404) {
return (
<div id="error-page">
<h1>404 Not Found</h1>
<p>The page you are looking for does not exist.</p>
<Link to="/">Return Home</Link>
<p>
<i>{error.data}</i>
</p>
</div>
);
}

return (
<div id="error-page">
<h1>Oops!</h1>
<p>Sorry, an unexpected error has occurred.</p>
<p>
<i>{error.statusText || error.data}</i>
</p>
</div>
);
}

return (
<div id="error-page">
<h1>Oops!</h1>
<p>Sorry, an unexpected error has occurred.</p>
</div>
);
}
Loading

0 comments on commit c7be59c

Please sign in to comment.