Initial commit

This commit is contained in:
Artyom Belousov 2026-02-08 20:57:57 +03:00 committed by Artyom Belousov
commit 750943aaba
16 changed files with 318 additions and 0 deletions

3
.editorconfig Normal file
View file

@ -0,0 +1,3 @@
[*.{html,css}]
indent_style = space
indent_size = 2

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/output.css
/.envrc

2
Dockerfile Normal file
View file

@ -0,0 +1,2 @@
FROM caddy:2.10.0-alpine
COPY . /usr/share/caddy/

15
LICENSE Normal file
View file

@ -0,0 +1,15 @@
BSD Zero Clause License
Copyright (c) 2026 Artyom Belousov
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.

BIN
assets/avatar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

1
assets/codeberg.svg Normal file
View file

@ -0,0 +1 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='#cba6f7' d='M12 1A11 11 0 0 0 1 12a11 11 0 0 0 1.7 6.4L12 6l9.3 12.4A11 11 0 0 0 23 12 11 11 0 0 0 12 1Z'/><path fill='#555' d='M21.3 18.4 12 6l4.4 16.8a11 11 0 0 0 4.9-4.4Z' /></svg>

After

Width:  |  Height:  |  Size: 256 B

BIN
assets/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

2
assets/habr.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

11
assets/linkedin.svg Normal file
View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#cba6f7" height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="-143 145 512 512" xml:space="preserve">
<path d="M113,145c-141.4,0-256,114.6-256,256s114.6,256,256,256s256-114.6,256-256S254.4,145,113,145z M41.4,508.1H-8.5V348.4h49.9
V508.1z M15.1,328.4h-0.4c-18.1,0-29.8-12.2-29.8-27.7c0-15.8,12.1-27.7,30.5-27.7c18.4,0,29.7,11.9,30.1,27.7
C45.6,316.1,33.9,328.4,15.1,328.4z M241,508.1h-56.6v-82.6c0-21.6-8.8-36.4-28.3-36.4c-14.9,0-23.2,10-27,19.6
c-1.4,3.4-1.2,8.2-1.2,13.1v86.3H71.8c0,0,0.7-146.4,0-159.7h56.1v25.1c3.3-11,21.2-26.6,49.8-26.6c35.5,0,63.3,23,63.3,72.4V508.1z
"/>
</svg>

After

Width:  |  Height:  |  Size: 824 B

4
assets/telegram.svg Normal file
View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM12.3583 9.38244C11.3857 9.787 9.44177 10.6243 6.52657 11.8944C6.05318 12.0827 5.8052 12.2669 5.78263 12.4469C5.74448 12.7513 6.12559 12.8711 6.64455 13.0343C6.71515 13.0565 6.78829 13.0795 6.86327 13.1038C7.37385 13.2698 8.06068 13.464 8.41773 13.4717C8.74161 13.4787 9.1031 13.3452 9.50219 13.0711C12.226 11.2325 13.632 10.3032 13.7202 10.2831C13.7825 10.269 13.8688 10.2512 13.9273 10.3032C13.9858 10.3552 13.98 10.4536 13.9738 10.48C13.9361 10.641 12.4401 12.0318 11.6659 12.7515C11.4246 12.9759 11.2534 13.135 11.2184 13.1714C11.14 13.2528 11.0601 13.3298 10.9833 13.4038C10.509 13.8611 10.1532 14.204 11.003 14.764C11.4114 15.0331 11.7381 15.2556 12.0641 15.4776C12.4201 15.7201 12.7752 15.9619 13.2347 16.2631C13.3517 16.3398 13.4635 16.4195 13.5724 16.4971C13.9867 16.7925 14.3589 17.0579 14.8188 17.0155C15.086 16.991 15.362 16.7397 15.5022 15.9903C15.8335 14.2193 16.4847 10.382 16.6352 8.80081C16.6484 8.66228 16.6318 8.48498 16.6185 8.40715C16.6051 8.32932 16.5773 8.21842 16.4761 8.13633C16.3563 8.03911 16.1714 8.01861 16.0886 8.02C15.7125 8.0267 15.1354 8.22735 12.3583 9.38244Z" fill="#cba6f7"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

6
compose.yaml Normal file
View file

@ -0,0 +1,6 @@
services:
app:
restart: unless-stopped
build: .
ports:
- 127.0.0.1:1234:80

16
devbox.json Normal file
View file

@ -0,0 +1,16 @@
{
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.16.0/.schema/devbox.schema.json",
"packages": [
"live-server@latest",
],
"shell": {
"init_hook": [
"echo 'Welcome to devbox!' > /dev/null"
],
"scripts": {
"test": [
"echo \"Error: no test specified\" && exit 1"
]
}
}
}

57
devbox.lock Normal file
View file

@ -0,0 +1,57 @@
{
"lockfile_version": "1",
"packages": {
"github:NixOS/nixpkgs/nixpkgs-unstable": {
"last_modified": "2026-02-08T07:51:33Z",
"resolved": "github:NixOS/nixpkgs/fef9403a3e4d31b0a23f0bacebbec52c248fbb51?lastModified=1770537093&narHash=sha256-pF1quXG5wsgtyuPOHcLfYg%2Fft%2FQMr8NnX0i6tW2187s%3D"
},
"live-server@latest": {
"last_modified": "2026-01-23T17:20:52Z",
"resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#live-server",
"source": "devbox-search",
"version": "0.11.0",
"systems": {
"aarch64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/45j19v60l7ms9qd4nmx9clgcsc4153v8-live-server-0.11.0",
"default": true
}
],
"store_path": "/nix/store/45j19v60l7ms9qd4nmx9clgcsc4153v8-live-server-0.11.0"
},
"aarch64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/zycqx30blgv023nmnzg7il6mhwrsf3i3-live-server-0.11.0",
"default": true
}
],
"store_path": "/nix/store/zycqx30blgv023nmnzg7il6mhwrsf3i3-live-server-0.11.0"
},
"x86_64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/m4k0kxa4134digwmlrfsz01lqfrv9yhh-live-server-0.11.0",
"default": true
}
],
"store_path": "/nix/store/m4k0kxa4134digwmlrfsz01lqfrv9yhh-live-server-0.11.0"
},
"x86_64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/vk1ds5i7dr51gx8iiwvwykn9b1avgd5j-live-server-0.11.0",
"default": true
}
],
"store_path": "/nix/store/vk1ds5i7dr51gx8iiwvwykn9b1avgd5j-live-server-0.11.0"
}
}
}
}
}

47
index.html Normal file
View file

@ -0,0 +1,47 @@
<!doctype html>
<html>
<head>
<title>Артём Белоусов | Бэкенд разработчик</title>
<link rel="icon" href="./assets/favicon.png" type="image/png">
<link href="./reset.css" rel="stylesheet">
<link href="./input.css" rel="stylesheet">
</head>
<body>
<div class="page-wrapper">
<div class="avatar-wrapper">
<img src="assets/avatar.png" class="avatar" />
</div>
<div class="title-wrapper">
Артём Белоусов
</div>
<div class="subtitle-wrapper">
Бэкенд разработчик
</div>
<div class="icons-wrapper">
<div class="icon-wrapper">
<a href="https://codeberg.org/flygrounder">
<img src="assets/codeberg.svg" class="icon" />
</a>
</div>
<div class="icon-wrapper">
<a href="https://t.me/flygrounder">
<img src="assets/telegram.svg" class="icon" />
</a>
</div>
<div class="icon-wrapper">
<a href="https://habr.com/ru/users/flygrounder/">
<img src="assets/habr.svg" class="icon" />
</a>
</div>
<div class="icon-wrapper">
<a href="https://www.linkedin.com/in/flygrounder/">
<img src="assets/linkedin.svg" class="icon" />
</a>
</div>
</div>
</div>
</body>
</html>

98
input.css Normal file
View file

@ -0,0 +1,98 @@
:root {
--base: rgb(30, 30, 46);
--text: rgb(205, 214, 244);
--mauve: rgb(203, 166, 247);
}
* {
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
background-color: var(--base);
color: var(--text);
}
.page-wrapper {
display: grid;
place-content: center;
height: 100vh;
}
.avatar {
border-radius: 50%;
object-fit: cover;
border-style: solid;
border-color: var(--mauve);
height: 30rem;
width: 30rem;
object-position: 0 -4.5rem;
border-width: 0.75rem;
}
.avatar-wrapper {
display: grid;
place-content: center;
}
.title-wrapper {
display: grid;
place-content: center;
font-weight: bold;
font-size: 4.5rem;
margin-top: 3rem;
}
.subtitle-wrapper {
display: grid;
place-content: center;
font-size: 3.75rem;
}
.icons-wrapper {
display: flex;
place-content: center;
grid-template-columns: repeat(4, 1fr);
margin-top: 3rem;
}
.icon-wrapper {
margin-right: 1.25rem;
}
.icon-wrapper:last-child {
margin-right: 0;
}
.icon {
height: 9rem;
width: 9rem;
}
@media (min-width:1024px) {
.avatar {
height: 10rem;
width: 10rem;
object-position: 0 -1.5rem;
border-width: 0.25rem;
}
.title-wrapper {
font-size: 1.5rem;
margin-top: 1rem;
}
.subtitle-wrapper {
font-size: 1.25rem;
}
.icon-wrapper {
margin-right: 1rem;
}
.icons-wrapper {
margin-top: 1rem;
}
.icon {
height: 3rem;
width: 3rem;
}
}

54
reset.css Normal file
View file

@ -0,0 +1,54 @@
/* 1. Use a more-intuitive box-sizing model */
*, *::before, *::after {
box-sizing: border-box;
}
/* 2. Remove default margin */
*:not(dialog) {
margin: 0;
}
/* 3. Enable keyword animations */
@media (prefers-reduced-motion: no-preference) {
html {
interpolate-size: allow-keywords;
}
}
body {
/* 4. Add accessible line-height */
line-height: 1.5;
/* 5. Improve text rendering */
-webkit-font-smoothing: antialiased;
}
/* 6. Improve media defaults */
img, picture, video, canvas, svg {
display: block;
max-width: 100%;
}
/* 7. Inherit fonts for form controls */
input, button, textarea, select {
font: inherit;
}
/* 8. Avoid text overflows */
p, h1, h2, h3, h4, h5, h6 {
overflow-wrap: break-word;
}
/* 9. Improve line wrapping */
p {
text-wrap: pretty;
}
h1, h2, h3, h4, h5, h6 {
text-wrap: balance;
}
/*
10. Create a root stacking context
*/
#root, #__next {
isolation: isolate;
}