INIT: Starting to look pretty good!
23
.gitignore
vendored
Normal file
@ -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-*
|
||||||
4
.prettierignore
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Package Managers
|
||||||
|
package-lock.json
|
||||||
|
pnpm-lock.yaml
|
||||||
|
yarn.lock
|
||||||
15
.prettierrc
Normal file
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
38
README.md
Normal file
@ -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.
|
||||||
34
eslint.config.js
Normal file
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
37
package.json
Normal file
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
1
src/app.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
@import 'tailwindcss';
|
||||||
13
src/app.d.ts
vendored
Normal file
@ -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 {};
|
||||||
15
src/app.html
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
%sveltekit.head%
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="bg-[#1b1b1c]" data-sveltekit-preload-data="hover">
|
||||||
|
<div style="display: contents">%sveltekit.body%</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
39
src/components/footer.svelte
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<footer class="flex w-full items-center justify-center">
|
||||||
|
<p class="mx-2 my-10 py-2 text-sm text-gray-600">© 2025 Hayden Hargreaves</p>
|
||||||
|
<a
|
||||||
|
href="https://www.linkedin.com/in/hayden-hargreaves-37b2802a4/"
|
||||||
|
aria-label="LinkedIn Profile"
|
||||||
|
target="_blank"
|
||||||
|
class="mx-1"
|
||||||
|
>
|
||||||
|
<svg class="w-4.5" viewBox="0 0 72 72" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
><g fill="none" fill-rule="evenodd"
|
||||||
|
><path
|
||||||
|
d="M8,72 L64,72 C68.418278,72 72,68.418278 72,64 L72,8 C72,3.581722 68.418278,-8.11624501e-16 64,0 L8,0 C3.581722,8.11624501e-16 -5.41083001e-16,3.581722 0,8 L0,64 C5.41083001e-16,68.418278 3.581722,72 8,72 Z"
|
||||||
|
fill="#4A5565"
|
||||||
|
/><path
|
||||||
|
d="M62,62 L51.315625,62 L51.315625,43.8021149 C51.315625,38.8127542 49.4197917,36.0245323 45.4707031,36.0245323 C41.1746094,36.0245323 38.9300781,38.9261103 38.9300781,43.8021149 L38.9300781,62 L28.6333333,62 L28.6333333,27.3333333 L38.9300781,27.3333333 L38.9300781,32.0029283 C38.9300781,32.0029283 42.0260417,26.2742151 49.3825521,26.2742151 C56.7356771,26.2742151 62,30.7644705 62,40.051212 L62,62 Z M16.349349,22.7940133 C12.8420573,22.7940133 10,19.9296567 10,16.3970067 C10,12.8643566 12.8420573,10 16.349349,10 C19.8566406,10 22.6970052,12.8643566 22.6970052,16.3970067 C22.6970052,19.9296567 19.8566406,22.7940133 16.349349,22.7940133 Z M11.0325521,62 L21.769401,62 L21.769401,27.3333333 L11.0325521,27.3333333 L11.0325521,62 Z"
|
||||||
|
fill="#1B1B1C"
|
||||||
|
/></g
|
||||||
|
></svg
|
||||||
|
>
|
||||||
|
</a>
|
||||||
|
<a href="https://x.com/azpect_3120" aria-label="Twitter Profile" target="_blank" class="mx-1">
|
||||||
|
<svg class="w-5.5" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 50 50">
|
||||||
|
<path
|
||||||
|
d="M 11 4 C 7.134 4 4 7.134 4 11 L 4 39 C 4 42.866 7.134 46 11 46 L 39 46 C 42.866 46 46 42.866 46 39 L 46 11 C 46 7.134 42.866 4 39 4 L 11 4 z M 13.085938 13 L 21.023438 13 L 26.660156 21.009766 L 33.5 13 L 36 13 L 27.789062 22.613281 L 37.914062 37 L 29.978516 37 L 23.4375 27.707031 L 15.5 37 L 13 37 L 22.308594 26.103516 L 13.085938 13 z M 16.914062 15 L 31.021484 35 L 34.085938 35 L 19.978516 15 L 16.914062 15 z"
|
||||||
|
fill="#4A5565"
|
||||||
|
></path>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/Azpect3120" aria-label="Github Profile" target="_blank" class="mx-1">
|
||||||
|
<svg class="w-5" viewBox="0 0 98 96" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
><path
|
||||||
|
fill-rule="evenodd"
|
||||||
|
clip-rule="evenodd"
|
||||||
|
d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z"
|
||||||
|
fill="#4A5565"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
|
</a>
|
||||||
|
</footer>
|
||||||
29
src/components/navbar.svelte
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<script>
|
||||||
|
console.log('navbar.svelte');
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<nav class="flex border-b-1 border-gray-700 py-6">
|
||||||
|
<div class="flex items-end">
|
||||||
|
<h3 class="ml-4 px-2 text-2xl font-[600] text-gray-200">Hayden Hargreaves</h3>
|
||||||
|
<p class="text-md text-gray-200 italic">Software Engineer</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mx-4 ml-auto flex items-center text-gray-200">
|
||||||
|
<a href="/" class="transition-all duration-150 hover:text-blue-300">
|
||||||
|
<p class="px-3">Home</p>
|
||||||
|
</a>
|
||||||
|
<a href="/about" class="transition-all duration-150 hover:text-blue-300">
|
||||||
|
<p class="px-3">About</p>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/Azpect3120" target="_blank" class="">
|
||||||
|
<svg viewBox="0 0 98 96" xmlns="http://www.w3.org/2000/svg" class="mx-4 h-auto w-6">
|
||||||
|
><path
|
||||||
|
fill-rule="evenodd"
|
||||||
|
clip-rule="evenodd"
|
||||||
|
d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z"
|
||||||
|
fill="#fff"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
24
src/components/project.svelte
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
export let title: string;
|
||||||
|
export let description: string;
|
||||||
|
export let date: string;
|
||||||
|
export let stack: string[];
|
||||||
|
export let image: string | null;
|
||||||
|
export let imageAlt: string | null;
|
||||||
|
export let link: string | null;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="my-8 w-full">
|
||||||
|
<h2 class="py-2 text-2xl font-semibold text-blue-200">{title}</h2>
|
||||||
|
<p class="text-sm text-gray-200 italic">
|
||||||
|
{date}: <span class="text-blue-200 not-italic">{stack.join(', ')}</span>
|
||||||
|
</p>
|
||||||
|
<p class="py-4 text-gray-200">{description}</p>
|
||||||
|
{#if image}
|
||||||
|
<img class="my-2 lg:w-full" src={image} alt={imageAlt} />
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
{#if link}
|
||||||
|
<a href={link} target="_blank" class="text-sm text-blue-400">View Source.</a>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
107
src/components/projects.svelte
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
import Project from './project.svelte';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project data interface, this will be used to store the project data.
|
||||||
|
* This is important for type checking and validation.
|
||||||
|
*/
|
||||||
|
interface ProjectData {
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
date: string;
|
||||||
|
stack: string[];
|
||||||
|
image: string | null;
|
||||||
|
imageAlt: string | null;
|
||||||
|
link: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Server error interface, this will be used to store the error message if the server request fails.
|
||||||
|
*/
|
||||||
|
interface ServerError {
|
||||||
|
message: string;
|
||||||
|
code: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Path to the project data on the server.
|
||||||
|
*/
|
||||||
|
const projectsDataPath: string = '/projects/data.json';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store the project data in an array of objects.
|
||||||
|
*/
|
||||||
|
let projects: ProjectData[] = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store the error message if the server request fails.
|
||||||
|
* Will be null if the request is successful.
|
||||||
|
*/
|
||||||
|
let error: ServerError | null = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch the project data from the server.
|
||||||
|
*/
|
||||||
|
onMount(async () => {
|
||||||
|
try {
|
||||||
|
// Paths are relative to /static
|
||||||
|
// Svelte deploys /static for me!
|
||||||
|
const response = await fetch(projectsDataPath);
|
||||||
|
if (!response.ok) {
|
||||||
|
error = {
|
||||||
|
message:
|
||||||
|
'Failed to retrieve project data. Please try again later. If the issue persists, contact me!',
|
||||||
|
code: response.status
|
||||||
|
};
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const data = await response.json();
|
||||||
|
|
||||||
|
// Validate the data (Important!):
|
||||||
|
if (Array.isArray(data)) {
|
||||||
|
projects = data.map((project) => {
|
||||||
|
// TODO: Sort the projects by date
|
||||||
|
// This will either require a custom function or a new data system
|
||||||
|
return {
|
||||||
|
title: project.title || '',
|
||||||
|
description: project.description || '',
|
||||||
|
date: project.date || '',
|
||||||
|
stack: project.stack || '',
|
||||||
|
image: project.image || '',
|
||||||
|
imageAlt: project.imageAlt || '',
|
||||||
|
link: project.link || ''
|
||||||
|
};
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
error = {
|
||||||
|
message:
|
||||||
|
'Data was not in valid format. Please try again later. If the issue persists, contact me!',
|
||||||
|
code: 400
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
error = {
|
||||||
|
message: `${err} Please try again later. If the issue persists, contact me!`,
|
||||||
|
code: 500
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// If an error occurs, log it to the console
|
||||||
|
if (error) console.error(error);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="">
|
||||||
|
<h2 class="py-2 text-xl font-semibold text-blue-300">PROJECTS</h2>
|
||||||
|
{#if error}
|
||||||
|
<p class="my-4 text-red-300 italic">
|
||||||
|
<span class="font-semibold not-italic">Error {error.code}:</span>
|
||||||
|
{error.message}
|
||||||
|
</p>
|
||||||
|
{:else}
|
||||||
|
{#each projects as project}
|
||||||
|
<Project {...project} />
|
||||||
|
{/each}
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
166
src/components/skills.svelte
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
interface SkillData {
|
||||||
|
title: string;
|
||||||
|
rating: number;
|
||||||
|
description: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const includeDescription: boolean = true;
|
||||||
|
|
||||||
|
const skills: SkillData[] = [
|
||||||
|
{
|
||||||
|
title: 'Javascript',
|
||||||
|
description: 'Frontend web development and basic backend development using Node.js.',
|
||||||
|
rating: 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Typescript',
|
||||||
|
description: 'Javascript with static typing and additional features.',
|
||||||
|
rating: 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Python',
|
||||||
|
description: 'Dynamic language used for data analysis and machine learning.',
|
||||||
|
rating: 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Go',
|
||||||
|
description: 'All purpose language for backend web development and systems programming.',
|
||||||
|
rating: 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Lua',
|
||||||
|
description: 'Simple configuration language used for Neovim and other applications.',
|
||||||
|
rating: 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'SQL',
|
||||||
|
description:
|
||||||
|
'Database query language used for data storage and retrieval in relational databases.',
|
||||||
|
rating: 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'C',
|
||||||
|
description:
|
||||||
|
'Low level systems programming language used for operating systems and embedded systems.',
|
||||||
|
rating: 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'C++',
|
||||||
|
description:
|
||||||
|
'Object oriented programming language used for game development and systems programming.',
|
||||||
|
rating: 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'HTML & CSS',
|
||||||
|
description: 'Web markup and styling languages used for frontend web development.',
|
||||||
|
rating: 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Zig',
|
||||||
|
description: 'Systems programming language with a focus on safety and performance.',
|
||||||
|
rating: 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Nix',
|
||||||
|
description: 'Functional package manager used for declarative system configuration.',
|
||||||
|
rating: 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Java',
|
||||||
|
description: 'Object oriented programming language used for development on all platforms.',
|
||||||
|
rating: 3
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const tools: string[] = [
|
||||||
|
'Linux',
|
||||||
|
'NixOS',
|
||||||
|
'Tailwind CSS',
|
||||||
|
'Spring Boot',
|
||||||
|
'Git',
|
||||||
|
'Docker',
|
||||||
|
'HTMX',
|
||||||
|
'Nginx',
|
||||||
|
'Gin Web Framework',
|
||||||
|
'SSH',
|
||||||
|
'PostgreSLQ',
|
||||||
|
'Neovim'
|
||||||
|
];
|
||||||
|
|
||||||
|
skills.sort((a, b) => b.rating - a.rating);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="w-7/10">
|
||||||
|
<h2 class="py-2 text-xl font-semibold text-blue-300">SKILLSET</h2>
|
||||||
|
{#each skills as skill}
|
||||||
|
<div class="group items-center py-2">
|
||||||
|
<div class="flex items-center">
|
||||||
|
<h3 class="text-sm font-semibold text-gray-200">{skill.title}</h3>
|
||||||
|
<div class="mx-2 flex w-fit">
|
||||||
|
{#if skill.rating > 0}
|
||||||
|
{#each { length: skill.rating }}
|
||||||
|
<svg
|
||||||
|
height="10px"
|
||||||
|
width="10px"
|
||||||
|
version="1.1"
|
||||||
|
id="Capa_1"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 53.867 53.867"
|
||||||
|
xml:space="preserve"
|
||||||
|
fill="#000000"
|
||||||
|
>
|
||||||
|
<g id="SVGRepo_bgCarrier" stroke-width="0"></g>
|
||||||
|
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
|
||||||
|
<g id="SVGRepo_iconCarrier">
|
||||||
|
<polygon
|
||||||
|
style="fill:#8EC5FF;"
|
||||||
|
points="26.934,1.318 35.256,18.182 53.867,20.887 40.4,34.013 43.579,52.549 26.934,43.798 10.288,52.549 13.467,34.013 0,20.887 18.611,18.182 "
|
||||||
|
></polygon>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
{/each}
|
||||||
|
{#each { length: 5 - skill.rating }}
|
||||||
|
<svg
|
||||||
|
height="10px"
|
||||||
|
width="10px"
|
||||||
|
version="1.1"
|
||||||
|
id="Capa_1"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 53.867 53.867"
|
||||||
|
xml:space="preserve"
|
||||||
|
fill="#000000"
|
||||||
|
>
|
||||||
|
<g id="SVGRepo_bgCarrier" stroke-width="0"></g>
|
||||||
|
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
|
||||||
|
<g id="SVGRepo_iconCarrier">
|
||||||
|
<polygon
|
||||||
|
style="fill:#E5E7EB;"
|
||||||
|
points="26.934,1.318 35.256,18.182 53.867,20.887 40.4,34.013 43.579,52.549 26.934,43.798 10.288,52.549 13.467,34.013 0,20.887 18.611,18.182 "
|
||||||
|
></polygon>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
{/each}
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p
|
||||||
|
class="py h-0 text-xs whitespace-nowrap text-gray-200 opacity-0 transition-[height] transition-opacity duration-300 group-hover:opacity-100"
|
||||||
|
>
|
||||||
|
{skill.description}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
<div class="my-4 w-7/10">
|
||||||
|
<h2 class="py-2 text-xl font-semibold text-blue-300">TOOLS & FRAMEWORKS</h2>
|
||||||
|
|
||||||
|
{#each tools as tool}
|
||||||
|
<div class="my-2 flex items-center">
|
||||||
|
<h3 class="text-sm font-semibold text-gray-200">{tool}</h3>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
<!-- <h3 class="text-sm font-semibold text-gray-200">{tools.join(' - ')}</h3> -->
|
||||||
|
</div>
|
||||||
1
src/lib/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
// place files you want to import through the `$lib` alias in this folder.
|
||||||
10
src/routes/+layout.svelte
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import '../app.css';
|
||||||
|
import Navbar from '../components/navbar.svelte';
|
||||||
|
import Footer from '../components/footer.svelte';
|
||||||
|
let { children } = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Navbar />
|
||||||
|
{@render children()}
|
||||||
|
<Footer />
|
||||||
38
src/routes/+page.svelte
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<script>
|
||||||
|
import Projects from '../components/projects.svelte';
|
||||||
|
import Skills from '../components/skills.svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<main class="h-fit w-full">
|
||||||
|
<!-- Introduction Section -->
|
||||||
|
<div class="flex flex h-fit w-full">
|
||||||
|
<div class="flex size-full justify-end">
|
||||||
|
<div class="my-16 w-3/4">
|
||||||
|
<h1 class="p-2 text-6xl font-[600] text-blue-300">Building things that matter.</h1>
|
||||||
|
<p class="my-5 p-2 text-gray-200 italic">
|
||||||
|
I am a <span class="text-blue-300">software engineering student</span> at Embry Riddle
|
||||||
|
Aeronautical University, Prescott. I am interested in
|
||||||
|
<span class="font-semibold">building things that matter</span> and making a difference in the
|
||||||
|
world.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="size-full"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex h-full w-full flex-row">
|
||||||
|
<!-- Left Column -->
|
||||||
|
<div class="flex size-full flex-col items-end">
|
||||||
|
<div class="h-full w-3/4">
|
||||||
|
<Projects />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Right Column -->
|
||||||
|
<div class="flex size-full justify-center">
|
||||||
|
<div class="h-full w-3/4">
|
||||||
|
<Skills />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
8
src/routes/about/+layout.svelte
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import '../../app.css';
|
||||||
|
import Navbar from '../../components/navbar.svelte';
|
||||||
|
let { children } = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- <Navbar /> -->
|
||||||
|
{@render children()}
|
||||||
0
src/routes/about/+page.svelte
Normal file
BIN
static/favicon.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
static/github-mark/github-mark-white.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
1
static/github-mark/github-mark-white.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg width="98" height="96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="#fff"/></svg>
|
||||||
|
After Width: | Height: | Size: 960 B |
BIN
static/github-mark/github-mark.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
1
static/github-mark/github-mark.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg width="98" height="96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="#24292f"/></svg>
|
||||||
|
After Width: | Height: | Size: 963 B |
BIN
static/projects/acousticDroneDetection.png
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
static/projects/cellularAutomation.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
125
static/projects/data.json
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"title": "Cellular Automation Simulation",
|
||||||
|
"description": "A cellular automation simulation using user defined rule sets. Currently, this is simply, a Conway's Game of Life simulation.",
|
||||||
|
"date": "February, 2025 - Current",
|
||||||
|
"stack": [
|
||||||
|
"Javascript",
|
||||||
|
"SvelteKit"
|
||||||
|
],
|
||||||
|
"image": "projects/cellularAutomation.png",
|
||||||
|
"imageAlt": "Image of my cellular automation game",
|
||||||
|
"link": "https://github.com/Azpect3120/CellularAutomation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "TCP Server Notification System",
|
||||||
|
"description": "Server/Client TCP notification system for communication between a server and many clients. A custom event loop and protocol was created to handle the communication between the server and clients.",
|
||||||
|
"date": "February, 2025 - Current",
|
||||||
|
"stack": [
|
||||||
|
"Go"
|
||||||
|
],
|
||||||
|
"image": null,
|
||||||
|
"imageAlt": null,
|
||||||
|
"link": "https://github.com/Azpect3120/TCPNotificationManager"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Python Stock Market Analysis",
|
||||||
|
"description": "A simple stock market analysis tool that uses a backdoor API to get stock data and analyze it, collecting basic information of historical data. This project was built as a homework assignment for my SE320 (Software Construction) class.",
|
||||||
|
"date": "February, 2025",
|
||||||
|
"stack": [
|
||||||
|
"Python"
|
||||||
|
],
|
||||||
|
"image": "projects/pythonStockMarketAnalysis.png",
|
||||||
|
"imageAlt": "Image of the python application and its result",
|
||||||
|
"link": "https://github.com/Azpect3120/PythonStockAnalysis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Acoustic Drone Detection Sensor Network",
|
||||||
|
"description": "This project aims to develop a low-cost, acoustic drone detection system as a supplementary security measure for locations like borders and airports. The system will use small microphones and microcontrollers to detect drone sounds, even amidst background noise, at distances of at least 50 feet. This data will be collected by a network of weather-resistant, solar-powered sensors, transmitted wirelessly via LoRa and WiFi, and securely reported in real-time to Amazon Web Services for monitoring. This project is a research project from Embry-Riddle Aeronautical University.",
|
||||||
|
"date": "December, 2024 - Current",
|
||||||
|
"stack": [
|
||||||
|
"C++",
|
||||||
|
"Python"
|
||||||
|
],
|
||||||
|
"image": "projects/acousticDroneDetection.png",
|
||||||
|
"imageAlt": "Initial test results of the sensors",
|
||||||
|
"link": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Stock Market Trading Bot",
|
||||||
|
"description": "A stock market trading bot that uses a variety of technical indicators to rate a stock's potential for the coming day. The bot will produce an output that can be used to select stocks to trade in the next trading day. Note: I AM NOT RESPONSIBLE FOR ANY LOST MONEY AS A RESULT OF USING THIS BOT!",
|
||||||
|
"date": "December, 2024",
|
||||||
|
"stack": [
|
||||||
|
"Go"
|
||||||
|
],
|
||||||
|
"image": "projects/tradingBot.jpg",
|
||||||
|
"imageAlt": "Image of the stock market. Stock image.",
|
||||||
|
"link": "https://github.com/Azpect3120/TradingBot"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Web Database Connection Tool",
|
||||||
|
"description": "This is a simple web database viewer that allows you to view and edit a database in a web browser. Connections can be made to the database using the convenient connection creation interface, and later modified and deleted with the manage connections interface.",
|
||||||
|
"date": "September, 2024",
|
||||||
|
"stack": [
|
||||||
|
"Go",
|
||||||
|
"HTML",
|
||||||
|
"HTMX",
|
||||||
|
"TailwindCSS"
|
||||||
|
],
|
||||||
|
"image": "projects/webDatabaseViewer.png",
|
||||||
|
"imageAlt": "Image of the web database viewer",
|
||||||
|
"link": "https://github.com/Azpect3120/Web-Database-Viewer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Document Sync Protocol",
|
||||||
|
"description": "A semi-refined protocol for syncing documents between Neovim clients over TCP. A basic server and client implementation is provided in the repository. The protocol is designed to be simple and easy to implement into a Neovim plugin.",
|
||||||
|
"date": "May, 2024",
|
||||||
|
"stack": [
|
||||||
|
"Lua",
|
||||||
|
"Vimscript",
|
||||||
|
"Go"
|
||||||
|
],
|
||||||
|
"image": null,
|
||||||
|
"imageAlt": null,
|
||||||
|
"link": "https://github.com/Azpect3120/document-sync-protocol"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "HTMX Class",
|
||||||
|
"description": "I taught a class at West-MEC Central Campus on HTMX, a web technology that allows for dynamic web pages without the need for Javascript. The class was a success and my fellow students learned a lot about the new technology. The idea and format of this class was inspired by The Primeagen.",
|
||||||
|
"date": "April, 2024",
|
||||||
|
"stack": [
|
||||||
|
"HTMX",
|
||||||
|
"HTML",
|
||||||
|
"Javascript"
|
||||||
|
],
|
||||||
|
"image": "projects/htmxClass.png",
|
||||||
|
"imageAlt": "Image of the application that was built during the class",
|
||||||
|
"link": "https://github.com/Azpect3120/htmx-class"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Gomon.nvim",
|
||||||
|
"description": "A simple hot reloading plugin for neovim built for Go development. Have you ever experienced the need to constantly restart and rerun a large Golang project? Are you not interested in using Docker? Does the repetitive setup of Air drain your sanity? Are you tired of launching a terminal and slowing down your workflow just to copy and paste the same command repeatedly?",
|
||||||
|
"date": "February, 2024",
|
||||||
|
"stack": [
|
||||||
|
"Lua",
|
||||||
|
"Vimscript"
|
||||||
|
],
|
||||||
|
"image": "projects/gomon.png",
|
||||||
|
"imageAlt": "Image of Gomon.nvim github repository",
|
||||||
|
"link": "https://github.com/Azpect3120/gomon.nvim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Vendor Management System",
|
||||||
|
"description": "A fully fleshed out vendor management system that allows for the management of vendors. This project was built for the FBLA Coding and Programming 2024 competition, and was later adopted by West-MEC Central Campus. The application includes an AI chatbot which can respond to queries about the data, user account management and creation with roles, 2-factor authentication, secure data storage, 100% responsive web design on all platforms, session management to ensure secure and safe data transfer, and token requirements for user creation. Unfortunately, this project is not open source and has been taken down due to data privacy concerns. This project qualified for the National FBLA Leadership Conference in 2024!",
|
||||||
|
"date": "October, 2023 - April, 2024",
|
||||||
|
"stack": [
|
||||||
|
"Go",
|
||||||
|
"HTML",
|
||||||
|
"HTMX",
|
||||||
|
"TailwindCSS"
|
||||||
|
],
|
||||||
|
"image": null,
|
||||||
|
"imageAlt": null,
|
||||||
|
"link": null
|
||||||
|
}
|
||||||
|
]
|
||||||
BIN
static/projects/gomon.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
static/projects/htmxClass.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
static/projects/pythonStockMarketAnalysis.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
static/projects/tradingBot.jpg
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
static/projects/webDatabaseViewer.png
Normal file
|
After Width: | Height: | Size: 175 KiB |
18
svelte.config.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import adapter from '@sveltejs/adapter-auto';
|
||||||
|
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
||||||
|
|
||||||
|
/** @type {import('@sveltejs/kit').Config} */
|
||||||
|
const config = {
|
||||||
|
// Consult https://svelte.dev/docs/kit/integrations
|
||||||
|
// for more information about preprocessors
|
||||||
|
preprocess: vitePreprocess(),
|
||||||
|
|
||||||
|
kit: {
|
||||||
|
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
|
||||||
|
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
|
||||||
|
// See https://svelte.dev/docs/kit/adapters for more information about adapters.
|
||||||
|
adapter: adapter()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
||||||
52
tailwind.config.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import typography from '@tailwindcss/typography';
|
||||||
|
import type { Config } from 'tailwindcss';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
content: ['./src/**/*.{html,js,svelte,ts}'],
|
||||||
|
|
||||||
|
safelist: [
|
||||||
|
'w-64',
|
||||||
|
'w-1/2',
|
||||||
|
'rounded-l-lg',
|
||||||
|
'rounded-r-lg',
|
||||||
|
'bg-gray-200',
|
||||||
|
'grid-cols-4',
|
||||||
|
'grid-cols-7',
|
||||||
|
'h-6',
|
||||||
|
'leading-6',
|
||||||
|
'h-9',
|
||||||
|
'leading-9',
|
||||||
|
'shadow-lg'
|
||||||
|
],
|
||||||
|
theme: {
|
||||||
|
extend: {
|
||||||
|
fontFamily: {
|
||||||
|
'sans': ['Inter', 'ui-sans-serif', 'system-ui', '-apple-system', 'system-ui', 'Segoe UI', 'Roboto', 'Helvetica Neue', 'Arial', 'Noto Sans', 'sans-serif', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'],
|
||||||
|
'body': ['Inter', 'ui-sans-serif', 'system-ui', '-apple-system', 'system-ui', 'Segoe UI', 'Roboto', 'Helvetica Neue', 'Arial', 'Noto Sans', 'sans-serif', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'],
|
||||||
|
'mono': ['ui-monospace', 'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New', 'monospace']
|
||||||
|
},
|
||||||
|
transitionProperty: {
|
||||||
|
'width': 'width'
|
||||||
|
},
|
||||||
|
minWidth: {
|
||||||
|
'20': '20rem'
|
||||||
|
},
|
||||||
|
colors: {
|
||||||
|
cyan: {
|
||||||
|
50: '#ECFEFF',
|
||||||
|
100: '#CFFAFE',
|
||||||
|
200: '#A5F3FC',
|
||||||
|
300: '#67E8F9',
|
||||||
|
400: '#22D3EE',
|
||||||
|
500: '#06B6D4',
|
||||||
|
600: '#0891B2',
|
||||||
|
700: '#0E7490',
|
||||||
|
800: '#155E75',
|
||||||
|
900: '#164E63'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
plugins: [typography]
|
||||||
|
} satisfies Config;
|
||||||
19
tsconfig.json
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"extends": "./.svelte-kit/tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"allowJs": true,
|
||||||
|
"checkJs": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"strict": true,
|
||||||
|
"moduleResolution": "bundler"
|
||||||
|
}
|
||||||
|
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
|
||||||
|
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
|
||||||
|
//
|
||||||
|
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
|
||||||
|
// from the referenced tsconfig.json - TypeScript does not merge them in
|
||||||
|
}
|
||||||
7
vite.config.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import tailwindcss from '@tailwindcss/vite';
|
||||||
|
import { sveltekit } from '@sveltejs/kit/vite';
|
||||||
|
import { defineConfig } from 'vite';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [sveltekit(), tailwindcss()]
|
||||||
|
});
|
||||||