Skip to content

codewithjaker/learning-dashboard-react

Repository files navigation

React + TypeScript + Vite

admin-dashboard/
├── src/
│   ├── api/
│   │   ├── client.ts
│   │   ├── services/
│   │   │   ├── authService.ts
│   │   │   ├── userService.ts
│   │   │   ├── courseService.ts
│   │   │   ├── categoryService.ts
│   │   │   ├── enrollmentService.ts
│   │   │   ├── paymentService.ts
│   │   │   ├── invoiceService.ts
│   │   │   ├── reviewService.ts
│   │   │   ├── couponService.ts
│   │   │   └── payoutService.ts
│   │   └── types.ts
│   │
│   ├── store/
│   │   ├── index.ts
│   │   ├── rootReducer.ts
│   │   ├── hooks.ts
│   │   └── slices/
│   │       ├── authSlice.ts
│   │       ├── userSlice.ts
│   │       ├── courseSlice.ts
│   │       ├── categorySlice.ts
│   │       ├── enrollmentSlice.ts
│   │       ├── paymentSlice.ts
│   │       ├── invoiceSlice.ts
│   │       ├── reviewSlice.ts
│   │       ├── couponSlice.ts
│   │       ├── payoutSlice.ts
│   │       ├── dashboardSlice.ts
│   │       └── uiSlice.ts
│   │
│   ├── components/
│   │   ├── ui/
│   │   │   ├── button.tsx
│   │   │   ├── input.tsx
│   │   │   ├── select.tsx
│   │   │   ├── dialog.tsx
│   │   │   ├── table.tsx
│   │   │   ├── card.tsx
│   │   │   ├── badge.tsx
│   │   │   ├── avatar.tsx
│   │   │   ├── form.tsx
│   │   │   ├── label.tsx
│   │   │   ├── textarea.tsx
│   │   │   ├── checkbox.tsx
│   │   │   ├── radio-group.tsx
│   │   │   ├── switch.tsx
│   │   │   ├── separator.tsx
│   │   │   ├── skeleton.tsx
│   │   │   ├── tooltip.tsx
│   │   │   ├── dropdown-menu.tsx
│   │   │   ├── tabs.tsx
│   │   │   ├── toast.tsx
│   │   │   ├── toaster.tsx
│   │   │   ├── use-toast.ts
│   │   │   ├── popover.tsx
│   │   │   ├── calendar.tsx
│   │   │   ├── date-picker.tsx
│   │   │   ├── progress.tsx
│   │   │   ├── slider.tsx
│   │   │   └── index.ts
│   │   │
│   │   ├── data-table/
│   │   │   ├── DataTable.tsx
│   │   │   ├── DataTableHeader.tsx
│   │   │   ├── DataTablePagination.tsx
│   │   │   ├── DataTableToolbar.tsx
│   │   │   ├── DataTableRowActions.tsx
│   │   │   ├── DataTableColumnHeader.tsx
│   │   │   ├── DataTableViewOptions.tsx
│   │   │   ├── DataTableFacetedFilter.tsx
│   │   │   └── index.ts
│   │   │
│   │   ├── forms/
│   │   │   ├── UserForm.tsx
│   │   │   ├── CourseForm.tsx
│   │   │   ├── CategoryForm.tsx
│   │   │   ├── CouponForm.tsx
│   │   │   ├── EnrollmentForm.tsx
│   │   │   ├── PaymentForm.tsx
│   │   │   ├── PayoutForm.tsx
│   │   │   ├── ReviewForm.tsx
│   │   │   ├── ProfileForm.tsx
│   │   │   └── index.ts
│   │   │
│   │   ├── layout/
│   │   │   ├── MainLayout.tsx
│   │   │   ├── Sidebar.tsx
│   │   │   ├── Header.tsx
│   │   │   ├── MobileNav.tsx
│   │   │   ├── ThemeToggle.tsx
│   │   │   └── UserNav.tsx
│   │   │
│   │   ├── charts/
│   │   │   ├── RevenueChart.tsx
│   │   │   ├── EnrollmentChart.tsx
│   │   │   ├── ProgressChart.tsx
│   │   │   ├── PieChart.tsx
│   │   │   ├── BarChart.tsx
│   │   │   └── LineChart.tsx
│   │   │
│   │   └── common/
│   │       ├── ConfirmationDialog.tsx
│   │       ├── LoadingScreen.tsx
│   │       ├── ErrorBoundary.tsx
│   │       ├── StatusBadge.tsx
│   │       ├── SearchBar.tsx
│   │       ├── EmptyState.tsx
│   │       ├── Breadcrumb.tsx
│   │       ├── PageHeader.tsx
│   │       └── ProtectedRoute.tsx
│   │
│   ├── pages/
│   │   ├── auth/
│   │   │   ├── Login.tsx
│   │   │   ├── ForgotPassword.tsx
│   │   │   └── ResetPassword.tsx
│   │   │
│   │   ├── dashboard/
│   │   │   ├── Dashboard.tsx
│   │   │   ├── StatsCards.tsx
│   │   │   └── RecentActivity.tsx
│   │   │
│   │   ├── users/
│   │   │   ├── UsersList.tsx
│   │   │   ├── UserFormDialog.tsx
│   │   │   ├── UserDetails.tsx
│   │   │   └── columns.tsx
│   │   │
│   │   ├── courses/
│   │   │   ├── CoursesList.tsx
│   │   │   ├── CourseFormDialog.tsx
│   │   │   ├── CourseDetails.tsx
│   │   │   ├── ManageSyllabus.tsx
│   │   │   └── columns.tsx
│   │   │
│   │   ├── categories/
│   │   │   ├── CategoriesList.tsx
│   │   │   ├── CategoryFormDialog.tsx
│   │   │   ├── CategoryTree.tsx
│   │   │   └── columns.tsx
│   │   │
│   │   ├── enrollments/
│   │   │   ├── EnrollmentsList.tsx
│   │   │   ├── EnrollmentFormDialog.tsx
│   │   │   ├── EnrollmentDetails.tsx
│   │   │   ├── BulkEnroll.tsx
│   │   │   └── columns.tsx
│   │   │
│   │   ├── payments/
│   │   │   ├── PaymentsList.tsx
│   │   │   ├── PaymentDetails.tsx
│   │   │   └── columns.tsx
│   │   │
│   │   ├── invoices/
│   │   │   ├── InvoicesList.tsx
│   │   │   ├── InvoiceDetails.tsx
│   │   │   ├── GenerateInvoice.tsx
│   │   │   └── columns.tsx
│   │   │
│   │   ├── payouts/
│   │   │   ├── PayoutsList.tsx
│   │   │   ├── PayoutFormDialog.tsx
│   │   │   ├── PayoutSettings.tsx
│   │   │   └── columns.tsx
│   │   │
│   │   ├── coupons/
│   │   │   ├── CouponsList.tsx
│   │   │   ├── CouponFormDialog.tsx
│   │   │   ├── CouponStats.tsx
│   │   │   └── columns.tsx
│   │   │
│   │   ├── reviews/
│   │   │   ├── ReviewsList.tsx
│   │   │   ├── ReviewDetails.tsx
│   │   │   ├── ModerateReview.tsx
│   │   │   └── columns.tsx
│   │   │
│   │   ├── reports/
│   │   │   ├── SalesReport.tsx
│   │   │   ├── UserReport.tsx
│   │   │   ├── CourseReport.tsx
│   │   │   └── ExportData.tsx
│   │   │
│   │   ├── settings/
│   │   │   ├── ProfileSettings.tsx
│   │   │   ├── SystemSettings.tsx
│   │   │   └── EmailSettings.tsx
│   │   │
│   │   └── errors/
│   │       ├── NotFound.tsx
│   │       └── Unauthorized.tsx
│   │
│   ├── types/
│   │   ├── api.types.ts
│   │   ├── user.types.ts
│   │   ├── course.types.ts
│   │   ├── payment.types.ts
│   │   ├── enrollment.types.ts
│   │   ├── category.types.ts
│   │   ├── review.types.ts
│   │   ├── coupon.types.ts
│   │   ├── invoice.types.ts
│   │   ├── common.types.ts
│   │   └── index.ts
│   │
│   ├── lib/
│   │   ├── utils.ts
│   │   ├── validations/
│   │   │   ├── auth.schema.ts
│   │   │   ├── user.schema.ts
│   │   │   ├── course.schema.ts
│   │   │   ├── category.schema.ts
│   │   │   ├── enrollment.schema.ts
│   │   │   ├── payment.schema.ts
│   │   │   ├── invoice.schema.ts
│   │   │   ├── review.schema.ts
│   │   │   ├── coupon.schema.ts
│   │   │   └── payout.schema.ts
│   │   └── constants.ts
│   │
│   ├── hooks/
│   │   ├── useAuth.ts
│   │   ├── useApi.ts
│   │   ├── usePagination.ts
│   │   ├── useDebounce.ts
│   │   ├── useLocalStorage.ts
│   │   ├── useToast.ts
│   │   └── useDataTable.ts
│   │
│   ├── routes/
│   │   ├── AppRoutes.tsx
│   │   ├── PrivateRoute.tsx
│   │   ├── PublicRoute.tsx
│   │   └── routes.config.ts
│   │
│   ├── contexts/
│   │   ├── ThemeContext.tsx
│   │   └── NotificationContext.tsx
│   │
│   ├── styles/
│   │   ├── globals.css
│   │   └── variables.css
│   │
│   ├── App.tsx
│   ├── main.tsx
│   └── vite-env.d.ts

