From d115e0f788cd405d1321948b60b6572758556e37 Mon Sep 17 00:00:00 2001 From: diametrfq Date: Mon, 14 Jul 2025 01:03:35 +0300 Subject: [PATCH 1/2] Added content for page contscts --- .github/workflows/ci.yml | 44 ---- frontend/app/[locale]/contact/page.module.css | 235 +++++++----------- frontend/app/[locale]/contact/page.tsx | 76 +++++- frontend/app/api/spotify-stream/route.ts | 90 +++---- frontend/locales/en.json | 4 + frontend/locales/ru.json | 4 + frontend/next.config.ts | 16 ++ frontend/public/logo/email.png | Bin 0 -> 25410 bytes frontend/public/logo/github.png | Bin 0 -> 3409 bytes frontend/public/logo/linkedin.svg | 14 ++ frontend/public/logo/steam.png | Bin 0 -> 38808 bytes frontend/public/logo/telegram.svg | 1 + 12 files changed, 242 insertions(+), 242 deletions(-) delete mode 100644 .github/workflows/ci.yml create mode 100644 frontend/public/logo/email.png create mode 100644 frontend/public/logo/github.png create mode 100644 frontend/public/logo/linkedin.svg create mode 100644 frontend/public/logo/steam.png create mode 100644 frontend/public/logo/telegram.svg diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 0f85145..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: CI - Build and Test - -on: - pull_request: - -jobs: - build_and_test: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' - cache-dependency-path: frontend/package-lock.json - - - name: Install Frontend Dependencies - working-directory: ./frontend - run: npm ci - - - name: Build Frontend (for verification) - working-directory: ./frontend - run: npm run build - - - name: Set up Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - profile: minimal - override: true - - - name: Set up Rust cache - uses: Swatinem/rust-cache@v2 - - - name: Check Backend code - working-directory: ./backend - run: cargo check --verbose - - - name: Build Backend (for verification) - working-directory: ./backend - run: cargo build --verbose diff --git a/frontend/app/[locale]/contact/page.module.css b/frontend/app/[locale]/contact/page.module.css index ee9b8e6..8596e1b 100644 --- a/frontend/app/[locale]/contact/page.module.css +++ b/frontend/app/[locale]/contact/page.module.css @@ -1,168 +1,119 @@ -.page { - --gray-rgb: 0, 0, 0; - --gray-alpha-200: rgba(var(--gray-rgb), 0.08); - --gray-alpha-100: rgba(var(--gray-rgb), 0.05); - - --button-primary-hover: #383838; - --button-secondary-hover: #f2f2f2; - - display: grid; - grid-template-rows: 20px 1fr 20px; - align-items: center; - justify-items: center; - min-height: 100svh; - padding: 80px; - gap: 64px; - font-family: var(--font-geist-sans); +.container { + max-width: 960px; + margin: 40px auto; + padding: 20px; + text-align: center; } -@media (prefers-color-scheme: dark) { - .page { - --gray-rgb: 255, 255, 255; - --gray-alpha-200: rgba(var(--gray-rgb), 0.145); - --gray-alpha-100: rgba(var(--gray-rgb), 0.06); - - --button-primary-hover: #ccc; - --button-secondary-hover: #1a1a1a; - } -} - -.main { - display: flex; - flex-direction: column; - gap: 32px; - grid-row-start: 2; -} - -.main ol { - font-family: var(--font-geist-mono); - padding-left: 0; - margin: 0; - font-size: 14px; - line-height: 24px; - letter-spacing: -0.01em; - list-style-position: inside; +.title { + font-size: 2.5rem; + font-weight: bold; + margin-bottom: 1rem; + color: var(--foreground); } -.main li:not(:last-of-type) { - margin-bottom: 8px; +.subtitle { + font-size: 1.2rem; + color: var(--muted-foreground); + margin-bottom: 3rem; } -.main code { - font-family: inherit; - background: var(--gray-alpha-100); - padding: 2px 4px; - border-radius: 4px; - font-weight: 600; -} - -.ctas { - display: flex; - gap: 16px; +.grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 1.5rem; + text-align: left; } -.ctas a { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - border: 1px solid transparent; - transition: - background 0.2s, - color 0.2s, - border-color 0.2s; - cursor: pointer; +.card { display: flex; align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; + gap: 1.5rem; + background-color: var(--card); + padding: 1.5rem; + border-radius: 12px; + border: 1px solid var(--border); + transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; + text-decoration: none; + color: inherit; } -a.primary { - background: var(--foreground); - color: var(--background); - gap: 8px; +.card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); } -a.secondary { - border-color: var(--gray-alpha-200); - min-width: 180px; +.dark .card:hover { + box-shadow: 0 8px 25px rgba(255, 255, 255, 0.08); } -.footer { - grid-row-start: 3; - display: flex; - gap: 24px; -} - -.footer a { +.iconWrapper { + flex-shrink: 0; display: flex; align-items: center; - gap: 8px; + justify-content: center; + width: 64px; + height: 64px; + /* Для светлой темы фон остается прежним */ + background-color: var(--muted); + border-radius: 50%; + transition: background-color 0.3s ease-in-out; +} + +/* + НОВЫЙ БЛОК: Правило для фона иконки в темной теме. + Вместо светло-серого мы используем var(--secondary), + который является темно-серым и лучше вписывается в фон карточки. +*/ +.dark .iconWrapper { + background-color: var(--secondary); +} + +.icon { + width: 40px; + height: 40px; + object-fit: contain; + /* Добавляем плавный переход для фильтра и прозрачности */ + transition: filter 0.3s ease-in-out, opacity 0.3s ease-in-out; +} + +/* + ИЗМЕНЕННЫЙ БЛОК: Улучшенная адаптация иконки. + Мы по-прежнему инвертируем ее, чтобы сделать белой, + но добавляем прозрачность. Это убирает резкость и делает + иконку похожей по яркости на основной текст. +*/ +.dark .invertOnDark { + /* filter: brightness(0); + opacity: 1; */ + color: white; + background-color: white; +} + +.cardContent { + display: flex; + flex-direction: column; } -.footer img { - flex-shrink: 0; +.cardTitle { + font-size: 1.25rem; + font-weight: 600; + color: var(--foreground); + margin: 0; } -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - a.primary:hover { - background: var(--button-primary-hover); - border-color: transparent; - } - - a.secondary:hover { - background: var(--button-secondary-hover); - border-color: transparent; - } - - .footer a:hover { - text-decoration: underline; - text-underline-offset: 4px; - } +.cardHandle { + font-size: 1rem; + color: var(--muted-foreground); + margin: 0; + word-break: break-all; } -@media (max-width: 600px) { - .page { - padding: 32px; - padding-bottom: 80px; +@media (max-width: 640px) { + .title { + font-size: 2rem; } - - .main { - align-items: center; - } - - .main ol { - text-align: center; + .grid { + grid-template-columns: 1fr; } - - .ctas { - flex-direction: column; - } - - .ctas a { - font-size: 14px; - height: 40px; - padding: 0 16px; - } - - a.secondary { - min-width: auto; - } - - .footer { - flex-wrap: wrap; - align-items: center; - justify-content: center; - } -} - -@media (prefers-color-scheme: dark) { - .logo { - filter: invert(); - } -} +} \ No newline at end of file diff --git a/frontend/app/[locale]/contact/page.tsx b/frontend/app/[locale]/contact/page.tsx index 5ed795d..cbe76d3 100644 --- a/frontend/app/[locale]/contact/page.tsx +++ b/frontend/app/[locale]/contact/page.tsx @@ -1,9 +1,75 @@ -import styles from "./page.module.css"; +'use client'; + +import Image from 'next/image'; +import { useTranslations } from 'next-intl'; +import styles from './page.module.css'; + +const contacts = [ + { + name: 'Telegram', + handle: '@diametrfq', + url: 'https://t.me/diametrfq', + iconUrl: '/logo/telegram.svg', + }, + { + name: 'LinkedIn', + handle: 'Dmitry Khokhlov', + url: 'https://www.linkedin.com/in/diametrfq', + iconUrl: '/logo/linkedin.svg', + }, + { + name: 'GitHub', + handle: 'DiametrFQ', + url: 'https://github.com/DiametrFQ', + iconUrl: 'https://cdn.worldvectorlogo.com/logos/github-icon-1.svg', + themeBehavior: 'invertOnDark', + }, + { + name: 'Email', + handle: 'hohlov.03@inbox.ru', + url: 'mailto:hohlov.03@inbox.ru', + iconUrl: '/logo/email.png', + }, + { + name: 'Steam', + handle: 'diametrfq', + url: 'https://steamcommunity.com/id/diametrfq/', + iconUrl: '/logo/steam.png', + }, +]; + +export default function Contact() { + const t = useTranslations('ContactPage'); -export default function Portfolio() { return ( -
- contact +
+

