feat: add new site
This commit is contained in:
parent
53738961bb
commit
532a32db68
27 changed files with 1198 additions and 1328 deletions
|
|
@ -2,17 +2,16 @@ import { defineMDSveXConfig as defineConfig } from 'mdsvex';
|
|||
|
||||
const config = defineConfig({
|
||||
layout: {
|
||||
project: './src/routes/projects/project.layout.svelte',
|
||||
blog: './src/layouts/blog.svelte'
|
||||
},
|
||||
|
||||
extensions: ['.svelte.md', '.md', '.svx'],
|
||||
|
||||
smartypants: {
|
||||
dashes: 'oldschool',
|
||||
dashes: 'oldschool'
|
||||
},
|
||||
|
||||
remarkPlugins: [],
|
||||
rehypePlugins: [],
|
||||
rehypePlugins: []
|
||||
});
|
||||
|
||||
export default config;
|
||||
|
|
|
|||
31
package.json
31
package.json
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "daichendt.one",
|
||||
"name": "myblog",
|
||||
"version": "0.0.1",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"dev": "svelte-kit dev",
|
||||
"build": "svelte-kit build",
|
||||
"dev": "vite dev",
|
||||
"build": "vite build",
|
||||
"package": "svelte-kit package",
|
||||
"preview": "svelte-kit preview",
|
||||
"preview": "vite preview",
|
||||
"prepare": "svelte-kit sync",
|
||||
"check": "svelte-check --tsconfig ./tsconfig.json",
|
||||
"check:watch": "svelte-check --tsconfig ./tsconfig.json --watch",
|
||||
|
|
@ -18,26 +18,29 @@
|
|||
"@sveltejs/kit": "next",
|
||||
"@typescript-eslint/eslint-plugin": "^5.27.0",
|
||||
"@typescript-eslint/parser": "^5.27.0",
|
||||
"autoprefixer": "^10.4.7",
|
||||
"browserslist": "^4.21.2",
|
||||
"eslint": "^8.16.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-svelte3": "^4.0.0",
|
||||
"mdi-svelte": "^1.1.2",
|
||||
"mdsvex": "^0.10.6",
|
||||
"postcss": "^8.4.14",
|
||||
"postcss-load-config": "^4.0.1",
|
||||
"postcss-normalize": "^10.0.1",
|
||||
"prettier": "^2.6.2",
|
||||
"prettier-plugin-svelte": "^2.7.0",
|
||||
"svelte": "^3.44.0",
|
||||
"svelte-check": "^2.7.1",
|
||||
"svelte-preprocess": "^4.10.6",
|
||||
"tslib": "^2.3.1",
|
||||
"typescript": "^4.7.2"
|
||||
"typescript": "^4.7.4",
|
||||
"vite": "^3.0.0"
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"@fontsource/syne": "^4.5.9",
|
||||
"@fontsource/voces": "^4.5.9",
|
||||
"@mdi/js": "^6.7.96",
|
||||
"@svelteuidev/composables": "^0.6.8",
|
||||
"@svelteuidev/core": "^0.6.8",
|
||||
"jetbrains-mono": "^1.0.6",
|
||||
"mdi-svelte": "^1.1.2"
|
||||
}
|
||||
"@fontsource/ubuntu-mono": "^4.5.10",
|
||||
"@mdi/js": "^7.0.96"
|
||||
},
|
||||
"browserslist": "last 2 versions"
|
||||
}
|
||||
|
|
|
|||
1
src/app.d.ts
vendored
1
src/app.d.ts
vendored
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
// See https://kit.svelte.dev/docs/types#app
|
||||
// for information about these interfaces
|
||||
// and what to do when importing types
|
||||
declare namespace App {
|
||||
// interface Locals {}
|
||||
// interface Platform {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="en" data-nu-scheme-is="light" data-nu-contrast-is="no-preference">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
||||
|
|
|
|||
5
src/components.mjs
Normal file
5
src/components.mjs
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
import Link from './components/Link.svelte';
|
||||
|
||||
export default {
|
||||
a: Link
|
||||
};
|
||||
40
src/components/Link.svelte
Normal file
40
src/components/Link.svelte
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<script lang="ts">
|
||||
import { mdiLinkVariant } from '@mdi/js';
|
||||
import { mdiChevronRight } from '@mdi/js';
|
||||
import Icon from 'mdi-svelte';
|
||||
export let href: string;
|
||||
export let disableIcon = false;
|
||||
// svelte-ignore unused-export-let
|
||||
export let rel = '';
|
||||
|
||||
const internal = !href.startsWith('http');
|
||||
let spin = false;
|
||||
</script>
|
||||
|
||||
<a
|
||||
rel={!internal ? 'nofollow noreferrer noopener' : ''}
|
||||
target={!internal ? '_blank' : ''}
|
||||
{href}
|
||||
on:mouseover={() => (spin = true)}
|
||||
on:focus={() => (spin = true)}
|
||||
on:mouseleave={() => (spin = false)}
|
||||
>
|
||||
{#if !disableIcon}
|
||||
<Icon path={internal ? mdiChevronRight : mdiLinkVariant} size="1rem" {spin} />
|
||||
{/if}
|
||||
<span class="text"><slot /></span>
|
||||
</a>
|
||||
|
||||
<style>
|
||||
a {
|
||||
color: var(--special-color);
|
||||
text-decoration: none;
|
||||
font-weight: 550;
|
||||
}
|
||||
a:hover {
|
||||
color: var(--dark-color);
|
||||
}
|
||||
.text {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
135
src/components/ThemeSwitcher.svelte
Normal file
135
src/components/ThemeSwitcher.svelte
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
<script lang="js">
|
||||
// @ts-nocheck
|
||||
import { mdiAccount } from '@mdi/js';
|
||||
import { onMount } from 'svelte';
|
||||
import Icon from 'mdi-svelte';
|
||||
|
||||
onMount(() => {
|
||||
const ROOT = document.querySelector(':root');
|
||||
const DARK = 'dark';
|
||||
const LIGHT = 'light';
|
||||
const HIGH = 'more';
|
||||
const LOW = 'no-preference';
|
||||
const SCHEMES = [DARK, LIGHT];
|
||||
const CONTRASTS = [HIGH, LOW];
|
||||
function observeContext(data) {
|
||||
if (data.find((record) => !record.attributeName.endsWith('-is'))) {
|
||||
setScheme();
|
||||
setContrast();
|
||||
}
|
||||
}
|
||||
const schemeMedia = matchMedia('(prefers-color-scheme: dark)');
|
||||
const contrastMedia = matchMedia('(prefers-contrast: more)');
|
||||
let globalScheme = schemeMedia.matches ? DARK : LIGHT;
|
||||
let globalContrast = contrastMedia.matches ? HIGH : LOW;
|
||||
schemeMedia.addListener((_media) => {
|
||||
globalScheme = _media.matches ? DARK : LIGHT;
|
||||
setScheme();
|
||||
});
|
||||
contrastMedia.addListener((_media) => {
|
||||
globalContrast = _media.matches ? HIGH : LOW;
|
||||
setContrast();
|
||||
});
|
||||
function setScheme() {
|
||||
const setting = ROOT.dataset.nuScheme;
|
||||
ROOT.dataset.nuSchemeIs =
|
||||
(setting !== 'auto' && SCHEMES.includes(setting) && setting) || globalScheme;
|
||||
}
|
||||
function setContrast() {
|
||||
const setting = ROOT.dataset.nuContrast;
|
||||
ROOT.dataset.nuContrastIs =
|
||||
(setting !== 'auto' && CONTRASTS.includes(setting) && setting) || globalContrast;
|
||||
}
|
||||
const observer = new MutationObserver((data) => observeContext(data));
|
||||
observer.observe(ROOT, {
|
||||
characterData: false,
|
||||
attributes: true,
|
||||
childList: false,
|
||||
subtree: false
|
||||
});
|
||||
setScheme();
|
||||
setContrast();
|
||||
// Switch to dark scheme
|
||||
// ROOT.dataset.nuContrast = 'more';
|
||||
// Increase contrast
|
||||
// ROOT.dataset.nuScheme = 'dark';
|
||||
});
|
||||
|
||||
function toggleTheme() {
|
||||
const root = document.querySelector(':root');
|
||||
const theme = root.dataset['nuSchemeIs'];
|
||||
|
||||
if (theme === 'light') {
|
||||
root.dataset['nuScheme'] = 'dark';
|
||||
} else {
|
||||
root.dataset['nuScheme'] = 'light';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<label class="switch">
|
||||
<input type="checkbox" on:change={toggleTheme} />
|
||||
<span class="slider round" />
|
||||
</label>
|
||||
|
||||
<style>
|
||||
.switch {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 60px;
|
||||
height: 34px;
|
||||
}
|
||||
|
||||
.switch input {
|
||||
opacity: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.slider {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: lightskyblue;
|
||||
transition: 0.4s;
|
||||
}
|
||||
|
||||
.slider:before {
|
||||
position: absolute;
|
||||
content: '';
|
||||
height: 26px;
|
||||
width: 26px;
|
||||
left: 4px;
|
||||
bottom: 4px;
|
||||
background-color: gold;
|
||||
transition: 0.4s;
|
||||
}
|
||||
|
||||
input:checked + .slider {
|
||||
background-color: var(--special-mark-color);
|
||||
}
|
||||
input:checked + .slider:before {
|
||||
background-color: white;
|
||||
background: radial-gradient(circle at 19% 19%, transparent 41%, var(--outline-color) 43%);
|
||||
}
|
||||
|
||||
input:focus + .slider {
|
||||
box-shadow: 0 0 5px var(--special-shadow-color);
|
||||
}
|
||||
|
||||
input:checked + .slider:before {
|
||||
transform: translateX(26px);
|
||||
}
|
||||
|
||||
/* Rounded sliders */
|
||||
.slider.round {
|
||||
border-radius: 34px;
|
||||
}
|
||||
|
||||
.slider.round:before {
|
||||
border-radius: 50%;
|
||||
}
|
||||
</style>
|
||||
15
src/layouts/blog.svelte
Normal file
15
src/layouts/blog.svelte
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<script context="module">
|
||||
// @ts-ignore
|
||||
import components from '../components';
|
||||
const a = components.a;
|
||||
export { a };
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
// svelte-ignore unused-export-let
|
||||
export let title;
|
||||
// svelte-ignore unused-export-let
|
||||
export let date;
|
||||
</script>
|
||||
|
||||
<slot />
|
||||
|
|
@ -1,105 +1,275 @@
|
|||
<script>
|
||||
import {
|
||||
Button,
|
||||
Switch,
|
||||
Container,
|
||||
createStyles,
|
||||
SvelteUIProvider,
|
||||
createTheme,
|
||||
} from '@svelteuidev/core';
|
||||
// import type { SvelteUIProviderProps } from '@svelteuidev/core';
|
||||
import '@fontsource/syne';
|
||||
|
||||
const theme = createTheme('themeOverride', { fonts: { standard: 'Syne' } });
|
||||
|
||||
const config = {
|
||||
light: { bg: 'White', color: 'Black' },
|
||||
dark: { bg: '#373737', color: '#C1C2C5' },
|
||||
};
|
||||
|
||||
const MENU_ITEMS = [
|
||||
{ label: 'Blog', href: '/blog' },
|
||||
{ label: 'Projects', href: '/projects' },
|
||||
];
|
||||
// current y coordinate of the scroll bar
|
||||
let y = 0;
|
||||
let isDark = false;
|
||||
function toggleTheme() {
|
||||
isDark = !isDark;
|
||||
}
|
||||
|
||||
const useStyles = createStyles((theme) => {
|
||||
return {
|
||||
root: {
|
||||
display: 'flex',
|
||||
justifyContent: 'space-between',
|
||||
alignItems: 'center',
|
||||
position: 'sticky',
|
||||
top: 0,
|
||||
marginBottom: theme.space[12],
|
||||
padding: theme.space[4],
|
||||
'&.scrolled': {
|
||||
[`${theme.dark} &`]: {
|
||||
// using of SvelteUI utilities
|
||||
// bc === backgroundColor
|
||||
//bc: theme.colors['dark500'].value,
|
||||
},
|
||||
bc: '#242424',
|
||||
color: 'rgb(223 223 223);',
|
||||
boxShadow: theme.shadows.lg,
|
||||
},
|
||||
},
|
||||
list: {
|
||||
listStyle: 'none',
|
||||
display: 'flex',
|
||||
marginBlock: '0px',
|
||||
gap: theme.space[2],
|
||||
},
|
||||
menuItem: {
|
||||
fontWeight: theme.fontWeights.bold,
|
||||
},
|
||||
};
|
||||
});
|
||||
$: ({ classes, getStyles, cx } = useStyles());
|
||||
<script context="module">
|
||||
const year = new Date().getFullYear();
|
||||
</script>
|
||||
|
||||
<svelte:window bind:scrollY={y} />
|
||||
<script>
|
||||
import ThemeSwitcher from '../components/ThemeSwitcher.svelte';
|
||||
import { page } from '$app/stores';
|
||||
import { mdiCopyright } from '@mdi/js';
|
||||
import Icon from 'mdi-svelte';
|
||||
import '@fontsource/ubuntu-mono/400.css';
|
||||
import Link from '../components/Link.svelte';
|
||||
|
||||
<SvelteUIProvider
|
||||
{config}
|
||||
class={theme}
|
||||
themeObserver={isDark ? 'dark' : 'light'}
|
||||
withNormalizeCSS
|
||||
withGlobalStyles
|
||||
ssr
|
||||
>
|
||||
<div class={cx(getStyles(), { scrolled: y > 0 })}>
|
||||
<h1><a href="/">Yard of Stuffs</a></h1>
|
||||
const NAV_ITEMS = [
|
||||
{ href: '/blog', label: 'Blog' },
|
||||
{ href: '/contact', label: 'Contact' }
|
||||
];
|
||||
</script>
|
||||
|
||||
<div class="container upper">
|
||||
<header>
|
||||
<div class="header">
|
||||
<a href="/">
|
||||
<h1>Alex Daichendt</h1>
|
||||
</a>
|
||||
|
||||
<ThemeSwitcher />
|
||||
</div>
|
||||
<nav>
|
||||
<ul class={classes.list}>
|
||||
{#each MENU_ITEMS as menuItem}
|
||||
<li class={classes.menuItem}>
|
||||
<Button href={menuItem.href} variant="subtle" color="cyan" radius="xl" uppercase ripple>
|
||||
{menuItem.label}
|
||||
</Button>
|
||||
<ol>
|
||||
{#each NAV_ITEMS as navItem}
|
||||
<li class="navItem {$page.url.pathname.includes(navItem.href) ? 'active' : ''}">
|
||||
<a href={navItem.href}>{navItem.label}</a>
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
</ol>
|
||||
</nav>
|
||||
<Switch offLabel="Dark" size="lg" color="yellow" on:change={toggleTheme} />
|
||||
</div>
|
||||
<Container class={classes.main}>
|
||||
</header>
|
||||
|
||||
<div class="content">
|
||||
<slot />
|
||||
</Container>
|
||||
</SvelteUIProvider>
|
||||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
<div class="container">
|
||||
<p>Copyright <Icon path={mdiCopyright} size="1rem" /> {year} Alexander Daichendt</p>
|
||||
|
||||
<Link href="/privacy">Privacy Policy</Link>
|
||||
<Link href="/impressum">Impressum</Link>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<style>
|
||||
:global(body) {
|
||||
font-family: 'Syne', sans-serif;
|
||||
@import 'normalize.css';
|
||||
@import 'sanitize.css';
|
||||
.upper {
|
||||
min-height: calc(100vh - 4rem - 8px);
|
||||
}
|
||||
|
||||
:global(a) {
|
||||
.content {
|
||||
max-width: 60rem;
|
||||
margin: 0 auto;
|
||||
}
|
||||
header {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
.active {
|
||||
font-weight: 600;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
font-size: 1.2rem;
|
||||
position: relative;
|
||||
}
|
||||
ol {
|
||||
list-style-type: none;
|
||||
}
|
||||
.navItem {
|
||||
display: inline;
|
||||
}
|
||||
.navItem:not(:last-child)::after {
|
||||
content: '·';
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
.navItem a:hover {
|
||||
color: var(--text-strong-color);
|
||||
}
|
||||
.navItem a:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 50%;
|
||||
width: 0%;
|
||||
border-bottom: 2px solid var(--outline-color);
|
||||
transition: 0.3s;
|
||||
}
|
||||
.navItem a:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
width: 0%;
|
||||
border-bottom: 2px solid var(--outline-color);
|
||||
transition: 0.3s;
|
||||
}
|
||||
.navItem a:hover:after {
|
||||
width: 50%;
|
||||
}
|
||||
.navItem a:hover:before {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 70rem;
|
||||
margin: 0 auto;
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.header h1 {
|
||||
margin: 0;
|
||||
font-family: Verdana, Geneva, Tahoma, sans-serif;
|
||||
color: var(--special-color);
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: var(--special-bg-color);
|
||||
padding: 2rem;
|
||||
margin-top: 4rem;
|
||||
}
|
||||
:global(footer div a) {
|
||||
color: var(--text-soft-color) !important;
|
||||
}
|
||||
:global(footer div a:hover) {
|
||||
color: var(--light-color) !important;
|
||||
}
|
||||
:global(body) {
|
||||
background-color: var(--subtle-color);
|
||||
color: var(--text-color);
|
||||
transition: background-color 0.3s ease-in;
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
overflow-y: scroll;
|
||||
margin: 0;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
:global([data-nu-scheme-is='light'][data-nu-contrast-is='no-preference'] body) {
|
||||
--bg-color: rgba(255, 255, 255, 1);
|
||||
--text-color: rgba(44, 50, 32, 1);
|
||||
--text-soft-color: rgba(71, 76, 63, 1);
|
||||
--text-strong-color: rgba(74, 74, 74, 1);
|
||||
--subtle-color: rgba(248, 250, 245, 1);
|
||||
--border-color: rgba(225, 234, 210, 1);
|
||||
--shadow-color: rgba(181, 197, 148, 1);
|
||||
--input-color: rgba(255, 255, 255, 1);
|
||||
--outline-color: rgba(249, 201, 163, 1);
|
||||
--mark-color: rgba(224, 146, 38, 0.08);
|
||||
--special-color: rgba(224, 146, 38, 1);
|
||||
--special-bg-color: rgba(229, 149, 39, 1);
|
||||
--special-text-color: rgba(255, 255, 255, 1);
|
||||
--special-shadow-color: rgba(149, 112, 81, 1);
|
||||
--special-mark-color: rgba(255, 255, 255, 0.08);
|
||||
--light-color: rgba(254, 241, 233, 1);
|
||||
--dark-color: rgba(89, 66, 46, 1);
|
||||
--text-color-rgb: 44, 50, 32;
|
||||
--bg-color-rgb: 255, 255, 255;
|
||||
--subtle-color-rgb: 248, 250, 245;
|
||||
--special-color-rgb: 224, 146, 38;
|
||||
--special-text-color-rgb: 255, 255, 255;
|
||||
--special-bg-color-rgb: 229, 149, 39;
|
||||
--shadow-color-rgb: 181, 197, 148;
|
||||
--special-shadow-color-rgb: 149, 112, 81;
|
||||
--outline-color-rgb: 249, 201, 163;
|
||||
--dark-color-rgb: 89, 66, 46;
|
||||
--light-color-rgb: 254, 241, 233;
|
||||
}
|
||||
|
||||
:global(html[data-nu-scheme-is='dark'][data-nu-contrast-is='no-preference'] body) {
|
||||
--bg-color: rgba(32, 32, 32, 1);
|
||||
--text-color: rgba(216, 227, 196, 1);
|
||||
--text-soft-color: rgba(184, 189, 176, 1);
|
||||
--text-strong-color: rgba(187, 187, 187, 1);
|
||||
--subtle-color: rgba(34, 37, 28, 1);
|
||||
--border-color: rgba(44, 51, 27, 1);
|
||||
--shadow-color: rgba(0, 0, 0, 1);
|
||||
--input-color: rgba(28, 28, 28, 1);
|
||||
--outline-color: rgba(217, 151, 82, 1);
|
||||
--mark-color: rgba(170, 113, 47, 0.08);
|
||||
--special-color: rgba(170, 113, 47, 1);
|
||||
--special-bg-color: rgba(151, 100, 40, 1);
|
||||
--special-text-color: rgba(230, 221, 216, 1);
|
||||
--special-shadow-color: rgba(58, 41, 28, 1);
|
||||
--special-mark-color: rgba(230, 221, 216, 0.08);
|
||||
--light-color: rgba(249, 203, 168, 1);
|
||||
--dark-color: rgba(68, 49, 32, 1);
|
||||
--text-color-rgb: 216, 227, 196;
|
||||
--bg-color-rgb: 32, 32, 32;
|
||||
--subtle-color-rgb: 34, 37, 28;
|
||||
--special-color-rgb: 170, 113, 47;
|
||||
--special-text-color-rgb: 230, 221, 216;
|
||||
--special-bg-color-rgb: 151, 100, 40;
|
||||
--shadow-color-rgb: 0, 0, 0;
|
||||
--special-shadow-color-rgb: 58, 41, 28;
|
||||
--outline-color-rgb: 217, 151, 82;
|
||||
--dark-color-rgb: 68, 49, 32;
|
||||
--light-color-rgb: 249, 203, 168;
|
||||
}
|
||||
|
||||
:global(html[data-nu-scheme-is='light'][data-nu-contrast-is='more'] body) {
|
||||
--bg-color: rgba(255, 255, 255, 1);
|
||||
--text-color: rgba(29, 34, 20, 1);
|
||||
--text-soft-color: rgba(31, 33, 26, 1);
|
||||
--text-strong-color: rgba(74, 74, 74, 1);
|
||||
--subtle-color: rgba(248, 250, 245, 1);
|
||||
--border-color: rgba(173, 186, 149, 1);
|
||||
--shadow-color: rgba(147, 162, 117, 1);
|
||||
--input-color: rgba(255, 255, 255, 1);
|
||||
--outline-color: rgba(248, 179, 114, 1);
|
||||
--mark-color: rgba(181, 117, 28, 0.16);
|
||||
--special-color: rgba(181, 117, 28, 1);
|
||||
--special-bg-color: rgba(186, 120, 29, 1);
|
||||
--special-text-color: rgba(255, 255, 255, 1);
|
||||
--special-shadow-color: rgba(85, 63, 44, 1);
|
||||
--special-mark-color: rgba(255, 255, 255, 0.16);
|
||||
--light-color: rgba(254, 241, 233, 1);
|
||||
--dark-color: rgba(89, 66, 46, 1);
|
||||
--text-color-rgb: 29, 34, 20;
|
||||
--bg-color-rgb: 255, 255, 255;
|
||||
--subtle-color-rgb: 248, 250, 245;
|
||||
--special-color-rgb: 181, 117, 28;
|
||||
--special-text-color-rgb: 255, 255, 255;
|
||||
--special-bg-color-rgb: 186, 120, 29;
|
||||
--shadow-color-rgb: 147, 162, 117;
|
||||
--special-shadow-color-rgb: 85, 63, 44;
|
||||
--outline-color-rgb: 248, 179, 114;
|
||||
--dark-color-rgb: 89, 66, 46;
|
||||
--light-color-rgb: 254, 241, 233;
|
||||
}
|
||||
|
||||
:global(html[data-nu-scheme-is='dark'][data-nu-contrast-is='more'] body) {
|
||||
--bg-color: rgba(32, 32, 32, 1);
|
||||
--text-color: rgba(233, 243, 215, 1);
|
||||
--text-soft-color: rgba(236, 241, 227, 1);
|
||||
--text-strong-color: rgba(187, 187, 187, 1);
|
||||
--subtle-color: rgba(34, 37, 28, 1);
|
||||
--border-color: rgba(77, 83, 66, 1);
|
||||
--shadow-color: rgba(0, 0, 0, 1);
|
||||
--input-color: rgba(28, 28, 28, 1);
|
||||
--outline-color: rgba(226, 157, 85, 1);
|
||||
--mark-color: rgba(188, 126, 53, 0.16);
|
||||
--special-color: rgba(188, 126, 53, 1);
|
||||
--special-bg-color: rgba(148, 98, 39, 1);
|
||||
--special-text-color: rgba(243, 238, 236, 1);
|
||||
--special-shadow-color: rgba(0, 0, 0, 1);
|
||||
--special-mark-color: rgba(243, 238, 236, 0.16);
|
||||
--light-color: rgba(251, 223, 203, 1);
|
||||
--dark-color: rgba(68, 49, 32, 1);
|
||||
--text-color-rgb: 233, 243, 215;
|
||||
--bg-color-rgb: 32, 32, 32;
|
||||
--subtle-color-rgb: 34, 37, 28;
|
||||
--special-color-rgb: 188, 126, 53;
|
||||
--special-text-color-rgb: 243, 238, 236;
|
||||
--special-bg-color-rgb: 148, 98, 39;
|
||||
--shadow-color-rgb: 0, 0, 0;
|
||||
--special-shadow-color-rgb: 0, 0, 0;
|
||||
--outline-color-rgb: 226, 157, 85;
|
||||
--dark-color-rgb: 68, 49, 32;
|
||||
--light-color-rgb: 251, 223, 203;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1,282 +1,34 @@
|
|||
<script context="module">
|
||||
export const prerender = true;
|
||||
<script context="module" lang="ts">
|
||||
import type { LoadEvent, LoadOutput } from '@sveltejs/kit';
|
||||
|
||||
export async function load({ fetch }: LoadEvent): LoadOutput {
|
||||
const response = await fetch(`/blog/posts.json`);
|
||||
const asJson = await response.json();
|
||||
|
||||
return {
|
||||
status: response.status,
|
||||
props: {
|
||||
posts: response.ok && asJson.posts
|
||||
}
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
<h1>blog</h1>
|
||||
<script lang="ts">
|
||||
import type { BlogPostMeta } from '../../types';
|
||||
import Link from '../../components/Link.svelte';
|
||||
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est
|
||||
velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis
|
||||
molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum
|
||||
suspendisse ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra
|
||||
maecenas accumsan lacus vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac
|
||||
auctor augue mauris augue neque. Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi
|
||||
eget mauris pharetra et ultrices neque ornare aenean. Consectetur adipiscing elit ut aliquam purus
|
||||
sit. Eu volutpat odio facilisis mauris. Scelerisque eu ultrices vitae auctor. Massa tincidunt nunc
|
||||
pulvinar sapien et. Commodo odio aenean sed adipiscing diam. Purus faucibus ornare suspendisse sed
|
||||
nisi. Pretium viverra suspendisse potenti nullam ac tortor. Curabitur vitae nunc sed velit dignissim
|
||||
sodales. Mattis pellentesque id nibh tortor id. Scelerisque felis imperdiet proin fermentum leo.
|
||||
Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Sit amet facilisis magna etiam te
|
||||
export let posts: BlogPostMeta[];
|
||||
</script>
|
||||
|
||||
<h1>Blog Posts</h1>
|
||||
|
||||
<p>Sometimes I document some of the things I do.</p>
|
||||
|
||||
<ul>
|
||||
{#each posts as post}
|
||||
<li>
|
||||
<Link href={post.href}>{post.date} - {post.title}</Link>
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
|
|
|
|||
19
src/routes/blog/posts.json.ts
Normal file
19
src/routes/blog/posts.json.ts
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import type { BlogPostFrontmatter, BlogPostMeta } from '../../types';
|
||||
|
||||
export async function GET() {
|
||||
const modules = import.meta.glob('./*.svx');
|
||||
const posts: BlogPostMeta[] = [];
|
||||
|
||||
const resolved = (await Promise.all(Object.values(modules).map((f) => f()))) as {
|
||||
metadata: BlogPostFrontmatter;
|
||||
}[];
|
||||
|
||||
resolved.forEach(({ metadata }, index) => {
|
||||
const path = Object.keys(modules)[index].replace('.svx', '');
|
||||
posts.push({ ...metadata, href: `blog/${path}` });
|
||||
});
|
||||
|
||||
return {
|
||||
body: { posts }
|
||||
};
|
||||
}
|
||||
72
src/routes/blog/redminote7arrowos.svx
Normal file
72
src/routes/blog/redminote7arrowos.svx
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
---
|
||||
date: '22-05-08'
|
||||
title: 'Arrow OS on Redmi Note 7'
|
||||
---
|
||||
|
||||
# How to: Redmi Note 7 with ArrowOs (Android 12), root, microG
|
||||
|
||||
This tutorial will show you how to flash ArrowOS, a nice android 12 rom, together with magisk to get root access to the phone and also microG, the google alternative to google play services. This tutorial is tailored for the Redmi Note 7, commonly referred to as lavender. Other phones might work differently due to not having a ramdisk, or being an A/B device, or ... something else. Proceed with caution. You can't blame me for bricked devices.
|
||||
|
||||
Prerequisites:
|
||||
|
||||
- an unlocked bootloader (check [here](https://forum.xda-developers.com/t/all-in-one-redmi-note-7-lavender-unlock-bootloader-flash-twrp-root-flash-rom.3890751/) if you haven't, steps A+B only).
|
||||
- ADB installed and also whatever driver your OS requires to send commands via adb
|
||||
- USB debugging enabled on the phone
|
||||
|
||||
## 1. Flash OrangeFox Recovery
|
||||
|
||||
- Download the latest version [here](https://orangefox.download/device/lavender) and extract it.
|
||||
- I'm following essentially [this](https://wiki.orangefox.tech/en/guides/installing_orangefox) guide
|
||||
- Boot your phone into fastboot with `adb reboot fastboot`.
|
||||
- Since lavender is an A-only phone, you need to flash the recovery with `fastboot flash recovery recovery.img`
|
||||
- Once your PC says it is done, reboot the phone by holding the power button and the volume up button at the same time until the orange fox pops up. Please note, that booting with a command from your pc to recovery did not work for me!
|
||||
- Flash the orangefox recovery on your phone by navigating into the fox folder and selecting the zip file.
|
||||
- This should be it.
|
||||
|
||||
## 2. Install the latest version of MIUI
|
||||
|
||||
I'm not actually sure if this is necessary, but I found a simple firmware upgrade not to be as comprising as the full MIUI flash - even if it means that you have to deal with the cancer that is MIUI.
|
||||
|
||||
1. Wipe data, cache, ART/Dalvik cache in the recovery (you'll lose all of you data!)
|
||||
2. Format Data
|
||||
3. Download the latest MIUI version from [here](https://c.mi.com//miuidownload/detail?device=1700360)
|
||||
4. Move it to your phone with `adb push path/to/miui/ sdcard`
|
||||
5. On your phone, navigate to `sdcard` and install MIUI. This process might take a while. It even crashed for me during OTA_BAK, which is just the backup process. So I interrupted the process after the clock was frozen for 10 min.
|
||||
6. According to the ArrowOS docs you dont need to boot into MIUI. But since it froze for me, I kinda had to.
|
||||
7. Enabled USB debugging in MIUI again.
|
||||
|
||||
Reinstall OrangeFox recovery now with the same steps from 1. If your MIUI installation doesnt freeze, you should be able to go to 3 without the hassle.
|
||||
|
||||
## 3. Install ArrowOS
|
||||
|
||||
1. If you had to reboot earlier, wipe data, cache, ART/Dalvik cache in the recovery again.
|
||||
2. Format Data
|
||||
3. Download ArrowOS [here](https://arrowos.net/download/lavender)
|
||||
4. `adb push path/to/arrowos sdcard` and install it.
|
||||
5. Rewipe cache with the button that pops up after the installation.
|
||||
6. \o/ Boot into arrowOS
|
||||
|
||||
## 4. Install Magisk
|
||||
|
||||
I'm following mostly the steps from the official documentation [here](https://topjohnwu.github.io/Magisk/install.html).
|
||||
|
||||
1. The magisk docs are a bit tricky. First, grab the ArrowOS zip and unzip it. We'll get back later to that.
|
||||
2. Download the [Magisk App](https://github.com/topjohnwu/Magisk/releases/latest), send it to your phone with `adb push path/to/magisk sdcard` and install the apk on your phone.
|
||||
3. Lavender has a ramdisk despite the magisk app saying otherwise! Hence you need to move the `boot.img` file and also the `vbmeta.img` that we extracted in step 1 to your phone (for example with adb again ... by now you should be able to use that command)
|
||||
4. Now we patch the `boot.img` file in the magisk app. Click install in magisk.
|
||||
5. Dont select "Recovery mode" and also dont select the vbmeta option
|
||||
6. Select the previously moved `boot.img` file, and start the patching.
|
||||
7. Move the patched file back to your pc with `adb pull /sdcard/Download/magisk_patched_[random_strings].img`
|
||||
8. Reboot your phone into fastboot again with `adb reboot fastboot`
|
||||
9. Flash the patched image with `fastboot flash boot /path/to/magisk_patched.img`. This will overwrite the boot partition of your phone so that it loads the magisk related processes on its own.
|
||||
10. Flash the vbmeta image as well with `fastboot flash vbmeta --disable-verity --disable-verification vbmeta.img`
|
||||
11. Reboot! The magisk app should show up as installed now!
|
||||
|
||||
## 5. Install microG
|
||||
|
||||
This is luckily quite easy. A lot quicker and easier than the previous steps! Lucky us, someone put together a magisk module, that takes care of the installation. Check [here](https://github.com/nift4/microg_installer_revived).
|
||||
|
||||
1. Download the latest version of the installer [here](https://github.com/nift4/microg_installer_revived/releases)
|
||||
2. Move the installer to your phone (with adb)
|
||||
3. Go to magisk modules, select the file and install it.
|
||||
4. Reboot your phone \o/ thats it. I promise.
|
||||
27
src/routes/contact.svelte
Normal file
27
src/routes/contact.svelte
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<script>
|
||||
import { mdiEmailEditOutline } from '@mdi/js';
|
||||
import { mdiGithub } from '@mdi/js';
|
||||
import Icon from 'mdi-svelte';
|
||||
import Link from '../components/Link.svelte';
|
||||
</script>
|
||||
|
||||
<h1>Contact Information</h1>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<Icon path={mdiEmailEditOutline} />
|
||||
E-Mail: <Link disableIcon href="mailto:me@daichendt.one">me@daichendt.one</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Icon path={mdiGithub} />
|
||||
Github: <Link disableIcon href="https://github.com/AlexDaichendt">AlexDaichendt</Link>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
I don't use any social media.
|
||||
|
||||
<style>
|
||||
ul {
|
||||
list-style-type: none;
|
||||
}
|
||||
</style>
|
||||
19
src/routes/impressum.svelte
Normal file
19
src/routes/impressum.svelte
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<h1>Impressum</h1>
|
||||
|
||||
<p>Information according to §5 TMG:</p>
|
||||
|
||||
<ul>
|
||||
<li>Alexander Daichendt</li>
|
||||
<li>Wiesenweg 10a</li>
|
||||
<li>85464 Neufinsing</li>
|
||||
<li>GERMANY</li>
|
||||
</ul>
|
||||
|
||||
<p>Contact:</p>
|
||||
<ul><li>privacy@daichendt.one</li></ul>
|
||||
|
||||
<style>
|
||||
ul {
|
||||
list-style-type: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,119 +1,42 @@
|
|||
<h1>Welcome to SvelteKit</h1>
|
||||
<p>Visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to read the documentation</p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
|
||||
dolore magna aliqua. Facilisis magna etiam tempor orci eu lobortis. Posuere lorem ipsum dolor sit amet
|
||||
consectetur adipiscing elit. Suspendisse potenti nullam ac tortor vitae purus. Cum sociis natoque penatibus
|
||||
et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis volutpat est velit.
|
||||
Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus mattis molestie.
|
||||
Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum suspendisse ultrices
|
||||
gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra maecenas accumsan lacus vel
|
||||
facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac auctor augue mauris augue neque.
|
||||
Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi eget mauris pharetra et ultrices neque
|
||||
ornare aenean. Consectetur adipiscing elit ut aliquam purus sit. Eu volutpat odio facilisis mauris. Scelerisque
|
||||
eu ultrices vitae auctor. Massa tincidunt nunc pulvinar sapien et. Commodo odio aenean sed adipiscing
|
||||
diam. Purus faucibus ornare suspendisse sed nisi. Pretium viverra suspendisse potenti nullam ac tortor.
|
||||
Curabitur vitae nunc sed velit dignissim sodales. Mattis pellentesque id nibh tortor id. Scelerisque
|
||||
felis imperdiet proin fermentum leo. Duis tristique sollicitudin nibh sit amet commodo nulla facilisi.
|
||||
Sit amet facilisis magna etiam tempor orci. Amet purus gravida quis blandit. Tempus egestas sed sed risus
|
||||
pretium. Diam vulputate ut pharetra sit amet. Mauris augue neque gravida in fermentum. Non odio euismod
|
||||
lacinia at quis risus. Sem fringilla ut morbi tincidunt augue interdum velit. Amet massa vitae tortor
|
||||
condimentum lacinia quis vel eros donec. Hac habitasse platea dictumst quisque sagittis purus. Magna
|
||||
ac placerat vestibulum lectus mauris ultrices eros in. Diam vel quam elementum pulvinar. Viverra aliquet
|
||||
eget sit amet tellus cras. Quis eleifend quam adipiscing vitae proin sagittis nisl. Sem et tortor consequat
|
||||
id porta. Odio morbi quis commodo odio. Eu augue ut lectus arcu bibendum at varius. Morbi tristique senectus
|
||||
et netus. Non tellus orci ac auctor augue. Luctus venenatis lectus magna fringilla urna. Velit dignissim
|
||||
sodales ut eu sem integer vitae. Sagittis purus sit amet volutpat consequat mauris nunc. Arcu non odio
|
||||
euismod lacinia at quis. Hac habitasse platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper.
|
||||
Diam ut venenatis tellus in metus. Pulvinar pellentesque habitant morbi tristique senectus et. Vel orci
|
||||
porta non pulvinar neque laoreet suspendisse. Tempus iaculis urna id volutpat lacus laoreet. Amet venenatis
|
||||
urna cursus eget nunc scelerisque viverra mauris in. Hac habitasse platea dictumst vestibulum rhoncus
|
||||
est pellentesque elit ullamcorper. Facilisis gravida neque convallis a. Urna duis convallis convallis
|
||||
tellus id interdum. Eu augue ut lectus arcu bibendum at varius. Ac turpis egestas maecenas pharetra convallis
|
||||
posuere morbi.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
|
||||
ut labore et dolore magna aliqua. Facilisis magna etiam tempor orci eu lobortis. Posuere lorem ipsum
|
||||
dolor sit amet consectetur adipiscing elit. Suspendisse potenti nullam ac tortor vitae purus. Cum sociis
|
||||
natoque penatibus et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis
|
||||
volutpat est velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus
|
||||
mattis molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum suspendisse
|
||||
ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra maecenas accumsan lacus
|
||||
vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac auctor augue mauris augue neque.
|
||||
Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi eget mauris pharetra et ultrices neque
|
||||
ornare aenean. Consectetur adipiscing elit ut aliquam purus sit. Eu volutpat odio facilisis mauris. Scelerisque
|
||||
eu ultrices vitae auctor. Massa tincidunt nunc pulvinar sapien et. Commodo odio aenean sed adipiscing
|
||||
diam. Purus faucibus ornare suspendisse sed nisi. Pretium viverra suspendisse potenti nullam ac tortor.
|
||||
Curabitur vitae nunc sed velit dignissim sodales. Mattis pellentesque id nibh tortor id. Scelerisque
|
||||
felis imperdiet proin fermentum leo. Duis tristique sollicitudin nibh sit amet commodo nulla facilisi.
|
||||
Sit amet facilisis magna etiam tempor orci. Amet purus gravida quis blandit. Tempus egestas sed sed risus
|
||||
pretium. Diam vulputate ut pharetra sit amet. Mauris augue neque gravida in fermentum. Non odio euismod
|
||||
lacinia at quis risus. Sem fringilla ut morbi tincidunt augue interdum velit. Amet massa vitae tortor
|
||||
condimentum lacinia quis vel eros donec. Hac habitasse platea dictumst quisque sagittis purus. Magna
|
||||
ac placerat vestibulum lectus mauris ultrices eros in. Diam vel quam elementum pulvinar. Viverra aliquet
|
||||
eget sit amet tellus cras. Quis eleifend quam adipiscing vitae proin sagittis nisl. Sem et tortor consequat
|
||||
id porta. Odio morbi quis commodo odio. Eu augue ut lectus arcu bibendum at varius. Morbi tristique senectus
|
||||
et netus. Non tellus orci ac auctor augue. Luctus venenatis lectus magna fringilla urna. Velit dignissim
|
||||
sodales ut eu sem integer vitae. Sagittis purus sit amet volutpat consequat mauris nunc. Arcu non odio
|
||||
euismod lacinia at quis. Hac habitasse platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper.
|
||||
Diam ut venenatis tellus in metus. Pulvinar pellentesque habitant morbi tristique senectus et. Vel orci
|
||||
porta non pulvinar neque laoreet suspendisse. Tempus iaculis urna id volutpat lacus laoreet. Amet venenatis
|
||||
urna cursus eget nunc scelerisque viverra mauris in. Hac habitasse platea dictumst vestibulum rhoncus
|
||||
est pellentesque elit ullamcorper. Facilisis gravida neque convallis a. Urna duis convallis convallis
|
||||
tellus id interdum. Eu augue ut lectus arcu bibendum at varius. Ac turpis egestas maecenas pharetra convallis
|
||||
posuere morbi.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
|
||||
ut labore et dolore magna aliqua. Facilisis magna etiam tempor orci eu lobortis. Posuere lorem ipsum
|
||||
dolor sit amet consectetur adipiscing elit. Suspendisse potenti nullam ac tortor vitae purus. Cum sociis
|
||||
natoque penatibus et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis
|
||||
volutpat est velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus
|
||||
mattis molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum suspendisse
|
||||
ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra maecenas accumsan lacus
|
||||
vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac auctor augue mauris augue neque.
|
||||
Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi eget mauris pharetra et ultrices neque
|
||||
ornare aenean. Consectetur adipiscing elit ut aliquam purus sit. Eu volutpat odio facilisis mauris. Scelerisque
|
||||
eu ultrices vitae auctor. Massa tincidunt nunc pulvinar sapien et. Commodo odio aenean sed adipiscing
|
||||
diam. Purus faucibus ornare suspendisse sed nisi. Pretium viverra suspendisse potenti nullam ac tortor.
|
||||
Curabitur vitae nunc sed velit dignissim sodales. Mattis pellentesque id nibh tortor id. Scelerisque
|
||||
felis imperdiet proin fermentum leo. Duis tristique sollicitudin nibh sit amet commodo nulla facilisi.
|
||||
Sit amet facilisis magna etiam tempor orci. Amet purus gravida quis blandit. Tempus egestas sed sed risus
|
||||
pretium. Diam vulputate ut pharetra sit amet. Mauris augue neque gravida in fermentum. Non odio euismod
|
||||
lacinia at quis risus. Sem fringilla ut morbi tincidunt augue interdum velit. Amet massa vitae tortor
|
||||
condimentum lacinia quis vel eros donec. Hac habitasse platea dictumst quisque sagittis purus. Magna
|
||||
ac placerat vestibulum lectus mauris ultrices eros in. Diam vel quam elementum pulvinar. Viverra aliquet
|
||||
eget sit amet tellus cras. Quis eleifend quam adipiscing vitae proin sagittis nisl. Sem et tortor consequat
|
||||
id porta. Odio morbi quis commodo odio. Eu augue ut lectus arcu bibendum at varius. Morbi tristique senectus
|
||||
et netus. Non tellus orci ac auctor augue. Luctus venenatis lectus magna fringilla urna. Velit dignissim
|
||||
sodales ut eu sem integer vitae. Sagittis purus sit amet volutpat consequat mauris nunc. Arcu non odio
|
||||
euismod lacinia at quis. Hac habitasse platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper.
|
||||
Diam ut venenatis tellus in metus. Pulvinar pellentesque habitant morbi tristique senectus et. Vel orci
|
||||
porta non pulvinar neque laoreet suspendisse. Tempus iaculis urna id volutpat lacus laoreet. Amet venenatis
|
||||
urna cursus eget nunc scelerisque viverra mauris in. Hac habitasse platea dictumst vestibulum rhoncus
|
||||
est pellentesque elit ullamcorper. Facilisis gravida neque convallis a. Urna duis convallis convallis
|
||||
tellus id interdum. Eu augue ut lectus arcu bibendum at varius. Ac turpis egestas maecenas pharetra convallis
|
||||
posuere morbi.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
|
||||
ut labore et dolore magna aliqua. Facilisis magna etiam tempor orci eu lobortis. Posuere lorem ipsum
|
||||
dolor sit amet consectetur adipiscing elit. Suspendisse potenti nullam ac tortor vitae purus. Cum sociis
|
||||
natoque penatibus et magnis. Adipiscing vitae proin sagittis nisl rhoncus. Accumsan lacus vel facilisis
|
||||
volutpat est velit. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Nibh mauris cursus
|
||||
mattis molestie. Malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi. Ipsum suspendisse
|
||||
ultrices gravida dictum fusce ut. Tellus cras adipiscing enim eu. Commodo viverra maecenas accumsan lacus
|
||||
vel facilisis volutpat est. Quis vel eros donec ac odio tempor. Orci ac auctor augue mauris augue neque.
|
||||
Rhoncus mattis rhoncus urna neque viverra justo nec. Ultricies mi eget mauris pharetra et ultrices neque
|
||||
ornare aenean. Consectetur adipiscing elit ut aliquam purus sit. Eu volutpat odio facilisis mauris. Scelerisque
|
||||
eu ultrices vitae auctor. Massa tincidunt nunc pulvinar sapien et. Commodo odio aenean sed adipiscing
|
||||
diam. Purus faucibus ornare suspendisse sed nisi. Pretium viverra suspendisse potenti nullam ac tortor.
|
||||
Curabitur vitae nunc sed velit dignissim sodales. Mattis pellentesque id nibh tortor id. Scelerisque
|
||||
felis imperdiet proin fermentum leo. Duis tristique sollicitudin nibh sit amet commodo nulla facilisi.
|
||||
Sit amet facilisis magna etiam tempor orci. Amet purus gravida quis blandit. Tempus egestas sed sed risus
|
||||
pretium. Diam vulputate ut pharetra sit amet. Mauris augue neque gravida in fermentum. Non odio euismod
|
||||
lacinia at quis risus. Sem fringilla ut morbi tincidunt augue interdum velit. Amet massa vitae tortor
|
||||
condimentum lacinia quis vel eros donec. Hac habitasse platea dictumst quisque sagittis purus. Magna
|
||||
ac placerat vestibulum lectus mauris ultrices eros in. Diam vel quam elementum pulvinar. Viverra aliquet
|
||||
eget sit amet tellus cras. Quis eleifend quam adipiscing vitae proin sagittis nisl. Sem et tortor consequat
|
||||
id porta. Odio morbi quis commodo odio. Eu augue ut lectus arcu bibendum at varius. Morbi tristique senectus
|
||||
et netus. Non tellus orci ac auctor augue. Luctus venenatis lectus magna fringilla urna. Velit dignissim
|
||||
sodales ut eu sem integer vitae. Sagittis purus sit amet volutpat consequat mauris nunc. Arcu non odio
|
||||
euismod lacinia at quis. Hac habitasse platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper.
|
||||
Diam ut venenatis tellus in metus. Pulvinar pellentesque habitant morbi tristique senectus et. Vel orci
|
||||
porta non pulvinar neque laoreet suspendisse. Tempus iaculis urna id volutpat lacus laoreet. Amet venenatis
|
||||
urna cursus eget nunc scelerisque viverra mauris in. Hac habitasse platea dictumst vestibulum rhoncus
|
||||
est pellentesque elit ullamcorper. Facilisis gravida neque convallis a. Urna duis convallis convallis
|
||||
tellus id interdum. Eu augue ut lectus arcu bibendum at varius. Ac turpis egestas maecenas pharetra convallis
|
||||
posuere morbi.
|
||||
<script lang="ts">
|
||||
import Link from '../components/Link.svelte';
|
||||
import type { Skill } from '../types';
|
||||
|
||||
let _SKILLS = [
|
||||
{ name: 'React / Svelte', started: 2019 },
|
||||
{ name: 'Scripting with Bash/Python', started: 2018 },
|
||||
{ name: 'Java', started: 2013 },
|
||||
{ name: 'LXC / Docker', started: 2021 },
|
||||
{ name: 'FaaS', started: 2021 },
|
||||
{ name: 'git', started: 2016 },
|
||||
{ name: 'Linux administration (Debian)', started: 2017 }
|
||||
];
|
||||
const SKILLS: Skill[] = _SKILLS.map((skill) => {
|
||||
const years = new Date().getFullYear() - skill.started;
|
||||
return { ...skill, years };
|
||||
});
|
||||
SKILLS.sort((a, b) => b.years - a.years);
|
||||
</script>
|
||||
|
||||
<h1>Hi, my name is Alex!</h1>
|
||||
|
||||
<p>I am a software engineer, Linux enthusiast and a friend of automation.</p>
|
||||
<p>
|
||||
Programming has been a hobby of mine since my teens. Been working on countless projects for
|
||||
various games. Recently, I started to dabble my feet in DevOps. My formal education I received at <Link
|
||||
href="https://www.tum.de/">TUM</Link
|
||||
>; currently I am persuing my Masters.
|
||||
</p>
|
||||
|
||||
<h2>Skills</h2>
|
||||
|
||||
<ul>
|
||||
{#each SKILLS as skill}
|
||||
<li>
|
||||
{skill.name} - {skill.years} year{skill.started > 1 ? 's' : ''}
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
|
|
|||
91
src/routes/privacy.svelte
Normal file
91
src/routes/privacy.svelte
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
<h1>Privacy Policy for AlexDaichendt</h1>
|
||||
|
||||
<p>
|
||||
At AlexDaichendt, accessible from https://daichendt.one, one of our main priorities is the privacy
|
||||
of our visitors. This Privacy Policy document contains types of information that is collected and
|
||||
recorded by AlexDaichendt and how we use it.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you have additional questions or require more information about our Privacy Policy, do not
|
||||
hesitate to contact us.
|
||||
</p>
|
||||
|
||||
<h2>Log Files</h2>
|
||||
|
||||
<p>
|
||||
AlexDaichendt follows a standard procedure of using log files. These files log visitors when they
|
||||
visit websites. All hosting companies do this and a part of hosting services' analytics. The
|
||||
information collected by log files include internet protocol (IP) addresses, browser type,
|
||||
Internet Service Provider (ISP), date and time stamp, referring/exit pages, and possibly the
|
||||
number of clicks. These are not linked to any information that is personally identifiable. The
|
||||
purpose of the information is for analyzing trends, administering the site, tracking users'
|
||||
movement on the website, and gathering demographic information. Our Privacy Policy was created
|
||||
with the help of the <a href="https://www.privacypolicygenerator.org">Privacy Policy Generator</a
|
||||
>.
|
||||
</p>
|
||||
|
||||
<h2>Privacy Policies</h2>
|
||||
|
||||
<p>
|
||||
You may consult this list to find the Privacy Policy for each of the advertising partners of
|
||||
AlexDaichendt.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Third-party ad servers or ad networks uses technologies like cookies, JavaScript, or Web Beacons
|
||||
that are used in their respective advertisements and links that appear on AlexDaichendt, which are
|
||||
sent directly to users' browser. They automatically receive your IP address when this occurs.
|
||||
These technologies are used to measure the effectiveness of their advertising campaigns and/or to
|
||||
personalize the advertising content that you see on websites that you visit.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Note that AlexDaichendt has no access to or control over these cookies that are used by
|
||||
third-party advertisers.
|
||||
</p>
|
||||
|
||||
<h2>Third Party Privacy Policies</h2>
|
||||
|
||||
<p>
|
||||
AlexDaichendt's Privacy Policy does not apply to other advertisers or websites. Thus, we are
|
||||
advising you to consult the respective Privacy Policies of these third-party ad servers for more
|
||||
detailed information. It may include their practices and instructions about how to opt-out of
|
||||
certain options.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
You can choose to disable cookies through your individual browser options. To know more detailed
|
||||
information about cookie management with specific web browsers, it can be found at the browsers'
|
||||
respective websites.
|
||||
</p>
|
||||
|
||||
<h2>Children's Information</h2>
|
||||
|
||||
<p>
|
||||
Another part of our priority is adding protection for children while using the internet. We
|
||||
encourage parents and guardians to observe, participate in, and/or monitor and guide their online
|
||||
activity.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
AlexDaichendt does not knowingly collect any Personal Identifiable Information from children under
|
||||
the age of 13. If you think that your child provided this kind of information on our website, we
|
||||
strongly encourage you to contact us immediately and we will do our best efforts to promptly
|
||||
remove such information from our records.
|
||||
</p>
|
||||
|
||||
<h2>Online Privacy Policy Only</h2>
|
||||
|
||||
<p>
|
||||
This Privacy Policy applies only to our online activities and is valid for visitors to our website
|
||||
with regards to the information that they shared and/or collect in AlexDaichendt. This policy is
|
||||
not applicable to any information collected offline or via channels other than this website.
|
||||
</p>
|
||||
|
||||
<h2>Consent</h2>
|
||||
|
||||
<p>
|
||||
By using our website, you hereby consent to our Privacy Policy and agree to its Terms and
|
||||
Conditions.
|
||||
</p>
|
||||
|
|
@ -1,118 +0,0 @@
|
|||
<script context="module" lang="ts">
|
||||
export async function load({ fetch }: LoadEvent): LoadOutput {
|
||||
const response = await fetch(`/projects/projects.json`);
|
||||
const asJson = await response.json();
|
||||
return {
|
||||
status: response.status,
|
||||
props: {
|
||||
projects: response.ok && asJson.projects,
|
||||
},
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
import Icon from 'mdi-svelte';
|
||||
import { Card, createStyles, Text, TextInput, theme, Title, Tooltip } from '@svelteuidev/core';
|
||||
import { mdiMagnify, mdiAccountMultiple } from '@mdi/js';
|
||||
import type { Project } from './types';
|
||||
import type { LoadEvent, LoadOutput } from '@sveltejs/kit';
|
||||
|
||||
export let projects: Project[] = [];
|
||||
let search = '';
|
||||
|
||||
const useStyles = createStyles((theme) => {
|
||||
return {
|
||||
root: {
|
||||
mt: theme.space[8],
|
||||
},
|
||||
main: {
|
||||
display: 'flex',
|
||||
},
|
||||
sidebar: { maxWidth: 250 },
|
||||
input: { width: '100%' },
|
||||
projects: {
|
||||
display: 'grid',
|
||||
gap: theme.space.smPX,
|
||||
listStyle: 'none',
|
||||
margin: theme.space[2],
|
||||
padding: 0,
|
||||
},
|
||||
project: {
|
||||
transition: 'all 250ms cubic-bezier(0.4, 0, 0.2, 1) 0s',
|
||||
'&:hover': {
|
||||
boxShadow: 'rgb(46 41 51 / 8%) 0px 4px 16px, rgb(71 63 79 / 16%) 0px 8px 24px',
|
||||
position: 'relative',
|
||||
backgroundColor: 'White',
|
||||
},
|
||||
},
|
||||
projectTop: {
|
||||
display: 'flex',
|
||||
mb: theme.space[8],
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
content: {
|
||||
marginLeft: theme.space[10],
|
||||
marginRight: theme.space[10],
|
||||
},
|
||||
projectTopSmall: {
|
||||
fontSize: '0.8rem',
|
||||
},
|
||||
};
|
||||
});
|
||||
$: ({ classes, getStyles, cx } = useStyles());
|
||||
</script>
|
||||
|
||||
<div class={getStyles()}>
|
||||
<h1>Projects</h1>
|
||||
<div class={classes.main}>
|
||||
<aside class={classes.sidebar}>
|
||||
<div class="searchbar">
|
||||
<Icon path={mdiMagnify} color="black" />
|
||||
<TextInput class={classes.input} placeholder="Search Projects" bind:value={search} />
|
||||
</div>
|
||||
<ul class={classes.projects}>
|
||||
{#each projects as project}
|
||||
<li>
|
||||
<a href={project.url}>
|
||||
<Card.Container
|
||||
p={12}
|
||||
class={classes.project}
|
||||
override={{
|
||||
br: '$md',
|
||||
boxShadow: 'unset',
|
||||
backgroundColor: theme.colors['gray100'],
|
||||
opacity: 0.8,
|
||||
}}
|
||||
>
|
||||
<div class={classes.projectTop}>
|
||||
<Title order={4} override={{ mb: 8, fontWeight: theme.fontWeights.extrabold }}
|
||||
>{project.title}</Title
|
||||
>
|
||||
<Tooltip label="Daily visitors" withArrow>
|
||||
<div class={classes.projectTopSmall}>
|
||||
<Icon path={mdiAccountMultiple} size="0.9rem" />
|
||||
{project.usersPerDay}
|
||||
</div>
|
||||
</Tooltip>
|
||||
</div>
|
||||
|
||||
<Text override={{ fontWeight: theme.fontWeights.extralight }}
|
||||
>{project.description}</Text
|
||||
>
|
||||
</Card.Container>
|
||||
</a>
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
</aside>
|
||||
<div class={classes.content}><slot /></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.searchbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
---
|
||||
title: 'Discretize Website'
|
||||
description: >-
|
||||
The Gear Optimizer helps players of the MMORPG Guild Wars 2 to find the most optimal builds for their favourit content while respecting input parameters.
|
||||
concluded: false
|
||||
timeActive: 2021-now
|
||||
usersPerDay: 500
|
||||
layout: project
|
||||
---
|
||||
|
||||
|
||||
testico
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
<script context="module">
|
||||
export async function load({ url, fetch }) {
|
||||
return { headers: { location: '/projects/optimizer' }, status: 300 };
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
---
|
||||
title: 'Gear Optimizer'
|
||||
description: >-
|
||||
The Gear Optimizer helps players of the MMORPG Guild Wars 2 to find the most optimal builds for their favourit content while respecting input parameters.
|
||||
concluded: false
|
||||
timeActive: 2021-now
|
||||
usersPerDay: 500
|
||||
layout: project
|
||||
---
|
||||
|
||||
|
||||
The gear optimizer helps players of the MMORP [Guild Wars 2](https://www.guildwars2.com/en/) finding the most optimal gear meeting arbitrary constraints. Players may use templates to select the most common builds or adjust the settings manually - which requires some understanding of the available options. An easy-mode hides more advanced features.
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
<script>
|
||||
export let title = '';
|
||||
export let description = '';
|
||||
export let timeActive = '';
|
||||
export let concluded = false;
|
||||
export let usersPerDay = 0;
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<h1>{title}</h1>
|
||||
|
||||
<sub>{description}</sub>
|
||||
<ul>
|
||||
<li>{timeActive}</li>
|
||||
<li>{concluded}</li>
|
||||
<li>{usersPerDay}</li>
|
||||
</ul>
|
||||
<slot />
|
||||
</div>
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
import type { Project } from './types';
|
||||
|
||||
export async function get() {
|
||||
const modules = import.meta.glob('./*.svx');
|
||||
|
||||
const projects: Project[] = [];
|
||||
|
||||
const resolved = await Promise.all(Object.values(modules).map((f) => f()));
|
||||
resolved.forEach((project, index) => {
|
||||
const { concluded, description, timeActive, title, usersPerDay } = project.metadata;
|
||||
|
||||
projects.push({
|
||||
concluded,
|
||||
description,
|
||||
timeActive,
|
||||
title,
|
||||
usersPerDay,
|
||||
url: `/projects/${Object.keys(modules)[index].replace('.svx', '').replace('./', '')}`,
|
||||
});
|
||||
});
|
||||
return {
|
||||
body: { projects },
|
||||
};
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
export interface Project {
|
||||
title: string;
|
||||
description: string;
|
||||
concluded: boolean;
|
||||
timeActive: string;
|
||||
usersPerDay: number;
|
||||
url: string;
|
||||
}
|
||||
13
src/types.ts
Normal file
13
src/types.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
export interface BlogPostFrontmatter {
|
||||
date: string;
|
||||
title: string;
|
||||
}
|
||||
|
||||
export interface BlogPostMeta extends BlogPostFrontmatter {
|
||||
href: string;
|
||||
}
|
||||
export interface Skill {
|
||||
name: string;
|
||||
years: number;
|
||||
started: number;
|
||||
}
|
||||
|
|
@ -1,18 +1,26 @@
|
|||
import adapter from '@sveltejs/adapter-auto';
|
||||
import preprocess from 'svelte-preprocess';
|
||||
import mdsvexConfig from './mdsvex.config.js';
|
||||
import autoprefixer from 'autoprefixer';
|
||||
import cssNormalizer from 'postcss-normalize';
|
||||
import { mdsvex } from 'mdsvex';
|
||||
import mdsvexconfig from './mdsvex.config.js';
|
||||
|
||||
/** @type {import('@sveltejs/kit').Config} */
|
||||
const config = {
|
||||
extensions: ['.svelte', ...mdsvexConfig.extensions],
|
||||
extensions: ['.svelte', ...mdsvexconfig.extensions],
|
||||
|
||||
// Consult https://github.com/sveltejs/svelte-preprocess
|
||||
// for more information about preprocessors
|
||||
preprocess: [mdsvex(mdsvexConfig), preprocess()],
|
||||
preprocess: [
|
||||
preprocess({ postcss: { plugins: [autoprefixer, cssNormalizer()] } }),
|
||||
mdsvex(mdsvexconfig)
|
||||
],
|
||||
|
||||
kit: {
|
||||
adapter: adapter()
|
||||
},
|
||||
prerender: {
|
||||
default: true
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
8
vite.config.js
Normal file
8
vite.config.js
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
import { sveltekit } from '@sveltejs/kit/vite';
|
||||
|
||||
/** @type {import('vite').UserConfig} */
|
||||
const config = {
|
||||
plugins: [sveltekit()]
|
||||
};
|
||||
|
||||
export default config;
|
||||
Loading…
Add table
Add a link
Reference in a new issue