Skip to content

SANTIAGOFURY/EDUSPACE

Repository files navigation

eduspace
β”œβ”€ .npmrc
β”œβ”€ apps
β”‚  └─ web
β”‚     β”œβ”€ eslint.config.js
β”‚     β”œβ”€ index.html
β”‚     β”œβ”€ package.json
β”‚     β”œβ”€ public
β”‚     β”‚  β”œβ”€ favicon.svg
β”‚     β”‚  └─ icons.svg
β”‚     β”œβ”€ README.md
β”‚     β”œβ”€ src
β”‚     β”‚  β”œβ”€ App.css
β”‚     β”‚  β”œβ”€ App.tsx
β”‚     β”‚  β”œβ”€ assets
β”‚     β”‚  β”œβ”€ components
β”‚     β”‚  β”‚  β”œβ”€ charts
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Heatmap.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ ProgressBar.tsx
β”‚     β”‚  β”‚  β”‚  └─ RadarChart.tsx
β”‚     β”‚  β”‚  β”œβ”€ common
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Avatar.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Badge.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Button.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Input.tsx
β”‚     β”‚  β”‚  β”‚  └─ Modal.tsx
β”‚     β”‚  β”‚  β”œβ”€ content
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ PDFViewer.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ ProtectedViewer.tsx
β”‚     β”‚  β”‚  β”‚  └─ RichText.tsx
β”‚     β”‚  β”‚  └─ forms
β”‚     β”‚  β”‚     β”œβ”€ FieldRenderer.tsx
β”‚     β”‚  β”‚     β”œβ”€ FormBuilder.tsx
β”‚     β”‚  β”‚     └─ index.tsx
β”‚     β”‚  β”œβ”€ context
β”‚     β”‚  β”‚  β”œβ”€ AuthContext.tsx
β”‚     β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  └─ ThemeContext.tsx
β”‚     β”‚  β”œβ”€ hooks
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  β”œβ”€ useAuth.ts
β”‚     β”‚  β”‚  β”œβ”€ useTheme.ts
β”‚     β”‚  β”‚  └─ useToast.ts
β”‚     β”‚  β”œβ”€ i18n
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  └─ locales
β”‚     β”‚  β”‚     β”œβ”€ ar
β”‚     β”‚  β”‚     β”‚  └─ common.json
β”‚     β”‚  β”‚     β”œβ”€ en
β”‚     β”‚  β”‚     β”‚  └─ common.json
β”‚     β”‚  β”‚     └─ fr
β”‚     β”‚  β”‚        └─ common.json
β”‚     β”‚  β”œβ”€ main.tsx
β”‚     β”‚  β”œβ”€ pages
β”‚     β”‚  β”‚  β”œβ”€ auth
β”‚     β”‚  β”‚  β”‚  β”œβ”€ ForgotPassword.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Login.tsx
β”‚     β”‚  β”‚  β”‚  └─ Register.tsx
β”‚     β”‚  β”‚  β”œβ”€ open
β”‚     β”‚  β”‚  β”‚  β”œβ”€ About.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Contact.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Home.tsx
β”‚     β”‚  β”‚  β”‚  └─ Services.tsx
β”‚     β”‚  β”‚  β”œβ”€ student
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ MyCourses.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Quizzes.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Requests.tsx
β”‚     β”‚  β”‚  β”‚  └─ StudentHome.tsx
β”‚     β”‚  β”‚  └─ teacher
β”‚     β”‚  β”‚     β”œβ”€ Classes.tsx
β”‚     β”‚  β”‚     β”œβ”€ Courses.tsx
β”‚     β”‚  β”‚     β”œβ”€ Dashboard.tsx
β”‚     β”‚  β”‚     β”œβ”€ index.tsx
β”‚     β”‚  β”‚     └─ Students.tsx
β”‚     β”‚  β”œβ”€ router
β”‚     β”‚  β”‚  β”œβ”€ guards.tsx
β”‚     β”‚  β”‚  └─ index.tsx
β”‚     β”‚  β”œβ”€ services
β”‚     β”‚  β”‚  β”œβ”€ api.ts
β”‚     β”‚  β”‚  β”œβ”€ brevo.ts
β”‚     β”‚  β”‚  β”œβ”€ firebase.ts
β”‚     β”‚  β”‚  └─ index.ts
β”‚     β”‚  β”œβ”€ store
β”‚     β”‚  β”‚  β”œβ”€ authSlice.ts
β”‚     β”‚  β”‚  β”œβ”€ courseSlice.ts
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  └─ uiSlice.ts
β”‚     β”‚  β”œβ”€ styles
β”‚     β”‚  β”‚  β”œβ”€ globals.css
β”‚     β”‚  β”‚  └─ tailwind-base.css
β”‚     β”‚  β”œβ”€ types
β”‚     β”‚  β”‚  └─ index.ts
β”‚     β”‚  └─ utils
β”‚     β”‚     β”œβ”€ formatters.ts
β”‚     β”‚     β”œβ”€ helpers.ts
β”‚     β”‚     β”œβ”€ index.ts
β”‚     β”‚     └─ validators.ts
β”‚     β”œβ”€ tsconfig.app.json
β”‚     β”œβ”€ tsconfig.json
β”‚     β”œβ”€ tsconfig.node.json
β”‚     └─ vite.config.ts
β”œβ”€ firebase-debug.log
β”œβ”€ firestore.indexes.json
β”œβ”€ firestore.rules
β”œβ”€ functions
β”‚  β”œβ”€ .eslintrc.js
β”‚  β”œβ”€ package.json
β”‚  β”œβ”€ src
β”‚  β”‚  β”œβ”€ auth
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ email
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”œβ”€ notifications
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ reports
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  └─ storage
β”‚  β”‚     └─ index.ts
β”‚  β”œβ”€ tsconfig.dev.json
β”‚  └─ tsconfig.json
β”œβ”€ package.json
β”œβ”€ packages
β”‚  β”œβ”€ config
β”‚  β”‚  β”œβ”€ eslint-config
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ package.json
β”‚  β”‚  β”œβ”€ tailwind-config
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  └─ package.json
β”‚  β”‚  └─ typescript-config
β”‚  β”‚     β”œβ”€ base.json
β”‚  β”‚     β”œβ”€ package.json
β”‚  β”‚     └─ react.json
β”‚  β”œβ”€ firebase
β”‚  β”‚  β”œβ”€ package.json
β”‚  β”‚  β”œβ”€ src
β”‚  β”‚  β”‚  β”œβ”€ auth.ts
β”‚  β”‚  β”‚  β”œβ”€ firestore.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ messaging.ts
β”‚  β”‚  β”‚  └─ storage.ts
β”‚  β”‚  └─ tsconfig.json
β”‚  β”œβ”€ types
β”‚  β”‚  β”œβ”€ package.json
β”‚  β”‚  β”œβ”€ src
β”‚  β”‚  β”‚  β”œβ”€ course.ts
β”‚  β”‚  β”‚  β”œβ”€ exercise.ts
β”‚  β”‚  β”‚  β”œβ”€ form.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ quiz.ts
β”‚  β”‚  β”‚  β”œβ”€ request.ts
β”‚  β”‚  β”‚  └─ user.ts
β”‚  β”‚  └─ tsconfig.json
β”‚  └─ ui
β”‚     β”œβ”€ package.json
β”‚     β”œβ”€ src
β”‚     β”‚  └─ index.ts
β”‚     └─ tsconfig.json
β”œβ”€ pnpm-lock.yaml
β”œβ”€ pnpm-workspace.yaml
β”œβ”€ project-tree.txt
β”œβ”€ README.md
β”œβ”€ tsconfig.json
└─ turbo.json

