14 Commits

Author SHA1 Message Date
AnRil
ee2dc19daa release(v0.3.4): шрифты — Plus Jakarta Sans + Bricolage Grotesque
Some checks failed
CI / Typecheck + Tests (push) Has been cancelled
CI / Build (Windows) (push) Has been cancelled
Release / Build installer + publish release (push) Has been cancelled
Manrope воспринимался слишком строгим и корпоративным. Замена даёт
больше характера и тёплый "попсовый" feel:

- Body/UI: Manrope → Plus Jakarta Sans (мягкие округлые формы 'a' 'g',
  очень распространён в современных трендовых приложениях)
- Display/hero: Fraunces → Bricolage Grotesque (variable шрифт с opsz
  axis: 24 для нормальных заголовков, 96 для hero — гротеск с
  характерными слегка сжатыми формами и большим контрастом штрихов)
- Mono: JetBrains Mono без изменений

Все hero-заголовки пробампаны до 34→40px и font-bold (700), Bricolage
лучше всего смотрится в полужирном/жирном. Sidebar логотип «Laude»
тоже font-bold.

Также:
- body line-height: 1.45 → 1.5 для лучшей читаемости
- Reminder exercise name: 28→30, semibold→bold
- Match summary title: 24→26, semibold→bold
- Sidebar slogan: 12→13/medium, контраст 45→55

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
v0.3.4
2026-05-17 18:36:59 +07:00
AnRil
9b488164e0 release(v0.3.3): акцентная типография — все надписи крупнее и контрастнее
Some checks failed
CI / Typecheck + Tests (push) Has been cancelled
CI / Build (Windows) (push) Has been cancelled
Release / Build installer + publish release (push) Has been cancelled
Жалоба: вторичные подписи (Активных / До следующего / Трекинг матчей /
Возобнови чтобы продолжить отсчёт) выглядели мелко и плохо читались.

Сделан sweep по всему UI:
- Базовая шкала secondary text: 12px → 13-14px
- Контрастность подписей: text-text/45 → text-text/65 (или /75 для лейблов)
- font-medium → font-semibold для метаданных карточек

Dashboard:
- Дата: 13/font-medium → 14/font-semibold
- HeroStat label: 12/medium/55 → 14/semibold/75 (вот эти "Активных" и пр.)
- HeroStat value: 26/semibold → 28/bold
- HeroStat subvalue: 12/45 → 13/60/medium
- HeroStat icon plaque: 24px → 28px
- Paused banner title: 14 → 16, hint: 12 → 14/70
- Иконка баннера 36→40px

Settings:
- ToggleRow/SelectRow label: medium → semibold
- Hint: 12/55 → 13/65/medium
- "Конфигурация": 13/45/medium → 14/65/semibold

Exercises/Challenges (row + page):
- Row title: 15/medium → 16/semibold
- Row subtitle: 13/55 → 14/65/medium
- Стат-метрики bold
- Empty state: 14/55 → 15/65/medium
- Warning banner: 13/80 → 14/85/medium + иконка крупнее

Games:
- Game title: 17/semibold → 18/bold
- Install path subtitle: 12/45 → 13/55/medium
- Queue/error banners: 13/80 → 14/85/medium + крупнее иконки и code

ExerciseCard:
- Title: 17/semibold → 18/bold
- Reps meta: 13/55 → 14/65/medium
- Countdown label "Через/Сейчас": 11/45 → 12/60/semibold
- Countdown value: 22/semibold → 24/bold
- "Готово" CTA: 14/semibold → 15/bold, h-10 → h-11

ReminderApp:
- "Время тренировки" label: 12/45 → 13 + accent цвет + bold
- "Раз" подпись: 14/55 → 15/65/semibold
- "Следующее через": 12/45 → 13/65/medium
- Match summary header: 11/45 → 12/65/semibold
- Match summary subtitle: 12/45 → 13/65/medium
- Match summary total: 12/55 → 13/65/medium + 14 → 16 для числа
- ChallengeRow title: 14/medium → 15/semibold
- ChallengeRow subtitle: 12/55 → 13/65/medium
- CTA Готово: 15/semibold → 16/bold

UpdaterCard:
- Cell title medium → semibold
- Cell subtitle: 12/55 → 13/65/medium
- Иконка ячеек 36→40px
- Progress download title medium → semibold + 18px процент

Card SectionHeader:
- 12/medium/45 → 13/semibold/60

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
v0.3.3
2026-05-17 18:00:52 +07:00
AnRil
aa60acb164 release(v0.3.2): новые шрифты, иконки сайдбара, light по умолчанию
Some checks failed
CI / Typecheck + Tests (push) Has been cancelled
CI / Build (Windows) (push) Has been cancelled
Release / Build installer + publish release (push) Has been cancelled
== Шрифты ==
- Sans/display: Geist → Manrope (мягче, дружелюбнее, ближе к SF Rounded)
- Serif (hero titles): Instrument Serif → Fraunces с opsz axis 144
- Mono: Geist Mono → JetBrains Mono с ss02/ss19/zero features

== Размеры (iOS HIG calibration) ==
- Hero h1: 40-44px → 32-36px (ближе к настоящему iOS Large Title 34pt)
- Reminder name: 32 → 28; reps counter: 64 → 56
- Match summary title: 22 → 24
- Dashboard stat value: 30 → 26
- Body line-height/letter-spacing подкручены под Manrope

== Иконки сайдбара ==
- LayoutDashboard → Sun (Сегодня — утренняя энергия)
- ListChecks → Dumbbell (Упражнения — спорт прямо)
- Gamepad2 → Joystick (Игры — более игровая иконка)
- Target → Flame (Челленджи — интенсивность)
- Settings → Settings2 (немного объёмнее)
- Размер плашки 28→32px, иконки 15→17px

== Light theme ==
- DEFAULT_SETTINGS.theme: 'system' → 'light' (новые установки сразу
  получают светлую тему)
- Light bg прогрет: 242,242,247 → 245,245,249
- surface-2 чуть темнее для лучшей сепарации полей ввода
- text не pure black а 17,17,19 (легче глазам)
- shadow-card получила тёплый slate-tinge

Существующие пользователи с theme='system' продолжат следовать ОС.
Для принудительного переключения — Settings → Тема → Светлая.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
v0.3.2
2026-05-17 17:49:46 +07:00
AnRil
660b6d57d8 chore(release): v0.3.1 — Apple/iOS дизайн
Some checks failed
CI / Typecheck + Tests (push) Has been cancelled
CI / Build (Windows) (push) Has been cancelled
Release / Build installer + publish release (push) Has been cancelled
Включает полный реворк UI в стиле Apple iOS/macOS:
- Geist + Instrument Serif шрифты вместо Rajdhani
- Apple HIG палитра (systemOrange, systemGreen, systemRed, true black dark)
- macOS vibrancy sidebar, iOS grouped lists, UISwitch, action sheets
- Spring анимации, active:scale press feedback

Установщик ведёт себя как install-or-update — обновляет существующую
0.2.x/0.3.0 копию с сохранением настроек.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
v0.3.1
2026-05-17 16:17:27 +07:00
AnRil
c5a29214d2 redesign(ui): полный реворк в стиле Apple iOS/macOS
Ветка для нового интерфейса; main с предыдущим Strava-дизайном
не тронут — можно вернуться через checkout main.

== Design system (foundation) ==
- Шрифты: Geist (sans, display) + Geist Mono (HUD числа) +
  Instrument Serif (hero titles) — все через Google Fonts. Близки
  к SF Pro / SF Mono.
- Палитра: Apple Human Interface Guidelines
  * accent: 255 107 53 (Apple Fitness Move orange)
  * success: 52 199 89 (systemGreen — для switch)
  * destructive: 255 59 48 (systemRed)
  * info: 0 122 255 (systemBlue)
  * warning: 255 159 10
  * Light bg: 242 242 247 (iOS systemGroupedBackground)
  * Dark bg: true black 0 0 0 (OLED-friendly), elevation через
    28/44/56 grey steps как в iOS Settings
- Утилиты: .vibrancy (macOS Big Sur sidebar), .hairline-b/-t (0.5px
  iOS-стиль), .shadow-card (soft layered), .font-display/-serif/-mono-num

== UI primitives ==
- Button: filled / tinted / plain / destructive / success (iOS UIButton);
  active:scale-[0.97] press feedback. Старые имена primary/secondary/
  ghost/danger/victory маппятся через legacyMap для совместимости.
- Switch: настоящий iOS UISwitch 51x31, spring физика knob, success
  цвет on.
- Modal: центрированный sheet с rounded-3xl (22px), backdrop blur,
  spring scale-in. Header с font-display, X в circle.
- Card + Row + SectionHeader: iOS grouped list — белая поверхность,
  hairline-b dividers между rows, last={true} убирает последний.

