Мой персональный сайт-визитка: все полезные ссылки в одном месте.
https://geekiot.tech
- TypeScript 96.8%
- JavaScript 1.8%
- CSS 0.9%
- HTML 0.3%
- Dockerfile 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github/workflows | ||
| public | ||
| src | ||
| .dockerignore | ||
| .example.env | ||
| .gitignore | ||
| components.json | ||
| docker-compose.yml | ||
| Dockerfile | ||
| eslint.config.js | ||
| index.html | ||
| nginx.conf | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.js | ||
| README.md | ||
| README_ru.md | ||
| tailwind.config.js | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
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
mainand every PR: ESLint +tsc -b. - build — runs after
checkpasses. On push tomainit builds and pushes the Docker image togit.geekiot.techwith tagslatestandsha-<short>. On PRs it runs build-only (no push) when the PR has thebuildlabel.
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)