rename apps/main
-> apps/www
This commit is contained in:
parent
21c3ff3872
commit
7db6fada2a
37 changed files with 0 additions and 0 deletions
13
apps/www/.eslintignore
Normal file
13
apps/www/.eslintignore
Normal file
|
@ -0,0 +1,13 @@
|
|||
.DS_Store
|
||||
node_modules
|
||||
/build
|
||||
/.svelte-kit
|
||||
/package
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Ignore files for PNPM, NPM and YARN
|
||||
pnpm-lock.yaml
|
||||
package-lock.json
|
||||
yarn.lock
|
20
apps/www/.eslintrc
Normal file
20
apps/www/.eslintrc
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"root": true,
|
||||
"extends": ["@pompydev/eslint-config", "plugin:svelte/recommended"],
|
||||
"parserOptions": {
|
||||
"sourceType": "module",
|
||||
"ecmaVersion": 2020,
|
||||
"extraFileExtensions": [".svelte"],
|
||||
},
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es2017": true,
|
||||
"node": true,
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.svelte"],
|
||||
"parser": "svelte-eslint-parser",
|
||||
},
|
||||
],
|
||||
}
|
2
apps/www/.gitignore
vendored
Normal file
2
apps/www/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
# testing
|
||||
/test-results
|
2
apps/www/.npmrc
Normal file
2
apps/www/.npmrc
Normal file
|
@ -0,0 +1,2 @@
|
|||
engine-strict=true
|
||||
resolution-mode=highest
|
11
apps/www/.prettierrc.cjs
Normal file
11
apps/www/.prettierrc.cjs
Normal file
|
@ -0,0 +1,11 @@
|
|||
const sharedConfig = require("@pompydev/prettier-config")
|
||||
|
||||
/** @type {import("prettier").Options} */
|
||||
module.exports = {
|
||||
...sharedConfig,
|
||||
plugins: ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
|
||||
overrides: [
|
||||
...sharedConfig.overrides,
|
||||
{ files: "*.svelte", options: { parser: "svelte" } },
|
||||
],
|
||||
}
|
6
apps/www/e2e/notfound.spec.ts
Normal file
6
apps/www/e2e/notfound.spec.ts
Normal file
|
@ -0,0 +1,6 @@
|
|||
import { expect, test } from "@playwright/test"
|
||||
|
||||
test("Should return 404 for invalid routes", async ({ page }) => {
|
||||
const response = await page.goto("/path/that/does/not/exist")
|
||||
expect(response?.status()).toEqual(404)
|
||||
})
|
11
apps/www/e2e/title.spec.ts
Normal file
11
apps/www/e2e/title.spec.ts
Normal file
|
@ -0,0 +1,11 @@
|
|||
import { expect, test } from "@playwright/test"
|
||||
|
||||
const prefix = "pomp | "
|
||||
|
||||
test("should have proper title", async ({ page }) => {
|
||||
await page.goto("/")
|
||||
await expect(page).toHaveTitle("pomp")
|
||||
|
||||
await page.goto("/404")
|
||||
await expect(page).toHaveTitle(`${prefix}Page Not Found`)
|
||||
})
|
7
apps/www/jest.config.js
Normal file
7
apps/www/jest.config.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
/** @type {import('ts-jest').JestConfigWithTsJest} */
|
||||
export default {
|
||||
verbose: true,
|
||||
preset: "ts-jest",
|
||||
testEnvironment: "node",
|
||||
testPathIgnorePatterns: ["e2e"], // ignore playwright tests
|
||||
}
|
50
apps/www/package.json
Normal file
50
apps/www/package.json
Normal file
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
"name": "@pompydev/main",
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"dev:headless": "vite dev --no-open",
|
||||
"build": "vite build",
|
||||
"test:unit": "TZ=UTC jest",
|
||||
"test:e2e": "playwright test",
|
||||
"i_am_sure_i_want_to_nuke_gitignored_files": "rm -rf .turbo .svelte-kit test-results build node_modules vite.config.ts.timestamp-*",
|
||||
"lint": "eslint ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@pompydev/eslint-config": "workspace:*",
|
||||
"@pompydev/playwright-config": "workspace:*",
|
||||
"@pompydev/prettier-config": "workspace:*",
|
||||
"@pompydev/tailwind-config": "workspace:*",
|
||||
"@fontsource/noto-sans-kr": "^5.0.5",
|
||||
"@inqling/svelte-icons": "^3.5.0",
|
||||
"@playwright/test": "1.47.0",
|
||||
"@sveltejs/adapter-static": "^3.0.5",
|
||||
"@sveltejs/kit": "^2.5.7",
|
||||
"@sveltejs/vite-plugin-svelte": "^3.1.0",
|
||||
"@types/jest": "^29.5.12",
|
||||
"@typescript-eslint/eslint-plugin": "^6.15.0",
|
||||
"@typescript-eslint/parser": "^6.15.0",
|
||||
"autoprefixer": "^10.4.16",
|
||||
"dayjs": "^1.11.10",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-simple-import-sort": "^10.0.0",
|
||||
"eslint-plugin-svelte": "^2.38.0",
|
||||
"jest": "^29.7.0",
|
||||
"postcss": "^8.4.32",
|
||||
"postcss-load-config": "^4.0.1",
|
||||
"prettier-plugin-svelte": "^3.2.3",
|
||||
"prettier-plugin-tailwindcss": "^0.5.9",
|
||||
"sass": "^1.75.0",
|
||||
"svelte": "^4.2.15",
|
||||
"svelte-check": "^3.7.0",
|
||||
"tailwindcss": "^3.4.0",
|
||||
"ts-jest": "^29.1.2",
|
||||
"tslib": "^2.6.2",
|
||||
"typescript": "^5.3.3",
|
||||
"vite": "^5.2.10"
|
||||
}
|
||||
}
|
5
apps/www/playwright.config.ts
Normal file
5
apps/www/playwright.config.ts
Normal file
|
@ -0,0 +1,5 @@
|
|||
import { createConfig } from "@pompydev/playwright-config"
|
||||
|
||||
export default createConfig({
|
||||
port: 5173,
|
||||
})
|
9
apps/www/postcss.config.js
Normal file
9
apps/www/postcss.config.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
/** @type {import('postcss-load-config').Config} */
|
||||
export default {
|
||||
plugins: {
|
||||
"postcss-import": {},
|
||||
"tailwindcss/nesting": {},
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
}
|
12
apps/www/src/app.d.ts
vendored
Normal file
12
apps/www/src/app.d.ts
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
// See https://kit.svelte.dev/docs/types#app
|
||||
// for information about these interfaces
|
||||
declare global {
|
||||
namespace App {
|
||||
// interface Error {}
|
||||
// interface Locals {}
|
||||
// interface PageData {}
|
||||
// interface Platform {}
|
||||
}
|
||||
}
|
||||
|
||||
export {}
|
32
apps/www/src/app.html
Normal file
32
apps/www/src/app.html
Normal file
|
@ -0,0 +1,32 @@
|
|||
<!doctype html>
|
||||
<html lang="en" class="dark">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%sveltekit.assets%/favicon.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="canonical" href="https://pompy.dev" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta name="description" content="pop's website" />
|
||||
<title>pomp</title>
|
||||
|
||||
<!-- OpenGraph -->
|
||||
<meta property="og:title" content="pomp" />
|
||||
<meta property="og:site_name" content="pomp" />
|
||||
<meta property="og:description" content="pomp's website" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://pompy.dev" />
|
||||
<meta property="og:image" content="/favicon.svg" />
|
||||
|
||||
<script
|
||||
defer
|
||||
src="https://umami.pompy.dev/script.js"
|
||||
data-website-id="783ea016-943a-47a4-b7e7-a9b9fbd786a9"
|
||||
></script>
|
||||
|
||||
%sveltekit.head%
|
||||
</head>
|
||||
<body>
|
||||
<noscript>JavaScript is not enabled!</noscript>
|
||||
<div id="root">%sveltekit.body%</div>
|
||||
</body>
|
||||
</html>
|
38
apps/www/src/components/HandWave.svelte
Normal file
38
apps/www/src/components/HandWave.svelte
Normal file
|
@ -0,0 +1,38 @@
|
|||
<span class="wave">👋</span>
|
||||
|
||||
<style>
|
||||
.wave {
|
||||
animation-name: wave-animation; /* Refers to the name of your @keyframes element below */
|
||||
animation-duration: 2.5s; /* Change to speed up or slow down */
|
||||
animation-iteration-count: infinite; /* Never stop waving :) */
|
||||
transform-origin: 70% 70%; /* Pivot around the bottom-left palm */
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
@keyframes wave-animation {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
10% {
|
||||
transform: rotate(14deg);
|
||||
} /* The following five values can be played with to make the waving more or less extreme */
|
||||
20% {
|
||||
transform: rotate(-8deg);
|
||||
}
|
||||
30% {
|
||||
transform: rotate(14deg);
|
||||
}
|
||||
40% {
|
||||
transform: rotate(-4deg);
|
||||
}
|
||||
50% {
|
||||
transform: rotate(10deg);
|
||||
}
|
||||
60% {
|
||||
transform: rotate(0deg);
|
||||
} /* Reset for the last half to pause */
|
||||
100% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
</style>
|
1
apps/www/src/constants.ts
Normal file
1
apps/www/src/constants.ts
Normal file
|
@ -0,0 +1 @@
|
|||
export const discordInviteLink = "https://discord.com/invite/aQqamSCUcS"
|
10
apps/www/src/routes/+error.svelte
Normal file
10
apps/www/src/routes/+error.svelte
Normal file
|
@ -0,0 +1,10 @@
|
|||
<script>
|
||||
import "$/routes/app.css"
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>pomp | Page Not Found</title>
|
||||
</svelte:head>
|
||||
|
||||
<h1 class="mx-auto mt-10 text-center text-8xl font-normal">404</h1>
|
||||
<h2 class="mx-auto mt-6 text-center text-3xl font-normal">Page Not Found</h2>
|
9
apps/www/src/routes/+layout.svelte
Normal file
9
apps/www/src/routes/+layout.svelte
Normal file
|
@ -0,0 +1,9 @@
|
|||
<script>
|
||||
import "./app.css"
|
||||
</script>
|
||||
|
||||
<main
|
||||
class="mx-auto my-0 flex w-full max-w-5xl flex-col items-center px-8 py-0 text-center font-normal"
|
||||
>
|
||||
<slot />
|
||||
</main>
|
2
apps/www/src/routes/+layout.ts
Normal file
2
apps/www/src/routes/+layout.ts
Normal file
|
@ -0,0 +1,2 @@
|
|||
// Required for static site stuff
|
||||
export const prerender = true
|
69
apps/www/src/routes/+page.svelte
Normal file
69
apps/www/src/routes/+page.svelte
Normal file
|
@ -0,0 +1,69 @@
|
|||
<script lang="ts">
|
||||
import Discord from "@inqling/svelte-icons/simple-icons/discord.svelte"
|
||||
import GitHub from "@inqling/svelte-icons/simple-icons/github.svelte"
|
||||
import ProtonMail from "@inqling/svelte-icons/simple-icons/protonmail.svelte"
|
||||
import { onMount } from "svelte"
|
||||
|
||||
import HandWave from "$/components/HandWave.svelte"
|
||||
import { discordInviteLink } from "$/constants"
|
||||
import getAge from "$/utils/getAge"
|
||||
|
||||
let age = getAge() // run immediately the first time
|
||||
|
||||
onMount(() => {
|
||||
const interval = setInterval(() => {
|
||||
age = getAge() // first called after the delay
|
||||
}, 100)
|
||||
|
||||
return () => {
|
||||
clearInterval(interval)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<img
|
||||
class="shadow-dark-text-gray mx-auto mb-14 mt-20 aspect-square rounded-full shadow-[0_0_40px_20px]"
|
||||
src="/favicon.svg"
|
||||
alt="logo"
|
||||
width="200"
|
||||
height="200"
|
||||
/>
|
||||
|
||||
<h1 class="mb-16 px-4 py-2 text-center text-4xl">
|
||||
<HandWave />Hello, I am <b>pomp</b>!
|
||||
</h1>
|
||||
|
||||
<span>
|
||||
I am a <b>{age.toFixed(8)} years old</b> college student studying computer science
|
||||
in Seoul, South Korea.
|
||||
</span>
|
||||
|
||||
<h2 class="mt-16 text-xl font-black">Military service</h2>
|
||||
October 2023 ~ April 2025
|
||||
|
||||
<div class="mt-10 flex flex-wrap justify-center">
|
||||
<a
|
||||
class="social-profile"
|
||||
target="_blank"
|
||||
href="https://github.com/pompydev"
|
||||
aria-label="GitHub link"
|
||||
>
|
||||
<GitHub />
|
||||
</a>
|
||||
<a
|
||||
class="social-profile"
|
||||
target="_blank"
|
||||
href={discordInviteLink}
|
||||
aria-label="Discord link"
|
||||
>
|
||||
<Discord />
|
||||
</a>
|
||||
<a
|
||||
class="social-profile"
|
||||
target="_blank"
|
||||
href="mailto: pompydev@proton.me"
|
||||
aria-label="Email link (ProtonMail)"
|
||||
>
|
||||
<ProtonMail />
|
||||
</a>
|
||||
</div>
|
64
apps/www/src/routes/app.css
Normal file
64
apps/www/src/routes/app.css
Normal file
|
@ -0,0 +1,64 @@
|
|||
@import "@fontsource/noto-sans-kr/latin-400.css";
|
||||
@import "@fontsource/noto-sans-kr/latin-700.css";
|
||||
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
html,
|
||||
body,
|
||||
#root {
|
||||
@apply overflow-x-hidden;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
@apply h-screen;
|
||||
}
|
||||
|
||||
body {
|
||||
/* SvelteKit has 8px margin by default for some reason */
|
||||
@apply m-0;
|
||||
}
|
||||
|
||||
#root {
|
||||
/* spacing */
|
||||
@apply h-full;
|
||||
|
||||
/* color */
|
||||
@apply font-noto-sans dark:bg-dark-ui-bg dark:text-dark-text-default;
|
||||
}
|
||||
|
||||
a {
|
||||
/* style */
|
||||
@apply no-underline hover:underline;
|
||||
|
||||
/* color */
|
||||
@apply text-anchor hover:text-anchor-accent;
|
||||
}
|
||||
|
||||
p {
|
||||
@apply leading-6;
|
||||
}
|
||||
|
||||
b {
|
||||
@apply font-bold;
|
||||
}
|
||||
|
||||
.social-profile {
|
||||
@apply hover:rounded-2xl hover:bg-dark-ui-hover;
|
||||
|
||||
* {
|
||||
@apply text-[#888888] duration-150 ease-out;
|
||||
}
|
||||
|
||||
svg {
|
||||
@apply m-5 w-10;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
* {
|
||||
@apply text-white;
|
||||
}
|
||||
}
|
||||
}
|
16
apps/www/src/routes/discord/+page.svelte
Normal file
16
apps/www/src/routes/discord/+page.svelte
Normal file
|
@ -0,0 +1,16 @@
|
|||
<script>
|
||||
import Discord from "@inqling/svelte-icons/simple-icons/discord.svelte"
|
||||
|
||||
import { discordInviteLink } from "$/constants"
|
||||
import { browser } from "$app/environment"
|
||||
|
||||
// redirect to pomp's discord server
|
||||
if (browser) {
|
||||
window.location.replace(discordInviteLink)
|
||||
}
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<Discord />
|
||||
<h1>Redirecting...</h1>
|
||||
</div>
|
111
apps/www/src/utils/getAge.test.ts
Normal file
111
apps/www/src/utils/getAge.test.ts
Normal file
|
@ -0,0 +1,111 @@
|
|||
import dayjs from "dayjs"
|
||||
import timezone from "dayjs/plugin/timezone"
|
||||
import utc from "dayjs/plugin/utc"
|
||||
|
||||
import { testing } from "./getAge"
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
dayjs.tz.setDefault("Asia/Seoul")
|
||||
|
||||
const { birth, getAge, ageInt, ageDecimal, isOverBirthDay } = testing
|
||||
|
||||
describe("getAge tests", () => {
|
||||
test("birthday to be 2002-07-30", () => {
|
||||
expect(birth).toEqual(dayjs.tz("2002-07-30"))
|
||||
})
|
||||
|
||||
test.each<{
|
||||
timestamp: string
|
||||
overBD: boolean
|
||||
year: number
|
||||
monthIndex: number
|
||||
date: number
|
||||
}>([
|
||||
{
|
||||
timestamp: "2022-12-31",
|
||||
overBD: true,
|
||||
year: 2022,
|
||||
monthIndex: 11,
|
||||
date: 31,
|
||||
},
|
||||
{
|
||||
timestamp: "2023-01-01",
|
||||
overBD: false,
|
||||
year: 2023,
|
||||
monthIndex: 0,
|
||||
date: 1,
|
||||
},
|
||||
{
|
||||
timestamp: "2023-07-29",
|
||||
overBD: false,
|
||||
year: 2023,
|
||||
monthIndex: 6,
|
||||
date: 29,
|
||||
},
|
||||
{
|
||||
timestamp: "2023-07-30",
|
||||
overBD: true,
|
||||
year: 2023,
|
||||
monthIndex: 6,
|
||||
date: 30,
|
||||
},
|
||||
{
|
||||
timestamp: "2023-07-31",
|
||||
overBD: true,
|
||||
year: 2023,
|
||||
monthIndex: 6,
|
||||
date: 31,
|
||||
},
|
||||
{
|
||||
timestamp: "2023-12-31",
|
||||
overBD: true,
|
||||
year: 2023,
|
||||
monthIndex: 11,
|
||||
date: 31,
|
||||
},
|
||||
{
|
||||
timestamp: "2024-01-01",
|
||||
overBD: false,
|
||||
year: 2024,
|
||||
monthIndex: 0,
|
||||
date: 1,
|
||||
},
|
||||
])("isOverBirthDay to work ($timestamp)", (testData) => {
|
||||
const date = dayjs.tz(testData.timestamp)
|
||||
|
||||
expect(date.year()).toEqual(testData.year)
|
||||
expect(date.month()).toEqual(testData.monthIndex)
|
||||
expect(date.date()).toEqual(testData.date)
|
||||
expect(isOverBirthDay(date)).toEqual(testData.overBD)
|
||||
})
|
||||
|
||||
test.each<[string, number]>([
|
||||
["2002-07-30", 0],
|
||||
["2023-07-29", 20],
|
||||
["2023-07-30", 21],
|
||||
["2023-07-31", 21],
|
||||
])("ageInt to work for '%s'", (date, expected) => {
|
||||
expect(ageInt(dayjs.tz(date))).toEqual(expected)
|
||||
})
|
||||
|
||||
test.each<[string, number]>([
|
||||
["2023-07-29", 0.9972602739726028],
|
||||
["2023-07-30", 0.0],
|
||||
["2023-07-31", 0.00273224043715847],
|
||||
])("ageDecimal to work for '%s'", (date, expected) => {
|
||||
expect(ageDecimal(dayjs.tz(date))).toEqual(expected)
|
||||
expect(ageDecimal(dayjs.tz(date))).toBeGreaterThanOrEqual(0.0)
|
||||
expect(ageDecimal(dayjs.tz(date))).toBeLessThan(1.0)
|
||||
})
|
||||
|
||||
test.each<[string, number]>([
|
||||
["2002-07-30", 0.0],
|
||||
["2023-07-29", 20.997260273972604],
|
||||
["2023-07-30", 21.0],
|
||||
["2023-07-31", 21.002732240437158],
|
||||
])("getAge to work for '%s'", (date, expected) => {
|
||||
expect(getAge(dayjs.tz(date))).toEqual(expected)
|
||||
})
|
||||
})
|
69
apps/www/src/utils/getAge.ts
Normal file
69
apps/www/src/utils/getAge.ts
Normal file
|
@ -0,0 +1,69 @@
|
|||
import dayjs, { type Dayjs } from "dayjs"
|
||||
import timezone from "dayjs/plugin/timezone"
|
||||
import utc from "dayjs/plugin/utc"
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
dayjs.tz.setDefault("Asia/Seoul")
|
||||
|
||||
// my birthday in KST :D
|
||||
const birth = dayjs.tz("2002-07-30")
|
||||
|
||||
/**
|
||||
* Gets pomp's age with decimal precision
|
||||
*
|
||||
* @param now - current `Date` in KST
|
||||
*/
|
||||
export default function getAge(now: Dayjs = dayjs.tz()): number {
|
||||
return ageInt(now) + ageDecimal(now)
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the integer component of the age
|
||||
*/
|
||||
function ageInt(now: Dayjs): number {
|
||||
return now.year() - birth.year() - (isOverBirthDay(now) ? 0 : 1)
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the decimal component of the age
|
||||
*/
|
||||
function ageDecimal(now: Dayjs): number {
|
||||
// millisecond timestamp of my last birthday
|
||||
const BDPrev = birth
|
||||
.year(now.year() - (isOverBirthDay(now) ? 0 : 1))
|
||||
.valueOf()
|
||||
|
||||
// millisecond timestamp of my upcoming birthday
|
||||
const BDNext = birth
|
||||
.year(now.year() + (isOverBirthDay(now) ? 1 : 0))
|
||||
.valueOf()
|
||||
|
||||
// milliseconds since my last birthday
|
||||
const msSinceLastBD = now.valueOf() - BDPrev
|
||||
|
||||
return msSinceLastBD / (BDNext - BDPrev)
|
||||
}
|
||||
|
||||
/**
|
||||
* tests if today is at or after this year's birthday
|
||||
*
|
||||
* ...| Dec 31 | Jan 1 | ... | July 29 | Jul 30 | July 31 | ... | Dec 31 | Jan 1 | ...
|
||||
* ...| true | false | ... | false | true | true | ... | true | false | ...
|
||||
*/
|
||||
function isOverBirthDay(now: Dayjs): boolean {
|
||||
if (birth.month() < now.month()) return true
|
||||
|
||||
if (birth.month() === now.month() && birth.date() <= now.date()) return true
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
export const testing = {
|
||||
birth,
|
||||
getAge,
|
||||
ageInt,
|
||||
ageDecimal,
|
||||
isOverBirthDay,
|
||||
}
|
1
apps/www/static/.well-known/discord
Normal file
1
apps/www/static/.well-known/discord
Normal file
|
@ -0,0 +1 @@
|
|||
dh=5c4b9aaae3d88bcc3fa47cbf4c5e267dd27f8cd7
|
6
apps/www/static/favicon.svg
Normal file
6
apps/www/static/favicon.svg
Normal file
|
@ -0,0 +1,6 @@
|
|||
<svg width="800" height="800" viewBox="0 0 800 800" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<circle cx="400" cy="400" r="400" fill="black"/>
|
||||
<path d="M217.617 226.262H184.863C180.632 226.262 176.23 226.77 171.66 227.785C167.259 228.632 163.197 230.07 159.473 232.102C155.749 234.133 152.702 236.757 150.332 239.973C147.962 243.189 146.777 247.082 146.777 251.652V252.16V341.281C146.777 354.315 144.915 365.826 141.191 375.812C137.467 385.63 132.643 394.178 126.719 401.457C133.828 410.598 138.822 420.415 141.699 430.91C144.746 441.405 146.27 451.223 146.27 460.363V550.246C146.27 556.171 147.793 560.91 150.84 564.465C153.887 567.85 157.526 570.474 161.758 572.336C165.99 574.029 170.221 575.129 174.453 575.637C178.685 575.975 181.986 576.145 184.355 576.145H217.109V642.922H183.848C176.908 642.922 169.46 642.16 161.504 640.637C153.717 639.283 145.931 636.997 138.145 633.781C130.527 630.734 123.164 626.757 116.055 621.848C109.115 616.939 102.936 611.014 97.5195 604.074C92.2721 597.134 88.0404 589.178 84.8242 580.207C81.7773 571.236 80.2539 561.079 80.2539 549.738V460.871C80.2539 451.9 77.8841 445.214 73.1445 440.812C68.5742 436.411 62.1419 434.211 53.8477 434.211C49.1081 434.211 44.707 433.365 40.6445 431.672C36.582 429.81 33.0273 427.44 29.9805 424.562C27.1029 421.516 24.8177 417.961 23.125 413.898C21.4323 409.836 20.5859 405.52 20.5859 400.949C20.5859 396.379 21.4323 392.147 23.125 388.254C24.8177 384.191 27.1029 380.721 29.9805 377.844C33.0273 374.797 36.4974 372.427 40.3906 370.734C44.4531 368.872 48.7695 367.857 53.3398 367.688C62.4805 367.688 69.3359 365.487 73.9062 361.086C78.4766 356.516 80.7617 349.914 80.7617 341.281V251.652C80.7617 237.095 83.724 224.146 89.6484 212.805C95.5729 201.464 103.444 191.9 113.262 184.113C123.079 176.327 134.167 170.402 146.523 166.34C159.049 162.277 171.829 160.246 184.863 160.246H217.617V226.262ZM595.47 371.242C595.47 386.307 593.608 399.764 589.884 411.613C586.16 423.462 581.082 433.957 574.65 443.098C568.387 452.069 561.108 459.771 552.814 466.203C544.52 472.635 535.802 477.883 526.662 481.945C517.69 486.008 508.55 488.97 499.24 490.832C490.099 492.694 481.466 493.625 473.341 493.625H324.045V427.609H473.341C481.805 426.932 489.422 425.24 496.193 422.531C503.133 419.654 509.058 415.845 513.966 411.105C518.875 406.366 522.684 400.695 525.392 394.094C528.101 387.323 529.455 379.706 529.455 371.242V341.281C528.608 332.987 526.831 325.37 524.123 318.43C521.414 311.49 517.69 305.565 512.951 300.656C508.38 295.747 502.795 291.939 496.193 289.23C489.591 286.353 481.974 284.914 473.341 284.914H324.552C315.75 284.914 309.064 287.199 304.494 291.77C299.923 296.34 297.638 302.941 297.638 311.574V583H231.623V311.574C231.623 294.647 234.67 280.259 240.763 268.41C247.026 256.561 254.728 246.997 263.869 239.719C273.179 232.44 283.25 227.193 294.084 223.977C304.917 220.591 314.904 218.898 324.045 218.898H473.341C488.237 218.898 501.61 220.845 513.459 224.738C525.308 228.462 535.718 233.54 544.689 239.973C553.83 246.236 561.532 253.514 567.795 261.809C574.227 270.103 579.474 278.82 583.537 287.961C587.768 296.932 590.815 306.073 592.677 315.383C594.539 324.523 595.47 333.156 595.47 341.281V371.242ZM778.07 400.949C778.07 405.52 777.223 409.836 775.53 413.898C773.838 417.961 771.468 421.516 768.421 424.562C765.543 427.44 762.073 429.81 758.011 431.672C754.118 433.365 749.886 434.211 745.316 434.211C736.683 434.211 729.997 436.411 725.257 440.812C720.687 445.214 718.402 451.9 718.402 460.871L718.909 549.738C718.909 561.079 717.301 571.236 714.085 580.207C710.869 589.178 706.553 597.134 701.136 604.074C695.719 611.014 689.456 616.939 682.347 621.848C675.407 626.757 668.043 630.734 660.257 633.781C652.64 636.997 644.853 639.283 636.898 640.637C629.111 642.16 621.748 642.922 614.808 642.922H582.054L581.546 576.145H614.808C617.008 576.145 620.224 575.975 624.456 575.637C628.688 575.129 632.835 574.029 636.898 572.336C641.129 570.474 644.769 567.85 647.816 564.465C650.862 560.91 652.386 556.171 652.386 550.246V460.363C652.386 451.223 653.909 441.405 656.956 430.91C660.172 420.415 665.166 410.598 671.937 401.457C666.012 394.178 661.103 385.63 657.21 375.812C653.486 365.826 651.624 354.315 651.624 341.281V252.16V251.652C650.778 246.913 649.17 242.935 646.8 239.719C644.599 236.503 641.806 233.879 638.421 231.848C635.036 229.816 631.227 228.378 626.995 227.531C622.933 226.685 618.701 226.262 614.3 226.262H581.038V160.246H614.3C628.011 160.246 641.129 162.447 653.655 166.848C666.181 171.079 677.184 177.258 686.663 185.383C696.312 193.339 703.929 202.987 709.515 214.328C715.101 225.5 717.894 237.941 717.894 251.652C717.894 252.837 717.978 260.878 718.148 275.773C718.317 290.5 718.402 312.336 718.402 341.281C718.402 349.914 720.602 356.516 725.003 361.086C729.404 365.487 736.175 367.688 745.316 367.688C749.886 367.857 754.118 368.872 758.011 370.734C762.073 372.427 765.543 374.797 768.421 377.844C771.468 380.721 773.838 384.191 775.53 388.254C777.223 392.147 778.07 396.379 778.07 400.949Z" fill="#F4F4F4"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
BIN
apps/www/static/img/LP_banner.png
Normal file
BIN
apps/www/static/img/LP_banner.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 122 KiB |
BIN
apps/www/static/img/LP_lama.gif
Normal file
BIN
apps/www/static/img/LP_lama.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 MiB |
BIN
apps/www/static/img/d111.png
Normal file
BIN
apps/www/static/img/d111.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
BIN
apps/www/static/img/toony_llama_with_pajama_shaded.png
Normal file
BIN
apps/www/static/img/toony_llama_with_pajama_shaded.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.3 KiB |
BIN
apps/www/static/resume.odt
Normal file
BIN
apps/www/static/resume.odt
Normal file
Binary file not shown.
BIN
apps/www/static/resume.pdf
Normal file
BIN
apps/www/static/resume.pdf
Normal file
Binary file not shown.
5
apps/www/static/robots.txt
Normal file
5
apps/www/static/robots.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow:
|
||||
Sitemap: https://pompy.dev/sitemap.xml
|
13
apps/www/static/sitemap.xml
Normal file
13
apps/www/static/sitemap.xml
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://pompy.dev</loc>
|
||||
<changefreq>always</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pompy.dev</loc>
|
||||
<changefreq>always</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
</urlset>
|
16
apps/www/svelte.config.js
Normal file
16
apps/www/svelte.config.js
Normal file
|
@ -0,0 +1,16 @@
|
|||
import adapter from "@sveltejs/adapter-static"
|
||||
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"
|
||||
|
||||
/** @type {import('@sveltejs/kit').Config} */
|
||||
const config = {
|
||||
preprocess: [vitePreprocess()],
|
||||
|
||||
kit: {
|
||||
paths: {
|
||||
relative: false,
|
||||
},
|
||||
adapter: adapter(),
|
||||
},
|
||||
}
|
||||
|
||||
export default config
|
7
apps/www/tailwind.config.js
Normal file
7
apps/www/tailwind.config.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
import myPreset from "@pompydev/tailwind-config/tailwind.config.js"
|
||||
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
export default {
|
||||
presets: [myPreset],
|
||||
content: ["./src/**/*.{html,js,svelte,ts}"],
|
||||
}
|
19
apps/www/tsconfig.json
Normal file
19
apps/www/tsconfig.json
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"extends": "./.svelte-kit/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"esModuleInterop": true,
|
||||
"verbatimModuleSyntax": false,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
|
||||
"baseUrl": "./src",
|
||||
"paths": {
|
||||
"$/*": ["./*"]
|
||||
}
|
||||
}
|
||||
}
|
15
apps/www/vite.config.ts
Normal file
15
apps/www/vite.config.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
import { sveltekit } from "@sveltejs/kit/vite"
|
||||
import path from "path"
|
||||
import { defineConfig } from "vite"
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [sveltekit()],
|
||||
resolve: {
|
||||
alias: {
|
||||
$: path.resolve("./src"),
|
||||
},
|
||||
},
|
||||
server: {
|
||||
open: true,
|
||||
},
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue