PDF резюме: Puppeteer-скрипт, кнопка скачивания, имя файла Mamadaev_Nik__CV__Product_Designer_UX-UI

This commit is contained in:
Local Build committed 2026-08-14 10:05:17 +02:00
1 parent 322938b5ec
commit 97e56b48bf
45 files changed
+5132 -4197

No files matched your search

-57
View File
@@ -1,57 +0,0 @@
# Синхронизация `public` -> `gitverse`
## Назначение
Скрипт `sync-gitverse` копирует содержимое `public` в папку `gitverse`, затем выполняет коммит и пуш в репозиторий внутри `gitverse`.
## Запуск
- Через npm:
- `npm run sync-gitverse`
- Напрямую:
- `node scripts/sync-gitverse.mjs`
- С явными путями:
- `node scripts/sync-gitverse.mjs <sourceDir> <targetDir>`
По умолчанию:
- `sourceDir = public`
- `targetDir = gitverse`
## Что делает скрипт
1. Проверяет, что исходная папка существует.
2. В целевой папке удаляет всё, кроме:
- `.git`
- `.gitverse`
3. Копирует содержимое `public` в `gitverse` (файлы `.png` пропускаются — в деплое используются WebP и остальные форматы).
4. В репозитории `gitverse` выполняет:
- `git add .`
- `git commit -m "sync public YYYY-MM-DD HH:mm"` (только если есть изменения)
- `git push`
5. После успешного пуша открывает в системном браузере по умолчанию: `https://mamadaevv.gitverse.site/me/`
Если изменений после копирования нет, коммит и пуш не делаются.
## Инструкция для агента (Cursor)
Когда пользователь просит **выложить на GitVerse**, **собрать/задеплоить gitverse**, **синхронизировать с gitverse** или аналогично:
1. **Сборка `public/`:** если менялись `src/pages/**` или `src/partials/**` — `npm run build:pages`; если шрифты/Plyr/`package.json` или `scripts/copy-vendor.mjs` — `npm run build` (сначала `vendor:copy`, затем страницы). См. [`docs/vendor-assets.md`](vendor-assets.md).
2. **Синк и пуш:** выполни `npm run sync-gitverse` из корня. Нужны разрешения **network** и **git_write** (SSH на GitVerse, пуш из папки `gitverse`).
3. **Ожидания:** скрипт не копирует файлы `.png` в `gitverse`. После **успешного** `git push` открывается системный браузер с `https://mamadaevv.gitverse.site/me/`. Если изменений в `gitverse` после копирования нет — коммит/пуш не выполняются, браузер не открывается.
4. **Не вызывай** `sync-gitverse` без запроса пользователя: скрипт очищает целевую папку (кроме `.git` и `.gitverse`) и пушит в remote.
5. **Корневой git репозиторий** этого проекта считается **только локальным**: не пушь из корня в `origin` и не настраивай remote без явной просьбы пользователя с URL. Внешняя выкладка — через `gitverse`, не через `git push` в корне.
6. Деплой на VPS — отдельный сценарий, см. **`docs/vps-deploy.md`**.
Подробности и ограничения — в разделах выше.
## Требования
- В `gitverse` уже должен быть инициализирован git-репозиторий (папка `.git`).
- Должен быть настроен доступ на push (SSH-ключ/права).
## Важно
- Скрипт удаляет в `gitverse` все файлы и папки, кроме `.git` и `.gitverse`.
- Не запускай скрипт, если в `gitverse` есть локальные несохраненные изменения, которые нужно оставить.
+5 -11
View File
@@ -1,10 +1,11 @@
# Локальный просмотр сайта
Сайт в режиме разработки обслуживается из папки `**public/**` через [BrowserSync](https://browsersync.io/): при изменении файлов страница в браузере обновляется сама.
Сайт в режиме разработки обслуживается из папки `**public/**` через нативный HTTP-сервер (Node.js `http` модуль): статика + API правок контента.
## Требования
- Установлены **Node.js** и **npm** (идут вместе с Node).
- **Node.js 22** (см. `.node-version` в корне проекта). fnm/fvm переключают автоматически.
- **npm** (идёт вместе с Node).
## Первый раз в проекте
@@ -23,18 +24,11 @@ npm run vendor:copy
npm run serve
```
Скрипт [`scripts/serve-dev.mjs`](../scripts/serve-dev.mjs): статика из `public/`, API правок контента, перезагрузка **только** при изменениях в `public/**` (запись в `texts/content-edits/` вкладку не перезагружает).
Без API: `npm run serve:static`.
Скрипт [`scripts/serve-dev.mjs`](../scripts/serve-dev.mjs): статика из `public/`, API правок контента. Нет авто-релиоада — после правок в `public/` обновляй страницу вручную.
## Куда смотреть
- **Сайт:** [http://localhost:4175](http://localhost:4175) — откроется `public/index.html` и остальные пути относительно `public/`.
- **Панель BrowserSync UI:** [http://localhost:4176](http://localhost:4176) (опционально, для синхронизации и настроек).
## Что отслеживается
Любые изменения в `**public/**`**: HTML, CSS, JS, картинки. Папка `texts/content-edits/` **не** в watch — autosave правок не сбрасывает режим редактирования.
## API правок контента
@@ -48,4 +42,4 @@ npm run serve
## Остановка
В терминале: **Ctrl+C**.
В терминале: **Ctrl+C**.
+52
View File
@@ -0,0 +1,52 @@
# PDF резюме
## Генерация PDF
Скрипт `scripts/generate-resume-pdf.mjs` открывает `resume-5.html` через Puppeteer, применяет шрифт geologica (PT Sans), убирает подложку/обводку блока `.resume-doc` и сохраняет PDF.
**Важно**: скрипт требует запущенный dev-сервер (`npm run serve` → `localhost:4175`).
### Запуск
```bash
npm run generate:resume-pdf
```
или вручную:
```bash
node scripts/generate-resume-pdf.mjs http://localhost:4175/resume-5.html geologica
```
Параметры:
- `[url]` — URL страницы (по умолчанию `http://localhost:4175/resume-5.html`)
- `[font]` — ID шрифта: `geologica`, `merriweather`, `mono` (по умолчанию `geologica`)
### Выходной файл
`public/assets/resume/Mamadaev_Nik__CV__Product_Designer_UX-UI.pdf`
Кнопка «Скачать в PDF» на странице `resume-5.html` — это `<a>` ссылка на этот файл.
### Когда перегенерировать
- После правок в `src/pages/resume-5.html` (контент, стили)
- После правок в `src/css/resume-5.css` (инлайн-стили в `<style>`)
- При смене шрифта по умолчанию в скрипте
### Что скрипт делает с страницей
1. Устанавливает шрифт через `localStorage` + `data-font`
2. Ждёт загрузки шрифтов (`document.fonts.ready`)
3. Удаляет `header`, `footer`, `nav`, `.fab-stack`, `.cookie-notice`, `.skip-link`
4. Убирает `max-width` с `.resume-doc`, ставит `width: 100%`
5. Убирает фон (`background: transparent`) и обводку (`border: none`)
6. Захватывает `.resume-doc` как A4 PDF с `printBackground: true`
### Не попадает в PDF
Из `.resume-doc` удаляются (но остаются на сайте):
- Фон блока
- Обводка блока
Всё остальное (отступы, шрифты, сетка) — как на сайте.
+1 -5
View File
@@ -1,6 +1,6 @@
# Локальные vendor-ассеты (шрифты и Plyr)
Сайт не использует Google Fonts и jsDelivr в рантайме. Файлы лежат в `public/` и попадают на хостинг через `sync-gitverse`.
Сайт не использует Google Fonts и jsDelivr в рантайме. Файлы лежат в `public/` и попадают на хостинг через git push.
## Что где
@@ -49,7 +49,3 @@ npm run build:pages
1. Обновить версию в `package.json` (`dependencies.plyr`).
2. `npm install` → `npm run vendor:copy`.
3. При смене API — правки в `video-player.js`.
## Деплой
Перед `npm run sync-gitverse` выполни `npm run build`, чтобы в `public/` были актуальные шрифты, Plyr и HTML.
-59
View File
@@ -1,59 +0,0 @@
# Деплой на VPS (инкрементальный)
Скрипт `scripts/deploy-vps.mjs` загружает содержимое `public/` на VPS, передавая только изменённые файлы.
## Принцип работы
1. **Манифест** (`.deploy-manifest.json`) хранит `mtime` и `size` каждого файла с прошлого деплоя.
2. При запуске скрипт сканирует `public/`, сравнивает с манифестом:
- Файлы с изменившимся `mtime` или `size` — загружаются.
- Файлы, которых нет локально, но есть в манифесте — удаляются с сервера.
3. Изменённые файлы пакуются в `tar` и передаются **одним SSH-соединением** (без сжатия, чтобы не тратить CPU на уже сжатые медиа).
4. Манифест обновляется после успешного деплоя.
При первом запуске (манифест пуст) заливаются все файлы — ~3 минуты на ~400 файлов. Повторный деплой (1–10 изменившихся файлов) — 2–5 секунд.
## Запуск
```bash
npm run deploy:vps
# или напрямую
node scripts/deploy-vps.mjs [sourceDir]
```
По умолчанию `sourceDir = public`.
## Рецепты
### Только в Coolify
Запрос пользователя: «задеплой в Coolify», «задеплой на VPS».
```bash
npm run deploy:vps
```
Нужны разрешения: **all** (SSH-ключ `~/.ssh/beget`, доступ к файлам `public/`).
### Везде (VPS + GitVerse)
```bash
npm run deploy
```
Выполняет `deploy:vps`, затем `sync-gitverse`.
## Конфигурация
- **SSH-ключ:** `~/.ssh/beget`
- **Хост:** `root@155.212.186.39`
- **Целевая папка:** `/data/static-site`
- **Манифест:** `.deploy-manifest.json` в корне проекта (не коммитится)
## Сброс манифеста
Если нужно залить всё с нуля — удалить `.deploy-manifest.json`:
```bash
rm .deploy-manifest.json
```