Compare commits
103 commits
Author | SHA1 | Date | |
---|---|---|---|
|
84963d136e | ||
|
f358f1dc80 | ||
|
e6f5b01a75 | ||
|
b57cc9f7ba | ||
|
03ca44a11e | ||
|
accea34e0b | ||
|
ba5a1d1fc7 | ||
|
a8c674f407 | ||
|
bef8c7684b | ||
|
47bc87966e | ||
|
77531ffb68 | ||
|
b03bd8d390 | ||
|
15620dd22c | ||
|
4f488c3f10 | ||
|
f053ef30b7 | ||
|
88c1915160 | ||
|
3cf2c9354d | ||
|
c466eb4283 | ||
|
87ac6fc13f | ||
|
9f7f346c44 | ||
|
508b8a5686 | ||
|
64487124d2 | ||
|
a308b26d64 | ||
|
ff15dbb916 | ||
|
db86ddd3a5 | ||
|
6f5de6ffa4 | ||
|
a9f90bf966 | ||
|
dbd5892ff6 | ||
|
4cf0673aab | ||
|
1c08e5afc5 | ||
|
fd0084741c | ||
|
42b98bfc28 | ||
|
c10b9c84ea | ||
|
d5f552c32b | ||
|
1c1817fde7 | ||
|
dc45555676 | ||
|
de9bafe08c | ||
|
b79037a12b | ||
|
960748846b | ||
|
dbb2002580 | ||
|
aaffe287f7 | ||
|
5fea726523 | ||
|
00d4c8ada1 | ||
|
c435f8ad84 | ||
|
f9d59072db | ||
|
8d2dc25e04 | ||
|
f3ab13214a | ||
|
5eb8988e11 | ||
|
ddf7b9ca58 | ||
|
7f27edef3f | ||
|
31e6f758fc | ||
|
ba4d315c44 | ||
|
e2c2da77b8 | ||
|
33adef66a8 | ||
|
c7374a3706 | ||
|
880cf4c0f1 | ||
|
3c1624f9a1 | ||
|
e75c6e8308 | ||
|
f55a8f16a3 | ||
|
8a10fed9b4 | ||
|
293afcde45 | ||
|
bc82068947 | ||
|
cb1cba8f60 | ||
|
285a35b22d | ||
|
f1fecdb047 | ||
|
3fae28f1b4 | ||
|
6df48c08ff | ||
|
f4cfb4486d | ||
|
2ff6fd9b52 | ||
|
d8f7be952d | ||
|
3b1dd25e88 | ||
|
221d160429 | ||
|
2dc14a4c7a | ||
|
d08279bae6 | ||
|
d1519601e9 | ||
|
85773c69b9 | ||
|
2ceae06a32 | ||
|
69931b8926 | ||
|
19773ee139 | ||
|
403d85acc8 | ||
|
afed1f486d | ||
|
7a75a2a74d | ||
|
cf6882e49c | ||
|
20f9afaee9 | ||
|
6430852cc1 | ||
|
ee23398f03 | ||
|
1fcda5b6a2 | ||
|
1cb4d9ef1a | ||
|
a2ad1109a8 | ||
|
05d33ffb08 | ||
|
3b819e4e8e | ||
|
a4d50d1419 | ||
|
b195b44165 | ||
|
f3620cacd1 | ||
|
ff436a144a | ||
|
2b42fbabfc | ||
|
f40ecfb846 | ||
|
c98da1d761 | ||
|
dc6ebad029 | ||
|
9b9df8f49a | ||
|
603d0d3b99 | ||
|
c1f32223e9 | ||
|
012b7386c7 |
56 changed files with 261 additions and 6477 deletions
.forgejo/workflows
.gitignore404.htmlMakefileassets
404.html-B6yqFRPF.jsapp-B7m8SWwm.jsindex.html-BRLRz9jS.jsindex.html-BnpG60Ho.jsstyle-B-bsq3_-.cssworks.html-BcdtPw7E.jsworks.html-DpBd8aaJ.js
dist
404.html
assets
app-CvTe0YTg.jsindex.html-B5LWGqHO.jsindex.html-D7ve43IL.jsstyle-CyqMEKOR.cssworks.html-CihZ59B-.jsworks.html-NBBFoiT7.js
eng
index.htmlworks.htmldocs
.vuepress
eng
index.mdworks.mdeng
flake.lockflake.nixindex.htmlpackage.jsonpnpm-lock.yamlrenovate.jsonrobots.txtrus
scripts
sitemap.xmlsitemap.xsltsconfig.jsonworks.html
|
@ -1,16 +0,0 @@
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'renovate/*'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test-dependencies:
|
|
||||||
runs-on: docker
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: pnpm/action-setup@v4
|
|
||||||
with:
|
|
||||||
run_install: |
|
|
||||||
- recursive: true
|
|
||||||
args: [--frozen-lockfile, --strict-peer-dependencies]
|
|
||||||
- run: pnpm build
|
|
17
.gitignore
vendored
17
.gitignore
vendored
|
@ -1,17 +0,0 @@
|
||||||
# editors
|
|
||||||
.idea/
|
|
||||||
.vscode/
|
|
||||||
*.swp
|
|
||||||
# direnv
|
|
||||||
.direnv
|
|
||||||
.envrc
|
|
||||||
# nodejs
|
|
||||||
node_modules/
|
|
||||||
# nix
|
|
||||||
/result
|
|
||||||
# custom
|
|
||||||
.DS_Store
|
|
||||||
# vuepress
|
|
||||||
/docs/.vuepress/.cache
|
|
||||||
/docs/.vuepress/.temp
|
|
||||||
/docs/.vuepress/dist
|
|
43
404.html
Normal file
43
404.html
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="ru-RU">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||||
|
<meta name="generator" content="VuePress 2.0.0-rc.20" />
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--vp-c-bg: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme='dark'] {
|
||||||
|
--vp-c-bg: #1b1b1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
background-color: var(--vp-c-bg);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
const useChoice = localStorage.getItem('vuepress-color-scheme')
|
||||||
|
const systemStatus =
|
||||||
|
'matchMedia' in window
|
||||||
|
? window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||||
|
: false
|
||||||
|
|
||||||
|
if (useChoice === 'light') {
|
||||||
|
document.documentElement.dataset.theme = 'light'
|
||||||
|
} else if (useChoice === 'dark' || systemStatus) {
|
||||||
|
document.documentElement.dataset.theme = 'dark'
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<meta property="og:url" content="https://pleshevski.ru/404.html"><meta property="og:site_name" content="Дмитрий Плешевский"><meta property="og:type" content="website"><meta property="og:locale" content="ru-RU"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":""}</script><title>Дмитрий Плешевский</title><meta name="description" content=" ">
|
||||||
|
<link rel="preload" href="/assets/style-B-bsq3_-.css" as="style"><link rel="stylesheet" href="/assets/style-B-bsq3_-.css">
|
||||||
|
<link rel="modulepreload" href="/assets/app-B7m8SWwm.js"><link rel="modulepreload" href="/assets/404.html-B6yqFRPF.js">
|
||||||
|
<link rel="prefetch" href="/assets/index.html-BRLRz9jS.js" as="script"><link rel="prefetch" href="/assets/works.html-DpBd8aaJ.js" as="script"><link rel="prefetch" href="/assets/index.html-BnpG60Ho.js" as="script"><link rel="prefetch" href="/assets/works.html-BcdtPw7E.js" as="script">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"><!--[--><div class="vp-theme-container" vp-container data-v-4a26b356><main class="page" data-v-4a26b356><div vp-content data-v-4a26b356><h1 data-v-4a26b356>404</h1><blockquote data-v-4a26b356>Искали кота?</blockquote><a class="route-link" href="/" data-v-4a26b356>Вернуться на главную</a></div></main></div><!--[--><!----><!--]--><!--]--></div>
|
||||||
|
<script type="module" src="/assets/app-B7m8SWwm.js" defer></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
24
Makefile
24
Makefile
|
@ -1,24 +0,0 @@
|
||||||
PREFIX ?= dist
|
|
||||||
|
|
||||||
.PHONY: help
|
|
||||||
help:
|
|
||||||
cat Makefile
|
|
||||||
|
|
||||||
.PHONY: build
|
|
||||||
build:
|
|
||||||
pnpm run build --dest $(PREFIX)
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install: build
|
|
||||||
|
|
||||||
.PHONY: dev
|
|
||||||
dev:
|
|
||||||
pnpm run dev
|
|
||||||
|
|
||||||
.PHONY: deps
|
|
||||||
deps:
|
|
||||||
pnpm install
|
|
||||||
|
|
||||||
.PHONY: init-git-hooks
|
|
||||||
init-git-hooks:
|
|
||||||
ln -sf $(PWD)/scripts/pre-commit $(PWD)/.git/hooks/pre-commit
|
|
|
@ -1 +1 @@
|
||||||
import{_ as e,c as o,a,o as n}from"./app-CvTe0YTg.js";const r={};function l(p,t){return n(),o("div",null,t[0]||(t[0]=[a("p",null,"404 Not Found",-1)]))}const c=e(r,[["render",l],["__file","404.html.vue"]]),m=JSON.parse('{"path":"/404.html","title":"","lang":"ru-RU","frontmatter":{"layout":"NotFound","head":[["meta",{"property":"og:url","content":"https://pleshevski.ru/404.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\"}"]]},"headers":[],"git":{},"filePathRelative":null}');export{c as comp,m as data};
|
import{_ as e,c as o,a,o as n}from"./app-B7m8SWwm.js";const r={};function l(p,t){return n(),o("div",null,t[0]||(t[0]=[a("p",null,"404 Not Found",-1)]))}const c=e(r,[["render",l],["__file","404.html.vue"]]),m=JSON.parse('{"path":"/404.html","title":"","lang":"ru-RU","frontmatter":{"layout":"NotFound","head":[["meta",{"property":"og:url","content":"https://pleshevski.ru/404.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\"}"]]},"headers":[],"git":{},"filePathRelative":null}');export{c as comp,m as data};
|
31
assets/app-B7m8SWwm.js
Normal file
31
assets/app-B7m8SWwm.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/index.html-BRLRz9jS.js
Normal file
1
assets/index.html-BRLRz9jS.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/index.html-BnpG60Ho.js
Normal file
1
assets/index.html-BnpG60Ho.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/style-B-bsq3_-.css
Normal file
1
assets/style-B-bsq3_-.css
Normal file
File diff suppressed because one or more lines are too long
1
assets/works.html-BcdtPw7E.js
Normal file
1
assets/works.html-BcdtPw7E.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/works.html-DpBd8aaJ.js
Normal file
1
assets/works.html-DpBd8aaJ.js
Normal file
File diff suppressed because one or more lines are too long
43
dist/404.html
vendored
43
dist/404.html
vendored
|
@ -1,43 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="ru-RU">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
||||||
<meta name="generator" content="VuePress 2.0.0-rc.18" />
|
|
||||||
<style>
|
|
||||||
:root {
|
|
||||||
--vp-c-bg: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-theme='dark'] {
|
|
||||||
--vp-c-bg: #1b1b1f;
|
|
||||||
}
|
|
||||||
|
|
||||||
html,
|
|
||||||
body {
|
|
||||||
background-color: var(--vp-c-bg);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<script>
|
|
||||||
const userMode = localStorage.getItem('vuepress-color-scheme')
|
|
||||||
const systemDarkMode =
|
|
||||||
'matchMedia' in window
|
|
||||||
? window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
||||||
: false
|
|
||||||
|
|
||||||
if (userMode === 'light') {
|
|
||||||
document.documentElement.dataset.theme = 'light'
|
|
||||||
} else if (userMode === 'dark' || systemDarkMode) {
|
|
||||||
document.documentElement.dataset.theme = 'dark'
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<meta property="og:url" content="https://pleshevski.ru/404.html"><meta property="og:site_name" content="Дмитрий Плешевский"><meta property="og:type" content="website"><meta property="og:locale" content="ru-RU"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":""}</script><title>Дмитрий Плешевский</title><meta name="description" content=" ">
|
|
||||||
<link rel="preload" href="/assets/style-CyqMEKOR.css" as="style"><link rel="stylesheet" href="/assets/style-CyqMEKOR.css">
|
|
||||||
<link rel="modulepreload" href="/assets/app-CvTe0YTg.js"><link rel="modulepreload" href="/assets/404.html-BGekuXRq.js">
|
|
||||||
<link rel="prefetch" href="/assets/index.html-D7ve43IL.js" as="script"><link rel="prefetch" href="/assets/works.html-NBBFoiT7.js" as="script"><link rel="prefetch" href="/assets/index.html-B5LWGqHO.js" as="script"><link rel="prefetch" href="/assets/works.html-CihZ59B-.js" as="script">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="app"><!--[--><div class="vp-theme-container" vp-container data-v-9607bbd4><main class="page" data-v-9607bbd4><div class="theme-default-content" vp-content data-v-9607bbd4><h1 data-v-9607bbd4>404</h1><blockquote data-v-9607bbd4>Ошиблись в параллельной вселенной.</blockquote><a class="route-link" href="/" data-v-9607bbd4>Вернуться на главную</a></div></main></div><!--[--><!----><!--]--><!--]--></div>
|
|
||||||
<script type="module" src="/assets/app-CvTe0YTg.js" defer></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
31
dist/assets/app-CvTe0YTg.js
vendored
31
dist/assets/app-CvTe0YTg.js
vendored
File diff suppressed because one or more lines are too long
1
dist/assets/index.html-B5LWGqHO.js
vendored
1
dist/assets/index.html-B5LWGqHO.js
vendored
File diff suppressed because one or more lines are too long
1
dist/assets/index.html-D7ve43IL.js
vendored
1
dist/assets/index.html-D7ve43IL.js
vendored
File diff suppressed because one or more lines are too long
1
dist/assets/style-CyqMEKOR.css
vendored
1
dist/assets/style-CyqMEKOR.css
vendored
File diff suppressed because one or more lines are too long
1
dist/assets/works.html-CihZ59B-.js
vendored
1
dist/assets/works.html-CihZ59B-.js
vendored
File diff suppressed because one or more lines are too long
1
dist/assets/works.html-NBBFoiT7.js
vendored
1
dist/assets/works.html-NBBFoiT7.js
vendored
File diff suppressed because one or more lines are too long
43
dist/eng/index.html
vendored
43
dist/eng/index.html
vendored
File diff suppressed because one or more lines are too long
43
dist/eng/works.html
vendored
43
dist/eng/works.html
vendored
File diff suppressed because one or more lines are too long
43
dist/index.html
vendored
43
dist/index.html
vendored
File diff suppressed because one or more lines are too long
43
dist/works.html
vendored
43
dist/works.html
vendored
File diff suppressed because one or more lines are too long
|
@ -1,6 +0,0 @@
|
||||||
import { defineClientConfig } from "vuepress/client";
|
|
||||||
import WorksPage from "./pages/WorksPage.vue";
|
|
||||||
|
|
||||||
export default defineClientConfig({
|
|
||||||
layouts: { WorksPage },
|
|
||||||
});
|
|
|
@ -1,98 +0,0 @@
|
||||||
import { defineUserConfig } from "vuepress";
|
|
||||||
import { viteBundler } from "@vuepress/bundler-vite";
|
|
||||||
import { mkMyTheme } from "./theme.js";
|
|
||||||
import { redirectPlugin } from "@vuepress/plugin-redirect";
|
|
||||||
|
|
||||||
export default defineUserConfig({
|
|
||||||
lang: "ru-RU",
|
|
||||||
|
|
||||||
title: "Дмитрий Плешевский",
|
|
||||||
description: " ",
|
|
||||||
|
|
||||||
locales: {
|
|
||||||
"/": {
|
|
||||||
lang: "ru-RU",
|
|
||||||
title: "Дмитрий Плешевский",
|
|
||||||
},
|
|
||||||
"/eng/": {
|
|
||||||
lang: "en-US",
|
|
||||||
title: "Dmitriy Pleshevskiy",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
theme: mkMyTheme({
|
|
||||||
hostname: "https://pleshevski.ru",
|
|
||||||
|
|
||||||
repo: "https://git.pleshevski.ru/pleshevskiy/pleshevski.ru",
|
|
||||||
|
|
||||||
locales: {
|
|
||||||
"/": {
|
|
||||||
selectLanguageName: "Русский",
|
|
||||||
navbar: ["/", "/works"],
|
|
||||||
notFound: [
|
|
||||||
"Верните страницу!",
|
|
||||||
"Мы потеряли страницу...",
|
|
||||||
"Вы заблокированы в лабиринте.",
|
|
||||||
"Искали кота?",
|
|
||||||
"Страница украдена.",
|
|
||||||
"Ошиблись в параллельной вселенной.",
|
|
||||||
],
|
|
||||||
backToHome: "Вернуться на главную",
|
|
||||||
worksTable: {
|
|
||||||
name: "Название",
|
|
||||||
description: "Описание",
|
|
||||||
role: "Роль",
|
|
||||||
technologies: "Технологии",
|
|
||||||
status: "Статус",
|
|
||||||
dates: "Даты",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"/eng/": {
|
|
||||||
selectLanguageName: "English",
|
|
||||||
navbar: ["/eng/", "/eng/works"],
|
|
||||||
notFound: [
|
|
||||||
"Return the page!",
|
|
||||||
"We lost a page...",
|
|
||||||
"You're blocked in a labyrinth.",
|
|
||||||
"Looking for a cat?",
|
|
||||||
"The page has been stolen.",
|
|
||||||
"Wrong turn in parallel universe.",
|
|
||||||
],
|
|
||||||
backToHome: "Back to home",
|
|
||||||
worksTable: {
|
|
||||||
name: "Name",
|
|
||||||
description: "Description",
|
|
||||||
role: "Role",
|
|
||||||
technologies: "Technologies",
|
|
||||||
status: "Status",
|
|
||||||
dates: "Dates",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
themePlugins: {
|
|
||||||
seo: {
|
|
||||||
autoDescription: false,
|
|
||||||
isArticle: () => false,
|
|
||||||
},
|
|
||||||
linksCheck: {
|
|
||||||
build: "error",
|
|
||||||
},
|
|
||||||
mediumZoom: false,
|
|
||||||
sitemap: {
|
|
||||||
changefreq: "monthly",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
|
|
||||||
plugins: [
|
|
||||||
redirectPlugin({
|
|
||||||
config: {
|
|
||||||
"/rus/": "/",
|
|
||||||
"/rus/works.html": "/works.html",
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
|
|
||||||
bundler: viteBundler(),
|
|
||||||
});
|
|
|
@ -1,9 +0,0 @@
|
||||||
export type NonEmptyArray<T> = [T, ...T[]];
|
|
||||||
|
|
||||||
export function renderDate(date: Date): string {
|
|
||||||
return date.toLocaleDateString(undefined, {
|
|
||||||
year: "numeric",
|
|
||||||
month: "2-digit",
|
|
||||||
day: "2-digit",
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,73 +0,0 @@
|
||||||
<script lang="ts">
|
|
||||||
function date2num(date: Date | undefined): number {
|
|
||||||
return date?.valueOf() ?? Infinity;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "WorksPage",
|
|
||||||
computed: {
|
|
||||||
tableTheme() {
|
|
||||||
return this.$themeLocale.worksTable ?? {};
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import { CHRONOLOGICAL_WORKS } from "../data.ts";
|
|
||||||
import { renderDate } from "../../../global.ts";
|
|
||||||
import { work as w } from "../domain";
|
|
||||||
import { computed } from "vue";
|
|
||||||
|
|
||||||
const works = computed(() =>
|
|
||||||
CHRONOLOGICAL_WORKS.concat().sort(
|
|
||||||
(a, b) =>
|
|
||||||
date2num(b.endDate) - date2num(a.endDate) ||
|
|
||||||
date2num(b.startDate) - date2num(a.startDate),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>{{ tableTheme.name }}</th>
|
|
||||||
<th>{{ tableTheme.description }}</th>
|
|
||||||
<th>{{ tableTheme.role }}</th>
|
|
||||||
<th>{{ tableTheme.technologies }}</th>
|
|
||||||
<th>{{ tableTheme.status }}</th>
|
|
||||||
<th>{{ tableTheme.dates }}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr v-for="work in works">
|
|
||||||
<td>
|
|
||||||
<a rel="nofollow noopener" :href="w.getExternalLink(work)">
|
|
||||||
{{ work.name }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>{{ work.description }}</td>
|
|
||||||
<td v-html="work.roles.join(', ')"></td>
|
|
||||||
<td>{{ work.technologies.join(", ") }}</td>
|
|
||||||
<td>{{ work.status }}</td>
|
|
||||||
<td>
|
|
||||||
<div>
|
|
||||||
<small :class="{ grey: work.endDate }">
|
|
||||||
{{ renderDate(work.startDate) }}
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
<div v-if="work.endDate">
|
|
||||||
<small>{{ renderDate(work.endDate) }}</small>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="css">
|
|
||||||
.grey {
|
|
||||||
color: rgba(0, 0, 0, 0.4);
|
|
||||||
}
|
|
||||||
</style>
|
|
|
@ -1 +0,0 @@
|
||||||
export { default as ChronologicalWorksTable } from "./ChronologicalWorksTable.vue";
|
|
|
@ -1,375 +0,0 @@
|
||||||
import { Role } from "./domain/Role.ts";
|
|
||||||
import { Status } from "./domain/Status.ts";
|
|
||||||
import { Technology } from "./domain/Technology.ts";
|
|
||||||
import type { Work } from "./domain/Work.ts";
|
|
||||||
|
|
||||||
export const CHRONOLOGICAL_WORKS: Work[] = [
|
|
||||||
{
|
|
||||||
name: "nixeovim",
|
|
||||||
url: "/pleshevskiy/nixeovim",
|
|
||||||
description: "Configure and build neovim editor using nix",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Nix],
|
|
||||||
startDate: new Date("2024-04-24"),
|
|
||||||
status: Status.ActiveDeveloped,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "picsg",
|
|
||||||
url: "/pleshevskiy/picsg",
|
|
||||||
description:
|
|
||||||
"A tool for steganographing information in a picture encoded using the Vernam cipher.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Haskell],
|
|
||||||
startDate: new Date("2024-04-13"),
|
|
||||||
endDate: new Date("2024-07-25"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Mindustry tools",
|
|
||||||
url: "/pleshevskiy/mindustry-tools",
|
|
||||||
description: "Tools for the Mindustry game",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Nix, Technology.Godot],
|
|
||||||
startDate: new Date("2024-01-07"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Master Progress Rosmintrud tools",
|
|
||||||
url: "https://rosmintrud.masterprogress.ru",
|
|
||||||
description:
|
|
||||||
"Internal service to prepare documents for the rosmintrud (SPA)",
|
|
||||||
roles: [Role.TechLead],
|
|
||||||
technologies: [
|
|
||||||
Technology.Deno,
|
|
||||||
Technology.Sqlite,
|
|
||||||
Technology.TypeScript,
|
|
||||||
Technology.Vue,
|
|
||||||
Technology.Docker,
|
|
||||||
Technology.Woodpecker,
|
|
||||||
Technology.Nix,
|
|
||||||
],
|
|
||||||
startDate: new Date("2023-07-03"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "yandexgpt_tg_bot",
|
|
||||||
url: "/pleshevskiy/yandexgpt_tg_bot",
|
|
||||||
description: "The Telegram bot to describe article with link by YandexGPT.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.JavaScript, Technology.NodeJS, Technology.Nix],
|
|
||||||
startDate: new Date("2023-06-27"),
|
|
||||||
endDate: new Date("2024-07-25"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "tree-sitter-plpgsql",
|
|
||||||
url: "/pleshevskiy/tree-sitter-plpgsql",
|
|
||||||
description: "plpgsql grammar for tree-sitter",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [
|
|
||||||
Technology.C,
|
|
||||||
Technology.JavaScript,
|
|
||||||
Technology.TreeSitter,
|
|
||||||
Technology.Nix,
|
|
||||||
],
|
|
||||||
startDate: new Date("2023-01-05"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "wd2",
|
|
||||||
url: "/pleshevskiy/wd2",
|
|
||||||
description:
|
|
||||||
"A wrapper over d2 which allows to use additional configs from d2 file",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Bash, Technology.Nix],
|
|
||||||
startDate: new Date("2022-12-12"),
|
|
||||||
endDate: new Date("2023-07-31"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "tree-sitter-d2",
|
|
||||||
url: "/pleshevskiy/tree-sitter-d2",
|
|
||||||
description: "d2 grammar for tree-sitter",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [
|
|
||||||
Technology.C,
|
|
||||||
Technology.JavaScript,
|
|
||||||
Technology.TreeSitter,
|
|
||||||
Technology.Nix,
|
|
||||||
],
|
|
||||||
startDate: new Date("2022-12-04"),
|
|
||||||
status: Status.ActiveDeveloped,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "nix2lua",
|
|
||||||
url: "/mynix/nix2lua",
|
|
||||||
description:
|
|
||||||
"This is a small but functional library that converts your nix configurations into lua format.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Nix, Technology.Lua],
|
|
||||||
startDate: new Date("2022-11-22"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "vnetod",
|
|
||||||
url: "/pleshevskiy/vnetod",
|
|
||||||
description: "Dotenv section switcher",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Rust],
|
|
||||||
startDate: new Date("2022-07-29"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "estring",
|
|
||||||
url: "/pleshevskiy/estring",
|
|
||||||
description: "A simple way to parse a string using type annotations.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Rust],
|
|
||||||
startDate: new Date("2022-07-23"),
|
|
||||||
endDate: new Date("2024-07-25"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "enve",
|
|
||||||
url: "/pleshevskiy/enve",
|
|
||||||
description:
|
|
||||||
"It helps you work with environment variables and convert it to any type using only type annotations",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Rust],
|
|
||||||
startDate: new Date("2022-07-18"),
|
|
||||||
endDate: new Date("2024-07-25"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "docker stack drone plugin",
|
|
||||||
url: "/pleshevskiy/docker_stack",
|
|
||||||
description: "Deploy to production using `docker stack deploy`",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Docker, Technology.Drone, Technology.Woodpecker],
|
|
||||||
startDate: new Date("2022-06-06"),
|
|
||||||
endDate: new Date("2024-07-25"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "dexios",
|
|
||||||
url: "/github/dexios",
|
|
||||||
description:
|
|
||||||
"Dexios is a fast, secure, and open source command-line encryption tool.",
|
|
||||||
roles: [Role.Collaborator],
|
|
||||||
technologies: [Technology.Rust],
|
|
||||||
startDate: new Date("2022-06-01"),
|
|
||||||
endDate: new Date("2023-02-28"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "recipes",
|
|
||||||
url: "/pleshevskiy/recipes",
|
|
||||||
description: "Site with recipes which cares about privacy",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.TypeScript, Technology.Deno, Technology.Rust],
|
|
||||||
startDate: new Date("2022-05-04"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "pleshevski.ru",
|
|
||||||
url: "/pleshevskiy/pleshevski.ru",
|
|
||||||
description: "Source code of my personal site",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [
|
|
||||||
Technology.TypeScript,
|
|
||||||
Technology.Vue,
|
|
||||||
Technology.Vuepress,
|
|
||||||
Technology.Nix,
|
|
||||||
],
|
|
||||||
startDate: new Date("2022-03-16"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "paren",
|
|
||||||
url: "/pleshevskiy/paren",
|
|
||||||
description: "Library for parsing and rendering information.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.TypeScript, Technology.Deno],
|
|
||||||
startDate: new Date("2022-03-14"),
|
|
||||||
endDate: new Date("2024-07-25"),
|
|
||||||
status: Status.Experimental,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "hwt",
|
|
||||||
url: "/pleshevskiy/hwt",
|
|
||||||
description:
|
|
||||||
"healthy workaholic timer – A tool that keeps you from breaking your health by working all day.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Rust],
|
|
||||||
startDate: new Date("2022-02-04"),
|
|
||||||
endDate: new Date("2024-07-25"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "ood_persistence",
|
|
||||||
url: "/pleshevskiy/ood_persistence",
|
|
||||||
description:
|
|
||||||
"Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Rust],
|
|
||||||
startDate: new Date("2021-10-12"),
|
|
||||||
endDate: new Date("2021-10-21"),
|
|
||||||
status: Status.Deprecated,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "migra",
|
|
||||||
url: "/pleshevskiy/migra",
|
|
||||||
description: "Simple SQL migration manager for your project.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Rust],
|
|
||||||
startDate: new Date("2021-01-31"),
|
|
||||||
endDate: new Date("2022-03-17"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "espruino-starter",
|
|
||||||
url: "/pleshevskiy/espruino-starter",
|
|
||||||
description:
|
|
||||||
"Quickly start creating your new project on the espruino board or a board based on it.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.JavaScript],
|
|
||||||
startDate: new Date("2021-08-23"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "react-rest-request",
|
|
||||||
url: "/pleshevskiy/react-rest-request",
|
|
||||||
description: "Minimalistic REST API client for React inspired by Apollo.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.TypeScript, Technology.React],
|
|
||||||
startDate: new Date("2020-10-04"),
|
|
||||||
endDate: new Date("2023-03-02"),
|
|
||||||
status: Status.Deprecated,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "sonic-channel",
|
|
||||||
url: "/pleshevskiy/sonic-channel",
|
|
||||||
description: "Rust client for sonic search backend.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Rust],
|
|
||||||
startDate: new Date("2020-07-18"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "itconfig",
|
|
||||||
url: "/pleshevskiy/itconfig",
|
|
||||||
description:
|
|
||||||
"Easy build a configs from environment variables and use it in globally.",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Rust],
|
|
||||||
startDate: new Date("2019-12-22"),
|
|
||||||
endDate: new Date("2022-07-24"),
|
|
||||||
status: Status.Deprecated,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "it-fsm",
|
|
||||||
url: "/pleshevskiy/it-fsm",
|
|
||||||
description: "Simple full-featured finite state machine for your project",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.TypeScript, Technology.NodeJS, Technology.Deno],
|
|
||||||
startDate: new Date("2019-10-11"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Cabinet Master Progress",
|
|
||||||
url: "https://cabinet.masterprogress.ru",
|
|
||||||
description:
|
|
||||||
"Student's cabinet of the educational center Master Progress (SSR + SPA)",
|
|
||||||
roles: [Role.TechLead],
|
|
||||||
technologies: [
|
|
||||||
Technology.Python,
|
|
||||||
Technology.Flask,
|
|
||||||
Technology.Postgresql,
|
|
||||||
Technology.TypeScript,
|
|
||||||
Technology.React,
|
|
||||||
Technology.Docker,
|
|
||||||
Technology.Woodpecker,
|
|
||||||
Technology.Nix,
|
|
||||||
],
|
|
||||||
startDate: new Date("2019-09-22"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "genrss",
|
|
||||||
url: "/pleshevskiy/genrss",
|
|
||||||
description: "RSS generator for python",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Python],
|
|
||||||
startDate: new Date("2019-07-23"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "marshmallow_pageinfo",
|
|
||||||
url: "/pleshevskiy/marshmallow_pageinfo",
|
|
||||||
description: "Page info marshmallow schema for api",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Python],
|
|
||||||
startDate: new Date("2019-10-05"),
|
|
||||||
endDate: new Date("2023-03-02"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Binary Management",
|
|
||||||
url: "https://www.binarymanagement.com",
|
|
||||||
description: "Project management tool for interior designers",
|
|
||||||
roles: [Role.Developer, Role.TechLead, Role.TeamLead],
|
|
||||||
technologies: [
|
|
||||||
Technology.TypeScript,
|
|
||||||
Technology.NodeJS,
|
|
||||||
Technology.React,
|
|
||||||
Technology.Antd,
|
|
||||||
Technology.Docker,
|
|
||||||
Technology.Drone,
|
|
||||||
Technology.Rust,
|
|
||||||
Technology.Nix,
|
|
||||||
],
|
|
||||||
startDate: new Date("2018-09-15"),
|
|
||||||
status: Status.ActiveDeveloped,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Core Spirit",
|
|
||||||
url: "https://corespirit.com",
|
|
||||||
description: "Social platform focusing on human and planetary enhancement",
|
|
||||||
roles: [Role.Developer],
|
|
||||||
technologies: [
|
|
||||||
Technology.TypeScript,
|
|
||||||
Technology.NodeJS,
|
|
||||||
Technology.Go,
|
|
||||||
Technology.Python,
|
|
||||||
Technology.React,
|
|
||||||
Technology.Docker,
|
|
||||||
Technology.Drone,
|
|
||||||
],
|
|
||||||
startDate: new Date("2018-09-05"),
|
|
||||||
endDate: new Date("2019-12-31"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Master Progress",
|
|
||||||
url: "https://masterprogress.ru",
|
|
||||||
description:
|
|
||||||
"Main website of the educational center Master Progress (SSR + Forms)",
|
|
||||||
roles: [Role.TechLead],
|
|
||||||
technologies: [
|
|
||||||
Technology.Python,
|
|
||||||
Technology.Flask,
|
|
||||||
Technology.JavaScript,
|
|
||||||
Technology.Nix,
|
|
||||||
],
|
|
||||||
startDate: new Date("2018-04-10"),
|
|
||||||
status: Status.PassivelyMaintained,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "ictmpl",
|
|
||||||
url: "/pleshevskiy/ictmpl",
|
|
||||||
description: "Generate projects from templates",
|
|
||||||
roles: [Role.Author],
|
|
||||||
technologies: [Technology.Python],
|
|
||||||
startDate: new Date("2018-06-30"),
|
|
||||||
endDate: new Date("2023-03-02"),
|
|
||||||
status: Status.AsIs,
|
|
||||||
},
|
|
||||||
];
|
|
|
@ -1,7 +0,0 @@
|
||||||
export enum Role {
|
|
||||||
Collaborator = "collaborator",
|
|
||||||
Author = "author",
|
|
||||||
TechLead = "tech lead",
|
|
||||||
TeamLead = "team lead",
|
|
||||||
Developer = "developer",
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
export enum Status {
|
|
||||||
// New features are being added and bugs are being fixed.
|
|
||||||
ActiveDeveloped = "actively-developed",
|
|
||||||
|
|
||||||
// There are no plans for new features, but the maintainer intends to respond
|
|
||||||
// to issues that get filed.
|
|
||||||
PassivelyMaintained = "passively-maintained",
|
|
||||||
|
|
||||||
// The package is feature complete, the maintainer does not intend to continue
|
|
||||||
// working on it or providing support, but it works for the purposes it was
|
|
||||||
// designed for.
|
|
||||||
AsIs = "as-is",
|
|
||||||
|
|
||||||
// The author wants to share it with the community but is not intending to
|
|
||||||
// meet anyone's particular use case.
|
|
||||||
Experimental = "experimental",
|
|
||||||
|
|
||||||
// The current maintainer would like to transfer the package to someone else.
|
|
||||||
LookingForMaintainer = "looking-for-maintainer",
|
|
||||||
|
|
||||||
// The maintainer does not recommend using this package (the description of the
|
|
||||||
// package can describe why, there could be a better solution available or
|
|
||||||
// there could be problems with the package that the author does not want to fix).
|
|
||||||
Deprecated = "deprecated",
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
export enum Technology {
|
|
||||||
C = "C",
|
|
||||||
Go = "Go",
|
|
||||||
JavaScript = "JS",
|
|
||||||
TypeScript = "TS",
|
|
||||||
Rust = "Rust",
|
|
||||||
Python = "Python",
|
|
||||||
Php = "PHP",
|
|
||||||
Deno = "Deno",
|
|
||||||
NodeJS = "NodeJS",
|
|
||||||
Flask = "Flask",
|
|
||||||
React = "React",
|
|
||||||
Antd = "Antd",
|
|
||||||
Postgresql = "PostgreSQL",
|
|
||||||
Docker = "Docker",
|
|
||||||
Drone = "Drone CI",
|
|
||||||
Woodpecker = "Woodpecker CI",
|
|
||||||
Bash = "Bash",
|
|
||||||
TreeSitter = "TreeSitter",
|
|
||||||
Nix = "Nix",
|
|
||||||
Lua = "Lua",
|
|
||||||
Sqlite = "Sqlite",
|
|
||||||
Vue = "Vue",
|
|
||||||
Vuepress = "Vuepress",
|
|
||||||
Godot = "Godot",
|
|
||||||
Haskell = "Haskell",
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
import type { NonEmptyArray } from "../../../global.ts";
|
|
||||||
import { Role } from "./Role.ts";
|
|
||||||
import { Status } from "./Status.ts";
|
|
||||||
import { Technology } from "./Technology.ts";
|
|
||||||
|
|
||||||
export interface Work {
|
|
||||||
name: string;
|
|
||||||
url: string;
|
|
||||||
description: string;
|
|
||||||
roles: NonEmptyArray<Role>;
|
|
||||||
technologies: NonEmptyArray<Technology>;
|
|
||||||
startDate: Date;
|
|
||||||
endDate?: Date;
|
|
||||||
status?: Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getExternalLink: (work: Pick<Work, "url">) => string = (work) =>
|
|
||||||
work.url.startsWith("https://")
|
|
||||||
? work.url
|
|
||||||
: new URL(work.url, "https://git.pleshevski.ru").toString();
|
|
|
@ -1,5 +0,0 @@
|
||||||
export { Role } from "./Role.ts";
|
|
||||||
export { Status } from "./Status.ts";
|
|
||||||
export { Technology } from "./Technology.ts";
|
|
||||||
export type { Work } from "./Work.ts";
|
|
||||||
export * as work from "./Work.ts";
|
|
|
@ -1 +0,0 @@
|
||||||
export * from "./ChronologicalWorksTable";
|
|
|
@ -1,42 +0,0 @@
|
||||||
<script setup>
|
|
||||||
// See: https://github.com/vuejs/vuepress/blob/master/packages/%40vuepress/theme-default/layouts/Layout.vue
|
|
||||||
import ParentLayout from '@vuepress/theme-default/layouts/Layout.vue'
|
|
||||||
import { ChronologicalWorksTable } from "../modules/work";
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<ParentLayout>
|
|
||||||
<template #page-bottom>
|
|
||||||
<div class="works-table-wrapper">
|
|
||||||
<ChronologicalWorksTable />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</ParentLayout>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="css" scoped>
|
|
||||||
.works-table-wrapper {
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 0 2rem;
|
|
||||||
max-width: 1224px;
|
|
||||||
box-sizing: border-box
|
|
||||||
}
|
|
||||||
|
|
||||||
.works-table-wrapper :deep(table) {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style lang="css">
|
|
||||||
:root {
|
|
||||||
--content-width: 960px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vp-page .theme-default-content {
|
|
||||||
padding-bottom: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vp-page-meta {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
</style>
|
|
|
@ -1,10 +0,0 @@
|
||||||
import { DefaultThemeOptions, defaultTheme } from "@vuepress/theme-default";
|
|
||||||
|
|
||||||
export const mkMyTheme = (options: DefaultThemeOptions) => {
|
|
||||||
// returns a theme object
|
|
||||||
return {
|
|
||||||
name: "my-theme",
|
|
||||||
|
|
||||||
extends: defaultTheme(options),
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -1,112 +0,0 @@
|
||||||
---
|
|
||||||
home: true
|
|
||||||
title: Resume
|
|
||||||
heroText: null
|
|
||||||
---
|
|
||||||
|
|
||||||
Always up-to-date link to [resume](/eng/).
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
My name is Dmitriy Pleshevskiy.
|
|
||||||
|
|
||||||
I'm an open source software enthusiast, a lead software developer, architect,
|
|
||||||
team leader and also mentor.
|
|
||||||
|
|
||||||
## Skills
|
|
||||||
|
|
||||||
#### Programming Languages:
|
|
||||||
|
|
||||||
- TypeScript (prefer, solid 9-year exp)
|
|
||||||
- SQL (prefer, solid 8-year exp)
|
|
||||||
- Rust (prefer, solid 5-year exp)
|
|
||||||
- Python (solid 9-year exp)
|
|
||||||
- Haskell
|
|
||||||
- Bash (8-year exp)
|
|
||||||
- Java
|
|
||||||
- C#
|
|
||||||
- C++
|
|
||||||
|
|
||||||
#### Repositories:
|
|
||||||
|
|
||||||
- PostgreSQL (prefer, solid 8-year exp)
|
|
||||||
- MySQL
|
|
||||||
- Sqlite
|
|
||||||
- MsSQL
|
|
||||||
- MongoDB
|
|
||||||
- Reddis
|
|
||||||
- Minio (prefer, solid 5-year exp)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
I also have extensive experience in creating the following applications:
|
|
||||||
|
|
||||||
- Traditional (SSR + Forms)
|
|
||||||
- API (REST/GraphQL/WebSocket/EventSource)
|
|
||||||
- Dynamic (SPA)
|
|
||||||
- Hybrid (SSR + SPA)
|
|
||||||
- Console
|
|
||||||
- Cross-platform
|
|
||||||
|
|
||||||
## Stack
|
|
||||||
|
|
||||||
#### Backend (Rust)
|
|
||||||
|
|
||||||
- `axum` (prefer, solid 2-year exp)
|
|
||||||
- `async-graphql` (prefer, solid 2-year exp)
|
|
||||||
- `shaku` (prefer, solid 2-year exp)
|
|
||||||
- `bb8` + `postgres-types` (prefer, solid 5-year exp)
|
|
||||||
- `diesel` (2-year exp)
|
|
||||||
|
|
||||||
#### Backend (Node.JS)
|
|
||||||
|
|
||||||
- `Apollo` (solid 5-year exp)
|
|
||||||
- `Express` (solid 9-year exp)
|
|
||||||
- `Nest.JS`
|
|
||||||
- `Knex.js` / `Objection.js` (solid 5-year exp)
|
|
||||||
- `Sequelize`
|
|
||||||
|
|
||||||
#### Frontend
|
|
||||||
|
|
||||||
- `React` (solid 8-year exp)
|
|
||||||
- `VueJS` (prefer, solid 3-year exp)
|
|
||||||
- `Cypress` (prefer, solid 3-year exp)
|
|
||||||
- `JQuery`
|
|
||||||
- `Antd` / `Antdv`
|
|
||||||
- `PostCSS` (prefer, solid 5-year exp)
|
|
||||||
- `Sass` (prefer, solid 8-year exp)
|
|
||||||
- `Less` (weak 4-year exp)
|
|
||||||
|
|
||||||
#### DevOps
|
|
||||||
|
|
||||||
- `NixOS` / `NixOps` / `Nix dev shell` (prefer, solid 3-year exp)
|
|
||||||
- `Docker Swarm` (solid 6-year exp)
|
|
||||||
- `Kubernetes` (weak 5-year exp)
|
|
||||||
- `Woodpecker CI` (prefer, solid 4-year exp)
|
|
||||||
- `Drone CI` (solid 3-year exp)
|
|
||||||
- `Gitlab CI` (solid 7-year exp)
|
|
||||||
- `GitHub Actions` (4-year exp)
|
|
||||||
|
|
||||||
## Interests
|
|
||||||
|
|
||||||
Open-source projects are my passion! I develop, maintain and improve projects in
|
|
||||||
my spare time.
|
|
||||||
|
|
||||||
Besides programming, I love to cook and spend time with my beloved family!
|
|
||||||
|
|
||||||
## Contacts
|
|
||||||
|
|
||||||
Simplex (Prefer): [Dmitriy
|
|
||||||
Pleshevskiy](https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion)
|
|
||||||
|
|
||||||
|
|
||||||
Telegram: [Dmitriy Pleshevskiy](https://telegram.me/da_pranaya)
|
|
||||||
|
|
||||||
Matrix: `@pleshevskiy:matrix.org`
|
|
||||||
|
|
||||||
Email: `dmitriy[at]pleshevski[dot]ru`
|
|
||||||
|
|
||||||
## Links
|
|
||||||
|
|
||||||
- [Forgejo](https://git.pleshevski.ru/)
|
|
||||||
- [Github (Suspended)](https://github.com/pleshevskiy)
|
|
|
@ -1,121 +0,0 @@
|
||||||
---
|
|
||||||
title: Works
|
|
||||||
layout: WorksPage
|
|
||||||
sidebar: false
|
|
||||||
---
|
|
||||||
|
|
||||||
## Highlighted working experience
|
|
||||||
|
|
||||||
### Binary Management
|
|
||||||
|
|
||||||
- Dates: August 2018 – currently
|
|
||||||
- Roles: Lead Fullstack Developer, Team Lead, Architect
|
|
||||||
|
|
||||||
Development of a Project Management Tool for Interior Designers
|
|
||||||
|
|
||||||
##### Backend GraphQL API
|
|
||||||
|
|
||||||
Stack: `Node.JS`, `Apollo`, `PostgreSQL`, `Redis`, `BullMQ`
|
|
||||||
|
|
||||||
- Migrated database triggers into business logic. Code became easier to read and
|
|
||||||
maintain, and the system became more reliable.
|
|
||||||
- Introduced unit testing and integration testing practices. I wrote over 70% of
|
|
||||||
all tests myself.
|
|
||||||
- Added GraphQL subscriptions for dynamic updates.
|
|
||||||
|
|
||||||
##### Frontend
|
|
||||||
|
|
||||||
Stack: `React`, `Apollo`, `Antd`
|
|
||||||
|
|
||||||
- Formed a UIKit and general components, optimized complex and loaded
|
|
||||||
components.
|
|
||||||
- Changed API work on the frontend.
|
|
||||||
- Introduced integration testing practice using Cypress.
|
|
||||||
- Migrated the entire project to TypeScript. Created isolated system modules.
|
|
||||||
|
|
||||||
##### Leadership of the Team
|
|
||||||
|
|
||||||
- Introduced TDD (Test-Driven Development) practices.
|
|
||||||
- Brought the "Critical Chain Method", the "Buffer Method", and the "Backward
|
|
||||||
Planning" method into the project. Helped the team get in sync,
|
|
||||||
releasing small batches every week.
|
|
||||||
- Created individual development plans for team members.
|
|
||||||
|
|
||||||
##### Architecture
|
|
||||||
|
|
||||||
- Broke down the entire codebase into modules by feature.
|
|
||||||
- Optimized `PostgreSQL` database, splitting company data into separate schemas
|
|
||||||
and applying partitioning tables.
|
|
||||||
- Added query caching with Redis.
|
|
||||||
- Reduced infrastructure costs by 5 times, migrating the project from Kubernetes
|
|
||||||
to NixOS.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Core Spirit (Back Office)
|
|
||||||
|
|
||||||
- Даты: Август 2024 - currently
|
|
||||||
- Роль: Lead Fullstack Developer
|
|
||||||
|
|
||||||
Development of the Back Office for Core Spirit social platform.
|
|
||||||
|
|
||||||
- Integrated `Dependabot`, which helped update all outdated
|
|
||||||
dependencies. Replaced webpack with `vite`.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Master Progress
|
|
||||||
|
|
||||||
- Dates: May 2018 - currently (Passively maintained)
|
|
||||||
- Role: Tech Lead
|
|
||||||
|
|
||||||
Development web infrastructure of the educational center Master Progress
|
|
||||||
|
|
||||||
- [The main site](https://masterprogress.ru) (`Python`, `Flask`).
|
|
||||||
- [Student's cabinet](https://cabinet.masterprogress.ru) (`Python`,
|
|
||||||
`Flask`, `TypeScript`, `React`, `PostgreSQL`).
|
|
||||||
- [A tool for rosmintrud](https://rosmintrud.masterprogress.ru)
|
|
||||||
(`Deno`, `Vue`, `Typescript`)
|
|
||||||
- A complete infrastructure was created on `NixOS`. Before that, I had created
|
|
||||||
an infrastructure using `Drone CI` / `Woodpecker CI` and `Docker
|
|
||||||
swarm`, which has been running for over 5 years.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Core Spirit
|
|
||||||
|
|
||||||
- Dates: August 2018 - May 2020, August 2024 - currently
|
|
||||||
- Role: Lead Fullstack Developer
|
|
||||||
|
|
||||||
Development of Social platform focusing on human and planetary enhancement.
|
|
||||||
|
|
||||||
- A REST API (using `Node.JS`, `Express`, and `PostgreSQL`) for the main website
|
|
||||||
and back office. I also got to work with a new version of the REST
|
|
||||||
API using `Go` and `PostgreSQL`.
|
|
||||||
- Auto poster to various social networks and messengers
|
|
||||||
(Facebook, LinkedIn, Twitter, Telegram).
|
|
||||||
- Neural network for automatic categorization of articles.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### MERLION
|
|
||||||
|
|
||||||
- Dates: March 2016 – May 2018
|
|
||||||
- Role: Senior Fullstack developer
|
|
||||||
|
|
||||||
In this company there were 6 considerable projects I have successfully
|
|
||||||
completed:
|
|
||||||
|
|
||||||
- optimize the creation of promotional pages (PHP, JavaScript)
|
|
||||||
- support main traditional site <https://citilink.ru> (PHP, JavaScript)
|
|
||||||
- development of parsing to monitor products for changes in price,
|
|
||||||
quantity/availability in stock, rating and other fields based on data from 55
|
|
||||||
websites (Node.JS, Express)
|
|
||||||
- work with neural networks for matching of goods
|
|
||||||
- development face recognition apps for Android (Java)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Chronology
|
|
||||||
|
|
||||||
Public projects only.
|
|
113
docs/index.md
113
docs/index.md
|
@ -1,113 +0,0 @@
|
||||||
---
|
|
||||||
home: true
|
|
||||||
title: Резюме
|
|
||||||
heroText: null
|
|
||||||
---
|
|
||||||
|
|
||||||
Всегда актуальная ссылка на [резюме](/).
|
|
||||||
|
|
||||||
## Общие сведения
|
|
||||||
|
|
||||||
Меня зовут Дмитрий Плешевский.
|
|
||||||
|
|
||||||
Я энтузиаст программного обеспечения с открытым исходным кодом, ведущий
|
|
||||||
разработчик програмного обеспечения, архитектор, руководитель команды, а так же
|
|
||||||
ментор.
|
|
||||||
|
|
||||||
## Умения
|
|
||||||
|
|
||||||
#### Языки программирования:
|
|
||||||
|
|
||||||
- TypeScript (предпочитаю, твёрдый 9-летний опыт)
|
|
||||||
- SQL (предпочитаю, твёрдый 8-летний опыт)
|
|
||||||
- Rust (предпочитаю, 5-летний опыт)
|
|
||||||
- Python (твёрдый 9-летний опыт)
|
|
||||||
- Haskell
|
|
||||||
- Bash (8-летний опыт)
|
|
||||||
- Java
|
|
||||||
- C#
|
|
||||||
- C++
|
|
||||||
|
|
||||||
#### Хранилища данных:
|
|
||||||
|
|
||||||
- PostgreSQL (предпочитаю, твёрдый 8-летний опыт)
|
|
||||||
- MySQL
|
|
||||||
- Sqlite
|
|
||||||
- MsSQL
|
|
||||||
- MongoDB
|
|
||||||
- Reddis
|
|
||||||
- Minio (предпочитаю, твердый 5-летний опыт)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Я так же имею большой опыт в создании следующих типов приложений:
|
|
||||||
|
|
||||||
- Традиционные (SSR + Forms)
|
|
||||||
- API (REST/GraphQL/WebSocket/EventSource)
|
|
||||||
- Динамическое (SPA)
|
|
||||||
- Гибридное (SSR + SPA)
|
|
||||||
- Консольные
|
|
||||||
- Кроссплатформенные
|
|
||||||
|
|
||||||
## Stack
|
|
||||||
|
|
||||||
#### Backend (Rust)
|
|
||||||
|
|
||||||
- `axum` (предпочитаю, твёрдый 2-летний опыт)
|
|
||||||
- `async-graphql` (предпочитаю, твёрдый 2-летний опыт)
|
|
||||||
- `shaku` (предпочитаю, твёрдый 2-летний опыт)
|
|
||||||
- `bb8` + `postgres-types` (предпочитаю, твёрдый 5-летний опыт)
|
|
||||||
- `diesel` (2-летний опыт)
|
|
||||||
|
|
||||||
#### Backend (Node.JS)
|
|
||||||
|
|
||||||
- `Apollo` (твёрдый 5-летний опыт)
|
|
||||||
- `Express` (твёрдый 9-летний опыт)
|
|
||||||
- `Nest.JS`
|
|
||||||
- `Knex.js` / `Objection.js` (твёрдый 5-летний опыт)
|
|
||||||
- `Sequelize`
|
|
||||||
|
|
||||||
#### Frontend
|
|
||||||
|
|
||||||
- `React` (твёрдый 8-летний опыт)
|
|
||||||
- `VueJS` (предпочитаю, твёрдый 4-летний опыт)
|
|
||||||
- `Cypress` (предпочитаю, твёрдый 3-летний опыт)
|
|
||||||
- `JQuery`
|
|
||||||
- `Antd` / `Antdv`
|
|
||||||
- `PostCSS` (предпочитаю, твёрдый 5-летний опыт)
|
|
||||||
- `Sass` (предпочитаю, твёрдый 8-летний опыт)
|
|
||||||
- `Less` (слабый 4-летний опыт)
|
|
||||||
|
|
||||||
#### DevOps
|
|
||||||
|
|
||||||
- `NixOS` / `NixOps` / `Nix dev shell` (предпочитаю, твёрдый 3-летний опыт)
|
|
||||||
- `Docker Swarm` (твёрдый 6-летний опыт)
|
|
||||||
- `Kubernetes` (слабый 5-летний опыт)
|
|
||||||
- `Woodpecker CI` (твёрдый 4-летний опыт)
|
|
||||||
- `Drone CI` (твёрдый 3-летний опыт)
|
|
||||||
- `Gitlab CI` (твёрдый 7-летний опыт)
|
|
||||||
- `GitHub Actions` (4-летний опыт)
|
|
||||||
|
|
||||||
## Интересы
|
|
||||||
|
|
||||||
Open-source проекты - моя страсть! Разрабатываю, поддерживаю и улучшаю проекты в
|
|
||||||
своё свободное время.
|
|
||||||
|
|
||||||
Помимо программирования я люблю готовить и проводить время со своей любимой
|
|
||||||
семьей!
|
|
||||||
|
|
||||||
## Контакты
|
|
||||||
|
|
||||||
Simplex (Предпочтительно): [Dmitriy
|
|
||||||
Pleshevskiy](https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion)
|
|
||||||
|
|
||||||
Telegram: [Dmitriy Pleshevskiy](https://telegram.me/da_pranaya)
|
|
||||||
|
|
||||||
Matrix: `@pleshevskiy:matrix.org`
|
|
||||||
|
|
||||||
Email: `dmitriy[at]pleshevski[dot]ru`
|
|
||||||
|
|
||||||
## Ссылки
|
|
||||||
|
|
||||||
- [Forgejo](https://git.pleshevski.ru/)
|
|
||||||
- [Github (Приостановлен)](https://github.com/pleshevskiy)
|
|
122
docs/works.md
122
docs/works.md
|
@ -1,122 +0,0 @@
|
||||||
---
|
|
||||||
title: Работы
|
|
||||||
layout: WorksPage
|
|
||||||
sidebar: false
|
|
||||||
---
|
|
||||||
|
|
||||||
## Выделенный опыт работы
|
|
||||||
|
|
||||||
### Binary Management
|
|
||||||
|
|
||||||
- Даты: Август 2018 – по настоящее время
|
|
||||||
- Роли: Lead Fullstack Developer, Team Lead, Architect
|
|
||||||
|
|
||||||
Разработка инструмента управления проектами для дизайнеров интерьера.
|
|
||||||
|
|
||||||
##### Backend GraphQL API
|
|
||||||
|
|
||||||
Стек: `Node.JS`, `Apollo`, `PostgreSQL`, `Redis`, `BullMQ`
|
|
||||||
|
|
||||||
- Перенес триггеры базы данных в бизнес-логику. Проще стало читать код, вносить
|
|
||||||
изменение и система стала надежнее.
|
|
||||||
- Ввёл практику написания unit тестов и интеграционных тестов. Самолично написал
|
|
||||||
более 70% всех тестов.
|
|
||||||
- Добавил GraphQL подписки для динамичного обновления.
|
|
||||||
|
|
||||||
##### Frontend
|
|
||||||
|
|
||||||
Стек: `React`, `Apollo`, `Antd`
|
|
||||||
|
|
||||||
- Сформировал UIKit и общие компоненты, оптимизировал сложные и нагруженные
|
|
||||||
компоненты.
|
|
||||||
- Изменил работу с API на фронтенде.
|
|
||||||
- Внедрил практику написания интеграционных тестов с помощью cypress.
|
|
||||||
- Полностью перенес проект на TypeScript. Сформировал изолированные модули
|
|
||||||
системы.
|
|
||||||
|
|
||||||
##### Руководство командой
|
|
||||||
|
|
||||||
- Ввёл практику TDD (Test-Driven Development).
|
|
||||||
- Я привнес в проект "метод критической цепи", "метод буфера" и "метод
|
|
||||||
планирования с конца". Помог команде войти в ритм, чтобы выпускать релизы каждую
|
|
||||||
неделю небольшими партиями.
|
|
||||||
- Составлял индивидуальный план развития для членов команды.
|
|
||||||
|
|
||||||
##### Архитектура
|
|
||||||
|
|
||||||
- Разбил всю кодовую базу на модули по фичам.
|
|
||||||
- Ускорил базу данных `PostgreSQL`, разбив данные компаний по отдельным схемам и
|
|
||||||
применив партиципирование таблиц.
|
|
||||||
- Добавил кеширование запросов с `Redis`.
|
|
||||||
- Уменьшил затраты на инфраструткуру в 5 раз, перенес весь проект с kubernetes
|
|
||||||
на `NixOS`.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Core Spirit (Back Office)
|
|
||||||
|
|
||||||
- Даты: Август 2024 - по настоящее время
|
|
||||||
- Роль: Lead Fullstack Developer
|
|
||||||
|
|
||||||
Разработка бэк-офиса для социальной платформы Core Spirit.
|
|
||||||
|
|
||||||
- Интегрировал Dependabot, который помог обновить все устаревшие
|
|
||||||
зависимости. Заменил webpack на vite.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Master Progress
|
|
||||||
|
|
||||||
- Даты: Май 2018 - по настоящее время (Пассивная поддержка)
|
|
||||||
- Роль: Tech Lead
|
|
||||||
|
|
||||||
Разработка веб-инфраструктуры образовательного центра Мастер Прогресс.
|
|
||||||
|
|
||||||
- [Главного сайта](https://masterprogress.ru) (`Python`, `Flask`).
|
|
||||||
- [Кабинета студента](https://cabinet.masterprogress.ru) (`Python`, `Flask`,
|
|
||||||
`TypeScript`, `React`, `PostgreSQL`).
|
|
||||||
- [Инструмента для работы с rosmintrud](https://rosmintrud.masterprogress.ru)
|
|
||||||
(`Deno`, `Vue`, `Typescript`)
|
|
||||||
- Создана полная инфраструктура на `NixOS`. До этого создал инфраструктуру
|
|
||||||
используя `Drone CI` / `Woodpecker CI` и `Docker swarm`, которая проработала
|
|
||||||
более 5 лет.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Core Spirit
|
|
||||||
|
|
||||||
- Даты: Август 2018 - May 2020, Август 2024 - по настоящее время
|
|
||||||
- Роль: Lead Fullstack Developer
|
|
||||||
|
|
||||||
Разработка социальной платформы, сфокусированной на улучшении человека и
|
|
||||||
планеты.
|
|
||||||
|
|
||||||
- REST API (`Node.JS`, `Express`, `PostgreSQL`) для основного сайта и
|
|
||||||
бэк-офиса. Успел поработать с новой версией REST API на `Go`, `PostgreSQL`
|
|
||||||
- Автопостер в различные социальные сети и мессенджеры (Facebook,
|
|
||||||
LinkedIn, Twitter, Telegram).
|
|
||||||
- Создал нейронную сеть для автоматической категоризации статей.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### MERLION
|
|
||||||
|
|
||||||
- Dates: March 2016 – May 2018
|
|
||||||
- Role: Senior Fullstack developer
|
|
||||||
|
|
||||||
В этой компании было 6 значительных проектов, которые я успешно завершил:
|
|
||||||
|
|
||||||
- Оптимизация создания рекламных страниц (PHP, JavaScript)
|
|
||||||
- Поддержка основного традиционного сайта <https://citilink.ru> (PHP,
|
|
||||||
JavaScript)
|
|
||||||
- Разработка парсинга для мониторинга товаров на предмет изменения цены,
|
|
||||||
количества/наличия на складе, рейтинга и других полей на основе данных с 55+
|
|
||||||
сайтов (Node.js, Express)
|
|
||||||
- Работа с нейронными сетями для подбора товаров
|
|
||||||
- Разработка приложений для распознавания лиц для Android (Java)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Хронология
|
|
||||||
|
|
||||||
В списке перечислены только публичные проекты.
|
|
43
eng/index.html
Normal file
43
eng/index.html
Normal file
File diff suppressed because one or more lines are too long
43
eng/works.html
Normal file
43
eng/works.html
Normal file
File diff suppressed because one or more lines are too long
61
flake.lock
generated
61
flake.lock
generated
|
@ -1,61 +0,0 @@
|
||||||
{
|
|
||||||
"nodes": {
|
|
||||||
"flake-utils": {
|
|
||||||
"inputs": {
|
|
||||||
"systems": "systems"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1710146030,
|
|
||||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1721562059,
|
|
||||||
"narHash": "sha256-Tybxt65eyOARf285hMHIJ2uul8SULjFZbT9ZaEeUnP8=",
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "68c9ed8bbed9dfce253cc91560bf9043297ef2fe",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixos",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": "flake-utils",
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"systems": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1681028828,
|
|
||||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": "root",
|
|
||||||
"version": 7
|
|
||||||
}
|
|
47
flake.nix
47
flake.nix
|
@ -1,47 +0,0 @@
|
||||||
{
|
|
||||||
description = "Pleshevski personal site";
|
|
||||||
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = { self, nixpkgs, flake-utils }:
|
|
||||||
let
|
|
||||||
out = system:
|
|
||||||
let
|
|
||||||
inherit (builtins) substring;
|
|
||||||
|
|
||||||
pkgs = import nixpkgs { inherit system; };
|
|
||||||
version = "0.0.1+${substring 0 8 self.lastModifiedDate}_${self.shortRev or "dirty"}";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
packages.default = with pkgs; stdenv.mkDerivation (finalAttrs: {
|
|
||||||
pname = "pleshevski_site";
|
|
||||||
inherit version;
|
|
||||||
|
|
||||||
src = ./.;
|
|
||||||
|
|
||||||
dontBuild = true;
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out
|
|
||||||
cp -r dist/* $out
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
|
|
||||||
devShells.default = pkgs.mkShell {
|
|
||||||
buildInputs = with pkgs; [
|
|
||||||
pre-commit
|
|
||||||
nodejs_22
|
|
||||||
gnumake
|
|
||||||
pnpm
|
|
||||||
nodePackages.typescript-language-server # typescript
|
|
||||||
nodePackages.vscode-langservers-extracted # html, css, json, eslint
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
flake-utils.lib.eachDefaultSystem out;
|
|
||||||
|
|
||||||
}
|
|
43
index.html
Normal file
43
index.html
Normal file
File diff suppressed because one or more lines are too long
35
package.json
35
package.json
|
@ -1,35 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "https://json.schemastore.org/package.json",
|
|
||||||
"name": "pleshevskiy",
|
|
||||||
"description": "Dmitriy Pleshevskiy",
|
|
||||||
"version": "0.0.1",
|
|
||||||
"type": "module",
|
|
||||||
"private": true,
|
|
||||||
"packageManager": "pnpm@9.15.4",
|
|
||||||
"scripts": {
|
|
||||||
"build": "vuepress build docs",
|
|
||||||
"dev": "vuepress dev docs"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@rushstack/eslint-patch": "^1.1.4",
|
|
||||||
"@types/node": "^22.1.0",
|
|
||||||
"@vitejs/plugin-vue": "^5.0.0",
|
|
||||||
"@vue/eslint-config-prettier": "^10.0.0",
|
|
||||||
"@vue/eslint-config-typescript": "^14.0.0",
|
|
||||||
"@vue/language-server": "^2.0.19",
|
|
||||||
"@vue/tsconfig": "^0.7.0",
|
|
||||||
"@vue/typescript-plugin": "^2.0.19",
|
|
||||||
"@vuepress/bundler-vite": "^2.0.0-rc.7",
|
|
||||||
"@vuepress/plugin-blog": "^2.0.0-rc.11",
|
|
||||||
"@vuepress/plugin-redirect": "2.0.0-rc.8",
|
|
||||||
"@vuepress/theme-default": "^2.0.0-rc.11",
|
|
||||||
"eslint": "<10.0.0",
|
|
||||||
"eslint-plugin-vue": "^9.14.1",
|
|
||||||
"prettier": ">=3.0.0",
|
|
||||||
"sass": "^1.79.5",
|
|
||||||
"typescript": "~5.7.0",
|
|
||||||
"vue": "^3.4.0",
|
|
||||||
"vue-tsc": "^2.0.0",
|
|
||||||
"vuepress": "^2.0.0-rc.7"
|
|
||||||
}
|
|
||||||
}
|
|
4815
pnpm-lock.yaml
generated
4815
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
|
||||||
"configMigration": true,
|
|
||||||
"extends": ["config:recommended"],
|
|
||||||
"postUpdateOptions": ["pnpmDedupe"]
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
# Can be used as a pre-commit hook
|
|
||||||
# Just symlink this file to .git/hooks/pre-commit
|
|
||||||
|
|
||||||
set -xe
|
|
||||||
|
|
||||||
if [ ! -z "$(git diff --cached --name-only | grep "^docs/")" ]
|
|
||||||
then
|
|
||||||
make build
|
|
||||||
git add dist
|
|
||||||
fi
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<?xml-stylesheet type="text/xsl" href="/sitemap.xsl"?>
|
<?xml-stylesheet type="text/xsl" href="/sitemap.xsl"?>
|
||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://pleshevski.ru/</loc><lastmod>2024-09-05T22:11:51.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/"/></url><url><loc>https://pleshevski.ru/works.html</loc><lastmod>2024-08-07T08:48:54.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/works.html"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/works.html"/></url><url><loc>https://pleshevski.ru/eng/</loc><lastmod>2024-09-05T22:11:51.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/"/></url><url><loc>https://pleshevski.ru/eng/works.html</loc><lastmod>2024-08-07T08:48:54.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/works.html"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/works.html"/></url></urlset>
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://pleshevski.ru/</loc><lastmod>2025-03-12T12:50:22.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/"/></url><url><loc>https://pleshevski.ru/works.html</loc><lastmod>2024-10-15T14:10:49.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/works.html"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/works.html"/></url><url><loc>https://pleshevski.ru/eng/</loc><lastmod>2025-03-12T12:50:22.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/"/></url><url><loc>https://pleshevski.ru/eng/works.html</loc><lastmod>2024-08-07T08:48:54.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/works.html"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/works.html"/></url></urlset>
|
|
@ -37,10 +37,6 @@
|
||||||
background: var(--bg-color);
|
background: var(--bg-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
html {
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
body {
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
|
@ -71,7 +67,7 @@
|
||||||
|
|
||||||
table {
|
table {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-radius: 8px;
|
border-radius: 0.5rem;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -84,19 +80,19 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
th {
|
th {
|
||||||
min-width: 56px;
|
min-width: 3.5em;
|
||||||
padding: 0.6em 1em;
|
padding: 0.6em 1em;
|
||||||
|
|
||||||
background-color: var(--brand-color);
|
background-color: var(--brand-color);
|
||||||
color: var(--bg-color);
|
color: var(--bg-color);
|
||||||
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 16px;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 719px) {
|
@media (max-width: 719px) {
|
||||||
th {
|
th {
|
||||||
font-size: 14px;
|
font-size: 0.875rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +120,7 @@
|
||||||
|
|
||||||
@media (max-width: 719px) {
|
@media (max-width: 719px) {
|
||||||
td {
|
td {
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,12 +129,12 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
margin-top: 10px;
|
margin-top: 0.75rem;
|
||||||
padding: 4px;
|
padding: 0.25rem;
|
||||||
|
|
||||||
color: #888;
|
color: #888;
|
||||||
|
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"baseUrl": ".",
|
|
||||||
"composite": true,
|
|
||||||
"paths": {
|
|
||||||
"@/*": ["./docs/*"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"extends": "@vue/tsconfig/tsconfig.dom.json",
|
|
||||||
"include": ["env.d.ts", "docs/**/*", "docs/**/*.vue"]
|
|
||||||
}
|
|
43
works.html
Normal file
43
works.html
Normal file
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue