Skip to content

FedoseevSM/testtest

Repository files navigation

Intensive PRO 🚀

Современная платформа для онлайн-курсов с авторизацией, подписками YouTube и полной системой профилей.

Intensive PRO — это полнофункциональная веб-платформа для создания и управления онлайн-курсами. Поддерживает авторизацию через Supabase, интеграцию с YouTube-подписками, систему профилей с прогрессом обучения, лидерборды и многоязычность (RU/EN/KK).

✨ Основные возможности

  • Курсы и обучение: Детальные страницы курсов, прогресс обучения, списки участников
  • Авторизация: Защищенные роуты, профили пользователей, загрузка аватаров
  • YouTube интеграция: Проверка подписок, автоматическое обновление статуса
  • Подписки: Платные планы, статус подписки, управление доступом
  • Лидерборд: Рейтинг пользователей с фильтрами
  • Многоязычность: i18n с поддержкой русского, английского и казахского
  • Адаптивный дизайн: Mobile-first с Tailwind CSS

🛠 Технологии

Frontend: React + TypeScript + Vite + Tailwind CSS
Backend: Supabase (Auth, Database, RLS)
YouTube API: OAuth 2.0 + Subscription checks
State: Zustand
i18n: react-i18next

📁 Структура проекта

src/
├── components/     # UI-компоненты (Header, Footer, CourseCard, Profile...)
├── hooks/          # Custom hooks (useAuth, useCourseProgress, useYoutubeSubscription...)
├── lib/api/        # API-сервисы (courses, subscriptions, youtube)
├── pages/          # Страницы (HomePage, CourseDetailPage, ProfilePage...)
└── migrations/     # Supabase миграции

🚀 Быстрый старт

# Клонировать репозиторий
git clone <your-repo-url>
cd intensive-pro

# Установить зависимости
npm install

# Настроить .env (Supabase URL, YouTube Client ID)
cp .env.example .env

# Запустить разработку
npm run dev

📄 Лицензия

MIT License

Разработано для современных онлайн-школ и коучинговых платформ.


Добавьте в избранные ⭐, если проект полезен!

