Commit Graph
113 Commits
Author SHA1 Message Date
Rotimi Best ac3f35a97f Merge branch 'main' of https://github.com/classroomio/classroomio into feat/release-v2 2025-12-24 04:18:39 +00:00
Adeyemi AdetunjiandRotimi Best bc9e3b41ae feat: move community supabase request to api layer (#612)
* feat: move community supabase request to api layer

* chore: pr review checkpoint

* chore: PR fixes

* feat: implement role-based authorization middleware and align the community features with the developer guide.

- Added role-based authorization middleware for organization and course membership checks, including `orgMemberMiddleware`, `orgTeamMemberMiddleware`, and `courseMemberMiddleware`.
- Introduced route-specific middleware for comment and question authorization, ensuring only authors or team members can modify content.
- Updated community routes to utilize the new middleware for enhanced security and access control.
- Refactored community services to streamline upvote functionality and improve error handling.
- Enhanced UI components for community interactions, including new comment and question pages, and improved state management for user actions.
- Updated documentation to reflect new middleware usage and best practices for authorization in the API layer.

* feat: enhance course and organization routes with middleware for improved access control

- Added `courseMemberMiddleware` to course download and clone routes to enforce membership checks.
- Updated lesson route to include `courseMemberMiddleware` for PDF downloads.
- Integrated `orgMemberMiddleware` into organization routes for team and audience access, ensuring only authorized members can retrieve data.
- Refactored lesson and organization routes for consistency and clarity in middleware usage.

* chore: streamline dashboard and API development scripts in package.json

- Consolidated dashboard and API development commands to include all relevant filters in a single line for improved clarity and ease of use.
- Removed redundant full command variants to simplify the script section.

---------

Co-authored-by: Rotimi Best <best@classroomio.com>
2025-12-22 19:57:27 +01:00
Rotimi BestandAbdulmuizz Hamzat 9fb6c7cbaa feat: migrate course UI from supabase (#615)
* chore: fix storybook build

* chore: implement theming

* community list not showing properly

* refactor: migrate Chip component to @cio/ui/custom/chip

- Updated imports for the Chip component across multiple files to use the new location in the @cio/ui package.
- Replaced the previous Chip implementation with a new version that utilizes a Badge for better styling and functionality.
- Adjusted related components to ensure consistent usage of the updated Chip component.

* fix: align course sidebar design to match organization design (#611)

* fix: align course sidebar design to match organization design

* feat: add hideSearch prop to AppHeader and update sidebar layout

---------

Co-authored-by: Rotimi Best <best@classroomio.com>

* refactor: replace PrimaryButton with Button component across multiple files

- Updated various components to use the new Button component from @cio/ui/base/button instead of the deprecated PrimaryButton.
- Ensured consistent button usage throughout the application for improved styling and functionality.
- Removed the PrimaryButton component and its associated constants from the codebase.

* refactor: standardize button and input usage across components

- Replaced instances of deprecated components such as TextField, TextArea, and IconButton with their updated counterparts (InputField, TextareaField, and updated IconButton).
- Ensured consistent event handling by changing `onClick` to `onclick` for better alignment with Svelte's event binding conventions.
- Removed unused components and streamlined imports to enhance code maintainability and readability.

* chore: themeing, course card, use $features

* refactor: centralize UI components and update modal implementations

- Refactored various components to centralize UI elements, improving discoverability and maintainability.
- Replaced deprecated modal components with the new Dialog component for consistent modal behavior across the application.
- Removed unused components and streamlined imports to enhance code clarity and reduce complexity.

* feat: add new documentation and refactor org and lms UI components

- Introduced new documentation files for Auth Flow, Breadcrumbs Refactoring, Page and Route Creation, and Route Page Setup to enhance developer onboarding and reference.
- Refactored various UI components, including the Course Sidebar and Lesson Modal, to improve layout and functionality.
- Removed deprecated components and streamlined imports for better maintainability.
- Updated translations across multiple languages to ensure consistency in user experience.

* refactor: update UI components and improve styling consistency

- Refactored various components to enhance styling consistency, including updates to button and text color classes.
- Removed deprecated components and streamlined imports for better maintainability.
- Replaced instances of PageBody with a more flexible Page component structure across multiple routes.
- Updated translations and UI elements to align with the new design system.
- Deleted unused components to reduce code complexity and improve clarity.

* update output.css

---------

Co-authored-by: Abdulmuizz Hamzat <103611443+canhamzacode@users.noreply.github.com>
2025-12-22 02:36:48 +01:00
Abdulmuizz Hamzat 531516a8f7 feat: remove supabase dependence during course cloning (#605)
* feat: Add .gitignore file and update package.json with pnpm version

feat: Enhance course queries with error handling and new course retrieval

feat: Implement exercise queries for creating and fetching exercises, questions, and options

feat: Create group queries for managing groups and group members

feat: Add lesson queries for creating lessons and fetching sections by course ID

feat: Update seed script to include seeding for users, profiles, accounts, organizations, groups, courses, lessons, exercises, questions, and options

* feat: Enhance course cloning functionality by refining course and lesson data handling

* chore: remove console.log

* feat: update role assignment in cloneCourse function and clean up unused types in database.ts
2025-12-02 09:48:29 +01:00
Rotimi Best a3924100dd feat: migrate auth from supabase to better auth (#596)
* feat: add README for @cio/db package and remove existingAccounts.json

* load session, load profile and organization, add create profile hook

* chore: cache session request

The trick was passing all the cookies to the backend. Previously I was only passing the better-auth.session_token and not better-auth.session_data. Read about the difference here https://www.better-auth.com/docs/concepts/cookies#custom-cookies

* feat: login, logout, onboarding, verify email, reset password.

* feat: complete change email and email verification

* feat: standardise how we make rpc calls and create org endpoints

* fix ui errors

* fix: handle potential undefined customerId and standardize avatar URL property

* refactor: standardize custom domain handling and update telegram chat ID references

* chore: add tailwind prefix to @cio/ui

this fixed the media query issues because  @cio/ui classes were overriding this dashboard tailwind build

* chore: clean up org sidebar

* chore: persist mode state

* feat: implement order breadcrumbs

* chore: upgrade to better auth 1.4

* chore: address common auth flow bugs and setup app for others to setup locally.
2025-11-24 01:00:50 +01:00
Rotimi Bestandtunny17 f5a4156c8b feat: migrate dashboard to svelte 5 (#577)
* chore: migration to SvelteKit 2

* stage 1: migrate to svelte 5 and fix rerendering issues

* stage 2: fix more $: reactivity across dashboard

* fix merge conflicts

* chore: migrate code in main to svelte 5

* chore: update preventDefault

* chore: simplify tsconfig and remove unused mobileMenuRef in MobileMenu.svelte

* chore: enforce .ts across dashboard

* rename from classroomio-com to website

* stage-3: Replace carbon icon svelte with lucide icon

* update lock file

* chore: finish icon replacement

* fix: settings and setup page multiple rerender

* stage 3: More icon and rerendering fixes

* feat: checkpoint

* feat: update editor

* [not working] connect everything with ui build

* storybook + ui + dashboard all working independently

* add bg-black to +page.svelte

* feat: add editor to storybook

* chore: animate lucid icons (#590)

* v1 animations

* feat: change some course navigation icons & animate org navigation icons

* chore: change settings icon

* chore: use css instead of js for hover

* rename animations

---------

Co-authored-by: tunny17 <tvnji01@gmail.com>

* chore: update path to node_modules types in api tsconfig

* fix: update import path for DropdownMenu component

* fix: add rollupOptions to build configuration in vite.config.ts

* fix: remove rollupOptions from build configuration and add @floating-ui/dom dependency

* install

---------

Co-authored-by: tunny17 <tvnji01@gmail.com>
2025-11-01 16:18:29 +01:00
Rotimi Best 0fb66a3782 Merge branch 'main' of https://github.com/classroomio/classroomio into feat/release-v2 2025-11-01 15:58:33 +01:00
Rotimi Best 2d7de6609c chore: split clean command into 2 (node_modules and pnpm) 2025-11-01 15:57:10 +01:00
Rotimi Best b96d91cd7c feat: setup drizzle (#594)
* chore: migration to SvelteKit 2

* stage 1: migrate to svelte 5 and fix rerendering issues

* stage 2: fix more $: reactivity across dashboard

* fix merge conflicts

* chore: migrate code in main to svelte 5

* chore: update preventDefault

* chore: simplify tsconfig and remove unused mobileMenuRef in MobileMenu.svelte

* chore: enforce .ts across dashboard

* rename from classroomio-com to website

* stage-3: Replace carbon icon svelte with lucide icon

* update lock file

* chore: finish icon replacement

* fix: settings and setup page multiple rerender

* stage 3: More icon and rerendering fixes

* feat: setup drizzle and better auth

* fix: onboarding validation error showing translation key #586 (#593)

* fix: onboarding validation error showing translation key #586

* fix: remove debug log for profile update errors

* chore: add a clean command

* fix: remove message from email verification response
2025-11-01 15:49:29 +01:00
Rotimi Best ba0fc32a87 chore: add a clean command 2025-11-01 11:25:32 +01:00
Rotimi Best 775e616d26 chore: update compose to use latest image 2025-10-11 14:33:26 +01:00
Rotimi Best 2f98a5dca6 chore: remove port from start commands 2025-10-11 13:41:00 +01:00
Rotimi Best 168866c81b feat: optimize docker compose for dashboard and api (#578)
* chore: use turbo for build

* fix docker compose file and remove backend

* chore: update .dockerignore to include additional files and directories for improved build management

* copy everything in both docke filed

* refactor: streamline Dockerfile to copy entire dashboard app and remove unnecessary node_modules references

* update api to use turbo to start

* run ls la for docker files

* update cmd commands

* update cmds to use node

* fix: add redis url to docker compose

* fix: reduce memory allocation for dashboard build in Dockerfile

* debug dashboard build

* update api docker file

* update dashboard

* add tsconfig

* chore: add echo to dockerfile

* fix: change echo to run

* chore: install pnpm before switching to non-root user in Dockerfile

* refactor: update start commands in package.json and Dockerfiles to use pnpm

* install turbo

* use turbo 1.10.16

* update turbo config

* fix: update CMD in Dockerfile to run the API directly using Node.js

* change

* add commands to turbo.json

* copy over turbo

* add workspace

* fix: update start commands in package.json to specify ports for dashboard and API

* publish docker images

* add dev branch

* update compose

* build only for amd64 platform

* refactor: update docker-compose to use pre-built images and remove build context

* coolify-dockertest

* point to latest

* chore: update docker-compose to use specific version tags for API and dashboard images

* remove envs for docker file

* 0.1.3

* use dynamic env

* 0.1.4

* add PUBLIC_IS_SELFHOSTED=true

* chore: update docker-compose to use version 0.1.5 for API and dashboard images

* use static for PUBLIC_IS_SELFHOSTED

* disable cache for tag

* use 0.1.7

* add PUBLIC_IS_SELFHOSTED=true

* comment out caching

* update docker-compose to use version 0.1.8 for API and dashboard images

* update api port

* use tag 0.1.9

* add cache

* use latest tag in compose file
2025-10-11 13:27:50 +01:00
Rotimi Best fd2e3f5d76 chore: clean up environment variable usage and formatting in configuration files
- Updated docker-compose.yaml to use double quotes for version and port mappings.
- Removed DEPLOYMENT_PROVIDER from global environment variables in turbo.json and Dockerfile.
- Adjusted dashboard build command in package.json to remove DEPLOYMENT_PROVIDER.
- Cleaned up .env.example by removing the DEPLOYMENT_PROVIDER comment.
- Simplified SvelteKit adapter condition in svelte.config.js.
2025-10-04 08:13:01 +01:00
Rotimi Best 629753bcd0 chore: update docs of supabase instructions 2025-10-04 06:56:14 +01:00
Rotimi Best f87a8beb17 chore: change node version to 20.19.3 2025-09-10 17:24:35 +01:00
Nwosu EmmanuelandRotimi Best 937f1d8155 feat: add documents to Lesson materials (#572)
* feat: Initial logic for the pdf upload

* feat: uploa logic, translations and ui flow complete

* chore:console log cleanup

* feat: fixed upload issue and added cancel upload button

* feat: fixing the download document ish

* feat: All done and ready for use

* feat: updated the document viewing logic

* feat: some minor refactor

* feat: added migration file

* fix: dark mode, translations, restyling,

---------

Co-authored-by: Rotimi Best <best@classroomio.com>
2025-09-10 11:39:06 +01:00
Rotimi Best 05fc61330c chore: remove pnpm version from package.json 2025-09-07 23:22:13 +01:00
Rotimi Best 733e24ae75 chore: use node v20.19.4 2025-09-07 16:30:57 +01:00
Rotimi Best 11a65783e7 chore: upgrade to node 22.12 2025-09-07 15:04:09 +01:00
Rotimi Best 9055c45384 chore: move IS_SELFHOSTED to public env 2025-09-07 10:24:34 +01:00
Rotimi Best 0d0719e8f9 feat: implement row-level security policies for course-related tables and actions 2025-08-08 04:12:46 +01:00
Rotimi Best d45a82a62c chore: add supabase command to package.json 2025-07-18 20:57:02 +01:00
Rotimi Best 5737765cb9 fix: update node version from 18.17 to 18.18 (#563)
* fix: update node version from 18.17 to 18.18

* update nvmrc

* add nvmrc
2025-07-17 12:23:56 +01:00
Rotimi BestandIniubong Obonguko 82be557a42 chore: move backend to hono + typescript (#558)
* feat: setup secure presigned uploads and downloads

* clean up

* update lock

* Get presigned url finally working

* 557: Migrate backend to hono + ts

* chore: update Dockerfile and package.json for backend configuration

* add dev command

* remove unused packages

* Enhance backend API and frontend components for course management

- Updated CORS configuration in the backend to allow specific methods and headers.
- Refactored lesson download endpoint to use a new route for PDF downloads.
- Removed unused certificate download functionality from the lesson router.
- Updated frontend components to reflect changes in API endpoints and improve video upload functionality.
- Introduced new video upload component and adjusted video handling in lesson materials.
- Cleaned up unnecessary imports and optimized component structure for better performance.

* PR cleanups

* Enhance email configuration by adding SMTP_SENDER environment variable

- Updated docker-compose.yaml to include SMTP_SENDER.
- Modified Dockerfile to accept SMTP_SENDER as an argument.
- Updated environment schema in env.ts to define SMTP_SENDER as optional.
- Adjusted mail service to use SMTP_SENDER for the email 'from' field.
- Updated documentation to reflect the new SMTP_SENDER variable.

* Remove debug log statement from sendEmail function

---------

Co-authored-by: Iniubong Obonguko <iniubongobonguko2018@gmail.com>
2025-06-09 01:38:57 +01:00
Rotimi Best 9aeefc9f4f feat: Finally support a docker compose files that works (#555) 2025-05-20 01:37:58 +01:00
Rotimi Best f343ca7974 docker improvements + delete unused package 2025-05-03 14:46:01 +01:00
Pranav MuraliandRotimi Best 29fa038760 feat: add github stars to landing page (#543)
* added github stars

* Update Navigation.svelte

* debug data

* remove prerender

* feat: githubstar change

* pass data from server to client

* remove console.log

---------

Co-authored-by: Rotimi Best <best@classroomio.com>
2025-01-22 15:39:22 +01:00
Rotimi Bestandemmanuel 26700dccd0 feat: introducing @classroomio/course-app (#490)
* feat: v1 templates

* update nvm

* working on the displaying the course content

* working on the displaying the course content

* displayed the content

* finished with the logic for rendering the content for all the courses and lessons

* post hog template UI is good to go

* classic and minimalistic template UI is good to go

* some refactoring

* some refactoring

* layout adjustments

* update tsconfig

* trying to get the filter to work well

* this is working now

* cleanup

* cleanup

* UI updates

* course page UI for posthog

* navbar and sidebar for course page in all templates complete

* all templates course page showing lesson content from md file with mdsvex
configured

* wokring on sections

* posthog lesson content done

* all templates fetches the lesson content from the section

* all templates properly typed

* scaffolding the new template

* finished the webflow-saas

* done with the webflow saas UI

* new calcom template

* new calcom template

* masonry layout for testitomonail section layout done

* calcom UI done

* UI all done

* cleanup

* trying to fix dark mode for the course page and home page

* done with this

* done with this

* working on tests

* migrated minimalistic template to svelte 5

* updated the syntax to svelte 5 for webflow

* migrated classic to svelte 5

* migrated posthog to svelte 5

* used svelte 5 syntax in calcom

* cli tool woks locally

* rename to course-sites

* use pnpm in root

* calcom refactoring

* remove unused files

* chore: biggest refactoring in my life

* add basic readme

* refactoring on course page

* restructure how courses are ordered

* proper state propagation

* add cf adapter

* fix pnpm i issue

* fix folder icon size

* use 18.17 version

* update npmrc

* add engine to packagejson

* pnpm install

* add engine to cio-com

* make it 18.x

* remove sequence

* move mdsvex to dependencies

* update lock

* mdsvex please work

* replace fs with import from vite

* add lock

* styling improvements

* fix styling

* sidebar style improvements

* fix: mobile concerns

* fix spacing of course header on desktop

* update header

* top nav fix

* feat: make cal template

* setup another template

* classic basic UI

* fixed the /courses fetching wrong page content

* fix breaking template cause of logo

* adding some updates

* improve styles theming

* finished updates from reviews

* updated the custom styling css

* clean up posthog template

* cli tool done, needs some cleaning though

* moved components to home

* improved the UI of the minimal template

* Add CLI tool and course app site

* prettier lint

* improve CLI

* ignore sveltekit folder

* publish course app

* fix tailwing theme + improve README

* finish up course-app site

* update README.md

---------

Co-authored-by: emmanuel <chifez1@gmail.com>
2024-12-14 03:40:47 +01:00
Rotimi Best b203188091 chore: use package.json commands to build railway 2024-09-29 05:35:05 +01:00
Rotimi Best 25b010ebf2 chore: disable puppeteer 2024-09-22 16:28:54 +01:00
Rotimi Best 5438d9acf1 fix: coolify not finding root project 2024-09-19 11:01:56 +01:00
Rotimi Best a28a0e8f92 chore: setup docker-compose 2024-09-19 10:12:54 +01:00
Rotimi Best 786308ec82 feat: deploy to cloudflare (#365)
* chore: deploy to cf

* add wrangler.toml file

* update pnpm-lock

* set pnpm version

* use adapter auto
2024-06-17 00:45:51 +01:00
Rotimi Best a95be6d620 ci: cypres test setup(#274)
* fix: font size broken

* add first cypress test

* save onboarding language

* load language

* get first test to work

* update command

* install pnpm

* update workflow

* install

* update

* test

* increase timeout

* another update

* update 2

* update 3

* upsdada 4

* sfgsfgf 5

* add def supabase url

* fix supabase issue

* add ci

* fix ci

* update .env.example

* update port

* tired

* prepare

* preview

* this is it

* ?????

* 99999900

* fix log issue

* ci

* nkkh

* =====

* 200000
2024-04-20 04:39:16 +01:00
Em_DevandRotimi Best 23b3b5f555 feat: stream video upload progress (#210)
* working on the streaming progress

* connected video upload progress from frontend to server to bucket

* cleanup

* cleanup

* added the progress bar

* finished the supabase upload-progress using supabse realtime

* use only progress bar

* updating the helpertext

* Merge branch 'upload-progress' of https://github.com/rotimi-best/classroomio into upload-progress

* updated the supabase import

* Update LocalVideo.svelte

* update lock file

---------

Co-authored-by: Rotimi Best <best@classroomio.com>
2024-03-28 10:42:49 +01:00
Rotimi Best a33594ab1a chore(release): 0.1.1 2024-01-28 23:55:55 +01:00
Rotimi Best e75d8f0606 chore(release): 0.1.0 2024-01-28 23:53:38 +01:00
Em_DevandRotimi Best a72021fcc2 docs: improve local dev setup instructions in README.md (#68)
* Update README.md

Made some updates to the readme to address some issues

* docs: Improvements to the setup guide of the README.md

* install supabase locally

---------

Co-authored-by: Rotimi Best <best@classroomio.com>
2023-12-01 23:03:19 +03:00
Rotimi Best aa42238bf9 feat: implement vercel redirect 2023-11-26 00:40:25 +00:00
Rotimi Best 41e29014ef feat: 🚀 😃 convert repo into a monorepo 🚀 😃 (#51)
* Merge main into turbo-monrepo

* feat: rename apps

* feat: remove supbase videos and serve all from project

* feat: move supabase to root

* feat: update README

* docs: update link
2023-11-25 21:56:02 +00:00
Rohit ChawareandRotimi Best 075f10a866 fix: date field bg-color in dark mode (#28)
* Resolved Date field issue in Lesson.

* Resolved minor issues.

* Update +page.svelte

---------

Co-authored-by: Rotimi Best <best@classroomio.com>
2023-11-21 12:22:53 +00:00
Rotimi Best d105474ea1 add vercel adapter 2023-11-07 09:36:47 +00:00
Rotimi Best 64a058ebc8 CLASSROOMIO-T-216: Fix loading course multiple times 2023-10-29 12:49:10 +00:00
Rotimi Best 9eadd92bd8 CLASSROOMIO-T-216: add posthug 2023-10-29 12:07:34 +00:00
5c8571e571 CLASSROOMIO-T-227: Exercise Statistics
CLASSROOMIO-T-227: 🔥 🔥 🔥 🔥  Improvements

CLASSROOMIO-T-227:Worked on the Exercise Statistics

CLASSROOMIO-T-227:Worked on the Exercise Statistics

CLASSROOMIO-T-227:Worked on the Exercise Statistics

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>


Co-authored-by: Ifeanyi Nwosu <ifeanyi@digdippa.com>
Co-authored-by: Rotimi Best <rotimiibitoyeemma@gmail.com>


Merge-request: CLASSROOMIO-MR-111
Merged-by: Best Admin <best@digdippa.com>
2023-10-21 07:44:57 +00:00
Rotimi Best 4f783cbc7c CLASSROOMIO-T-214: Add comments feature in lesson 2023-10-08 15:34:37 +01:00
Rotimi Best e0812c66c1 CLASSROOMIO-T-213: Replace all email notifications with Nodemailer 2023-10-07 06:08:08 +01:00
Rotimi Best 7a772dc3f0 Move from sendgrid to nodemailer for emails 2023-10-07 02:35:25 +01:00
tunny17andRotimi Best 804e5cdeb9 CLASSROOMIO-T-177: Upload Widget
improve banner image

Merge branch 'main' of https://gitlab.com/thenextgreat/classroomio into CLASSROOMIO-T-177

Merge branch 'CLASSROOMIO-T-177' of https://gitlab.com/thenextgreat/classroomio into CLASSROOMIO-T-177

CLASSROOMIO-T-177: Moved API call to backend

general ux improvements

Merge branch 'CLASSROOMIO-T-177' of https://gitlab.com/thenextgreat/classroomio into CLASSROOMIO-T-177

CLASSROOMIO-T-177: Resolved Feedbacks

CLASSROOMIO-T-177: UI improvements

CLASSROOMIO-T-177: fix styling or image

CLASSROOMIO-T-177: Resolved Feedbacks

CLASSROOMIO-T-177: Landing Page Max Width

CLASSROOMIO-T-177: Refactor Upload Widget

Merge branch 'main' into CLASSROOMIO-T-177

CLASSROOMIO-T-177: Completion of Upload Widget

Merge branch 'main' into CLASSROOMIO-T-177

CLASSROOMIO-T-177: Widget Test


Co-authored-by: Rotimi Best <rotimiibitoyeemma@gmail.com>
Co-authored-by: Tunji Adeyemi <tunji@digdippa.com>


Merge-request: CLASSROOMIO-MR-86
Merged-by: Best Admin <best@digdippa.com>
2023-10-05 09:22:39 +00:00