Inital commit

This commit is contained in:
2026-01-10 01:55:41 -08:00
commit 3ad6b6edec
36 changed files with 3388 additions and 0 deletions
+23
View 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-*
+1
View File
@@ -0,0 +1 @@
engine-strict=true
+38
View 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!
```sh
# 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:
```sh
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:
```sh
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.
+1737
View File
File diff suppressed because it is too large Load Diff
+28
View File
@@ -0,0 +1,28 @@
{
"name": "teh-riehl-skill-tree-portfolio",
"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"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^7.0.0",
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.49.1",
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"svelte": "^5.45.6",
"svelte-check": "^4.3.4",
"typescript": "^5.9.3",
"vite": "^7.2.6"
},
"dependencies": {
"gsap": "^3.14.2",
"pixi.js": "^8.15.0"
}
}
+14
View File
@@ -0,0 +1,14 @@
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
background: #05050a;
}
+13
View 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 {};
+11
View File
@@ -0,0 +1,11 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.157 22.819c-10.4-14.885-30.94-19.297-45.792-9.835L22.282 29.608A29.92 29.92 0 0 0 8.764 49.65a31.5 31.5 0 0 0 3.108 20.231 30 30 0 0 0-4.477 11.183 31.9 31.9 0 0 0 5.448 24.116c10.402 14.887 30.942 19.297 45.791 9.835l26.083-16.624A29.92 29.92 0 0 0 98.235 78.35a31.53 31.53 0 0 0-3.105-20.232 30 30 0 0 0 4.474-11.182 31.88 31.88 0 0 0-5.447-24.116" style="fill:#ff3e00"/><path d="M45.817 106.582a20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.503 18 18 0 0 1 .624-2.435l.49-1.498 1.337.981a33.6 33.6 0 0 0 10.203 5.098l.97.294-.09.968a5.85 5.85 0 0 0 1.052 3.878 6.24 6.24 0 0 0 6.695 2.485 5.8 5.8 0 0 0 1.603-.704L69.27 76.28a5.43 5.43 0 0 0 2.45-3.631 5.8 5.8 0 0 0-.987-4.371 6.24 6.24 0 0 0-6.698-2.487 5.7 5.7 0 0 0-1.6.704l-9.953 6.345a19 19 0 0 1-5.296 2.326 20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.502 17.99 17.99 0 0 1 8.13-12.052l26.081-16.623a19 19 0 0 1 5.3-2.329 20.72 20.72 0 0 1 22.237 8.243 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-.624 2.435l-.49 1.498-1.337-.98a33.6 33.6 0 0 0-10.203-5.1l-.97-.294.09-.968a5.86 5.86 0 0 0-1.052-3.878 6.24 6.24 0 0 0-6.696-2.485 5.8 5.8 0 0 0-1.602.704L37.73 51.72a5.42 5.42 0 0 0-2.449 3.63 5.79 5.79 0 0 0 .986 4.372 6.24 6.24 0 0 0 6.698 2.486 5.8 5.8 0 0 0 1.602-.704l9.952-6.342a19 19 0 0 1 5.295-2.328 20.72 20.72 0 0 1 22.237 8.242 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-8.13 12.053l-26.081 16.622a19 19 0 0 1-5.3 2.328" style="fill:#fff"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because it is too large Load Diff
+293
View File
@@ -0,0 +1,293 @@
export interface TreeNode {
id: string;
label: string;
description: string;
x: number;
y: number;
parentId: string | null; // null means it's the root or connects to center
category: 'origin' | 'experience' | 'projects' | 'skills' | 'education';
size: 'x-large' | 'large' | 'medium' | 'small';
icon?: string;
// ========== EXPERIENCE-SPECIFIC FIELDS ==========
company?: string;
jobTitle?: string;
startDate?: string;
endDate?: string; // Use "Present" for current role
highlights?: string[]; // Key achievements or responsibilities
// ========== PROJECT-SPECIFIC FIELDS ==========
techStack?: string[];
projectUrl?: string;
repoUrl?: string;
// ========== SKILL-SPECIFIC FIELDS ==========
proficiency?: 'beginner' | 'intermediate' | 'advanced' | 'expert';
yearsOfExperience?: number;
// ========== EDUCATION-SPECIFIC FIELDS ==========
institution?: string;
degree?: string;
field?: string;
graduationYear?: string;
// ========== ORIGIN-SPECIFIC FIELDS ==========
fullName?: string;
aboutMe?: string;
location?: string;
email?: string;
linkedIn?: string;
github?: string;
website?: string;
}
// The center of our tree is at (0, 0)
// Positive X = right, Negative X = left
// Positive Y = down, Negative Y = up
export const treeNodes: TreeNode[] = [
// ========== ORIGIN (Center) ==========
{
id: 'origin',
label: 'Kevin Riehl',
description: 'Welcome to my skill tree! Click on nodes to explore my experience, projects, and skills.',
x: 0,
y: 0,
parentId: null,
category: 'origin',
size: 'x-large',
icon: '',
fullName: 'Kevin Riehl',
jobTitle: 'Software Development - Lead Associate',
aboutMe: 'Intermediate Software Engineer with 5+ years of experience architecting full-stack applications using React, Node.js (Hapi), and SQL. Expertise includes modernizing legacy codebases, implementing rigorous testing standards, and leading frontend architecture improvements. passionate about leveraging modern tools like ShadCN and Docker to streamline development workflows.',
location: 'Kent, WA',
email: 'kevinriehl@gmail.com',
linkedIn: 'https://www.linkedin.com/in/kevinriehl',
github: 'https://github.com/TehRiehlDeal',
website: 'https://tehriehldeal.com',
},
// ========== EXPERIENCE (Top Right Quadrant) ==========
{
id: 'exp-branch',
label: 'Experience',
description: 'My professional journey.',
x: 150,
y: -100,
parentId: 'origin',
category: 'experience',
size: 'large',
icon: '/icons/experience.svg'
},
{
id: 'exp-job1',
label: 'Software Engineer',
description: 'Junior developer at the start of my career.',
x: 212,
y: -191,
parentId: 'exp-branch',
category: 'experience',
size: 'small',
icon: '/icons/insightglobal.webp',
company: 'Insight Global',
jobTitle: 'Software Engineer',
startDate: 'October 2020',
endDate: 'April 2021',
highlights: [
'Refactored legacy PHP endpoints into a robust Hapi.js architecture, aligning the project with modern JavaScript standards and improving API response times',
'Executed a critical database migration from MySQL to MSSQL, ensuring data integrity during the transfer and optimizing schema definitions for the new environment'
]
},
{
id: 'exp-job2',
label: 'Software Engineer',
description: 'Slightly more experienced still early in my career.',
x: 337,
y: -191,
parentId: 'exp-job1',
category: 'experience',
size: 'small',
icon: '/icons/bluewater.png',
jobTitle: 'Software Engineer',
startDate: 'April 2021',
endDate: 'February 2024',
highlights: [
'Architected and built a comprehensive data analytics search engine using React and Hapi.js (TypeScript), enabling users to filter complex event datasets by location, type, and date for real-time analysis',
'Facilitated successful production releases by managing SQL database migration scripts and executing rigorous regression testing to ensure critical features remained stable during updates',
'Supported engineering team growth by conducting code reviews and leading the onboarding process for new developers, ensuring smooth knowledge transfer and adherence to coding standards'
]
},
{
id: 'exp-job3',
label: 'Intermediate Software Engineer',
description: 'Slightly more experienced.',
x: 400,
y: -100,
parentId: 'exp-job2',
category: 'experience',
size: 'small',
icon: '/icons/sempervalens.png',
jobTitle: 'Intermediate Software Engineer',
startDate: 'February 2024',
endDate: 'June 2025',
highlights: [
"Championed the adoption of ShadCN by conducting a live technical demonstration on the team's starter template, proving the framework's ability to accelerate development velocity and ensure UI consistency across projects",
"Developed a Web Bluetooth interface for a biometric monitoring proof-of-concept, enabling real-time data ingestion and aggregation from multiple wearable sensors (accelerometers and smartwatches) for sleep analysis",
"Supported the engineering teams migration to containerized workflows by configuring, testing, and troubleshooting custom Docker environments, ensuring consistent application behavior across development and production"
]
},
{
id: 'exp-job4',
label: 'Intermediate Software Engineer',
description: 'Where one journey ends, another begins.',
x: 337,
y: -8,
parentId: 'exp-job3',
category: 'experience',
size: 'small',
icon: '/icons/chenega.jpg',
jobTitle: "Intermediate Software Engineer",
startDate: 'June 2025',
endDate: 'January 2026',
highlights: [
'Architected a secure telehealth video conferencing application using React and WebRTC, designing the core signaling class to manage complex peer-to-peer connections (SDP offers/answers) and media stream constraints',
'Implemented Google MediaPipe to develop a real-time gesture recognition feature, enabling accessibility for speech-impaired users by translating hand signs (e.g., thumbs up) into animated in-chat reactions',
'Engineered adaptive network logic that monitors packet loss in real-time and dynamically adjusts video stream quality, ensuring connection stability and optimal user experience during bandwidth fluctuations'
]
},
{
id: 'exp-job5',
label: 'Lead Associate',
description: 'Where I am now.',
x: 212,
y: -8,
parentId: 'exp-job4',
category: 'experience',
size: 'small',
icon: '/icons/peraton.png',
jobTitle: 'Lead Associate',
startDate: 'January 2026',
endDate: 'Present',
highlights: [
'The Journey has just begun'
]
},
// ========== PROJECTS (Top Left Quadrant) ==========
{
id: 'proj-branch',
label: 'Projects',
description: 'Things I have built.',
x: -150,
y: -100,
parentId: 'origin',
category: 'projects',
size: 'large',
},
{
id: 'proj-1',
label: 'Portfolio Site',
description: 'This very skill tree you are exploring right now!',
x: -300,
y: -180,
parentId: 'proj-branch',
category: 'projects',
size: 'small',
},
{
id: 'proj-2',
label: 'Side Project',
description: 'A passion project I built to learn new technologies.',
x: -320,
y: -80,
parentId: 'proj-branch',
category: 'projects',
size: 'small',
},
// ========== SKILLS (Bottom Right Quadrant) ==========
{
id: 'skills-branch',
label: 'Skills',
description: 'Technologies and abilities I have acquired.',
x: 150,
y: 100,
parentId: 'origin',
category: 'skills',
size: 'large',
icon: '/icons/skills.svg'
},
{
id: 'skill-js',
label: 'JavaScript',
description: 'Core language of the web. Proficient in modern ES6+ features.',
x: 280,
y: 60,
parentId: 'skills-branch',
category: 'skills',
size: 'medium',
icon: '/icons/javascript.png',
},
{
id: 'skill-ts',
label: 'TypeScript',
description: 'Type-safe JavaScript. My preferred way to write code.',
x: 320,
y: 140,
parentId: 'skills-branch',
category: 'skills',
size: 'small',
icon: '/icons/typescript.png'
},
{
id: 'skill-svelte',
label: 'Svelte',
description: 'The framework powering this portfolio!',
x: 260,
y: 200,
parentId: 'skills-branch',
category: 'skills',
size: 'small',
},
// ========== EDUCATION (Bottom Left Quadrant) ==========
{
id: 'edu-branch',
label: 'Education',
description: 'Where I learned the fundamentals.',
x: -150,
y: 100,
parentId: 'origin',
category: 'education',
size: 'large',
},
{
id: 'edu-degree',
label: 'University',
description: 'Bachelor\'s degree in Computer Science.',
x: -300,
y: 80,
parentId: 'edu-branch',
category: 'education',
size: 'small',
},
{
id: 'edu-cert',
label: 'Certifications',
description: 'Additional certifications and courses completed.',
x: -280,
y: 180,
parentId: 'edu-branch',
category: 'education',
size: 'small',
},
];
// Colors for each category (PoE-inspired)
export const categoryColors: Record<TreeNode['category'], number> = {
origin: 0xffd700, // Gold
experience: 0x4ecdc4, // Teal
projects: 0xff6b6b, // Coral red
skills: 0x95e1d3, // Mint green
education: 0xdda0dd, // Plum purple
};
+1
View File
@@ -0,0 +1 @@
// place files you want to import through the `$lib` alias in this folder.
+14
View File
@@ -0,0 +1,14 @@
<script lang="ts">
import favicon from '$lib/assets/favicon.svg';
import '../app.css';
let { children } = $props();
</script>
<svelte:head>
<link rel="icon" href={favicon} />
</svelte:head>
{@render children()}
+1
View File
@@ -0,0 +1 @@
export const prerender = true;
+17
View File
@@ -0,0 +1,17 @@
<script lang="ts">
import SkillTree from '$lib/components/SkillTree.svelte';
</script>
<main>
<SkillTree />
</main>
<style>
main {
width: 100vw;
height: 100vh;
overflow: hidden;
margin: 0;
padding: 0;
}
</style>
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 122.88 100.54" style="enable-background:new 0 0 122.88 100.54" xml:space="preserve"><g><path fill="white" d="M65.98,54.6H56.9c-0.15,0-0.27,0.06-0.37,0.15c-0.1,0.1-0.15,0.23-0.15,0.37v19.14c0,0.15,0.06,0.27,0.15,0.37 c0.1,0.1,0.23,0.15,0.37,0.15h9.07c0.15,0,0.27-0.06,0.37-0.15c0.1-0.1,0.15-0.23,0.15-0.37V55.12c0-0.15-0.06-0.27-0.15-0.37 C66.25,54.64,66.12,54.6,65.98,54.6L65.98,54.6L65.98,54.6z M6.98,13.97h31.49V4.94c0-1.37,0.56-2.6,1.45-3.49 C40.82,0.56,42.06,0,43.41,0h36.06c1.37,0,2.59,0.56,3.49,1.45c0.89,0.89,1.45,2.14,1.45,3.49v9.03h31.49 c1.93,0,3.67,0.79,4.92,2.06c1.27,1.27,2.06,3.01,2.06,4.92v16.86c-7.89,5.41-16.03,10.02-24.42,13.78 c-8.44,3.78-17.14,6.71-26.14,8.73v-6.74c0-1.54-0.63-2.96-1.64-3.98c-1.01-1.01-2.43-1.64-3.98-1.64H56.17l0,0 c-1.54,0-2.96,0.63-3.98,1.64c-1.01,1.01-1.64,2.43-1.64,3.98v6.59c-8.76-2.01-17.25-4.89-25.48-8.58 C16.45,47.73,8.1,42.96,0,37.36V20.95c0-1.93,0.79-3.67,2.06-4.92C3.32,14.76,5.07,13.97,6.98,13.97L6.98,13.97L6.98,13.97z M122.88,47.81v45.76c0,1.93-0.79,3.67-2.06,4.92c-1.27,1.27-3.01,2.06-4.92,2.06H6.98c-1.93,0-3.67-0.79-4.92-2.06 C0.79,97.22,0,95.48,0,93.57V47.39c6.89,4.42,13.98,8.28,21.27,11.55c9.41,4.22,19.17,7.45,29.29,9.61v7.25 c0,1.54,0.63,2.96,1.64,3.98c1.01,1.01,2.44,1.64,3.98,1.64h10.53c1.54,0,2.96-0.63,3.98-1.64c1.01-1.01,1.64-2.43,1.64-3.98v-7.6 l0.11,0.46c10.31-2.17,20.25-5.43,29.83-9.73C109.33,55.77,116.2,52.05,122.88,47.81L122.88,47.81z M75.71,6.73H47.19 c-0.17,0-0.31,0.06-0.44,0.19c-0.1,0.1-0.19,0.27-0.19,0.44v6.42h29.75V7.36c0-0.17-0.06-0.31-0.19-0.44 c-0.1-0.1-0.27-0.19-0.44-0.19H75.71L75.71,6.73z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

+57
View File
@@ -0,0 +1,57 @@
<svg version="1.1" height="106" width="106" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="logo" transform="translate(53, 53)">
<path id="r" transform="translate(0.5, 0.5)" stroke="black" stroke-width="1" stroke-linejoin="round" d=" M -9,-15 H 4 C 12,-15 12,-7 4,-7 H -9 Z M -40,22 H 0 V 11 H -9 V 3 H 1 C 12,3 6,22 15,22 H 40 V 3 H 34 V 5 C 34,13 25,12 24,7 C 23,2 19,-2 18,-2 C 33,-10 24,-26 12,-26 H -35 V -15 H -25 V 11 H -40 Z"/>
<g id="gear" mask="url(#holes)">
<circle r="43" fill="none" stroke="black" stroke-width="9"/>
<g id="cogs">
<polygon id="cog" stroke="black" stroke-width="3" stroke-linejoin="round" points="46,3 51,0 46,-3"/>
<use xlink:href="#cog" transform="rotate(11.25)"/>
<use xlink:href="#cog" transform="rotate(22.50)"/>
<use xlink:href="#cog" transform="rotate(33.75)"/>
<use xlink:href="#cog" transform="rotate(45.00)"/>
<use xlink:href="#cog" transform="rotate(56.25)"/>
<use xlink:href="#cog" transform="rotate(67.50)"/>
<use xlink:href="#cog" transform="rotate(78.75)"/>
<use xlink:href="#cog" transform="rotate(90.00)"/>
<use xlink:href="#cog" transform="rotate(101.25)"/>
<use xlink:href="#cog" transform="rotate(112.50)"/>
<use xlink:href="#cog" transform="rotate(123.75)"/>
<use xlink:href="#cog" transform="rotate(135.00)"/>
<use xlink:href="#cog" transform="rotate(146.25)"/>
<use xlink:href="#cog" transform="rotate(157.50)"/>
<use xlink:href="#cog" transform="rotate(168.75)"/>
<use xlink:href="#cog" transform="rotate(180.00)"/>
<use xlink:href="#cog" transform="rotate(191.25)"/>
<use xlink:href="#cog" transform="rotate(202.50)"/>
<use xlink:href="#cog" transform="rotate(213.75)"/>
<use xlink:href="#cog" transform="rotate(225.00)"/>
<use xlink:href="#cog" transform="rotate(236.25)"/>
<use xlink:href="#cog" transform="rotate(247.50)"/>
<use xlink:href="#cog" transform="rotate(258.75)"/>
<use xlink:href="#cog" transform="rotate(270.00)"/>
<use xlink:href="#cog" transform="rotate(281.25)"/>
<use xlink:href="#cog" transform="rotate(292.50)"/>
<use xlink:href="#cog" transform="rotate(303.75)"/>
<use xlink:href="#cog" transform="rotate(315.00)"/>
<use xlink:href="#cog" transform="rotate(326.25)"/>
<use xlink:href="#cog" transform="rotate(337.50)"/>
<use xlink:href="#cog" transform="rotate(348.75)"/>
</g>
<g id="mounts">
<polygon id="mount" stroke="black" stroke-width="6" stroke-linejoin="round" points="-7,-42 0,-35 7,-42"/>
<use xlink:href="#mount" transform="rotate(72)"/>
<use xlink:href="#mount" transform="rotate(144)"/>
<use xlink:href="#mount" transform="rotate(216)"/>
<use xlink:href="#mount" transform="rotate(288)"/>
</g>
</g>
<mask id="holes">
<rect x="-60" y="-60" width="120" height="120" fill="white"/>
<circle id="hole" cy="-40" r="3"/>
<use xlink:href="#hole" transform="rotate(72)"/>
<use xlink:href="#hole" transform="rotate(144)"/>
<use xlink:href="#hole" transform="rotate(216)"/>
<use xlink:href="#hole" transform="rotate(288)"/>
</mask>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

+4
View File
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="512px" height="512px" version="1.1" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd"
viewBox="0 0 512 512">
<path fill="white" fill-rule="nonzero" d="M423.51 61.53c-5.02,-5.03 -10.92,-7.51 -17.75,-7.51 -6.82,0 -12.8,2.48 -17.75,7.51l-27.05 26.97c-7.25,-4.7 -14.93,-8.8 -22.95,-12.47 -8.02,-3.67 -16.22,-6.82 -24.5,-9.55l0 -41.48c0,-7 -2.38,-12.89 -7.25,-17.75 -4.86,-4.86 -10.75,-7.25 -17.75,-7.25l-52.05 0c-6.66,0 -12.45,2.39 -17.49,7.25 -4.95,4.86 -7.43,10.75 -7.43,17.75l0 37.98c-8.7,2.04 -17.15,4.6 -25.26,7.76 -8.19,3.16 -15.95,6.74 -23.29,10.75l-29.96 -29.53c-4.69,-4.94 -10.4,-7.5 -17.32,-7.5 -6.83,0 -12.71,2.56 -17.75,7.5l-36.43 36.54c-5.03,5.03 -7.51,10.92 -7.51,17.73 0,6.83 2.48,12.81 7.51,17.75l26.97 27.06c-4.7,7.26 -8.79,14.93 -12.46,22.95 -3.68,8.02 -6.83,16.22 -9.56,24.49l-41.47 0c-7.01,0 -12.9,2.39 -17.76,7.26 -4.86,4.86 -7.25,10.75 -7.25,17.75l0 52.05c0,6.65 2.39,12.46 7.25,17.5 4.86,4.94 10.75,7.42 17.76,7.42l37.97 0c2.04,8.7 4.6,17.15 7.76,25.25 3.17,8.2 6.75,16.13 10.75,23.81l-29.52 29.44c-4.95,4.7 -7.51,10.41 -7.51,17.33 0,6.82 2.56,12.71 7.51,17.75l36.53 36.95c5.03,4.69 10.92,7 17.75,7 6.82,0 12.79,-2.31 17.75,-7l27.04 -27.48c7.26,4.69 14.94,8.78 22.96,12.46 8.02,3.66 16.21,6.83 24.49,9.55l0 41.48c0,7 2.39,12.88 7.25,17.74 4.86,4.87 10.76,7.26 17.75,7.26l52.05 0c6.66,0 12.46,-2.39 17.5,-7.26 4.94,-4.86 7.42,-10.74 7.42,-17.74l0 -37.98c8.7,-2.04 17.15,-4.6 25.25,-7.76 8.2,-3.16 16.14,-6.74 23.81,-10.75l29.44 29.53c4.7,4.95 10.49,7.5 17.51,7.5 7.07,0 12.87,-2.55 17.57,-7.5l36.95 -36.53c4.69,-5.04 7,-10.92 7,-17.75 0,-6.82 -2.31,-12.8 -7,-17.75l-27.48 -27.05c4.7,-7.26 8.79,-14.93 12.46,-22.96 3.66,-8.01 6.83,-16.21 9.56,-24.49l41.47 0c7,0 12.88,-2.4 17.74,-7.25 4.87,-4.87 7.26,-10.75 7.26,-17.75l0 -52.05c0,-6.66 -2.39,-12.45 -7.26,-17.5 -4.86,-4.95 -10.74,-7.42 -17.74,-7.42l-37.98 0c-2.04,-8.36 -4.6,-16.73 -7.76,-25 -3.16,-8.37 -6.74,-16.21 -10.75,-23.56l29.53 -29.95c4.95,-4.69 7.5,-10.41 7.5,-17.32 0,-6.83 -2.55,-12.71 -7.5,-17.75l-36.53 -36.43zm-48.41 257.98c-22.72,42.52 -67.54,71.44 -119.1,71.44 -51.58,0 -96.37,-28.92 -119.09,-71.42 2.66,-11.61 7.05,-21.74 19.9,-28.84 17.76,-9.89 48.34,-9.15 62.89,-22.24l20.1 52.78 10.1 -28.77 -4.95 -5.42c-3.72,-5.44 -2.44,-11.62 4.46,-12.74 2.33,-0.37 4.95,-0.14 7.47,-0.14 2.69,0 5.68,-0.25 8.22,0.32 6.41,1.41 7.07,7.62 3.88,12.56l-4.95 5.42 10.11 28.77 18.18 -52.78c13.12,11.8 48.43,14.18 62.88,22.24 12.89,7.22 17.26,17.24 19.9,28.82zm-159.11 -86.45c-1.82,0.03 -3.31,-0.2 -4.93,-1.1 -2.15,-1.19 -3.67,-3.24 -4.7,-5.55 -2.17,-4.86 -3.89,-17.63 1.57,-21.29l-1.02 -0.66 -0.11 -1.41c-0.21,-2.57 -0.26,-5.68 -0.32,-8.95 -0.2,-12 -0.45,-26.56 -10.37,-29.47l-4.25 -1.26 2.81 -3.38c8.01,-9.64 16.38,-18.07 24.82,-24.54 9.55,-7.33 19.26,-12.2 28.75,-13.61 9.77,-1.44 19.23,0.75 27.97,7.62 2.57,2.03 5.08,4.48 7.5,7.33 9.31,0.88 16.94,5.77 22.38,12.75 3.24,4.16 5.71,9.09 7.29,14.33 1.56,5.22 2.24,10.77 1.95,16.23 -0.53,9.8 -4.2,19.35 -11.61,26.33 1.3,0.04 2.53,0.33 3.61,0.91 4.14,2.15 4.27,6.82 3.19,10.75 -1.08,3.28 -2.44,7.08 -3.73,10.28 -1.56,4.31 -3.85,5.12 -8.27,4.65 -9.93,43.45 -69.98,44.93 -82.53,0.04zm40.01 -135.69c87.64,0 158.63,71.04 158.63,158.63 0,87.64 -71.04,158.63 -158.63,158.63 -87.63,0 -158.63,-71.04 -158.63,-158.63 0,-87.64 71.04,-158.63 158.63,-158.63z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 MiB

+3
View File
@@ -0,0 +1,3 @@
# allow crawling everything by default
User-agent: *
Disallow:
+19
View File
@@ -0,0 +1,19 @@
import adapter from '@sveltejs/adapter-static';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
/** @type {import('@sveltejs/kit').Config} */
const config = {
preprocess: vitePreprocess(),
kit: {
adapter: adapter({
pages: 'build',
assets: 'build',
fallback: null,
precompress: false,
strict: true
})
}
};
export default config;
+20
View File
@@ -0,0 +1,20 @@
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"rewriteRelativeImportExtensions": true,
"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
//
// To make changes to top-level options such as include and exclude, we recommend extending
// the generated config; see https://svelte.dev/docs/kit/configuration#typescript
}
+6
View File
@@ -0,0 +1,6 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [sveltekit()]
});