Files
Emil_Shanayev_Resume/CLAUDE.md
T
emil28092005andClaude Sonnet 4.6 727996503e feat: rewrite site as Next.js 14 portfolio with terminal aesthetic
Replaces Hugo site with a Next.js App Router (TypeScript) build.
Tailwind CSS custom terminal palette, Framer Motion scroll reveals,
JetBrains Mono font, scanline/vignette overlays, typing animation.
Sections: Hero, Skills, Projects, Contact. Content driven from data/resume.ts.
Deploy workflow updated for static export to gh-pages.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 04:15:07 +03:00

157 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md — my-project
> описание проекта
## Стек
**Языки:** Go, TypeScript
**Frontend:** React, TypeScript
**Инфраструктура:** Docker, Kubernetes, GitHub Actions, Jenkins
**Стиль кода:** Минимальные зависимости, явные типы (Go type hints + TS strict mode)
---
## Принципы работы агента
- При неоднозначности в задаче — спрашивай, не угадывай и не двигайся вперёд.
- Предпочитай простейшее рабочее решение. Не создавай абстракций без необходимости.
- Не трогай код, файлы и конфиги вне скоупа текущей задачи.
- Верифицируй результат: запускай тесты, проверяй edge cases до завершения задачи.
- Не ломай существующие тесты ради реализации новой функциональности.
---
## Запрещено
- Не изменять `.env`, `docker-compose.yml`, `k8s/prod/*` без явного разрешения.
- Не делать `git push --force` ни при каких обстоятельствах.
- Не деплоить в production без явного подтверждения пользователя.
- Не удалять Kubernetes namespaces, PersistentVolumes или secrets без явной команды.
- Не изменять pipeline-конфиги (Jenkinsfile, .github/workflows/*) без обсуждения.
---
## Точки остановки (обязательный checkpoint)
Агент обязан остановиться и явно спросить разрешение перед:
- Любыми изменениями в `k8s/prod/*` или `k8s/staging/*`
- Удалением Docker-образов, volumes или сетей
- Изменением RBAC-правил или ServiceAccount'ов
- Ротацией или созданием новых secrets/credentials
- Изменением resource limits/requests на production-сервисах
- Любой операцией, которую нельзя откатить за < 5 минут
---
## Структура проекта
```
.
├── cmd/ # точки входа (main.go)
├── internal/ # приватный код приложения
├── pkg/ # публичные пакеты
├── frontend/ # React-приложение (TypeScript)
│ ├── src/
│ │ ├── components/
│ │ ├── hooks/
│ │ └── pages/
│ └── package.json
├── k8s/
│ ├── base/ # базовые манифесты
│ ├── staging/ # overlays для staging
│ └── prod/ # overlays для production ← только с разрешения
├── .github/
│ └── workflows/ # GitHub Actions pipelines
├── Dockerfile
├── docker-compose.yml ← не изменять без разрешения
└── .env ← не изменять без разрешения
```
---
## Соглашения по коду (Go)
- Стиль: стандартный `gofmt` / `goimports`
- Линтер: `golangci-lint` — запускать перед коммитом
- Ошибки: всегда оборачивать через `fmt.Errorf("...: %w", err)`
- Логирование: использовать структурированный логгер (slog / zap), не `fmt.Println`
- Конфигурация: через переменные окружения, не хардкодить значения
- Зависимости: минимальные; новую зависимость — только с обоснованием
---
## Соглашения по коду (React / TypeScript)
- TypeScript strict mode обязателен (`"strict": true` в tsconfig)
- Компоненты: только функциональные, без class components
- Именование: компоненты — `PascalCase`, хуки — `useCamelCase`, файлы — `kebab-case.tsx`
- Стейт: локальный через `useState`/`useReducer`; глобальный — только при явной необходимости
- Пропсы: всегда типизировать через `interface`, не `type` (для расширяемости)
- Эффекты: не использовать `useEffect` для получения данных — использовать React Query / SWR
- Линтер: ESLint + `eslint-plugin-react-hooks` — запускать перед коммитом
- Форматтер: Prettier с конфигом из репозитория — не менять настройки
- Тесты: Vitest + React Testing Library; не тестировать детали реализации, только поведение
- Никаких `any` типов — использовать `unknown` + type guard при необходимости
---
## CI/CD соглашения
### GitHub Actions
- Каждый PR запускает: lint → test → build → docker build
- Образы тегируются: `<registry>/<app>:<git-sha>`
- Merge в `main` → автодеплой на staging
### Jenkins
- Production-деплой только через Jenkins pipeline с ручным approve-шагом
- Rollback через `helm rollback` или `kubectl rollout undo`
---
## Работа с Docker
- Base image: `gcr.io/distroless/static-debian12` или `alpine:3.x` — не `latest`
- Multi-stage build обязателен для Go-бинарей
- Никаких секретов в ENV инструкциях Dockerfile (использовать BuildKit secrets или runtime env)
- Образы сканировать через `trivy` в CI перед пушем
---
## Работа с Kubernetes
- Все манифесты через Kustomize (не сырой kubectl apply в production)
- Resource requests/limits — обязательны для каждого контейнера
- Liveness/readiness probes — обязательны
- PodDisruptionBudget — обязателен для stateful сервисов
- Никаких `latest` тегов в манифестах
---
## Тестирование
- Unit-тесты: `go test ./...`
- Интеграционные тесты: `go test -tags=integration ./...`
- Покрытие Go: цель ≥ 70% для `internal/`
- Frontend тесты: `pnpm test` (Vitest) — запускать из `frontend/`
- Перед завершением задачи: убедиться, что все тесты проходят
---
## Соглашения по коммитам (Conventional Commits)
```
feat: новая функциональность
fix: исправление бага
chore: рутинные задачи (зависимости, конфиги)
refactor: рефакторинг без изменения поведения
test: добавление/изменение тестов
ci: изменения в CI/CD пайплайнах
docs: документация
```
Примеры:
- `feat(auth): add JWT validation middleware`
- `fix(deploy): correct resource limits for worker pod`
- `ci: add trivy scan step to GitHub Actions`