├── public/
│   ├── favicon.ico
│   └── logo.svg

├── .env
├── .env.example
├── .eslintrc.json
├── .prettierrc
├── components.json
├── index.html
├── package.json
├── tailwind.config.ts
├── postcss.config.js
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.ts
└── README.md
├── learner-app/                          # Next.js 15 Learner Frontend
│   ├── src/
│   │   ├── app/
│   │   │   ├── (auth)/
│   │   │   │   ├── layout.tsx
│   │   │   │   ├── login/
│   │   │   │   │   ├── page.tsx
│   │   │   │   │   └── actions.ts
│   │   │   │   ├── register/
│   │   │   │   │   ├── page.tsx
│   │   │   │   │   └── actions.ts
│   │   │   │   ├── forgot-password/
│   │   │   │   │   └── page.tsx
│   │   │   │   └── reset-password/
│   │   │   │       └── [token]/
│   │   │   │           └── page.tsx
│   │   │   │
│   │   │   ├── (dashboard)/
│   │   │   │   ├── layout.tsx
│   │   │   │   ├── dashboard/
│   │   │   │   │   ├── page.tsx
│   │   │   │   │   └── components/
│   │   │   │   │       ├── StatsCards.tsx
│   │   │   │   │       ├── RecentCourses.tsx
│   │   │   │   │       └── ProgressChart.tsx
│   │   │   │   ├── my-courses/
│   │   │   │   │   ├── page.tsx
│   │   │   │   │   └── components/
│   │   │   │   │       ├── CourseCard.tsx
│   │   │   │   │       └── CourseFilters.tsx
│   │   │   │   ├── course/
│   │   │   │   │   └── [courseId]/
│   │   │   │   │       ├── page.tsx
│   │   │   │   │       ├── layout.tsx
│   │   │   │   │       └── components/
│   │   │   │   │           ├── CourseHeader.tsx
│   │   │   │   │           ├── SyllabusList.tsx
│   │   │   │   │           └── CourseProgress.tsx
│   │   │   │   ├── learn/
│   │   │   │   │   └── [courseId]/
│   │   │   │   │       └── [itemId]/
│   │   │   │   │           ├── page.tsx
│   │   │   │   │           └── components/
│   │   │   │   │               ├── VideoPlayer.tsx
│   │   │   │   │               ├── QuizComponent.tsx
│   │   │   │   │               └── NotesSection.tsx
│   │   │   │   ├── explore/
│   │   │   │   │   ├── page.tsx
│   │   │   │   │   └── components/
│   │   │   │   │       ├── CourseSearchBar.tsx
│   │   │   │   │       ├── CourseGrid.tsx
│   │   │   │   │       └── CategoryFilter.tsx
│   │   │   │   ├── profile/
│   │   │   │   │   ├── page.tsx
│   │   │   │   │   └── edit/
│   │   │   │   │       └── page.tsx
│   │   │   │   ├── certificates/
│   │   │   │   │   └── page.tsx
│   │   │   │   ├── payments/
│   │   │   │   │   ├── page.tsx
│   │   │   │   │   └── invoices/
│   │   │   │   │       └── [invoiceId]/
│   │   │   │   │           └── page.tsx
│   │   │   │   └── settings/
│   │   │   │       └── page.tsx
│   │   │   │
│   │   │   ├── (marketing)/
│   │   │   │   ├── layout.tsx
│   │   │   │   ├── page.tsx              # Landing page
│   │   │   │   ├── about/
│   │   │   │   │   └── page.tsx
│   │   │   │   ├── pricing/
│   │   │   │   │   └── page.tsx
│   │   │   │   └── contact/
│   │   │   │       └── page.tsx
│   │   │   │
│   │   │   ├── api/
│   │   │   │   ├── auth/
│   │   │   │   │   ├── [...nextauth]/
│   │   │   │   │   │   └── route.ts
│   │   │   │   │   └── register/
│   │   │   │   │       └── route.ts
│   │   │   │   ├── courses/
│   │   │   │   │   ├── route.ts
│   │   │   │   │   └── [courseId]/
│   │   │   │   │       ├── route.ts
│   │   │   │   │       └── enroll/
│   │   │   │   │           └── route.ts
│   │   │   │   ├── user/
│   │   │   │   │   ├── profile/
│   │   │   │   │   │   └── route.ts
│   │   │   │   │   └── progress/
│   │   │   │   │       └── route.ts
│   │   │   │   └── payments/
│   │   │   │       └── webhook/
│   │   │   │           └── route.ts
│   │   │   │
│   │   │   ├── globals.css
│   │   │   ├── layout.tsx
│   │   │   ├── providers.tsx
│   │   │   └── not-found.tsx
│   │   │
│   │   ├── components/
│   │   │   ├── ui/                       # Shadcn components
│   │   │   │   ├── button.tsx
│   │   │   │   ├── card.tsx
│   │   │   │   ├── input.tsx
│   │   │   │   ├── form.tsx
│   │   │   │   └── index.ts
│   │   │   ├── layout/
│   │   │   │   ├── Header.tsx
│   │   │   │   ├── Footer.tsx
│   │   │   │   └── Sidebar.tsx
│   │   │   ├── courses/
│   │   │   │   ├── CourseCard.tsx
│   │   │   │   ├── CourseGrid.tsx
│   │   │   │   └── EnrollmentButton.tsx
│   │   │   ├── forms/
│   │   │   │   ├── LoginForm.tsx
│   │   │   │   ├── RegisterForm.tsx
│   │   │   │   └── ProfileForm.tsx
│   │   │   └── common/
│   │   │       ├── LoadingSpinner.tsx
│   │   │       └── EmptyState.tsx
│   │   │
│   │   ├── lib/
│   │   │   ├── utils.ts
│   │   │   ├── api-client.ts
│   │   │   └── validations/
│   │   │       ├── auth.schema.ts
│   │   │       └── profile.schema.ts
│   │   │
│   │   ├── hooks/
│   │   │   ├── useAuth.ts
│   │   │   ├── useCourses.ts
│   │   │   └── useDebounce.ts
│   │   │
│   │   ├── store/                        # Zustand store
│   │   │   ├── useAuthStore.ts
│   │   │   ├── useCourseStore.ts
│   │   │   └── index.ts
│   │   │
│   │   ├── types/
│   │   │   ├── user.types.ts
│   │   │   ├── course.types.ts
│   │   │   └── index.ts
│   │   │
│   │   └── middleware.ts
│   │
│   ├── public/
│   │   ├── images/
│   │   └── favicon.ico
│   │
│   ├── .env
│   ├── .env.example
│   ├── next.config.ts
│   ├── package.json
│   ├── tailwind.config.ts
│   ├── tsconfig.json
│   └── README.md

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages