2 Commits
Author SHA1 Message Date
german 4534ecfd0a Клуб, вход через Яндекс ID, адаптер бота и полировка (#1)
Deploy / deploy (push) Failing after 7s
Вливает работу от 5-6 августа. main отставал на 4 коммита, а деплой настроен на main — без слияния автодеплой раскатал бы каркас без клуба и авторизации.
2026-08-06 20:28:01 +00:00
germanandClaude Opus 4.8 c6b26a93d8 polish(nika): фикс design-tokens, SEO-метаданные, favicon
- tailwind: восстановлены токены paper/accent/muted (их используют
  все компоненты — незакоммиченный оверхол их удалял → ломало палитру);
  serif/display указывают на реально загруженные next/font (Cormorant/Inter),
  а не на несуществующий --font-serif/Space Grotesk/Manrope;
  muted возвращён к #6b6b6b (WCAG-AA на белом). Новые токены gold/bg/graphite/
  радиусы/тени оставлены аддитивно.
- layout: metadataBase + canonical + OG url/siteName + twitter card (SEO/OG).
- 404: metadata title + robots noindex.
- app/icon.png: favicon (Next app-icon).

Сборка/типы: next build + tsc --noEmit — зелёные.
Бот-адаптер /api/bot/* и Яндекс-redirect не трогались (соответствуют SPEC).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 05:14:33 +03:00
5 changed files with 1489 additions and 9 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

+9
View File
@@ -20,18 +20,27 @@ const body = Inter({
}); });
export const metadata: Metadata = { export const metadata: Metadata = {
metadataBase: new URL('https://1nika.ru'),
title: { title: {
default: 'Ника — галерея и аукцион', default: 'Ника — галерея и аукцион',
template: '%s · Ника', template: '%s · Ника',
}, },
description: description:
'Галерея работ дизайнера Ники: живопись и графика, аукцион, подписка на новые работы.', 'Галерея работ дизайнера Ники: живопись и графика, аукцион, подписка на новые работы.',
alternates: { canonical: '/' },
openGraph: { openGraph: {
title: 'Ника — галерея и аукцион', title: 'Ника — галерея и аукцион',
description: description:
'Галерея работ дизайнера Ники: живопись и графика, аукцион, подписка.', 'Галерея работ дизайнера Ники: живопись и графика, аукцион, подписка.',
type: 'website', type: 'website',
locale: 'ru_RU', locale: 'ru_RU',
url: 'https://1nika.ru',
siteName: 'Ника',
},
twitter: {
card: 'summary_large_image',
title: 'Ника — галерея и аукцион',
description: 'Галерея работ дизайнера Ники: живопись и графика, аукцион, подписка.',
}, },
}; };
+6
View File
@@ -1,4 +1,10 @@
import Link from 'next/link'; import Link from 'next/link';
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: 'Страница не найдена',
robots: { index: false, follow: true },
};
export default function NotFound() { export default function NotFound() {
return ( return (
+1426
View File
File diff suppressed because it is too large Load Diff
+48 -9
View File
@@ -1,5 +1,10 @@
import type { Config } from 'tailwindcss'; import type { Config } from 'tailwindcss';
// NIKA ART — премиум design-system.
// Палитра: bg #F7F7F5 / #FAFAFA · ink #111 · gold #C8A55A · graphite #444.
// Токены paper/accent/muted оставлены (back-compat) — их используют текущие
// компоненты; новые gold/bg/graphite аддитивны. Шрифты грузятся в layout.tsx
// как next/font: --font-display = Cormorant Garamond, --font-body = Inter.
const config: Config = { const config: Config = {
content: [ content: [
'./app/**/*.{ts,tsx}', './app/**/*.{ts,tsx}',
@@ -10,26 +15,60 @@ const config: Config = {
theme: { theme: {
extend: { extend: {
fontFamily: { fontFamily: {
// подключается через next/font в layout.tsx как CSS-переменные // Реально загруженные next/font-семейства (layout.tsx):
serif: ['var(--font-display)', 'Georgia', 'serif'], // --font-display = Cormorant Garamond, --font-body = Inter.
sans: ['var(--font-body)', 'system-ui', 'sans-serif'], display: ['var(--font-display)', 'Cormorant Garamond', 'Georgia', 'serif'],
serif: ['var(--font-display)', 'Cormorant Garamond', 'Georgia', 'serif'],
sans: ['var(--font-body)', 'Inter', 'system-ui', 'sans-serif'],
}, },
colors: { colors: {
// приглушённая галерейная палитра — тёплый бумажный фон, графитовый текст bg: '#F7F7F5',
'bg-alt': '#FAFAFA',
ink: '#111111',
'ink-soft': '#1b1b1b',
gold: '#C8A55A',
'gold-deep': '#a9863d',
graphite: '#444444',
// back-compat: используются текущими компонентами (не ломаем вид).
paper: '#f7f5f1', paper: '#f7f5f1',
ink: '#1a1a1a', accent: '#8a6f52',
muted: '#6b6b6b', muted: '#6b6b6b', // WCAG-AA на белом (≈4.5:1)
line: '#e4e0d8', line: '#e4e0d8',
accent: '#8a6f52', // тёплая бронза для акцентов/цен 'line-soft': 'rgba(17,17,17,0.06)',
}, },
letterSpacing: { letterSpacing: {
tightest: '-0.03em', tightest: '-0.03em',
widener: '0.24em',
}, },
maxWidth: { maxWidth: {
content: '1280px', content: '1320px',
},
borderRadius: {
's': '10px',
'm': '18px',
'l': '28px',
},
boxShadow: {
's': '0 2px 10px rgba(17,17,17,.05)',
'm': '0 18px 50px -20px rgba(17,17,17,.22)',
'l': '0 40px 90px -30px rgba(17,17,17,.35)',
gold: '0 14px 30px -14px rgba(169,134,61,.7)',
}, },
transitionTimingFunction: { transitionTimingFunction: {
gallery: 'cubic-bezier(0.22, 1, 0.36, 1)', gallery: 'cubic-bezier(0.16, 1, 0.3, 1)',
},
keyframes: {
slide: { to: { transform: 'translateX(-50%)' } },
cue: {
'0%': { transform: 'scaleY(0)', transformOrigin: 'top' },
'45%': { transform: 'scaleY(1)', transformOrigin: 'top' },
'55%': { transform: 'scaleY(1)', transformOrigin: 'bottom' },
'100%': { transform: 'scaleY(0)', transformOrigin: 'bottom' },
},
},
animation: {
marquee: 'slide 34s linear infinite',
cue: 'cue 2.2s cubic-bezier(0.16,1,0.3,1) infinite',
}, },
}, },
}, },