├── public/
│   └── _redirects
├── src/
│   ├── components/
│   │   ├── about/
│   │   │   └── StatisticsSection.tsx
│   │   ├── auth/
│   │   │   ├── index.ts
│   │   │   └── ProtectedRoute.tsx
│   │   ├── course/
│   │   │   ├── CourseCurriculum.tsx
│   │   │   ├── CourseHeader.tsx
│   │   │   └── ParticipantsSidebar.tsx
│   │   ├── Footer/
│   │   │   ├── ContactForm.tsx
│   │   │   ├── Footer.tsx
│   │   │   └── SocialLinks.tsx
│   │   ├── Header/
│   │   │   ├── Header.tsx
│   │   │   ├── Logo.tsx
│   │   │   ├── NavLinks.tsx
│   │   │   └── UserMenu.tsx
│   │   ├── layout/
│   │   │   ├── Footer/
│   │   │   │   ├── ContactForm.tsx
│   │   │   │   ├── Footer.tsx
│   │   │   │   ├── index.ts
│   │   │   │   └── SocialLinks.tsx
│   │   │   ├── Header/
│   │   │   │   ├── Header.tsx
│   │   │   │   ├── index.ts
│   │   │   │   ├── LanguageSwitcher.tsx
│   │   │   │   ├── Logo.tsx
│   │   │   │   ├── NavLinks.tsx
│   │   │   │   └── UserMenu.tsx
│   │   │   ├── MobileMenu/
│   │   │   │   ├── index.ts
│   │   │   │   └── MobileMenu.tsx
│   │   │   ├── index.ts
│   │   │   └── Layout.tsx
│   │   ├── leaderboard/
│   │   │   ├── LeaderboardFilters.tsx
│   │   │   ├── LeaderboardHeader.tsx
│   │   │   └── LeaderboardList.tsx
│   │   ├── profile/
│   │   │   ├── Achievements.tsx
│   │   │   ├── AvatarUpload.tsx
│   │   │   ├── Certificates.tsx
│   │   │   ├── CourseProgress.tsx
│   │   │   ├── CourseProgressList.tsx
│   │   │   ├── ProfileHeader.tsx
│   │   │   ├── ProfileStats.tsx
│   │   │   └── ProgressStats.tsx
│   │   ├── subscription/
│   │   │   ├── PlanCard.tsx
│   │   │   ├── SubscriptionBanner.tsx
│   │   │   ├── SubscriptionStatus.tsx
│   │   │   ├── YoutubeAuthCallback.tsx
│   │   │   ├── YoutubeChecker.tsx
│   │   │   └── YoutubeSubscriptionUpdate.tsx
│   │   ├── ui/
│   │   │   ├── Avatar.tsx
│   │   │   ├── Button.tsx
│   │   │   ├── CourseImage.tsx
│   │   │   └── LoadingSpinner.tsx
│   │   ├── ContactSection.tsx
│   │   ├── CourseCard.tsx
│   │   ├── CourseParticipants.tsx
│   │   ├── Header.tsx
│   │   ├── Hero.tsx
│   │   ├── MobileMenu.tsx
│   │   ├── ParticipantsList.tsx
│   │   ├── ProgrammingTest.tsx
│   │   ├── SearchBar.tsx
│   │   └── TopUsers.tsx
│   ├── data/
│   │   ├── courses.ts
│   │   └── subscriptionPlans.ts
│   ├── hooks/
│   │   ├── useAuth.ts
│   │   ├── useAvatarUpload.ts
│   │   ├── useCourseDetails.ts
│   │   ├── useCourseParticipants.ts
│   │   ├── useCourseProgress.ts
│   │   ├── useCourses.ts
│   │   ├── useEnrollment.ts
│   │   ├── useInitialLoad.ts
│   │   ├── usePopularCourses.ts
│   │   ├── useSubscription.ts
│   │   ├── useSupabase.ts
│   │   ├── useSupabaseAuth.ts
│   │   ├── useSupabaseQuery.ts
│   │   ├── useTopCourses.ts
│   │   ├── useUserCourses.ts
│   │   ├── useUserProfile.ts
│   │   ├── useUserProgress.ts
│   │   ├── useYoutubeAuth.ts
│   │   ├── useYoutubeSubscription.ts
│   │   └── useYoutubeSubscriptionUpdate.ts
│   ├── i18n/
│   │   ├── locales/
│   │   │   ├── en.ts
│   │   │   ├── kk.ts
│   │   │   └── ru.ts
│   │   └── index.ts
│   ├── lib/
│   │   ├── api/
│   │   │   ├── subscription/
│   │   │   │   ├── service.ts
│   │   │   │   └── types.ts
│   │   │   ├── youtube/
│   │   │   │   ├── auth.ts
│   │   │   │   ├── config.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── service.ts
│   │   │   │   └── subscriptions.ts
│   │   │   ├── courses.ts
│   │   │   ├── enrollments.ts
│   │   │   ├── index.ts
│   │   │   ├── participants.ts
│   │   │   ├── profiles.ts
│   │   │   ├── subscriptions.ts
│   │   │   └── youtube.ts
│   │   ├── auth/
│   │   │   ├── profile.ts
│   │   │   ├── session.ts
│   │   │   └── subscription.ts
│   │   ├── api.ts
│   │   └── supabase.ts
│   ├── migrations/
│   │   ├── 001_create_profiles.sql
│   │   ├── 001_create_subscriptions.sql
│   │   ├── 002_create_subscriptions.sql
│   │   ├── 002_subscription_functions.sql
│   │   ├── 003_subscription_functions.sql
│   │   ├── 004_profile_functions.sql
│   │   ├── 005_row_level_security.sql
│   │   ├── 006_fix_subscriptions.sql
│   │   ├── 007_subscription_functions.sql
│   │   ├── 008_fix_subscriptions.sql
│   │   ├── 009_fix_subscriptions.sql
│   │   └── 010_fix_subscription_rls.sql
│   ├── pages/
│   │   ├── AboutPage.tsx
│   │   ├── CourseDetailPage.tsx
│   │   ├── CourseLearnPage.tsx
│   │   ├── CoursesPage.tsx
│   │   ├── HomePage.tsx
│   │   ├── LeaderboardPage.tsx
│   │   ├── LoginPage.tsx
│   │   ├── ProfileEditPage.tsx
│   │   ├── ProfilePage.tsx
│   │   ├── PublicProfilePage.tsx
│   │   ├── RegisterPage.tsx
│   │   ├── ResetPasswordPage.tsx
│   │   └── SubscriptionPage.tsx
│   ├── store/
│   │   ├── authStore.ts
│   │   ├── loadingStore.ts
│   │   ├── progressStore.ts
│   │   └── subscriptionStore.ts
│   ├── types/
│   │   ├── auth.ts
│   │   ├── index.ts
│   │   ├── subscription.ts
│   │   └── supabase.ts
│   ├── utils/
│   │   ├── animations.ts
│   │   ├── error.ts
│   │   └── hooks.ts
│   ├── App.tsx
│   ├── index.css
│   ├── main.tsx
│   ├── routes.tsx
│   └── vite-env.d.ts
├── .env
├── .env.production
├── .gitignore
├── eslint.config.js
├── index.html
├── package-lock.json
├── package.json
├── postcss.config.js
├── tailwind.config.js
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors