From b6d647ecefe5d00591eadf03f73ec68c805b2ba9 Mon Sep 17 00:00:00 2001 From: Hayden Hargreaves Date: Thu, 20 Feb 2025 20:29:03 -0700 Subject: [PATCH] INIT: Starting to look pretty good! --- .gitignore | 23 +++ .npmrc | 1 + .prettierignore | 4 + .prettierrc | 15 ++ README.md | 38 ++++ bun.lockb | Bin 0 -> 102408 bytes eslint.config.js | 34 ++++ package.json | 37 ++++ src/app.css | 1 + src/app.d.ts | 13 ++ src/app.html | 15 ++ src/components/footer.svelte | 39 ++++ src/components/navbar.svelte | 29 +++ src/components/project.svelte | 24 +++ src/components/projects.svelte | 107 +++++++++++ src/components/skills.svelte | 166 ++++++++++++++++++ src/lib/index.ts | 1 + src/routes/+layout.svelte | 10 ++ src/routes/+page.svelte | 38 ++++ src/routes/about/+layout.svelte | 8 + src/routes/about/+page.svelte | 0 static/favicon.png | Bin 0 -> 1571 bytes static/github-mark/github-mark-white.png | Bin 0 -> 4837 bytes static/github-mark/github-mark-white.svg | 1 + static/github-mark/github-mark.png | Bin 0 -> 6393 bytes static/github-mark/github-mark.svg | 1 + static/projects/acousticDroneDetection.png | Bin 0 -> 103530 bytes static/projects/cellularAutomation.png | Bin 0 -> 6257 bytes static/projects/data.json | 125 +++++++++++++ static/projects/gomon.png | Bin 0 -> 22703 bytes static/projects/htmxClass.png | Bin 0 -> 15472 bytes static/projects/pythonStockMarketAnalysis.png | Bin 0 -> 52964 bytes static/projects/tradingBot.jpg | Bin 0 -> 73193 bytes static/projects/webDatabaseViewer.png | Bin 0 -> 179391 bytes svelte.config.js | 18 ++ tailwind.config.ts | 52 ++++++ tsconfig.json | 19 ++ vite.config.ts | 7 + 38 files changed, 826 insertions(+) create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 eslint.config.js create mode 100644 package.json create mode 100644 src/app.css create mode 100644 src/app.d.ts create mode 100644 src/app.html create mode 100644 src/components/footer.svelte create mode 100644 src/components/navbar.svelte create mode 100644 src/components/project.svelte create mode 100644 src/components/projects.svelte create mode 100644 src/components/skills.svelte create mode 100644 src/lib/index.ts create mode 100644 src/routes/+layout.svelte create mode 100644 src/routes/+page.svelte create mode 100644 src/routes/about/+layout.svelte create mode 100644 src/routes/about/+page.svelte create mode 100644 static/favicon.png create mode 100644 static/github-mark/github-mark-white.png create mode 100644 static/github-mark/github-mark-white.svg create mode 100644 static/github-mark/github-mark.png create mode 100644 static/github-mark/github-mark.svg create mode 100644 static/projects/acousticDroneDetection.png create mode 100644 static/projects/cellularAutomation.png create mode 100644 static/projects/data.json create mode 100644 static/projects/gomon.png create mode 100644 static/projects/htmxClass.png create mode 100644 static/projects/pythonStockMarketAnalysis.png create mode 100644 static/projects/tradingBot.jpg create mode 100644 static/projects/webDatabaseViewer.png create mode 100644 svelte.config.js create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3b462cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..ab78a95 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..7ebb855 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,15 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..b5b2950 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# sv + +Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npx sv create + +# create a new project in my-app +npx sv create my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..6d89018c7ffc5bf0e5ad2997c7e6dd1467b3a786 GIT binary patch literal 102408 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 D&ncFn literal 0 HcmV?d00001 diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..aa5987f --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,34 @@ +import prettier from 'eslint-config-prettier'; +import js from '@eslint/js'; +import { includeIgnoreFile } from '@eslint/compat'; +import svelte from 'eslint-plugin-svelte'; +import globals from 'globals'; +import { fileURLToPath } from 'node:url'; +import ts from 'typescript-eslint'; +const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); + +export default ts.config( + includeIgnoreFile(gitignorePath), + js.configs.recommended, + ...ts.configs.recommended, + ...svelte.configs['flat/recommended'], + prettier, + ...svelte.configs['flat/prettier'], + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node + } + } + }, + { + files: ['**/*.svelte'], + + languageOptions: { + parserOptions: { + parser: ts.parser + } + } + } +); diff --git a/package.json b/package.json new file mode 100644 index 0000000..357ac62 --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "personalsite", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check . && eslint ." + }, + "devDependencies": { + "@eslint/compat": "^1.2.5", + "@eslint/js": "^9.18.0", + "@sveltejs/adapter-auto": "^4.0.0", + "@sveltejs/kit": "^2.16.0", + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "@tailwindcss/vite": "^4.0.0", + "eslint": "^9.18.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-svelte": "^2.46.1", + "globals": "^15.14.0", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.11", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "tailwindcss": "^4.0.0", + "typescript": "^5.0.0", + "typescript-eslint": "^8.20.0", + "vite": "^6.0.0" + } +} diff --git a/src/app.css b/src/app.css new file mode 100644 index 0000000..d4b5078 --- /dev/null +++ b/src/app.css @@ -0,0 +1 @@ +@import 'tailwindcss'; diff --git a/src/app.d.ts b/src/app.d.ts new file mode 100644 index 0000000..da08e6d --- /dev/null +++ b/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..a37e970 --- /dev/null +++ b/src/app.html @@ -0,0 +1,15 @@ + + + + + + + + %sveltekit.head% + + + +
%sveltekit.body%
+ + + diff --git a/src/components/footer.svelte b/src/components/footer.svelte new file mode 100644 index 0000000..e445722 --- /dev/null +++ b/src/components/footer.svelte @@ -0,0 +1,39 @@ + diff --git a/src/components/navbar.svelte b/src/components/navbar.svelte new file mode 100644 index 0000000..d9c459f --- /dev/null +++ b/src/components/navbar.svelte @@ -0,0 +1,29 @@ + + + diff --git a/src/components/project.svelte b/src/components/project.svelte new file mode 100644 index 0000000..5004cef --- /dev/null +++ b/src/components/project.svelte @@ -0,0 +1,24 @@ + + +
+

{title}

+

+ {date}: {stack.join(', ')} +

+

{description}

+ {#if image} + {imageAlt} + {/if} + + {#if link} + View Source. + {/if} +
diff --git a/src/components/projects.svelte b/src/components/projects.svelte new file mode 100644 index 0000000..da269ab --- /dev/null +++ b/src/components/projects.svelte @@ -0,0 +1,107 @@ + + +
+

PROJECTS

+ {#if error} +

+ Error {error.code}: + {error.message} +

+ {:else} + {#each projects as project} + + {/each} + {/if} +
diff --git a/src/components/skills.svelte b/src/components/skills.svelte new file mode 100644 index 0000000..ef8cd11 --- /dev/null +++ b/src/components/skills.svelte @@ -0,0 +1,166 @@ + + +
+

SKILLSET

+ {#each skills as skill} +
+
+

{skill.title}

+
+ {#if skill.rating > 0} + {#each { length: skill.rating }} + + + + + + + + {/each} + {#each { length: 5 - skill.rating }} + + + + + + + + {/each} + {/if} +
+
+ +
+ {/each} +
+
+

TOOLS & FRAMEWORKS

+ + {#each tools as tool} +
+

{tool}

+
+ {/each} + +
diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..b1d0f9d --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,10 @@ + + + +{@render children()} +