Compare commits
10 Commits
556b2d9a3c
...
550fb5f05e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
550fb5f05e | ||
|
|
3c31dda3f7 | ||
|
|
f5538aff6b | ||
|
|
cc4aa2135b | ||
|
|
486daaf529 | ||
|
|
166bf3acf8 | ||
|
|
79dcf49d5a | ||
|
|
a34521973f | ||
|
|
e26b5b8412 | ||
|
|
66fa168ac0 |
30
.github/workflows/deploy.yml
vendored
Normal file
30
.github/workflows/deploy.yml
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
name: Deploy to VPS
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up SSH
|
||||||
|
uses: webfactory/ssh-agent@v0.9.0
|
||||||
|
with:
|
||||||
|
ssh-private-key: ${{ secrets.VPS_SSH_KEY }}
|
||||||
|
|
||||||
|
- name: Deploy via SSH
|
||||||
|
env:
|
||||||
|
USER: ${{ secrets.VPS_USER }}
|
||||||
|
HOST: ${{ secrets.VPS_HOST }}
|
||||||
|
run: |
|
||||||
|
ssh -o StrictHostKeyChecking=no $USER@$HOST << 'EOF'
|
||||||
|
cd ~/portfolio/
|
||||||
|
git pull origin master
|
||||||
|
docker compose up --build -d
|
||||||
|
EOF
|
||||||
@ -42,6 +42,13 @@ const contacts: ContactType[] = [
|
|||||||
},
|
},
|
||||||
title: 'Instagram',
|
title: 'Instagram',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
href: 'https://soundcloud.com/vchika',
|
||||||
|
image: {
|
||||||
|
src: icons.Soundcloud,
|
||||||
|
},
|
||||||
|
title: 'SoundCloud',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export function Contacts() {
|
export function Contacts() {
|
||||||
@ -51,7 +58,7 @@ export function Contacts() {
|
|||||||
<section id="contact">
|
<section id="contact">
|
||||||
<div className="flex min-h-0 flex-col gap-y-3">
|
<div className="flex min-h-0 flex-col gap-y-3">
|
||||||
<h2 className="text-xl font-bold">{t('title')}</h2>
|
<h2 className="text-xl font-bold">{t('title')}</h2>
|
||||||
<div className="flex items-center gap-x-6">
|
<div className="grid grid-cols-3 gap-2 gap-y-3">
|
||||||
{contacts.map((contact) => (
|
{contacts.map((contact) => (
|
||||||
<Contact key={contact.title} {...contact} />
|
<Contact key={contact.title} {...contact} />
|
||||||
))}
|
))}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
import Email from '../../public/icons/email.png';
|
import Email from '../../public/icons/email.png';
|
||||||
import Github from '../../public/icons/github.png';
|
import Github from '../../public/icons/github.png';
|
||||||
import Instagram from '../../public/icons/instagram.png';
|
import Instagram from '../../public/icons/instagram.png';
|
||||||
|
import Soundcloud from '../../public/icons/soundcloud.png';
|
||||||
import Telegram from '../../public/icons/telegram.png';
|
import Telegram from '../../public/icons/telegram.png';
|
||||||
|
|
||||||
export const icons = {
|
export const icons = {
|
||||||
Email,
|
Email,
|
||||||
Github,
|
Github,
|
||||||
Instagram,
|
Instagram,
|
||||||
|
Soundcloud,
|
||||||
Telegram,
|
Telegram,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -14,6 +14,7 @@ const skills = [
|
|||||||
'MongoDB',
|
'MongoDB',
|
||||||
'Redis',
|
'Redis',
|
||||||
'JWT',
|
'JWT',
|
||||||
|
'CI/CD',
|
||||||
];
|
];
|
||||||
|
|
||||||
export function Skills() {
|
export function Skills() {
|
||||||
|
|||||||
@ -11,6 +11,12 @@ export function Work() {
|
|||||||
const t = useTranslations('Work');
|
const t = useTranslations('Work');
|
||||||
|
|
||||||
const companies: CompanyProps[] = [
|
const companies: CompanyProps[] = [
|
||||||
|
{
|
||||||
|
description: t('sovcombanktech.description'),
|
||||||
|
href: 'https://sovcombank.it/',
|
||||||
|
period: t('sovcombanktech.period'),
|
||||||
|
title: t('sovcombanktech.title'),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
description: t('evolution.description'),
|
description: t('evolution.description'),
|
||||||
href: 'https://evoleasing.ru/',
|
href: 'https://evoleasing.ru/',
|
||||||
|
|||||||
@ -2,15 +2,15 @@ services:
|
|||||||
app:
|
app:
|
||||||
build: .
|
build: .
|
||||||
ports:
|
ports:
|
||||||
- "3000:3000"
|
- '3000:3000'
|
||||||
labels:
|
labels:
|
||||||
- "traefik.http.routers.portfolio.rule=Host(`vchikalkin.dev`)" # Замените на ваш домен
|
- 'traefik.http.routers.portfolio.rule=Host(`vchikalkin.dev`)'
|
||||||
- "traefik.http.routers.portfolio.entrypoints=websecure"
|
- 'traefik.http.routers.portfolio.entrypoints=websecure'
|
||||||
- "traefik.http.routers.portfolio.tls=true"
|
- 'traefik.http.routers.portfolio.tls=true'
|
||||||
- "traefik.http.routers.portfolio.tls.certresolver=myresolver"
|
- 'traefik.http.routers.portfolio.tls.certresolver=myresolver'
|
||||||
networks:
|
networks:
|
||||||
- web
|
- web
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
web:
|
web:
|
||||||
external: true
|
external: true
|
||||||
|
|||||||
@ -8,14 +8,19 @@
|
|||||||
"description": "Веб-разработчик с широким опытом работы в различных проектах. Люблю технологии и создавать приятный софт"
|
"description": "Веб-разработчик с широким опытом работы в различных проектах. Люблю технологии и создавать приятный софт"
|
||||||
},
|
},
|
||||||
"About": {
|
"About": {
|
||||||
"summary": "О себе я лучше расскажу лично. Вы можете написать мне и предложить работу, например, в продуктовой компании или на проектной основе. Пишите! Я отвечу на все ваши вопросы. Контакты указаны ниже. 😉"
|
"summary": "О себе я лучше расскажу лично. Вы можете написать мне и предложить работу, например, в продуктовой аккредитованной компании. Пишите! Я отвечу на все ваши вопросы. Контакты указаны ниже. 😉"
|
||||||
},
|
},
|
||||||
"Work": {
|
"Work": {
|
||||||
"experience": "Опыт работы",
|
"experience": "Опыт работы",
|
||||||
|
"sovcombanktech": {
|
||||||
|
"title": "Совкомбанк Технологии",
|
||||||
|
"description": "Старший разработчик",
|
||||||
|
"period": "Январь 2025 — Настоящее время"
|
||||||
|
},
|
||||||
"evolution": {
|
"evolution": {
|
||||||
"title": "Лизинговая компания \"Эволюция\"",
|
"title": "Лизинговая компания \"Эволюция\"",
|
||||||
"description": "Старший разрабочик",
|
"description": "Старший разрабочик",
|
||||||
"period": "Август 2020 — Настоящее время"
|
"period": "Август 2020 — Январь 2025"
|
||||||
},
|
},
|
||||||
"carcade": {
|
"carcade": {
|
||||||
"title": "Лизинговая компания \"Carcade\"",
|
"title": "Лизинговая компания \"Carcade\"",
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
"class-variance-authority": "^0.7.1",
|
"class-variance-authority": "^0.7.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"lucide-react": "^0.468.0",
|
"lucide-react": "^0.468.0",
|
||||||
"next": "15.0.4",
|
"next": "15.1.5",
|
||||||
"next-intl": "^3.26.0",
|
"next-intl": "^3.26.0",
|
||||||
"next-themes": "^0.4.4",
|
"next-themes": "^0.4.4",
|
||||||
"react": "^19.0.0",
|
"react": "^19.0.0",
|
||||||
@ -25,7 +25,7 @@
|
|||||||
"@types/node": "^20",
|
"@types/node": "^20",
|
||||||
"@types/react": "^19",
|
"@types/react": "^19",
|
||||||
"@types/react-dom": "^19",
|
"@types/react-dom": "^19",
|
||||||
"@vchikalkin/eslint-config-awesome": "^2.0.6",
|
"@vchikalkin/eslint-config-awesome": "^2.2.1",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"eslint": "^9.16.0",
|
"eslint": "^9.16.0",
|
||||||
"eslint-plugin-tailwindcss": "^3.17.5",
|
"eslint-plugin-tailwindcss": "^3.17.5",
|
||||||
|
|||||||
1722
pnpm-lock.yaml
generated
1722
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
BIN
public/icons/soundcloud.png
Normal file
BIN
public/icons/soundcloud.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 45 KiB |
Loading…
x
Reference in New Issue
Block a user