diff --git a/app/page.js b/app/page.js
index 23efc8f..ee6ef54 100644
--- a/app/page.js
+++ b/app/page.js
@@ -3,7 +3,7 @@
import React, { useState } from "react";
import { useTranslations, useLocale } from "next-intl";
import { Header } from "@/components/header";
-import { SiVk, SiTelegram, SiPostgresql, SiReact, SiGo, SiHtml5, SiMaildotru, SiGmail, SiTiktok } from "react-icons/si";
+import { SiVk, SiTelegram, SiPostgresql, SiReact, SiGo, SiHtml5, SiMaildotru, SiGmail, SiTiktok, SiGithub } from "react-icons/si";
import Link from "next/link";
import Image from "next/image";
import { TriangleAlert } from "lucide-react";
@@ -51,6 +51,7 @@ export default function Main() {
{"icon": , "name": t("contact.contacts.2.name"), "username": "rezcjikov@gmail.com", "url": "mailto:rezcjikov@gmail.com"},
{"icon": , "name": t("contact.contacts.3.name"), "username": "@rezcjikov", "url": "https://vk.com/rezcjikov/"},
{"icon": , "name": t("contact.contacts.4.name"), "username": "@gattowolfe", "url": "https://tiktok.com/@gattowolfe/"},
+ {"icon": , "name": t("contact.contacts.5.name"), "username": "@dusiburg", "url": "https://github.com/dusiburg/"},
]
const languages = [
diff --git a/dictionary/en.json b/dictionary/en.json
index 972ff98..0b98a5b 100644
--- a/dictionary/en.json
+++ b/dictionary/en.json
@@ -59,13 +59,19 @@
"logoAlt": "Sudoku",
"title": "Sudoku",
"description": "This is a simple game written on Next.js. It's basically the first game I have ever written so that's a nice experience.",
- "text": "My friend got me into Sudoku and very soon I was surprised to find that I liked it. It's not as difficult a game as I thought, and moreover it's a great brain teaser. One day, I decided to write my own site with Sudoku because I couldn't stand the large amount of advertising in apps. So, that's the result. I don't know why I chose this 8-bit aesthetic but I like it. Maybe I'll update the site one day and add some new features."
+ "text": "My friend got me into Sudoku and very soon I was surprised to find that I liked it. It's not as difficult a game as I thought, and moreover it's a great brain teaser. One day, I decided to write my own site with Sudoku because I couldn't stand the large amount of advertising in apps. So, that's the result. I don't know why I chose this 8-bit aesthetic but I like it."
},
{
"logoAlt": "Fastlink logo",
"title": "Fastlink",
"description": "This is what I'm currently working on (and, surprisingly, it's not related to Dusiburg). It's a try to create a messanger-like service in order to practice my Go knowledge in backend. Of course, it's not ready yet...",
"text": "I'm currently working on Fastlink — an attempt to create a simple messenger with backend built with Go. The project is still being developed. I hope to eventually bring it to a state where I can publish it on GitHub. Basically, the main purpose of the project is to help me understand Go better."
+ },
+ {
+ "logoAlt": "Notes logo",
+ "title": "Notes",
+ "description": "A simple note-taking desktop application built with Wails (Go) and React because I wanted something simple and light for storing some things I have to do.",
+ "text": "A simple note-taking desktop application built with Wails (Go) and React. I wanted something lightweight for keeping my tasks. I didn't really like Notion because I had to turn on my VPN every time I visited it, and if I forgot, I'd get automatically logged out. Obsidian felt a bit too complicated for my needs, so I decided to create my own app."
}
]
},
@@ -105,7 +111,8 @@
{ "name": "E-Mail #1" },
{ "name": "E-Mail #2" },
{ "name": "VK" },
- { "name": "Tiktok" }
+ { "name": "Tiktok" },
+ { "name": "Github" }
]
}
}
diff --git a/dictionary/it.json b/dictionary/it.json
index e76a0d1..c541c68 100644
--- a/dictionary/it.json
+++ b/dictionary/it.json
@@ -59,13 +59,19 @@
"logoAlt": "Sudoku",
"title": "Sudoku",
"description": "This is a simple game written on Next.js. It's basically the first game I have ever written so that's a nice experience.",
- "text": "My friend got me into Sudoku and very soon I was surprised to find that I liked it. It's not as difficult a game as I thought, and moreover it's a great brain teaser. One day, I decided to write my own site with Sudoku because I couldn't stand the large amount of advertising in apps. So, that's the result. I don't know why I chose this 8-bit aesthetic but I like it. Maybe I'll update the site one day and add some new features."
+ "text": "My friend got me into Sudoku and very soon I was surprised to find that I liked it. It's not as difficult a game as I thought, and moreover it's a great brain teaser. One day, I decided to write my own site with Sudoku because I couldn't stand the large amount of advertising in apps. So, that's the result. I don't know why I chose this 8-bit aesthetic but I like it."
},
{
"logoAlt": "Fastlink logo",
"title": "Fastlink",
"description": "This is what I'm currently working on (and, surprisingly, it's not related to Dusiburg). It's a try to create a messanger-like service in order to practice my Go knowledge in backend. Of course, it's not ready yet...",
"text": "I'm currently working on Fastlink — an attempt to create a simple messenger with backend built with Go. The project is still being developed. I hope to eventually bring it to a state where I can publish it on GitHub. Basically, the main purpose of the project is to help me understand Go better."
+ },
+ {
+ "logoAlt": "Notes logo",
+ "title": "Notes",
+ "description": "A simple note-taking desktop application built with Wails (Go) and React because I wanted something simple and light for storing some things I have to do.",
+ "text": "A simple note-taking desktop application built with Wails (Go) and React. I wanted something lightweight for keeping my tasks. I didn't really like Notion because I had to turn on my VPN every time I visited it, and if I forgot, I'd get automatically logged out. Obsidian felt a bit too complicated for my needs, so I decided to create my own app."
}
]
},
@@ -105,7 +111,8 @@
{ "name": "E-Mail #1" },
{ "name": "E-Mail #2" },
{ "name": "VK" },
- { "name": "Tiktok" }
+ { "name": "Tiktok" },
+ { "name": "Github" }
]
}
}
diff --git a/dictionary/ru.json b/dictionary/ru.json
index 9f26831..258258c 100644
--- a/dictionary/ru.json
+++ b/dictionary/ru.json
@@ -50,7 +50,7 @@
"text": "Долгое время в Объединении Виртуальных Наций не было актуальной карты стран-участников. Карты, создаваемые в фоторедакторах были неточными и быстро устаревали. Поэтому я решил создать интерактивную карту, которую легко можно было бы обновлять и, которая позволяла бы легко находить нужную информацию о странах ОВН."
},
{
- "logoAlt": "Vote logo",
+ "logoAlt": "Логотип Vote",
"title": "ЦИК Дусибурга",
"description": "Платформа для голосований, где проводятся выборы, референдумы и опросы. Сервис создан для того, чтобы исключительно Граждане Дусибурга могли на них голосовать.",
"text": "Когда голосования Дусибурга проводились в ВК, нужно было выбирать между честностью и анонимностью, ведь кандидаты зачастую просили друзей проголосовать в закрытом голосовании. Поэтому я сделал собственную платформу с авторизацией через Dusiburg ID, где голосуют только граждане. Недавно я добавил систему регистрации законопроектов для Парламента: парламетарии голосуют, результат автоматически отправляется Президенту, который подписывает или отклонияет закон. При успехе — он публикуется на Dusiburg ID. Большой сложностью была реализация взаимодействия сайта ЦИК, Dusiburg ID и ботов в ВК и Телеграме."
@@ -59,13 +59,19 @@
"logoAlt": "Sudoku",
"title": "Sudoku",
"description": "Это простенькая игра, написанная на Next.js. По сути, это первая игра, которую я написал, поэтому считаю, что это прекрасный опыт.",
- "text": "Однажды моя подруга предложила поиграть в Судоку, и очень скоро я полюбил эту игру. Она оказалась не такой сложной, как я думал. Более того, это прекрасная разминка для мозга. Устав от большого количества рекламы в приложениях с Судоку, я решил написать свой собственный сайт, как говориться: с блекджеком и ... Я не знаю, почему я выбрал этот пиксельный дизайн, но он прикольный. Может быть, когда-нибудь я обновлю этот сайт и добавлю какие-то новые штучки туда."
+ "text": "Однажды моя подруга предложила поиграть в Судоку, и очень скоро я полюбил эту игру. Она оказалась не такой сложной, как я думал. Более того, это прекрасная разминка для мозга. Устав от большого количества рекламы в приложениях с Судоку, я решил написать свой собственный сайт, как говориться: с блекджеком и ... Я не знаю, почему я выбрал этот пиксельный дизайн, но он прикольный."
},
{
- "logoAlt": "Fastlink logo",
+ "logoAlt": "Логотип Fastlink",
"title": "Fastlink",
"description": "Это — над чем я работаю прямо сейчас (и, удивительно, не связано с Дусибургом). Это попытка создать подобие мессенджера. Делаю я это с целью попрактиковать мои знания в Go. Конечно, пока Fastlink ещё не готов...",
"text": "Сейчас я работаю над Fastlink — попыткой сделать небольшой мессенджер с бекэндом на Go. Проект ещё в разработке. Надеюсь однажды довести его до состояния, когда его можно будет выложить на GitHub. По большому счёту, это проект, цель которого — помочь мне лучше понять Go."
+ },
+ {
+ "logoAlt": "Логотип Notes",
+ "title": "Notes",
+ "description": "Простое приложение для компьютера для ведения заметок, созданное с помощью Wails (Go) и React. Я хотел что-то лёгкое и простое для ведения списка дел или быстрых заметок",
+ "text": "Простое приложение для компьютера для ведения заметок, созданное с помощью Wails (Go) и React. Я хотел что-то лёгкое и простое для ведения списка дел или быстрых заметок. Мне не очень нравился Notion, потому что каждый раз нужно было включать VPN, а если я забывал — меня автоматически выкидывало из аккаунта. Obsidian показался слишком сложным для простых заметок, поэтому я решил сделать что-то своё."
}
]
},
@@ -105,7 +111,8 @@
{ "name": "Почта 1" },
{ "name": "Почта 2" },
{ "name": "ВК" },
- { "name": "Тикток" }
+ { "name": "Тикток" },
+ { "name": "Гитхаб" }
]
}
}
diff --git a/dockerfile b/dockerfile
index 01bf416..bd3e0cb 100644
--- a/dockerfile
+++ b/dockerfile
@@ -1,24 +1,18 @@
-FROM node:20-slim AS builder
-
-RUN useradd -m appuser
+FROM node:20-alpine AS builder
WORKDIR /app
-
-COPY package.json yarn.lock ./
-RUN yarn install --frozen-lockfile
-
+COPY package*.json ./
+RUN npm install
COPY . .
+RUN npm run build
-RUN --mount=type=cache,target=/app/.next/cache yarn build
-
-FROM node:20-slim AS runner
-
+FROM node:20-alpine
WORKDIR /app
-COPY --from=builder /app ./
-
-USER appuser
+COPY package*.json ./
+RUN npm install --omit=dev
+COPY --from=builder /app/.next ./.next
+COPY --from=builder /app/dictionary ./dictionary
+COPY --from=builder /app/public ./public
EXPOSE 80
-
-CMD ["yarn", "start", "-p", "80", "-H", "0.0.0.0"]
-
+CMD ["npm", "start", "--", "-p", "80", "-H", "0.0.0.0"]
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
- CMD wget -q --spider http://localhost:80 || exit 1
\ No newline at end of file
+ CMD wget -q --spider http://localhost:80/ || exit 1
\ No newline at end of file
diff --git a/lib/projects.json b/lib/projects.json
index 9037430..f70d23d 100644
--- a/lib/projects.json
+++ b/lib/projects.json
@@ -1,6 +1,6 @@
[
{
- "id": 0,
+ "id": 1,
"screenshots": [
"/images/screenshots/id/1.png",
"/images/screenshots/id/4.png",
@@ -20,7 +20,7 @@
"skills": ["Next.js", "Tailwind", "Postgres", "Supabase"]
},
{
- "id": 1,
+ "id": 2,
"screenshots": [
"/images/screenshots/map/1.png",
"/images/screenshots/map/2.png",
@@ -39,7 +39,7 @@
"skills": ["Next.js", "Tailwind", "Mapbox", "Postgres", "Supabase"]
},
{
- "id": 2,
+ "id": 3,
"screenshots": [
"/images/screenshots/vote/1.png"
],
@@ -54,11 +54,12 @@
"skills": ["Next.js", "Tailwind", "Prisma", "Postgres", "Supabase"]
},
{
- "id": 3,
+ "id": 4,
"screenshots": [
"/images/screenshots/sudoku/1.png",
"/images/screenshots/sudoku/3.png",
- "/images/screenshots/sudoku/2.png"
+ "/images/screenshots/sudoku/2.png",
+ "/images/screenshots/sudoku/4.png"
],
"screenshotBg": "bg-zinc-800",
"logo": "/images/logos/sudoku.png",
@@ -71,7 +72,7 @@
"skills": ["Next.js", "Tailwind", "Shadcn"]
},
{
- "id": 4,
+ "id": 5,
"screenshots": [
"/images/screenshots/fastlink/1.png",
"/images/screenshots/fastlink/2.png",
@@ -84,5 +85,21 @@
"text": "projects.items.4.text",
"description": "projects.items.4.description",
"skills": ["Next.js", "Tailwind", "Shadcn", "Go", "Postgres", "Supabase"]
+ },
+ {
+ "id": 6,
+ "screenshots": [
+ "/images/screenshots/notes/1.png",
+ "/images/screenshots/notes/2.png"
+ ],
+ "screenshotBg": "bg-black",
+ "logo": "/images/logos/notes.png",
+ "logoAlt": "projects.items.5.logoAlt",
+ "title": "projects.items.5.title",
+ "url": "https://github.com/dusiburg/notes",
+ "hostname": "@dusiburg/notes",
+ "text": "projects.items.5.text",
+ "description": "projects.items.5.description",
+ "skills": ["Go", "React"]
}
]
\ No newline at end of file
diff --git a/public/images/logos/notes.png b/public/images/logos/notes.png
new file mode 100644
index 0000000..dff8e75
Binary files /dev/null and b/public/images/logos/notes.png differ
diff --git a/public/images/screenshots/notes/1.png b/public/images/screenshots/notes/1.png
new file mode 100644
index 0000000..4441be5
Binary files /dev/null and b/public/images/screenshots/notes/1.png differ
diff --git a/public/images/screenshots/notes/2.png b/public/images/screenshots/notes/2.png
new file mode 100644
index 0000000..5f0f6b7
Binary files /dev/null and b/public/images/screenshots/notes/2.png differ
diff --git a/public/images/screenshots/sudoku/3.png b/public/images/screenshots/sudoku/3.png
index 2e32337..5d1cc12 100644
Binary files a/public/images/screenshots/sudoku/3.png and b/public/images/screenshots/sudoku/3.png differ
diff --git a/public/images/screenshots/sudoku/4.png b/public/images/screenshots/sudoku/4.png
new file mode 100644
index 0000000..b2ffed4
Binary files /dev/null and b/public/images/screenshots/sudoku/4.png differ