Мой персональный сайт-визитка: все полезные ссылки в одном месте. https://geekiot.tech
  • TypeScript 96.8%
  • JavaScript 1.8%
  • CSS 0.9%
  • HTML 0.3%
  • Dockerfile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Kirill Samoylenkov 53c44ae0d4
All checks were successful
Build / Lint and typecheck (push) Successful in 25s
Build / Build image (push) Successful in 14s
docs: document CI workflow and bump node requirement
2026-07-22 13:22:27 +05:00
.github/workflows ci: pin third-party actions to commit SHAs 2026-07-21 21:01:37 +05:00
public feat: add Catppuccin-style SVG favicon 2026-07-18 23:48:25 +05:00
src feat: initial commit of personal website 2026-07-18 20:36:24 +05:00
.dockerignore build: exclude env files and editor dirs from docker context 2026-07-21 21:17:08 +05:00
.example.env build: parametrize compose image, add healthcheck and env template 2026-07-21 21:06:27 +05:00
.gitignore build: parametrize compose image, add healthcheck and env template 2026-07-21 21:06:27 +05:00
components.json feat: initial commit of personal website 2026-07-18 20:36:24 +05:00
docker-compose.yml fix: use 127.0.0.1 in compose healthcheck 2026-07-21 21:10:56 +05:00
Dockerfile build: cache npm downloads in docker build 2026-07-21 21:10:38 +05:00
eslint.config.js ci: add lint and typecheck check job 2026-07-21 20:46:28 +05:00
index.html feat: add Catppuccin-style SVG favicon 2026-07-18 23:48:25 +05:00
nginx.conf feat: initial commit of personal website 2026-07-18 20:36:24 +05:00
package-lock.json chore: rename package to links-website and set version 0.1.0 2026-07-21 21:13:00 +05:00
package.json chore: rename package to links-website and set version 0.1.0 2026-07-21 21:13:00 +05:00
postcss.config.js feat: initial commit of personal website 2026-07-18 20:36:24 +05:00
README.md docs: document CI workflow and bump node requirement 2026-07-22 13:22:27 +05:00
README_ru.md docs: document CI workflow and bump node requirement 2026-07-22 13:22:27 +05:00
tailwind.config.js feat: initial commit of personal website 2026-07-18 20:36:24 +05:00
tsconfig.app.json feat: initial commit of personal website 2026-07-18 20:36:24 +05:00
tsconfig.json feat: initial commit of personal website 2026-07-18 20:36:24 +05:00
tsconfig.node.json feat: initial commit of personal website 2026-07-18 20:36:24 +05:00
vite.config.ts feat: initial commit of personal website 2026-07-18 20:36:24 +05:00

geekiot · links

My personal website: all useful links in one place (Git on Forgejo, Telegram, email, resume). Bilingual UI (RU/EN), Catppuccin Macchiato theme, animated graph background.

Tech Stack

  • React 19 + TypeScript + Vite 7 — build tooling and dev server
  • Tailwind CSS 3 + shadcn/ui (Radix UI) — styling and components
  • react-router — routing
  • lucide-react — icons
  • Docker + nginx — production deployment

Project Structure

src/
├── pages/Home.tsx        # Main (and only) page
├── sections/             # Page sections (GraphBackground)
├── data/links.ts         # Links list (edit here)
├── hooks/                # Custom hooks (language, mobile)
├── components/ui/        # shadcn/ui components
├── App.tsx               # Root component
└── main.tsx              # Entry point

Links are added and edited in src/data/links.ts.

Local Development

Requires Node.js 22+.

npm ci          # install dependencies
npm run dev     # dev server with HMR
npm run build   # production build to dist/
npm run lint    # ESLint check
npm run preview # preview the build

CI

The Forgejo Actions workflow (.github/workflows/build.yml) has two jobs:

  • check — runs on every push to main and every PR: ESLint + tsc -b.
  • build — runs after check passes. On push to main it builds and pushes the Docker image to git.geekiot.tech with tags latest and sha-<short>. On PRs it runs build-only (no push) when the PR has the build label.

Third-party actions are pinned to commit SHAs.

Deployment with Docker

The image is built in two stages: static build with Node, then served by nginx. CI builds and pushes the image to the registry on every push to main.

cp .example.env .env   # optional: overrides, see below
docker compose up -d   # uses the registry image

For a local build instead of the registry image:

docker compose up -d --build

The site will be available at http://localhost:47489 (port is configured in docker-compose.yml, nginx config — nginx.conf).

Environment variables

Docker Compose reads .env automatically (see .example.env):

  • LINKS_WEBSITE_IMAGE — Docker image to deploy (default: git.geekiot.tech/geekiot/links-website/links-website:latest)