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