{t('title')}

+

{t('subtitle')}

+
+ {contacts.map((contact) => ( + +
+ {`${contact.name} +
+
+

{contact.name}

+

{contact.handle}

+
+
+ ))} +
); -} +} \ No newline at end of file diff --git a/frontend/app/api/spotify-stream/route.ts b/frontend/app/api/spotify-stream/route.ts index 0f685fa..b0d5edd 100644 --- a/frontend/app/api/spotify-stream/route.ts +++ b/frontend/app/api/spotify-stream/route.ts @@ -1,60 +1,48 @@ -import { NextRequest } from 'next/server'; -import http from 'http'; +import { NextRequest, NextResponse } from 'next/server'; -export const dynamic = 'force-dynamic'; +export const dynamic = 'force-dynamic'; // Оставляем, это важно для стриминга export async function GET(request: NextRequest) { - const backendUrl = process.env.RUST_BACKEND_URL || 'http://localhost:8080'; - - const url = new URL(backendUrl); - const options = { - hostname: url.hostname, - port: url.port, - path: '/api/spotify/now_playing_stream', - method: 'GET', - headers: { - 'Accept': 'text/event-stream', - 'Connection': 'keep-alive', - }, - }; + // Собираем URL к нашему Rust бэкенду + const backendUrl = (process.env.RUST_BACKEND_URL || 'http://localhost:8080') + '/api/spotify/now_playing_stream'; - const stream = new ReadableStream({ - start(controller) { - const backendRequest = http.get(options, (backendResponse) => { - backendResponse.on('data', (chunk) => { - controller.enqueue(chunk); - }); + try { + // Делаем запрос к бэкенду с помощью fetch + const backendResponse = await fetch(backendUrl, { + // Важно: передаем сигнал AbortController, чтобы если браузер закроет соединение, + // мы могли бы прервать и запрос к бэкенду. + signal: request.signal, + headers: { + 'Accept': 'text/event-stream', + }, + }); - backendResponse.on('end', () => { - console.log('Backend stream ended.'); - controller.close(); - }); - - backendResponse.on('error', (err) => { - console.error('Error in backend response stream:', err); - controller.error(err); - }); + // Если бэкенд ответил ошибкой, перенаправляем ее браузеру + if (!backendResponse.ok) { + return new Response(backendResponse.body, { + status: backendResponse.status, + statusText: backendResponse.statusText, }); + } - backendRequest.on('error', (err) => { - console.error('Error making request to backend:', err); - controller.error(err); - }); - - request.signal.addEventListener('abort', () => { - console.log('Client aborted request. Destroying backend request.'); - backendRequest.destroy(); - controller.close(); - }); - }, - }); + // Это ключевой момент. backendResponse.body - это уже готовый ReadableStream. + // Мы создаем новый Response для браузера и просто "перекачиваем" поток из бэкенда напрямую. + return new Response(backendResponse.body, { + status: 200, + headers: { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + }, + }); - return new Response(stream, { - status: 200, - headers: { - 'Content-Type': 'text/event-stream', - 'Cache-Control': 'no-cache', - 'Connection': 'keep-alive', - }, - }); + } catch (error) { + // Ловим ошибки сети, например, если бэкенд недоступен + if (error instanceof Error && error.name === 'AbortError') { + console.log('Stream request aborted by client.'); + return new Response('Stream aborted', { status: 499 }); + } + console.error('Error proxying spotify stream:', error); + return new Response('Failed to proxy stream', { status: 500 }); + } } \ No newline at end of file diff --git a/frontend/locales/en.json b/frontend/locales/en.json index d8aa3e6..fa3ffe9 100644 --- a/frontend/locales/en.json +++ b/frontend/locales/en.json @@ -15,5 +15,9 @@ "telegram":{ "title": "Telegram" } + }, + "ContactPage": { + "title": "Get in Touch", + "subtitle": "Here is where you can find me." } } \ No newline at end of file diff --git a/frontend/locales/ru.json b/frontend/locales/ru.json index b346b82..756392c 100644 --- a/frontend/locales/ru.json +++ b/frontend/locales/ru.json @@ -15,5 +15,9 @@ "telegram":{ "title": "Telegram" } + }, + "ContactPage": { + "title": "Свяжитесь со мной", + "subtitle": "Вот лучшие способы для связи." } } \ No newline at end of file diff --git a/frontend/next.config.ts b/frontend/next.config.ts index 81e46fe..d2e437d 100644 --- a/frontend/next.config.ts +++ b/frontend/next.config.ts @@ -41,6 +41,22 @@ const nextConfig: NextConfig = { { protocol: 'https', hostname: 'i.scdn.co', + }, + { + protocol: 'https', + hostname: 'cdn-icons-png.flaticon.com', + }, + { + protocol: 'https', + hostname: 'upload.wikimedia.org', + }, + { + protocol: 'https', + hostname: 'static-00.iconduck.com', + }, + { + protocol: 'https', + hostname: 'cdn.worldvectorlogo.com', }, ], }, diff --git a/frontend/public/logo/email.png b/frontend/public/logo/email.png new file mode 100644 index 0000000000000000000000000000000000000000..81fc0b4c3e0122092496632ad538ad37fa2a4495 GIT binary patch literal 25410 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 literal 0 HcmV?d00001 diff --git a/frontend/public/logo/linkedin.svg b/frontend/public/logo/linkedin.svg new file mode 100644 index 0000000..001bdcd --- /dev/null +++ b/frontend/public/logo/linkedin.svg @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/frontend/public/logo/steam.png b/frontend/public/logo/steam.png new file mode 100644 index 0000000000000000000000000000000000000000..12094a5d74f23fdea53afd77faf5c636ef65aa0a GIT binary patch literal 38808 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 \ No newline at end of file From 65b01750a5bb9e2973b7832254cb2cba6e4cbc1f Mon Sep 17 00:00:00 2001 From: diametrfq Date: Mon, 14 Jul 2025 01:08:18 +0300 Subject: [PATCH 2/2] fix(frontend): little fixes with build of frontend --- frontend/app/api/spotify-stream/route.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/frontend/app/api/spotify-stream/route.ts b/frontend/app/api/spotify-stream/route.ts index b0d5edd..05e00b4 100644 --- a/frontend/app/api/spotify-stream/route.ts +++ b/frontend/app/api/spotify-stream/route.ts @@ -1,23 +1,18 @@ -import { NextRequest, NextResponse } from 'next/server'; +import { NextRequest } from 'next/server'; -export const dynamic = 'force-dynamic'; // Оставляем, это важно для стриминга +export const dynamic = 'force-dynamic'; export async function GET(request: NextRequest) { - // Собираем URL к нашему Rust бэкенду const backendUrl = (process.env.RUST_BACKEND_URL || 'http://localhost:8080') + '/api/spotify/now_playing_stream'; try { - // Делаем запрос к бэкенду с помощью fetch const backendResponse = await fetch(backendUrl, { - // Важно: передаем сигнал AbortController, чтобы если браузер закроет соединение, - // мы могли бы прервать и запрос к бэкенду. signal: request.signal, headers: { 'Accept': 'text/event-stream', }, }); - // Если бэкенд ответил ошибкой, перенаправляем ее браузеру if (!backendResponse.ok) { return new Response(backendResponse.body, { status: backendResponse.status, @@ -25,8 +20,6 @@ export async function GET(request: NextRequest) { }); } - // Это ключевой момент. backendResponse.body - это уже готовый ReadableStream. - // Мы создаем новый Response для браузера и просто "перекачиваем" поток из бэкенда напрямую. return new Response(backendResponse.body, { status: 200, headers: { @@ -37,7 +30,6 @@ export async function GET(request: NextRequest) { }); } catch (error) { - // Ловим ошибки сети, например, если бэкенд недоступен if (error instanceof Error && error.name === 'AbortError') { console.log('Stream request aborted by client.'); return new Response('Stream aborted', { status: 499 });