eduspace
β”œβ”€ .npmrc
β”œβ”€ apps
β”‚  └─ web
β”‚     β”œβ”€ eslint.config.js
β”‚     β”œβ”€ index.html
β”‚     β”œβ”€ package.json
β”‚     β”œβ”€ public
β”‚     β”œβ”€ README.md
β”‚     β”œβ”€ src
β”‚     β”‚  β”œβ”€ App.css
β”‚     β”‚  β”œβ”€ App.tsx
β”‚     β”‚  β”œβ”€ assets
β”‚     β”‚  β”œβ”€ components
β”‚     β”‚  β”‚  β”œβ”€ charts
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Heatmap.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ ProgressBar.tsx
β”‚     β”‚  β”‚  β”‚  └─ RadarChart.tsx
β”‚     β”‚  β”‚  β”œβ”€ common
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Avatar.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Badge.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Button.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Input.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ LanguageSwitcher.tsx
β”‚     β”‚  β”‚  β”‚  └─ Modal.tsx
β”‚     β”‚  β”‚  β”œβ”€ content
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ PDFViewer.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ ProtectedViewer.tsx
β”‚     β”‚  β”‚  β”‚  └─ RichText.tsx
β”‚     β”‚  β”‚  └─ forms
β”‚     β”‚  β”‚     β”œβ”€ FieldRenderer.tsx
β”‚     β”‚  β”‚     β”œβ”€ FormBuilder.tsx
β”‚     β”‚  β”‚     └─ index.tsx
β”‚     β”‚  β”œβ”€ context
β”‚     β”‚  β”‚  β”œβ”€ AuthContext.tsx
β”‚     β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  └─ ThemeContext.tsx
β”‚     β”‚  β”œβ”€ features
β”‚     β”‚  β”‚  └─ auth
β”‚     β”‚  β”‚     β”œβ”€ ForgotPasswordModal.tsx
β”‚     β”‚  β”‚     β”œβ”€ GoogleCompleteProfileModal.tsx
β”‚     β”‚  β”‚     β”œβ”€ LoginForm.tsx
β”‚     β”‚  β”‚     └─ RegisterForm.tsx
β”‚     β”‚  β”œβ”€ hooks
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  β”œβ”€ useAuth.ts
β”‚     β”‚  β”‚  β”œβ”€ useTheme.ts
β”‚     β”‚  β”‚  └─ useToast.ts
β”‚     β”‚  β”œβ”€ i18n
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  └─ locales
β”‚     β”‚  β”‚     β”œβ”€ ar
β”‚     β”‚  β”‚     β”‚  └─ common.json
β”‚     β”‚  β”‚     β”œβ”€ en
β”‚     β”‚  β”‚     β”‚  └─ common.json
β”‚     β”‚  β”‚     └─ fr
β”‚     β”‚  β”‚        └─ common.json
β”‚     β”‚  β”œβ”€ main.tsx
β”‚     β”‚  β”œβ”€ pages
β”‚     β”‚  β”‚  β”œβ”€ auth
β”‚     β”‚  β”‚  β”‚  └─ AuthPage.tsx
β”‚     β”‚  β”‚  β”œβ”€ open
β”‚     β”‚  β”‚  β”‚  β”œβ”€ About.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Contact.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Home.tsx
β”‚     β”‚  β”‚  β”‚  └─ Services.tsx
β”‚     β”‚  β”‚  β”œβ”€ student
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ MyCourses.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Quizzes.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Requests.tsx
β”‚     β”‚  β”‚  β”‚  └─ StudentHome.tsx
β”‚     β”‚  β”‚  └─ teacher
β”‚     β”‚  β”‚     β”œβ”€ Classes.tsx
β”‚     β”‚  β”‚     β”œβ”€ Courses.tsx
β”‚     β”‚  β”‚     β”œβ”€ Dashboard.tsx
β”‚     β”‚  β”‚     β”œβ”€ index.tsx
β”‚     β”‚  β”‚     └─ Students.tsx
β”‚     β”‚  β”œβ”€ router
β”‚     β”‚  β”‚  β”œβ”€ guards.tsx
β”‚     β”‚  β”‚  └─ index.tsx
β”‚     β”‚  β”œβ”€ services
β”‚     β”‚  β”‚  β”œβ”€ api.ts
β”‚     β”‚  β”‚  β”œβ”€ brevo.ts
β”‚     β”‚  β”‚  β”œβ”€ firebase.ts
β”‚     β”‚  β”‚  └─ index.ts
β”‚     β”‚  β”œβ”€ store
β”‚     β”‚  β”‚  β”œβ”€ authSlice.ts
β”‚     β”‚  β”‚  β”œβ”€ courseSlice.ts
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  └─ uiSlice.ts
β”‚     β”‚  β”œβ”€ styles
β”‚     β”‚  β”‚  β”œβ”€ globals.css
β”‚     β”‚  β”‚  └─ tailwind-base.css
β”‚     β”‚  β”œβ”€ types
β”‚     β”‚  β”‚  └─ index.ts
β”‚     β”‚  └─ utils
β”‚     β”‚     β”œβ”€ formatters.ts
β”‚     β”‚     β”œβ”€ helpers.ts
β”‚     β”‚     β”œβ”€ index.ts
β”‚     β”‚     └─ validators.ts
β”‚     β”œβ”€ tsconfig.app.json
β”‚     β”œβ”€ tsconfig.json
β”‚     β”œβ”€ tsconfig.node.json
β”‚     └─ vite.config.ts
β”œβ”€ firestore.indexes.json
β”œβ”€ firestore.rules
β”œβ”€ functions
β”‚  β”œβ”€ .eslintrc.js
β”‚  β”œβ”€ package.json
β”‚  β”œβ”€ src
β”‚  β”‚  β”œβ”€ auth
β”‚  β”‚  β”‚  β”œβ”€ checkAuthorizedUser.ts
β”‚  β”‚  β”‚  β”œβ”€ completeProfile.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ onUserCreate.ts
β”‚  β”‚  β”‚  └─ validateSignup.ts
β”‚  β”‚  β”œβ”€ email
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ helpers.ts
β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”œβ”€ notifications
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ reports
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ storage
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  └─ utils
β”‚  β”‚     β”œβ”€ idGenerator.ts
β”‚  β”‚     └─ index.ts
β”‚  β”œβ”€ tsconfig.dev.json
β”‚  └─ tsconfig.json
β”œβ”€ package.json
β”œβ”€ packages
β”‚  β”œβ”€ config
β”‚  β”‚  β”œβ”€ eslint-config
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ package.json
β”‚  β”‚  β”œβ”€ tailwind-config
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  └─ package.json
β”‚  β”‚  └─ typescript-config
β”‚  β”‚     β”œβ”€ base.json
β”‚  β”‚     β”œβ”€ package.json
β”‚  β”‚     └─ react.json
β”‚  β”œβ”€ firebase
β”‚  β”‚  β”œβ”€ package.json
β”‚  β”‚  β”œβ”€ src
β”‚  β”‚  β”‚  β”œβ”€ auth.ts
β”‚  β”‚  β”‚  β”œβ”€ firestore.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ messaging.ts
β”‚  β”‚  β”‚  └─ storage.ts
β”‚  β”‚  └─ tsconfig.json
β”‚  β”œβ”€ types
β”‚  β”‚  β”œβ”€ package.json
β”‚  β”‚  β”œβ”€ src
β”‚  β”‚  β”‚  β”œβ”€ course.ts
β”‚  β”‚  β”‚  β”œβ”€ exercise.ts
β”‚  β”‚  β”‚  β”œβ”€ form.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ quiz.ts
β”‚  β”‚  β”‚  β”œβ”€ request.ts
β”‚  β”‚  β”‚  └─ user.ts
β”‚  β”‚  └─ tsconfig.json
β”‚  └─ ui
β”‚     β”œβ”€ package.json
β”‚     β”œβ”€ src
β”‚     β”‚  └─ index.ts
β”‚     └─ tsconfig.json
β”œβ”€ pnpm-lock.yaml
β”œβ”€ pnpm-workspace.yaml
β”œβ”€ project-tree.txt
β”œβ”€ README.md
β”œβ”€ tsconfig.json
└─ turbo.json

eduspace
β”œβ”€ .firebaserc
β”œβ”€ .npmrc
β”œβ”€ apps
β”‚  └─ web
β”‚     β”œβ”€ eslint.config.js
β”‚     β”œβ”€ index.html
β”‚     β”œβ”€ package.json
β”‚     β”œβ”€ public
β”‚     β”œβ”€ README.md
β”‚     β”œβ”€ src
β”‚     β”‚  β”œβ”€ App.css
β”‚     β”‚  β”œβ”€ App.tsx
β”‚     β”‚  β”œβ”€ assets
β”‚     β”‚  β”œβ”€ components
β”‚     β”‚  β”‚  β”œβ”€ charts
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Heatmap.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ ProgressBar.tsx
β”‚     β”‚  β”‚  β”‚  └─ RadarChart.tsx
β”‚     β”‚  β”‚  β”œβ”€ common
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Avatar.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Badge.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Button.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Input.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ LanguageSwitcher.tsx
β”‚     β”‚  β”‚  β”‚  └─ Modal.tsx
β”‚     β”‚  β”‚  β”œβ”€ content
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ PDFViewer.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ ProtectedViewer.tsx
β”‚     β”‚  β”‚  β”‚  └─ RichText.tsx
β”‚     β”‚  β”‚  └─ forms
β”‚     β”‚  β”‚     β”œβ”€ FieldRenderer.tsx
β”‚     β”‚  β”‚     β”œβ”€ FormBuilder.tsx
β”‚     β”‚  β”‚     └─ index.tsx
β”‚     β”‚  β”œβ”€ context
β”‚     β”‚  β”‚  β”œβ”€ AuthContext.tsx
β”‚     β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  └─ ThemeContext.tsx
β”‚     β”‚  β”œβ”€ features
β”‚     β”‚  β”‚  └─ auth
β”‚     β”‚  β”‚     β”œβ”€ EmailVerificationModal.tsx
β”‚     β”‚  β”‚     β”œβ”€ ForgotPasswordModal.tsx
β”‚     β”‚  β”‚     β”œβ”€ GoogleCompleteProfileModal.tsx
β”‚     β”‚  β”‚     β”œβ”€ LoginForm.tsx
β”‚     β”‚  β”‚     └─ RegisterForm.tsx
β”‚     β”‚  β”œβ”€ hooks
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  β”œβ”€ useAuth.ts
β”‚     β”‚  β”‚  β”œβ”€ useTheme.ts
β”‚     β”‚  β”‚  └─ useToast.ts
β”‚     β”‚  β”œβ”€ i18n
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  └─ locales
β”‚     β”‚  β”‚     β”œβ”€ ar
β”‚     β”‚  β”‚     β”‚  └─ common.json
β”‚     β”‚  β”‚     β”œβ”€ en
β”‚     β”‚  β”‚     β”‚  └─ common.json
β”‚     β”‚  β”‚     └─ fr
β”‚     β”‚  β”‚        └─ common.json
β”‚     β”‚  β”œβ”€ main.tsx
β”‚     β”‚  β”œβ”€ pages
β”‚     β”‚  β”‚  β”œβ”€ auth
β”‚     β”‚  β”‚  β”‚  └─ AuthPage.tsx
β”‚     β”‚  β”‚  β”œβ”€ open
β”‚     β”‚  β”‚  β”‚  β”œβ”€ About.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Contact.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Home.tsx
β”‚     β”‚  β”‚  β”‚  └─ Services.tsx
β”‚     β”‚  β”‚  β”œβ”€ student
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ MyCourses.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Quizzes.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Requests.tsx
β”‚     β”‚  β”‚  β”‚  └─ StudentHome.tsx
β”‚     β”‚  β”‚  └─ teacher
β”‚     β”‚  β”‚     β”œβ”€ Classes.tsx
β”‚     β”‚  β”‚     β”œβ”€ Courses.tsx
β”‚     β”‚  β”‚     β”œβ”€ Dashboard.tsx
β”‚     β”‚  β”‚     β”œβ”€ index.tsx
β”‚     β”‚  β”‚     β”œβ”€ Students.tsx
β”‚     β”‚  β”‚     └─ tabs
β”‚     β”‚  β”‚        └─ StudentManager.tsx
β”‚     β”‚  β”œβ”€ router
β”‚     β”‚  β”‚  β”œβ”€ guards.tsx
β”‚     β”‚  β”‚  └─ index.tsx
β”‚     β”‚  β”œβ”€ services
β”‚     β”‚  β”‚  β”œβ”€ api.ts
β”‚     β”‚  β”‚  β”œβ”€ auth.ts
β”‚     β”‚  β”‚  β”œβ”€ brevo.ts
β”‚     β”‚  β”‚  β”œβ”€ db.ts
β”‚     β”‚  β”‚  β”œβ”€ firebase.ts
β”‚     β”‚  β”‚  └─ index.ts
β”‚     β”‚  β”œβ”€ store
β”‚     β”‚  β”‚  β”œβ”€ authSlice.ts
β”‚     β”‚  β”‚  β”œβ”€ courseSlice.ts
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  └─ uiSlice.ts
β”‚     β”‚  β”œβ”€ styles
β”‚     β”‚  β”‚  β”œβ”€ globals.css
β”‚     β”‚  β”‚  └─ tailwind-base.css
β”‚     β”‚  β”œβ”€ types
β”‚     β”‚  β”‚  └─ index.ts
β”‚     β”‚  └─ utils
β”‚     β”‚     β”œβ”€ formatters.ts
β”‚     β”‚     β”œβ”€ helpers.ts
β”‚     β”‚     β”œβ”€ index.ts
β”‚     β”‚     └─ validators.ts
β”‚     β”œβ”€ tsconfig.app.json
β”‚     β”œβ”€ tsconfig.json
β”‚     β”œβ”€ tsconfig.node.json
β”‚     └─ vite.config.ts
β”œβ”€ firebase.json
β”œβ”€ firestore.indexes.json
β”œβ”€ firestore.rules
β”œβ”€ functions
β”‚  β”œβ”€ .eslintrc.js
β”‚  β”œβ”€ lib
β”‚  β”‚  β”œβ”€ auth
β”‚  β”‚  β”‚  β”œβ”€ changePassword.js
β”‚  β”‚  β”‚  β”œβ”€ changePassword.js.map
β”‚  β”‚  β”‚  β”œβ”€ checkAuthorizedUser.js
β”‚  β”‚  β”‚  β”œβ”€ checkAuthorizedUser.js.map
β”‚  β”‚  β”‚  β”œβ”€ completeProfile.js
β”‚  β”‚  β”‚  β”œβ”€ completeProfile.js.map
β”‚  β”‚  β”‚  β”œβ”€ createUserProfile.js
β”‚  β”‚  β”‚  β”œβ”€ createUserProfile.js.map
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  β”œβ”€ index.js.map
β”‚  β”‚  β”‚  β”œβ”€ onUserCreate.js
β”‚  β”‚  β”‚  β”œβ”€ onUserCreate.js.map
β”‚  β”‚  β”‚  β”œβ”€ resendVerificationCode.js
β”‚  β”‚  β”‚  β”œβ”€ resendVerificationCode.js.map
β”‚  β”‚  β”‚  β”œβ”€ sendResetCode.js
β”‚  β”‚  β”‚  β”œβ”€ sendResetCode.js.map
β”‚  β”‚  β”‚  β”œβ”€ sendVerificationCode.js
β”‚  β”‚  β”‚  β”œβ”€ sendVerificationCode.js.map
β”‚  β”‚  β”‚  β”œβ”€ validateSignup.js
β”‚  β”‚  β”‚  β”œβ”€ validateSignup.js.map
β”‚  β”‚  β”‚  β”œβ”€ verifyResetCode.js
β”‚  β”‚  β”‚  β”œβ”€ verifyResetCode.js.map
β”‚  β”‚  β”‚  β”œβ”€ verifyVerificationCode.js
β”‚  β”‚  β”‚  └─ verifyVerificationCode.js.map
β”‚  β”‚  β”œβ”€ email
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ index.js.map
β”‚  β”‚  β”œβ”€ helpers.js
β”‚  β”‚  β”œβ”€ helpers.js.map
β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”œβ”€ index.js.map
β”‚  β”‚  β”œβ”€ notifications
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ index.js.map
β”‚  β”‚  β”œβ”€ reports
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ index.js.map
β”‚  β”‚  β”œβ”€ storage
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ index.js.map
β”‚  β”‚  └─ utils
β”‚  β”‚     β”œβ”€ idGenerator.js
β”‚  β”‚     β”œβ”€ idGenerator.js.map
β”‚  β”‚     β”œβ”€ index.js
β”‚  β”‚     β”œβ”€ index.js.map
β”‚  β”‚     β”œβ”€ mailer.js
β”‚  β”‚     └─ mailer.js.map
β”‚  β”œβ”€ package.json
β”‚  β”œβ”€ src
β”‚  β”‚  β”œβ”€ auth
β”‚  β”‚  β”‚  β”œβ”€ changePassword.ts
β”‚  β”‚  β”‚  β”œβ”€ checkAuthorizedUser.ts
β”‚  β”‚  β”‚  β”œβ”€ completeProfile.ts
β”‚  β”‚  β”‚  β”œβ”€ createUserProfile.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ resendVerificationCode.ts
β”‚  β”‚  β”‚  β”œβ”€ sendResetCode.ts
β”‚  β”‚  β”‚  β”œβ”€ sendVerificationCode.ts
β”‚  β”‚  β”‚  β”œβ”€ validateSignup.ts
β”‚  β”‚  β”‚  β”œβ”€ verifyResetCode.ts
β”‚  β”‚  β”‚  └─ verifyVerificationCode.ts
β”‚  β”‚  β”œβ”€ email
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ helpers.ts
β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”œβ”€ notifications
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ reports
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ storage
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  └─ utils
β”‚  β”‚     β”œβ”€ idGenerator.ts
β”‚  β”‚     β”œβ”€ index.ts
β”‚  β”‚     └─ mailer.ts
β”‚  β”œβ”€ tsconfig.dev.json
β”‚  └─ tsconfig.json
β”œβ”€ package.json
β”œβ”€ packages
β”‚  β”œβ”€ config
β”‚  β”‚  β”œβ”€ eslint-config
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ package.json
β”‚  β”‚  β”œβ”€ tailwind-config
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  └─ package.json
β”‚  β”‚  └─ typescript-config
β”‚  β”‚     β”œβ”€ base.json
β”‚  β”‚     β”œβ”€ package.json
β”‚  β”‚     └─ react.json
β”‚  β”œβ”€ firebase
β”‚  β”‚  β”œβ”€ package.json
β”‚  β”‚  β”œβ”€ src
β”‚  β”‚  β”‚  β”œβ”€ auth.ts
β”‚  β”‚  β”‚  β”œβ”€ firestore.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ messaging.ts
β”‚  β”‚  β”‚  └─ storage.ts
β”‚  β”‚  └─ tsconfig.json
β”‚  β”œβ”€ types
β”‚  β”‚  β”œβ”€ package.json
β”‚  β”‚  β”œβ”€ src
β”‚  β”‚  β”‚  β”œβ”€ course.ts
β”‚  β”‚  β”‚  β”œβ”€ exercise.ts
β”‚  β”‚  β”‚  β”œβ”€ form.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ quiz.ts
β”‚  β”‚  β”‚  β”œβ”€ request.ts
β”‚  β”‚  β”‚  └─ user.ts
β”‚  β”‚  └─ tsconfig.json
β”‚  └─ ui
β”‚     β”œβ”€ package.json
β”‚     β”œβ”€ src
β”‚     β”‚  └─ index.ts
β”‚     └─ tsconfig.json
β”œβ”€ pnpm-lock.yaml
β”œβ”€ pnpm-workspace.yaml
β”œβ”€ project-tree.txt
β”œβ”€ README.md
β”œβ”€ tsconfig.json
β”œβ”€ turbo.json
└─ y

eduspace
β”œβ”€ .firebaserc
β”œβ”€ .npmrc
β”œβ”€ apps
β”‚  └─ web
β”‚     β”œβ”€ eslint.config.js
β”‚     β”œβ”€ index.html
β”‚     β”œβ”€ package.json
β”‚     β”œβ”€ public
β”‚     β”œβ”€ README.md
β”‚     β”œβ”€ src
β”‚     β”‚  β”œβ”€ App.css
β”‚     β”‚  β”œβ”€ App.tsx
β”‚     β”‚  β”œβ”€ assets
β”‚     β”‚  β”œβ”€ components
β”‚     β”‚  β”‚  β”œβ”€ charts
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Heatmap.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ ProgressBar.tsx
β”‚     β”‚  β”‚  β”‚  └─ RadarChart.tsx
β”‚     β”‚  β”‚  β”œβ”€ common
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Avatar.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Badge.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Button.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Input.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ LanguageSwitcher.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Modal.tsx
β”‚     β”‚  β”‚  β”‚  └─ PreferencesButton.tsx
β”‚     β”‚  β”‚  β”œβ”€ content
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ PDFViewer.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ ProtectedViewer.tsx
β”‚     β”‚  β”‚  β”‚  └─ RichText.tsx
β”‚     β”‚  β”‚  └─ forms
β”‚     β”‚  β”‚     β”œβ”€ FieldRenderer.tsx
β”‚     β”‚  β”‚     β”œβ”€ FormBuilder.tsx
β”‚     β”‚  β”‚     └─ index.tsx
β”‚     β”‚  β”œβ”€ context
β”‚     β”‚  β”‚  β”œβ”€ AuthContext.tsx
β”‚     β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  └─ ThemeContext.tsx
β”‚     β”‚  β”œβ”€ features
β”‚     β”‚  β”‚  └─ auth
β”‚     β”‚  β”‚     β”œβ”€ EmailVerificationModal.tsx
β”‚     β”‚  β”‚     β”œβ”€ ForgotPasswordModal.tsx
β”‚     β”‚  β”‚     β”œβ”€ GoogleCompleteProfileModal.tsx
β”‚     β”‚  β”‚     β”œβ”€ LoginForm.tsx
β”‚     β”‚  β”‚     └─ RegisterForm.tsx
β”‚     β”‚  β”œβ”€ hooks
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  β”œβ”€ useAuth.ts
β”‚     β”‚  β”‚  β”œβ”€ useTheme.ts
β”‚     β”‚  β”‚  └─ useToast.ts
β”‚     β”‚  β”œβ”€ i18n
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  └─ locales
β”‚     β”‚  β”‚     β”œβ”€ ar
β”‚     β”‚  β”‚     β”‚  └─ common.json
β”‚     β”‚  β”‚     β”œβ”€ en
β”‚     β”‚  β”‚     β”‚  └─ common.json
β”‚     β”‚  β”‚     └─ fr
β”‚     β”‚  β”‚        └─ common.json
β”‚     β”‚  β”œβ”€ main.tsx
β”‚     β”‚  β”œβ”€ pages
β”‚     β”‚  β”‚  β”œβ”€ auth
β”‚     β”‚  β”‚  β”‚  └─ AuthPage.tsx
β”‚     β”‚  β”‚  β”œβ”€ open
β”‚     β”‚  β”‚  β”‚  β”œβ”€ About.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Contact.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Home.tsx
β”‚     β”‚  β”‚  β”‚  └─ Services.tsx
β”‚     β”‚  β”‚  β”œβ”€ student
β”‚     β”‚  β”‚  β”‚  β”œβ”€ index.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ MyCourses.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Quizzes.tsx
β”‚     β”‚  β”‚  β”‚  β”œβ”€ Requests.tsx
β”‚     β”‚  β”‚  β”‚  └─ StudentHome.tsx
β”‚     β”‚  β”‚  └─ teacher
β”‚     β”‚  β”‚     β”œβ”€ Classes.tsx
β”‚     β”‚  β”‚     β”œβ”€ Courses.tsx
β”‚     β”‚  β”‚     β”œβ”€ Dashboard.tsx
β”‚     β”‚  β”‚     β”œβ”€ index.tsx
β”‚     β”‚  β”‚     β”œβ”€ Students.tsx
β”‚     β”‚  β”‚     └─ tabs
β”‚     β”‚  β”‚        └─ StudentManager.tsx
β”‚     β”‚  β”œβ”€ router
β”‚     β”‚  β”‚  β”œβ”€ guards.tsx
β”‚     β”‚  β”‚  └─ index.tsx
β”‚     β”‚  β”œβ”€ services
β”‚     β”‚  β”‚  β”œβ”€ api.ts
β”‚     β”‚  β”‚  β”œβ”€ auth.ts
β”‚     β”‚  β”‚  β”œβ”€ brevo.ts
β”‚     β”‚  β”‚  β”œβ”€ db.ts
β”‚     β”‚  β”‚  β”œβ”€ firebase.ts
β”‚     β”‚  β”‚  └─ index.ts
β”‚     β”‚  β”œβ”€ store
β”‚     β”‚  β”‚  β”œβ”€ authSlice.ts
β”‚     β”‚  β”‚  β”œβ”€ courseSlice.ts
β”‚     β”‚  β”‚  β”œβ”€ index.ts
β”‚     β”‚  β”‚  └─ uiSlice.ts
β”‚     β”‚  β”œβ”€ styles
β”‚     β”‚  β”‚  β”œβ”€ globals.css
β”‚     β”‚  β”‚  └─ tailwind-base.css
β”‚     β”‚  β”œβ”€ types
β”‚     β”‚  β”‚  └─ index.ts
β”‚     β”‚  └─ utils
β”‚     β”‚     β”œβ”€ formatters.ts
β”‚     β”‚     β”œβ”€ helpers.ts
β”‚     β”‚     β”œβ”€ index.ts
β”‚     β”‚     └─ validators.ts
β”‚     β”œβ”€ tsconfig.app.json
β”‚     β”œβ”€ tsconfig.json
β”‚     β”œβ”€ tsconfig.node.json
β”‚     └─ vite.config.ts
β”œβ”€ firebase.json
β”œβ”€ firestore.indexes.json
β”œβ”€ firestore.rules
β”œβ”€ functions
β”‚  β”œβ”€ .eslintrc.js
β”‚  β”œβ”€ lib
β”‚  β”‚  β”œβ”€ auth
β”‚  β”‚  β”‚  β”œβ”€ changePassword.js
β”‚  β”‚  β”‚  β”œβ”€ changePassword.js.map
β”‚  β”‚  β”‚  β”œβ”€ checkAuthorizedUser.js
β”‚  β”‚  β”‚  β”œβ”€ checkAuthorizedUser.js.map
β”‚  β”‚  β”‚  β”œβ”€ completeProfile.js
β”‚  β”‚  β”‚  β”œβ”€ completeProfile.js.map
β”‚  β”‚  β”‚  β”œβ”€ createUserProfile.js
β”‚  β”‚  β”‚  β”œβ”€ createUserProfile.js.map
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  β”œβ”€ index.js.map
β”‚  β”‚  β”‚  β”œβ”€ onUserCreate.js
β”‚  β”‚  β”‚  β”œβ”€ onUserCreate.js.map
β”‚  β”‚  β”‚  β”œβ”€ resendVerificationCode.js
β”‚  β”‚  β”‚  β”œβ”€ resendVerificationCode.js.map
β”‚  β”‚  β”‚  β”œβ”€ sendResetCode.js
β”‚  β”‚  β”‚  β”œβ”€ sendResetCode.js.map
β”‚  β”‚  β”‚  β”œβ”€ sendVerificationCode.js
β”‚  β”‚  β”‚  β”œβ”€ sendVerificationCode.js.map
β”‚  β”‚  β”‚  β”œβ”€ validateSignup.js
β”‚  β”‚  β”‚  β”œβ”€ validateSignup.js.map
β”‚  β”‚  β”‚  β”œβ”€ verifyResetCode.js
β”‚  β”‚  β”‚  β”œβ”€ verifyResetCode.js.map
β”‚  β”‚  β”‚  β”œβ”€ verifyVerificationCode.js
β”‚  β”‚  β”‚  └─ verifyVerificationCode.js.map
β”‚  β”‚  β”œβ”€ email
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ index.js.map
β”‚  β”‚  β”œβ”€ helpers.js
β”‚  β”‚  β”œβ”€ helpers.js.map
β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”œβ”€ index.js.map
β”‚  β”‚  β”œβ”€ notifications
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ index.js.map
β”‚  β”‚  β”œβ”€ reports
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ index.js.map
β”‚  β”‚  β”œβ”€ storage
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ index.js.map
β”‚  β”‚  └─ utils
β”‚  β”‚     β”œβ”€ idGenerator.js
β”‚  β”‚     β”œβ”€ idGenerator.js.map
β”‚  β”‚     β”œβ”€ index.js
β”‚  β”‚     β”œβ”€ index.js.map
β”‚  β”‚     β”œβ”€ mailer.js
β”‚  β”‚     └─ mailer.js.map
β”‚  β”œβ”€ package.json
β”‚  β”œβ”€ src
β”‚  β”‚  β”œβ”€ auth
β”‚  β”‚  β”‚  β”œβ”€ changePassword.ts
β”‚  β”‚  β”‚  β”œβ”€ checkAuthorizedUser.ts
β”‚  β”‚  β”‚  β”œβ”€ completeProfile.ts
β”‚  β”‚  β”‚  β”œβ”€ createUserProfile.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ resendVerificationCode.ts
β”‚  β”‚  β”‚  β”œβ”€ sendResetCode.ts
β”‚  β”‚  β”‚  β”œβ”€ sendVerificationCode.ts
β”‚  β”‚  β”‚  β”œβ”€ validateSignup.ts
β”‚  β”‚  β”‚  β”œβ”€ verifyResetCode.ts
β”‚  β”‚  β”‚  └─ verifyVerificationCode.ts
β”‚  β”‚  β”œβ”€ email
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ helpers.ts
β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”œβ”€ notifications
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ reports
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  β”œβ”€ storage
β”‚  β”‚  β”‚  └─ index.ts
β”‚  β”‚  └─ utils
β”‚  β”‚     β”œβ”€ idGenerator.ts
β”‚  β”‚     β”œβ”€ index.ts
β”‚  β”‚     └─ mailer.ts
β”‚  β”œβ”€ tsconfig.dev.json
β”‚  └─ tsconfig.json
β”œβ”€ package.json
β”œβ”€ packages
β”‚  β”œβ”€ config
β”‚  β”‚  β”œβ”€ eslint-config
β”‚  β”‚  β”‚  β”œβ”€ index.js
β”‚  β”‚  β”‚  └─ package.json
β”‚  β”‚  β”œβ”€ tailwind-config
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  └─ package.json
β”‚  β”‚  └─ typescript-config
β”‚  β”‚     β”œβ”€ base.json
β”‚  β”‚     β”œβ”€ package.json
β”‚  β”‚     └─ react.json
β”‚  β”œβ”€ firebase
β”‚  β”‚  β”œβ”€ package.json
β”‚  β”‚  β”œβ”€ src
β”‚  β”‚  β”‚  β”œβ”€ auth.ts
β”‚  β”‚  β”‚  β”œβ”€ firestore.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ messaging.ts
β”‚  β”‚  β”‚  └─ storage.ts
β”‚  β”‚  └─ tsconfig.json
β”‚  β”œβ”€ types
β”‚  β”‚  β”œβ”€ package.json
β”‚  β”‚  β”œβ”€ src
β”‚  β”‚  β”‚  β”œβ”€ course.ts
β”‚  β”‚  β”‚  β”œβ”€ exercise.ts
β”‚  β”‚  β”‚  β”œβ”€ form.ts
β”‚  β”‚  β”‚  β”œβ”€ index.ts
β”‚  β”‚  β”‚  β”œβ”€ quiz.ts
β”‚  β”‚  β”‚  β”œβ”€ request.ts
β”‚  β”‚  β”‚  └─ user.ts
β”‚  β”‚  └─ tsconfig.json
β”‚  └─ ui
β”‚     β”œβ”€ package.json
β”‚     β”œβ”€ src
β”‚     β”‚  └─ index.ts
β”‚     └─ tsconfig.json
β”œβ”€ pnpm-lock.yaml
β”œβ”€ pnpm-workspace.yaml
β”œβ”€ project-tree.txt
β”œβ”€ README.md
β”œβ”€ tsconfig.json
β”œβ”€ turbo.json
└─ y

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages