No description
- TypeScript 75.9%
- MDX 17.2%
- CSS 5.2%
- HTML 0.7%
- JavaScript 0.6%
- Other 0.4%
| .forgejo | ||
| .github/workflows | ||
| img | ||
| public | ||
| src | ||
| .dockerignore | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc | ||
| docker-compose.yml | ||
| Dockerfile | ||
| eslint.config.js | ||
| index.html | ||
| nginx.conf | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
Personal website (mikyss.ru)
React - portfolio and projects. Built with Vite, TanStack Router, Tailwind CSS.
Stack
- React 19 + TypeScript
- Vite — dev server and build
- TanStack Router — file-based routing
- Tailwind CSS 4 — styling
- i18next — i18n
Development
Prerequisites: Node.js 22+ and pnpm.
pnpm install
pnpm run dev
- App: http://localhost:5173
- Build:
pnpm run build - Preview build:
pnpm run preview - Lint:
pnpm run lint
Docker
Multi-stage build: Node builds the app, nginx serves static files.
Build and run:
docker compose up -d --build
The app listens on port 80 inside the container. No port is published by default; it’s intended to sit behind a reverse proxy.
External network: Compose uses the proxy-net network. Create it once if it doesn’t exist:
docker network create proxy-net
Deployment
-
Build and run the portfolio on the server (e.g. in its own directory) with the same
docker-compose.yml, so theportfoliocontainer is onproxy-net. -
Reverse proxy: Nginx (or another proxy) must also be on
proxy-netand proxy tohttp://portfolio:80.
Project layout
src/
app/
routes/ # TanStack Router (index, portfolio, …)
main.tsx
components/
lib/
styles/
deploy/ # Nginx proxy configs for deployment
Dockerfile
nginx.conf # In-container nginx for SPA
docker-compose.yml
