iArt.ai
AI 모션 그래픽 소프트웨어, 누구나 사용할 수 있는 After Effects 대안, 텍스트 프롬프트로 몇 분 안에 애니메이션·설명 영상 제작
Kinoshka는 영화 카탈로그 앱으로 인기·평점 영화 탐색, 장르·연도·평점 검색, 출연진·제작진·미디어 상세 페이지를 제공합니다
Kinoshka is a movie catalog app — browse trending and top-rated titles, search and filter by genre, year, and rating, and explore detailed movie pages with cast, crew, and media.
미디어TypeScript · CSSGitHub @olegdenisov온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Каталог фильмов — SPA с лентой на главной, поиском, фильтрами, страницами фильмов (обзор, каст, медиа), списком избранного (хранится в localStorage браузера, без синхронизации между устройствами), разделом «Popular this week» (/popular) с позициями фильмов в рейтинге и их изменением, и разделом «Recommended for you» (/recommendations) — рекомендации, вычисленные чистым правилом поверх избранного (топ-3 жанра + средний рейтинг избранного).README 전문 보기 ↗
Каталог фильмов — SPA с лентой на главной, поиском, фильтрами, страницами фильмов (обзор, каст, медиа), списком избранного (хранится в localStorage браузера, без синхронизации между устройствами), разделом «Popular this week» (/popular) с позициями фильмов в рейтинге и их изменением, и разделом «Recommended for you» (/recommendations) — рекомендации, вычисленные чистым правилом поверх избранного (топ-3 жанра + средний рейтинг избранного), и профилем (/profile) — локальное имя (хранится в localStorage, без бэкенда), быстрые ссылки на избранное/популярное/рекомендации и выбор темы Light/Dark/System, а также страницей персоны (/person/:id) — фото, дата рождения/возраст, профессии, фильмография со ссылками на карточки фильмов и факты, доступной по клику на актёра/члена съёмочной группы со страницы фильма.
babel-plugin-react-compiler); ручные useMemo / useCallback / memo не нужныvite preview) и реального API, с a11y-проверкой (AxeBuilder) в каждом сценарии; отдельный mobile-viewport project (devices['iPhone 13']) на /, /search, /movie/:idpnpm commit)@sentry/react + @sentry/vite-plugin) — error tracking и Performance-трейсинг (tracesSampleRate=0.2, параметризованные роуты типа /movie/:id группируются в один transaction через reactRouterBrowserTracingIntegration/wrapCreateBrowserRouter) в prod-сборке, аплоад source maps на этапе билда; alert/dashboard-провижининг as code (make sentry-telemetry) поверх sentry CLIweb-vitals-пайплайнmake dev # dev-сервер с HMR
make build # проверка типов (tsc -b) + production-сборка
make lint # oxlint по всем TS/TSX-файлам
make preview # раздача production-сборки локально
make test # запустить тесты один раз
make test-watch # тесты в watch-режиме
make coverage # отчёт покрытия
make e2e # E2E-тесты (Playwright) против production preview-сборки
make e2e-install # установить браузеры Playwright (chromium + webkit)
make lighthouse # Lighthouse CI dev-smoke локально (не авторитетный источник порогов, см. AGENTS.md)
make generate-api # регенерировать API-клиент из OpenAPI-спецификации
make check # format-check + lint + build (полная проверка)
make hooks # установить git-хуки husky
make audit # pnpm audit (prod-зависимости, high severity)
make analyze # визуализация состава бандла (dist/stats.html)
make size # бюджеты размера бандла (size-limit)
make knip # детектор неиспользуемого кода/зависимостей
make sentry-telemetry # провижининг Sentry alert/dashboard as code (см. sentry-telemetry.config.ts)
make clean # удалить dist и node_modules
Проект следует Feature-Sliced Design:
src/
├── app/ # провайдеры, роутер, глобальные стили
├── pages/ # компоненты уровня роута
├── widgets/ # крупные переиспользуемые секции UI (header, mobile-chrome, movie-rail, search-sidebar)
├── features/ # интерактивные фичи (catalog-filter, favorites, watched, watchlist, theme, recommendations, profile)
├── entities/ # бизнес-объекты (movie, person — типы, данные, UI)
└── shared/ # утилиты и примитивы (lib/, ui/)
Направление импортов: pages → widgets → features → entities → shared. Импорты вверх по слоям запрещены.
Mobile-first: у каждой страницы/виджета один компонент и один CSS-модуль — мобильная раскладка безусловная (базовая), десктопные переопределения идут в блоках @media (min-width: 720px) поверх неё. Пары *Desktop/*Mobile не используются. Breakpoint: 720px (MOBILE_BREAKPOINT, src/shared/lib/viewport/useViewport.ts).
Хук useViewport остался, но его вызовы намеренно сужены до двух точечных JS-развилок — случаев, когда разница не CSS-вариант оформления, а выбор, какой компонент монтировать (и его сайд-эффекты):
src/app/layouts/AppLayout.tsx — выбирает Header (@widgets/header) или MobileHeader+BottomNav (@widgets/mobile-chrome).src/pages/search/ui/Search/Search.tsx — выбирает SearchSidebar (@widgets/search-sidebar) или мобильный filter-bar + BottomSheet.Остальные бывшие useViewport()-развилки (старые *Page.tsx, стрелки скролла в MovieRail и т.п.) свелись к чистому CSS.
Каждый компонент живёт в собственной директории с CSS-модулем:
ComponentName/
├── index.tsx
└── ComponentName.module.css
Каждый слайс widgets/ и features/ предоставляет публичный API через index.ts в корне слайса. Всегда импортируй через него, не через внутренние пути:
import { Header } from '@widgets/header' // ✓
import { Header } from '@widgets/header/ui/Header' // ✗
type, не interfacenoUnusedLocals, noUnusedParameters, erasableSyntaxOnly — enum и namespace запрещеныComponentName.module.css), hover-состояния через :hover, не через useStatepublic/icons.svg; ссылка через <use href="/icons.svg#<id>" />index.html) — новые шрифты не добавлятьВ корне репозитория закоммичен .mcp.json с project-scoped Sentry MCP-сервером (https://mcp.sentry.dev/mcp). После клонирования репозитория Claude Code предложит авторизовать этот MCP-сервер через OAuth — подтвердите авторизацию, чтобы получить доступ к Sentry-инструментам (issues, alerts, dashboards) прямо из сессии. Опционально можно локально (не в коммите) сузить url до https://mcp.sentry.dev/mcp/mycomp-ey/kinoshka, ограничив MCP-сервер конкретными org/project.