== App frame ==
- Sidebar: vibrancy (semi-transparent + backdrop-blur saturate 180%),
  font-serif лого, tinted icon-plaques на каждом пункте (как в iOS
  Settings), плавный hover. Drawer на mobile со spring slide.
- Titlebar: центрированный title, window controls без glow, hamburger
  только на <md.
- App.tsx: AnimatePresence cross-fade между маршрутами.

== Pages ==
- Dashboard: hero с font-serif Large Title + датой. 3-card Hero panel
  (Apple Fitness style) с tinted icon squares. ExerciseCard теперь с
  progress-ring вокруг иконки + появляющейся "Готово" pill только при
  due. Three-dot menu (iOS-style popover).
- Exercises: групированный список iOS, разделение Активные/Выключенные,
  chevron-right на каждом row.
- Challenges: тот же групированный паттерн + warning banner если игр
  нет, formula preview карточка в редакторе с big number в accent.
- Games: cards в новом стиле, статус-чипы pulse-dot для LIVE, dev
  кнопки в pill-стиле.
- Settings: классические iOS Settings секции с ToggleRow и SelectRow
  inside Card. UpdaterCard полностью переработан под Cell pattern.

== Reminder window ==
- iOS action sheet: большая иконка в accent-circle сверху, font-serif
  название упражнения, гигантское моноширинное число reps. Кнопки
  стопкой: primary Готово full-width, потом snooze + skip в grid.
  Хоткеи Enter/Space/Esc сохранены.
- Match summary: tone-цветной icon plaque (success/destructive/accent),
  ChallengeRow с pill-shaped check button.

== Анимации ==
- Spring физика везде где layout (Switch knob, Modal, Sidebar drawer,
  карточки)
- active:scale-[0.97] на всех интерактивных элементах (iOS touch feel)
- Cross-fade между страницами через AnimatePresence
- Никаких glow / pulse-ring — apple style это сдержанность

Verified: typecheck OK, 23 tests pass, build 36.35 KB CSS (на 6 KB
меньше предыдущего HUD-стиля), 1.56 MB JS.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 14:17:35 +07:00
AnRil
6ffa100645 feat(release): add upload-release-assets.ps1 helper
Some checks failed
CI / Typecheck + Tests (push) Has been cancelled
CI / Build (Windows) (push) Has been cancelled
Скрипт догружает уже собранные NSIS-артефакты (.exe, .blockmap,
latest.yml) в существующий Gitea release. Создаёт release если его
нет, удаляет одноимённые активы перед перезаписью.

Используется когда:
- release.ps1 успел запушить тег, но упал на загрузке
- релиз делался руками без артефактов
- нужно перезалить артефакты после пересборки

Большие файлы (>50MB) грузятся через curl.exe, потому что
Invoke-RestMethod в PS 5.1 разрывает соединение на multipart upload
80+MB. Прогресс печатается отдельно для каждого файла.

Использован для загрузки v0.3.0 артефактов.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 13:44:42 +07:00
AnRil
e95a8bacb6 chore(release): v0.3.0
Some checks failed
CI / Typecheck + Tests (push) Has been cancelled
CI / Build (Windows) (push) Has been cancelled
Release / Build installer + publish release (push) Has been cancelled
Релиз новой спортивной палитры и адаптивной вёрстки.

- Strava orange + rose цветовая гамма
- Полная адаптивность: collapsible sidebar, drawer на mobile
- 23 unit-теста, typecheck чистый
- Установщик Exercise-Reminder-Setup-0.3.0.exe собран

