diff --git a/README.md b/README.md
index 4739a75..b979e35 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,8 @@
# yarkov.tech
+[](https://opensource.org/licenses/MIT)
+[](https://app.netlify.com/sites/jade-froyo-876dfe/deploys)
+
Personal website created with Astro.
## License
diff --git a/astro.config.mjs b/astro.config.mjs
index 882e651..3ac6c0c 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -1,4 +1,6 @@
import { defineConfig } from 'astro/config';
// https://astro.build/config
-export default defineConfig({});
+export default defineConfig({
+ site: 'https://yarkov.tech',
+});
diff --git a/public/assets/icons/social/email.svg b/public/assets/icons/social/email.svg
deleted file mode 100644
index 289f965..0000000
--- a/public/assets/icons/social/email.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/public/assets/icons/social/github.svg b/public/assets/icons/social/github.svg
deleted file mode 100644
index 78fae17..0000000
--- a/public/assets/icons/social/github.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/public/assets/icons/social/telegram.svg b/public/assets/icons/social/telegram.svg
deleted file mode 100644
index d89fbe7..0000000
--- a/public/assets/icons/social/telegram.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/src/components/Footer/Footer.astro b/src/components/Footer/Footer.astro
new file mode 100644
index 0000000..4f46d12
--- /dev/null
+++ b/src/components/Footer/Footer.astro
@@ -0,0 +1,24 @@
+---
+import './Footer.scss';
+import { AstroIcon, NetlifyIcon, RssIcon } from '@components/icons';
+---
+
+
diff --git a/src/components/Footer/Footer.scss b/src/components/Footer/Footer.scss
new file mode 100644
index 0000000..70d7936
--- /dev/null
+++ b/src/components/Footer/Footer.scss
@@ -0,0 +1,33 @@
+.footer {
+ & .container {
+ margin-top: 5rem;
+ padding: 25px 0 10px 0;
+ font-weight: 500;
+ border-top: 1px solid var(--border-color);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ row-gap: 15px;
+ }
+ &__links {
+ display: flex;
+ align-items: center;
+ column-gap: 25px;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ & li {
+ display: flex;
+ align-items: center;
+ column-gap: 7px;
+ & a {
+ color: var(--font-color);
+ font-size: var(--font-size-sm);
+ }
+ }
+ }
+ &__copy {
+ text-align: center;
+ font-size: var(--font-size-xs);
+ }
+}
diff --git a/src/components/Footer/index.ts b/src/components/Footer/index.ts
new file mode 100644
index 0000000..aab1df4
--- /dev/null
+++ b/src/components/Footer/index.ts
@@ -0,0 +1 @@
+export { default } from './Footer.astro';
diff --git a/src/components/Header/Header.astro b/src/components/Header/Header.astro
new file mode 100644
index 0000000..56b1e1a
--- /dev/null
+++ b/src/components/Header/Header.astro
@@ -0,0 +1,34 @@
+---
+import './Header.scss';
+import { SITE_METADATA } from '@root/config';
+import { EmailIcon, GithubIcon, TelegramIcon } from '@components/icons';
+import ThemeSwitcher from '@components/ThemeSwticher';
+---
+
+
diff --git a/src/components/Header/Header.scss b/src/components/Header/Header.scss
new file mode 100644
index 0000000..da4ce61
--- /dev/null
+++ b/src/components/Header/Header.scss
@@ -0,0 +1,51 @@
+.header {
+ position: sticky;
+ top: 0;
+ border-bottom: 1px solid var(--border-color);
+ background-color: var(--background-header-color);
+ padding-top: 15px;
+ padding-bottom: 15px;
+
+ & .container {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+
+ &__logo a {
+ text-decoration: none;
+ font-weight: 600;
+ font-size: var(--font-size-lg);
+ color: var(--font-color);
+ }
+ &__nav {
+ display: flex;
+ align-items: center;
+ & ul {
+ display: flex;
+ list-style: none;
+ column-gap: 20px;
+ margin: 0;
+ padding: 0;
+ margin-right: 35px;
+ & li a {
+ display: inline-block;
+ font-weight: 500;
+ color: var(--font-color);
+ &:hover {
+ color: var(--color-blue-500);
+ }
+ }
+ }
+ &-contacts {
+ display: flex;
+ align-items: center;
+ column-gap: 10px;
+ margin-right: 40px;
+ & a {
+ text-decoration: none;
+ font-size: 0;
+ }
+ }
+ }
+}
diff --git a/src/components/Header/index.ts b/src/components/Header/index.ts
new file mode 100644
index 0000000..3e3fbb4
--- /dev/null
+++ b/src/components/Header/index.ts
@@ -0,0 +1 @@
+export { default } from './Header.astro';
diff --git a/src/components/Sections/RecentArticles/RecentArticles.astro b/src/components/Sections/RecentArticles/RecentArticles.astro
new file mode 100644
index 0000000..eb7e990
--- /dev/null
+++ b/src/components/Sections/RecentArticles/RecentArticles.astro
@@ -0,0 +1,32 @@
+---
+import './RecentArticles.scss';
+---
+
+
diff --git a/src/components/Sections/RecentArticles/RecentArticles.scss b/src/components/Sections/RecentArticles/RecentArticles.scss
new file mode 100644
index 0000000..5972a04
--- /dev/null
+++ b/src/components/Sections/RecentArticles/RecentArticles.scss
@@ -0,0 +1,47 @@
+.publications {
+ &-heading {
+ display: flex;
+ align-items: center;
+ column-gap: 15px;
+ row-gap: 5px;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ border-bottom: 1px solid var(--border-color);
+ padding-bottom: 10px;
+ & h2 {
+ margin: 0;
+ }
+ }
+ &-list {
+ margin-top: 10px;
+ max-width: calc(var(--content-width) + (var(--content-padding) * 2));
+ & article {
+ border-radius: var(--border-radius-md);
+ & a {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ column-gap: 10px;
+ color: var(--font-color);
+ padding: 8px 15px;
+ text-decoration: none;
+ & h3 {
+ font-size: var(--font-size-md);
+ font-weight: normal;
+ margin: 0;
+ }
+ & p {
+ font-size: var(--font-size-xs);
+ font-family: monospace;
+ color: var(--font-color-gray);
+ text-transform: uppercase;
+ margin: 0;
+ text-align: right;
+ }
+ }
+ &:hover {
+ background-color: var(--background-color-hover);
+ }
+ }
+ }
+}
diff --git a/src/components/Sections/RecentArticles/index.ts b/src/components/Sections/RecentArticles/index.ts
new file mode 100644
index 0000000..d99a12b
--- /dev/null
+++ b/src/components/Sections/RecentArticles/index.ts
@@ -0,0 +1 @@
+export { default as RecentArticlesSection } from './RecentArticles.astro';
diff --git a/src/components/Sections/Welcome/Welcome.astro b/src/components/Sections/Welcome/Welcome.astro
new file mode 100644
index 0000000..2e3ee4c
--- /dev/null
+++ b/src/components/Sections/Welcome/Welcome.astro
@@ -0,0 +1,44 @@
+---
+import './Welcome.scss';
+---
+
+
diff --git a/src/components/Sections/Welcome/Welcome.scss b/src/components/Sections/Welcome/Welcome.scss
new file mode 100644
index 0000000..cdfd327
--- /dev/null
+++ b/src/components/Sections/Welcome/Welcome.scss
@@ -0,0 +1,45 @@
+.welcome {
+ margin-top: 80px;
+ margin-bottom: 150px;
+ &-heading {
+ &__title {
+ & h1 {
+ font-size: var(--font-size-5xl);
+ font-weight: bold;
+ margin-bottom: 0.5rem;
+ }
+ & h2 {
+ font-size: var(--font-size-xl);
+ margin-bottom: 1.25rem;
+ font-weight: normal;
+ }
+ }
+ &__description {
+ font-size: var(--font-size-lg);
+ max-width: 570px;
+ line-height: 1.5;
+ }
+ }
+ &-links {
+ display: flex;
+ align-items: center;
+ column-gap: 20px;
+ &__link {
+ display: flex;
+ align-items: center;
+ column-gap: 5px;
+ & a {
+ color: var(--font-color-gray);
+ }
+ & svg {
+ fill: var(--font-color-gray);
+ }
+ }
+ }
+}
+
+// @media screen and (max-width: 700px) {
+// .welcome {
+
+// }
+// }
diff --git a/src/components/Sections/Welcome/index.ts b/src/components/Sections/Welcome/index.ts
new file mode 100644
index 0000000..b9d7b30
--- /dev/null
+++ b/src/components/Sections/Welcome/index.ts
@@ -0,0 +1 @@
+export { default as WelcomeSection } from './Welcome.astro';
diff --git a/src/components/Sections/index.ts b/src/components/Sections/index.ts
new file mode 100644
index 0000000..8348313
--- /dev/null
+++ b/src/components/Sections/index.ts
@@ -0,0 +1,2 @@
+export * from './Welcome';
+export * from './RecentArticles';
diff --git a/src/components/ThemeSwticher/ThemeSwitcher.astro b/src/components/ThemeSwticher/ThemeSwitcher.astro
new file mode 100644
index 0000000..7ef389c
--- /dev/null
+++ b/src/components/ThemeSwticher/ThemeSwitcher.astro
@@ -0,0 +1,8 @@
+---
+import './ThemeSwitcher.scss';
+import { MoonIcon } from '@components/icons';
+---
+
+
diff --git a/src/components/ThemeSwticher/ThemeSwitcher.scss b/src/components/ThemeSwticher/ThemeSwitcher.scss
new file mode 100644
index 0000000..f74bb2b
--- /dev/null
+++ b/src/components/ThemeSwticher/ThemeSwitcher.scss
@@ -0,0 +1,9 @@
+.theme-switcher {
+ background: none;
+ border: none;
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ padding: 0;
+ margin: 0;
+}
diff --git a/src/components/ThemeSwticher/index.ts b/src/components/ThemeSwticher/index.ts
new file mode 100644
index 0000000..50e6b3d
--- /dev/null
+++ b/src/components/ThemeSwticher/index.ts
@@ -0,0 +1 @@
+export { default } from './ThemeSwitcher.astro';
diff --git a/src/components/icons/AstroIcon.astro b/src/components/icons/AstroIcon.astro
new file mode 100644
index 0000000..3774491
--- /dev/null
+++ b/src/components/icons/AstroIcon.astro
@@ -0,0 +1,16 @@
+---
+---
+
+
diff --git a/src/components/icons/EmailIcon.astro b/src/components/icons/EmailIcon.astro
new file mode 100644
index 0000000..76a8302
--- /dev/null
+++ b/src/components/icons/EmailIcon.astro
@@ -0,0 +1,21 @@
+---
+---
+
+
diff --git a/src/components/icons/GithubIcon.astro b/src/components/icons/GithubIcon.astro
new file mode 100644
index 0000000..222144d
--- /dev/null
+++ b/src/components/icons/GithubIcon.astro
@@ -0,0 +1,13 @@
+---
+---
+
+
diff --git a/src/components/icons/MoonIcon.astro b/src/components/icons/MoonIcon.astro
new file mode 100644
index 0000000..d08427a
--- /dev/null
+++ b/src/components/icons/MoonIcon.astro
@@ -0,0 +1,14 @@
+---
+---
+
+
diff --git a/src/components/icons/NetlifyIcon.astro b/src/components/icons/NetlifyIcon.astro
new file mode 100644
index 0000000..d597bb2
--- /dev/null
+++ b/src/components/icons/NetlifyIcon.astro
@@ -0,0 +1,27 @@
+---
+---
+
+
diff --git a/src/components/icons/RssIcon.astro b/src/components/icons/RssIcon.astro
new file mode 100644
index 0000000..47f8332
--- /dev/null
+++ b/src/components/icons/RssIcon.astro
@@ -0,0 +1,14 @@
+---
+---
+
+
diff --git a/src/components/icons/TelegramIcon.astro b/src/components/icons/TelegramIcon.astro
new file mode 100644
index 0000000..b4affa2
--- /dev/null
+++ b/src/components/icons/TelegramIcon.astro
@@ -0,0 +1,13 @@
+---
+---
+
+
diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts
new file mode 100644
index 0000000..bf3a4ff
--- /dev/null
+++ b/src/components/icons/index.ts
@@ -0,0 +1,17 @@
+import EmailIcon from './EmailIcon.astro';
+import GithubIcon from './GithubIcon.astro';
+import TelegramIcon from './TelegramIcon.astro';
+import MoonIcon from './MoonIcon.astro';
+import AstroIcon from './AstroIcon.astro';
+import NetlifyIcon from './NetlifyIcon.astro';
+import RssIcon from './RssIcon.astro';
+
+export {
+ EmailIcon,
+ GithubIcon,
+ TelegramIcon,
+ MoonIcon,
+ AstroIcon,
+ NetlifyIcon,
+ RssIcon,
+};
diff --git a/src/config.ts b/src/config.ts
new file mode 100644
index 0000000..b385b35
--- /dev/null
+++ b/src/config.ts
@@ -0,0 +1,9 @@
+export const SITE_METADATA = {
+ name: 'yarkov.tech',
+ author: 'Sergey Yarkov',
+ contacts: {
+ email: 'serzh.yarkov@gmail.com',
+ githubUrl: 'https://github.com/sergeyyarkov',
+ telegramUrl: 'https://t.me/sergeyyarkov',
+ },
+};
diff --git a/src/layouts/Page.astro b/src/layouts/Page.astro
new file mode 100644
index 0000000..2590927
--- /dev/null
+++ b/src/layouts/Page.astro
@@ -0,0 +1,26 @@
+---
+import '@styles/global.scss';
+import Header from '@components/Header';
+import Footer from '@components/Footer';
+
+export interface Props {
+ title?: string | undefined;
+}
+
+const { title = 'Sergey Yarkov' } = Astro.props as Props;
+---
+
+
+
+
+
+ {title}
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/articles.astro b/src/pages/articles.astro
new file mode 100644
index 0000000..35bd18b
--- /dev/null
+++ b/src/pages/articles.astro
@@ -0,0 +1,13 @@
+---
+import '@styles/global.scss';
+---
+
+
+
+
+
+
+ Sergey Yarkov
+
+ ...
+
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 33e47d3..0270660 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -1,64 +1,12 @@
---
-import '../styles/global.scss';
-import siteMetadata from '../../siteMetadata.json';
+import Page from '@layouts/Page.astro';
+import {
+ WelcomeSection,
+ RecentArticlesSection,
+} from '@root/components/Sections';
---
-
-
-
-
- Astro
-
-
-
-
- yarkov.tech
-
- web-site is under construction now
thank you
-
-
-
-
-
+
+
+
+
diff --git a/src/styles/global.scss b/src/styles/global.scss
index 9341f7b..e3ef038 100644
--- a/src/styles/global.scss
+++ b/src/styles/global.scss
@@ -1,10 +1,27 @@
-@import url('./fonts.scss');
+@import url('https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap');
:root {
+ /* Fonts */
--font-fallback: -apple-system, BlinkMacSystemFont, Segoe UI, Arial,
sans-serif, Apple Color Emoji, Segoe UI Emoji;
- --font-body: 'Rubik', var(--font-fallback);
+ --font-family-base: 'Rubik', var(--font-fallback);
+ --font-color: var(--color-black);
+ --font-color-gray: var(--color-gray-500);
+ --font-size-xs: 0.75rem;
+ --font-size-sm: 0.875rem;
+ --font-size-md: 1rem;
+ --font-size-lg: 1.125rem;
+ --font-size-xl: 1.25rem;
+ --font-size-2xl: 1.5rem;
+ --font-size-3xl: 1.875rem;
+ --font-size-4xl: 2.25rem;
+ --font-size-5xl: 3rem;
+ --font-size-6xl: 3.75rem;
+ --font-size-7xl: 4.5rem;
+ --font-size-8xl: 6rem;
+ --font-size-9xl: 8rem;
+ /* Colors */
--color-white: #ffffff;
--color-black: #010409;
@@ -51,10 +68,90 @@
--color-yellow-700: #693e00;
--color-yellow-800: #4b2900;
--color-yellow-900: #341a00;
+
+ --background-color-hover: var(--color-gray-50);
+
+ /* Border */
+ --border-color: var(--color-gray-100);
+ --border-radius-md: 3px;
+
+ /* Sizes */
+ --content-width: 760px;
+ --content-padding: 15px;
+
+ /* Elements */
+ --background-body-color: var(--color-white);
+ --background-header-color: var(--color-white);
+}
+
+::selection {
+ background: var(--color-yellow-100);
+ color: var(--color-black);
+}
+
+html,
+body {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
+
+html {
+ font-size: 16px;
+ font-weight: normal;
+ font-kerning: normal;
+ font-family: var(--font-family-base);
}
body {
- color: var(--color-black);
- background-color: var(--color-white);
- font-family: var(--font-body);
+ margin: 0;
+ padding: 0;
+ color: var(--font-color);
+ background-color: var(--background-body-color);
+}
+
+.site-content {
+ flex: 1 0 auto;
+ width: 100%;
+ margin-top: 5rem;
+}
+
+.container {
+ max-width: var(--content-width);
+ margin: 0 auto;
+ padding: 0 var(--content-padding);
+}
+
+a {
+ color: var(--color-blue-500);
+ font-weight: 500;
+ text-decoration: none;
+ &:hover {
+ text-decoration: underline;
+ color: var(--color-blue-500);
+ }
+}
+
+p {
+ margin-top: 0;
+ margin-bottom: 1.5rem;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5 {
+ margin-top: 0;
+ margin-bottom: 1.5rem;
+}
+
+svg {
+ fill: var(--color-black);
+}
+
+@media screen and (max-width: 700px) {
+ .site-content {
+ margin-top: 1.5rem;
+ }
}
diff --git a/tsconfig.json b/tsconfig.json
index 7ac8180..6af2fc4 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,15 +1,19 @@
{
"compilerOptions": {
- // Enable top-level await, and other modern ESM features.
"target": "ESNext",
"module": "ESNext",
- // Enable node-style module resolution, for things like npm package imports.
"moduleResolution": "node",
- // Enable JSON imports.
"resolveJsonModule": true,
- // Enable stricter transpilation for better output.
"isolatedModules": true,
- // Add type definitions for our Vite runtime.
- "types": ["vite/client"]
- }
+ "types": ["vite/client"],
+ "baseUrl": ".",
+ "paths": {
+ "@root/*": ["./src/*"],
+ "@styles/*": ["./src/styles/*"],
+ "@components/*": ["./src/components/*"],
+ "@layouts/*": ["./src/layouts/*"]
+ },
+ "outDir": "./dist"
+ },
+ "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.ts"]
}