Установщик ведёт себя как install-or-update: ставится на чистую
систему, обновляет существующую 0.2.x с сохранением настроек.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
v0.3.0
2026-05-17 13:16:57 +07:00
AnRil
cec146ae3a redesign(ui): спортивная палитра Strava + полная адаптивность
Some checks failed
CI / Typecheck + Tests (push) Has been cancelled
CI / Build (Windows) (push) Has been cancelled
== Цветовая гамма ==
Сменили esports cyan+violet на спортивную Strava-палитру:
- accent: orange-500 (#F97316) — энергия, движение, "GO"
- accent-2: rose-500 (#F43F5E) — интенсивность, gradient pair
- victory: lime-500 — личный рекорд / готово
- defeat: red-600
- xp: amber-500
Dark theme переведена с холодного navy на тёплый графит,
light theme очищена в "athletic paper" feel.

== Репозиционирование текста ==
Убрали esports-сленг в пользу спортивной лексики:
- Sidebar: "Play hard · Train harder" → "Move every day"
- Sidebar footer: "GSI-трекинг матчей" → "Трекинг активности"
- Dashboard микрозаголовок: "Mission control" → "Тренировка дня"
- Dashboard HUD: "Cooldown / READY" → "До следующего / СЕЙЧАС",
  "Game tracking / LIVE / OFF" → "Трекинг матчей / LIVE / OFF"
- Exercises: "Loadout" → "Программа"
- Games: "Game integrations" → "Трекинг матчей"
- Challenges: "Match rules" → "Правила за матч"
- Settings: "Config" → "Конфигурация"
- ExerciseCard: "Cooldown / PAUSED" → "Через / пауза"
- ReminderApp: "Cooldown ready" → "Время тренировки",
  "Время размяться" → "Двигайся",
  "Next drop" → "Следующее",
  "Victory · упражнения заработаны" → "Победа · тренировка заработана",
  "Defeat · но тело — нет" → "Проигрыш · но тело не сдаётся",
  "all clear" → "готово", "Total / reps" → "Всего / повторов",
  "GG" → "Готово"

== Адаптивная вёрстка ==
- App.tsx: state mobileNavOpen, авто-закрытие drawer на route change
- Sidebar: три режима через CSS breakpoints —
  * lg+ (≥1024px): полная ширина w-60 с лейблами
  * md (768-1023px): icon-only w-16 с title-тултипами
  * <md (<768px): скрыта, открывается drawer-ом по hamburger
- Titlebar: hamburger button слева на <md, title скрывается на <sm
- Все hero-блоки страниц: flex-col на sm, flex-row sm:items-end
  sm:justify-between с stack gap-4
- Padding страниц: p-4 sm:p-6 lg:p-8 вместо p-8
- Hero h1: text-3xl sm:text-4xl
- Dashboard HUD strip: grid-cols-2 lg:grid-cols-4 (было 1/2/4)
- Action buttons в карточках/строках: opacity-100 lg:opacity-0
  lg:group-hover (на узких экранах всегда видны)
- GameRow buttons: flex-wrap для длинных лейблов
- Dashboard challenges shortcut: hint hidden sm:block
- Sidebar mobile drawer: framer-motion слайд + backdrop с blur

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 12:50:20 +07:00
AnRil
92e15e69a3 feat: auto-update, тесты и CI/CD
Some checks failed
CI / Typecheck + Tests (push) Has been cancelled
CI / Build (Windows) (push) Has been cancelled
Полная автоматизация релизного цикла.

== Auto-update (electron-updater) ==
- src/main/updater.ts — обёртка над autoUpdater с дискриминированным
  UpdaterStatus union и broadcast через IPC. autoDownload=false,
  пользователь сам жмёт «Скачать». allowDowngrade=false. Проверка
  каждые 6 часов, первая через 5с после старта.
- В dev-режиме (app.isPackaged=false) статус сразу становится
  'unsupported' с пояснением — никаких exceptions из updater'а.
- build.publish в package.json: provider=generic, url указывает на
  Gitea release assets конкретной версии.
- src/main/ipc.ts: 4 новых канала — status/check/download/install.
- src/preload: API window.api.updater* + onUpdaterStatus.
- src/renderer/src/components/UpdaterCard.tsx: HUD-карточка в Settings
  с состояниями idle/checking/available/downloading/downloaded/error,
  прогресс-бар с скоростью в МБ/с.

== Тесты (vitest) ==
- vitest.config.ts с алиасами @shared / @renderer
- 23 теста, все зелёные:
  * format.test.ts — formatCountdown, formatInterval (8 cases)
  * vdf.test.ts — parseVdf / stringifyVdf / round-trip (11 cases)
  * types.test.ts — DEFAULT_SETTINGS, SAMPLE_EXERCISES sanity (4)
- npm scripts: test (watch), test:run (CI)

== CI/CD (Gitea Actions) ==
- .gitea/workflows/ci.yml — на push/PR: typecheck + тесты + smoke-сборка
- .gitea/workflows/release.yml — на тег v*.*.*: сборка NSIS + Gitea release

== Локальный релизный скрипт ==
- scripts/release.ps1 — один скрипт от бампа версии до публикации
  через Gitea API (params: -Bump patch/minor/major, -Version, -DryRun)
- npm run release — обёртка
- RELEASING.md — полная инструкция

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 20:32:59 +07:00
AnRil
757352e447 chore(deps): add electron-updater + vitest
Подготовка к auto-update и тестам.
- electron-updater для in-app апдейтов через generic provider
- vitest для unit-тестов

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 20:32:41 +07:00
AnRil
ea58daa693 chore(release): bump version 0.1.2 → 0.2.0 для редизайн-релиза
Маркируем новый билд установщика после полного UI-редизайна
(phase 1 + phase 2 esports HUD).

Установщик Exercise-Reminder-Setup-0.2.0.exe уже корректно ведёт
себя как install-or-update:
- appId com.anril.exercise-reminder неизменен → NSIS находит
  предыдущую инсталляцию 0.1.x и обновляет её
- deleteAppDataOnUninstall=false → настройки и история юзера
  сохраняются при апдейте
- perMachine=false → апдейт без прав админа
- differentialPackage=true → готовность к дифф-апдейтам через
  electron-updater (если позже подключим)

Сам .exe не коммитится — release/ в .gitignore (бинарь 85 МБ).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 18:47:47 +07:00
AnRil
d418b9bbd2 redesign(ui): phase 2 — все вторичные страницы и UI-примитивы
Распространили esports-HUD язык на оставшиеся экраны и общие UI:

- Modal: neon border accent/25 с двойным glow (cyan + violet),
  gradient-divider, gradient-stripe слева от заголовка, defeat hover
  на закрытие
- Switch: bg-gradient-brand с shadow-glow в on-состоянии
- Exercises: hero с gradient-text, статистика в моноширинном шрифте
  (active count, total reps за цикл), HUD-список с анимированным
  появлением, hover-row с accent tint
- Games: game cards с gradient orb-иконкой + glow на интегрированных,
  shadow-glow-victory + анимированная LIVE точка для активной
  интеграции, новые status badges (LIVE / READY / QUEUED / INSTALLED /
  NOT FOUND) в display-шрифте, ошибки в защитных цветах (xp/defeat)
- Challenges: hero + formula-row "stat × N → reps" в моноширинном
  шрифте, gradient-preview карточка в редакторе с большим итоговым
  числом в text-gradient-brand
- Settings: hero, секции с иконкой в accent-плашке, заголовки секций
  в display-шрифте uppercase tracking-wide
- ExerciseEditor: preview-карточка с gradient-orb иконкой в шапке
  модала, моноширинные input для чисел, scale-up на выбранной иконке

Все правки используют существующие токены из phase 1 — никаких новых
CSS-переменных или конфигов.

Откат phase 2 один:  git revert HEAD
Откат до начала редизайна:  git reset --hard 688a86b

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 18:42:05 +07:00
AnRil
4da83761d2 redesign(ui): phase 1 — esports HUD design system + core surfaces
Сменили визуальную ДНК на dark-first гейминг-эстетику: cyan→violet
неоновая палитра, спортивный display-шрифт Rajdhani, моноширинный
HUD для всех счётчиков, градиентные CTA с glow.

Дизайн-система (globals.css + tailwind.config.js):
- Brand-токены accent (cyan), accent-2 (violet), victory (lime),
  defeat (rose), xp (amber); --bg-deep слой
- Утилиты .neon-border (анимированный обводный градиент),
  .hud-pulse, .hud-scanlines, .dot-grid, .text-gradient-brand,
  .bg-gradient-brand/-victory/-defeat
- Радиальные градиенты на body (cyan/violet glow по углам)
- Шрифты Rajdhani (display) и JetBrains Mono подключены через CDN

Компоненты:
- Sidebar: gradient-логотип, активный пункт с вертикальной gradient-
  полосой и shadow-glow, статус-чип GSI tracking
- Titlebar: glass + scanlines, моноширинный лейбл, defeat hover на X
- Button: primary = bg-gradient-brand + shadow-glow; новый variant
  victory (lime-gradient)
- ExerciseCard: SVG cooldown-ring как у способностей в MOBA,
  градиентный stroke с drop-shadow, .neon-border на due, hover lift
- Dashboard: hero с gradient-text заголовком, HUD-полоса из 4 stat-
  карточек (Cooldown / Active / Avg / Game tracking LIVE/OFF)
- ReminderApp: вращающийся conic-gradient вокруг иконки, HUD-блок
  reps в моноширинном шрифте, кнопки с подписями хоткеев,
  Match summary с heroGradient по результату (victory/defeat/brand)

ThemeProvider больше не перезаписывает --accent системным —
у laude теперь стабильная brand-идентичность.

Бонус: хоткеи на reminder-окне (Enter=done, Space=snooze, Esc=skip).

Откат: git revert HEAD  или  git reset --hard 688a86b

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 18:36:52 +07:00
AnRil
688a86b611 Initial commit 2026-05-16 13:43:29 +07:00