diff --git a/README.md b/README.md index a1aad74d..50d771bb 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ - ClassroomIO is a no-code tool that allows you build and scale your own teaching platform with ease. + ClassroomIO is a no-code tool that allows you build and scale your online bootcamp with ease.

ClassroomIO.com

- The Open Source Teaching Platform + The Open Source Teaching Platform for Bootcamps
Website | Join Discord community

diff --git a/apps/classroomio-com/README.md b/apps/classroomio-com/README.md index e0a67256..5fa8703f 100644 --- a/apps/classroomio-com/README.md +++ b/apps/classroomio-com/README.md @@ -1,9 +1,9 @@ - ClassroomIO is a no-code tool that allows you build and scale your own teaching platform with ease. + ClassroomIO is the easiest place to launch and scale your online bootcamp.

ClassroomIO

-The Open Source Teaching Platform +The Open Source Teaching Platform for Bootcamps ## Tools diff --git a/apps/classroomio-com/package.json b/apps/classroomio-com/package.json index d02daa66..3bd6840c 100644 --- a/apps/classroomio-com/package.json +++ b/apps/classroomio-com/package.json @@ -30,6 +30,7 @@ "rehype-slug": "^6.0.0", "remark-toc": "^9.0.0", "remark-unwrap-images": "^4.0.0", + "shared-constants": "workspace:*", "shiki": "^0.14.7" } } diff --git a/apps/classroomio-com/src/app.html b/apps/classroomio-com/src/app.html index d5d4cb20..0439de2e 100644 --- a/apps/classroomio-com/src/app.html +++ b/apps/classroomio-com/src/app.html @@ -22,7 +22,7 @@ @@ -44,7 +44,7 @@ /> @@ -60,7 +60,7 @@ /> diff --git a/apps/classroomio-com/src/lib/Faq/Faq.svelte b/apps/classroomio-com/src/lib/Faq/Faq.svelte index 9b994840..fb0b8f9d 100644 --- a/apps/classroomio-com/src/lib/Faq/Faq.svelte +++ b/apps/classroomio-com/src/lib/Faq/Faq.svelte @@ -2,29 +2,29 @@ import { faqs } from './faqs'; -
-
-

+
+
+

Questions & Answers

Can’t find the answer you’re looking for? - Shoot us an email and we’ll get back to you ASAP.

-
+
{#each faqs as faq}

{faq.question}

{faq.answer}

@@ -33,16 +33,16 @@
-

- Supercharge your Classroom Today +

+ Launch Your Bootcamp Today

-

+

Try before you buy. No credit card required.

Monthly Annually
Save 2 months
-
- -
-

Hobby

-

- For personal use. Hobby plan is free for up to 5 courses forever, no credit card required. +

+ + - -
-

Pro

-

- Advanced features for small teaching businesses. Built for scale. + +

+

+ {PLANS.EARLY_ADOPTER.NAME}

-

- ${prices ? '12' : '15'} /member +

+ {PLANS.EARLY_ADOPTER.DESCRIPTION}

- -
- -
-

Team

-

- Best suited for teams and larger businesses that need more control. + +

+

+ {PLANS.ENTERPRISE.NAME}

-

- ${prices ? '42' : '50'} /member +

+ {PLANS.ENTERPRISE.DESCRIPTION} +

+

+ Request Pricing

-
    - {#each teamFeatures as teamFeature} +
      + {#each PLANS.ENTERPRISE.FEATURES as features}
    • - {teamFeature} + {features}
    • {/each}
    @@ -172,7 +155,7 @@ class="m-0 lg:mt-1 text-md leading-7 lg:leading-6 text-gray-600" > For personal use. Hobby plan is free for up to 5 courses forever, no - credit card required. + credit Card required.

{/each} diff --git a/apps/dashboard/src/lib/components/Course/components/Lesson/Materials/Video/LocalVideo.svelte b/apps/dashboard/src/lib/components/Course/components/Lesson/Materials/Video/LocalVideo.svelte index 1d2c191b..8d70f44c 100644 --- a/apps/dashboard/src/lib/components/Course/components/Lesson/Materials/Video/LocalVideo.svelte +++ b/apps/dashboard/src/lib/components/Course/components/Lesson/Materials/Video/LocalVideo.svelte @@ -1,4 +1,4 @@ - + ($uploadCourseVideoStore.isModalOpen = false)}> + Upgrade your plan to upload vidoes + + {#if !isLoaded}
diff --git a/apps/dashboard/src/lib/components/Course/components/Settings/index.svelte b/apps/dashboard/src/lib/components/Course/components/Settings/index.svelte index 656a319e..2b4c378d 100644 --- a/apps/dashboard/src/lib/components/Course/components/Settings/index.svelte +++ b/apps/dashboard/src/lib/components/Course/components/Settings/index.svelte @@ -14,13 +14,14 @@ import { course } from '$lib/components/Course/store'; import type { Course } from '$lib/utils/types'; import { updateCourse, deleteCourse } from '$lib/utils/services/courses'; - import { currentOrgPath } from '$lib/utils/store/org'; + import { currentOrgPath, isFreePlan } from '$lib/utils/store/org'; import { isObject } from '$lib/utils/functions/isObject'; import { lessons } from '../Lesson/store/lessons'; import { currentOrg, currentOrgDomain } from '$lib/utils/store/org'; import { snackbar } from '$lib/components/Snackbar/store'; import UploadWidget from '$lib/components/UploadWidget/index.svelte'; import { handleOpenWidget } from '$lib/components/CourseLandingPage/store'; + import UpgradeBanner from '$lib/components/Upgrade/Banner.svelte'; import { Restart } from 'carbon-icons-svelte'; import IconButton from '$lib/components/IconButton/index.svelte'; @@ -186,7 +187,7 @@ $: setDefault($course); - + Cover Image @@ -287,10 +288,14 @@

Make the Lesson available for Download in pdf for registered students

- - Disabled - Enabled - + {#if $isFreePlan} + Upgrade to download lessons + {:else} + + Disabled + Enabled + + {/if}
@@ -299,13 +304,17 @@

Make the Course available for Download for registered students

- + {#if $isFreePlan} + Upgrade to download course + {:else} + + {/if}
diff --git a/apps/dashboard/src/lib/components/Courses/components/Card/index.svelte b/apps/dashboard/src/lib/components/Courses/components/Card/index.svelte index 6fba2e7c..59459029 100644 --- a/apps/dashboard/src/lib/components/Courses/components/Card/index.svelte +++ b/apps/dashboard/src/lib/components/Courses/components/Card/index.svelte @@ -1,11 +1,18 @@ + + diff --git a/apps/dashboard/src/lib/components/LMS/SideBar.svelte b/apps/dashboard/src/lib/components/LMS/SideBar.svelte index 20322873..29b5a461 100644 --- a/apps/dashboard/src/lib/components/LMS/SideBar.svelte +++ b/apps/dashboard/src/lib/components/LMS/SideBar.svelte @@ -56,7 +56,7 @@ } overflow-y-auto transition w-[250px] min-w-[250px] bg-gray-100 dark:bg-neutral-900 h-[calc(100vh-48px)]`} >
-
+
- +

Profile Picture

@@ -83,6 +84,7 @@ @@ -32,12 +32,14 @@
e.stopPropagation()} role="presentation" > -
-

+

+

{modalHeading}

{#if isCloseable} @@ -47,7 +49,7 @@ {/if}
-
+
diff --git a/apps/dashboard/src/lib/components/Org/Community/Loader.svelte b/apps/dashboard/src/lib/components/Org/Community/Loader.svelte index 1c4092b3..6adfc253 100644 --- a/apps/dashboard/src/lib/components/Org/Community/Loader.svelte +++ b/apps/dashboard/src/lib/components/Org/Community/Loader.svelte @@ -3,7 +3,7 @@
diff --git a/apps/dashboard/src/lib/components/Org/Quiz/Loader.svelte b/apps/dashboard/src/lib/components/Org/Quiz/Loader.svelte index b945156f..c822d42c 100644 --- a/apps/dashboard/src/lib/components/Org/Quiz/Loader.svelte +++ b/apps/dashboard/src/lib/components/Org/Quiz/Loader.svelte @@ -3,7 +3,7 @@
diff --git a/apps/dashboard/src/lib/components/Org/Settings/Billing.svelte b/apps/dashboard/src/lib/components/Org/Settings/Billing.svelte new file mode 100644 index 00000000..ae6929b0 --- /dev/null +++ b/apps/dashboard/src/lib/components/Org/Settings/Billing.svelte @@ -0,0 +1,46 @@ + + + + + Billing details + +

Manage your billing

+ {#if $isFreePlan} + You don't have any active billing + {:else} +

We use Lemonsqueezy to help manage your billing

+ + + {/if} +
+
+
diff --git a/apps/dashboard/src/lib/components/Org/Settings/Domains.svelte b/apps/dashboard/src/lib/components/Org/Settings/Domains.svelte index beab4f98..bcd3dff0 100644 --- a/apps/dashboard/src/lib/components/Org/Settings/Domains.svelte +++ b/apps/dashboard/src/lib/components/Org/Settings/Domains.svelte @@ -72,7 +72,7 @@ $: setSiteName($currentOrg.siteName); - + Add diff --git a/apps/dashboard/src/lib/components/Org/Settings/Integrations.svelte b/apps/dashboard/src/lib/components/Org/Settings/Integrations.svelte index c96dbd18..bd71cf18 100644 --- a/apps/dashboard/src/lib/components/Org/Settings/Integrations.svelte +++ b/apps/dashboard/src/lib/components/Org/Settings/Integrations.svelte @@ -48,7 +48,7 @@ } - + diff --git a/apps/dashboard/src/lib/components/Org/Settings/LandingpageSettings.svelte b/apps/dashboard/src/lib/components/Org/Settings/LandingpageSettings.svelte index 1442f3b5..fa3fc96c 100644 --- a/apps/dashboard/src/lib/components/Org/Settings/LandingpageSettings.svelte +++ b/apps/dashboard/src/lib/components/Org/Settings/LandingpageSettings.svelte @@ -117,7 +117,7 @@ $: setDefault($currentOrg?.landingpage as OrgLandingPageJson); - + Landing Page diff --git a/apps/dashboard/src/lib/components/Org/Settings/OrgSettings.svelte b/apps/dashboard/src/lib/components/Org/Settings/OrgSettings.svelte index fe77c09e..af5a4eff 100644 --- a/apps/dashboard/src/lib/components/Org/Settings/OrgSettings.svelte +++ b/apps/dashboard/src/lib/components/Org/Settings/OrgSettings.svelte @@ -1,6 +1,7 @@ - + Organization Profile @@ -175,7 +177,7 @@

gotoSetting('/domains')} /> @@ -189,11 +191,15 @@ Add team mates to your organization so you can both collaborate on projects.

gotoSetting('/teams')} - /> + > + {#if $isFreePlan} + + {/if} + Manage Team +
diff --git a/apps/dashboard/src/lib/components/Org/Settings/Profile.svelte b/apps/dashboard/src/lib/components/Org/Settings/Profile.svelte index 2f70ecbc..e75c3cff 100644 --- a/apps/dashboard/src/lib/components/Org/Settings/Profile.svelte +++ b/apps/dashboard/src/lib/components/Org/Settings/Profile.svelte @@ -3,6 +3,7 @@ import TextField from '$lib/components/Form/TextField.svelte'; import SectionTitle from '../SectionTitle.svelte'; import PrimaryButton from '$lib/components/PrimaryButton/index.svelte'; + import { VARIANTS } from '$lib/components/PrimaryButton/constants'; import UploadImage from '$lib/components/UploadImage/index.svelte'; import { supabase } from '$lib/utils/functions/supabase'; import { profile } from '$lib/utils/store/user'; @@ -61,7 +62,7 @@ } - + Profile Picture @@ -83,6 +84,7 @@ - + Add @@ -146,10 +147,11 @@ placeholder="email comma separated" bind:value={emailsStr} className="mb-3" + isDisabled={$isFreePlan} {errorMessage} /> - @@ -158,7 +160,7 @@ label="Send Invite" onClick={onSendInvite} {isLoading} - isDisabled={isLoading} + isDisabled={isLoading || $isFreePlan} />
diff --git a/apps/dashboard/src/lib/components/Org/Settings/index.svelte b/apps/dashboard/src/lib/components/Org/Settings/index.svelte index d10620fd..7c9001c3 100644 --- a/apps/dashboard/src/lib/components/Org/Settings/index.svelte +++ b/apps/dashboard/src/lib/components/Org/Settings/index.svelte @@ -5,6 +5,7 @@ import LandingpageSettings from './LandingpageSettings.svelte'; // import Account from './Account.svelte'; import OrgSettings from './OrgSettings.svelte'; + import Billing from './Billing.svelte'; import { onMount } from 'svelte'; import { browser } from '$app/environment'; import { goto } from '$app/navigation'; @@ -64,6 +65,13 @@ }, { key: 3, + label: 'Billing', + tabKey: 'billing', + href: `${$page.url.pathname}?tab=billing`, + disabled: !$isOrgAdmin + }, + { + key: 4, label: 'Integrations', tabKey: 'integrations', href: `${$page.url.pathname}?tab=integrations`, @@ -91,6 +99,9 @@ + + + diff --git a/apps/dashboard/src/lib/components/Org/SideBar.svelte b/apps/dashboard/src/lib/components/Org/SideBar.svelte index 9c487e33..bcfa6b62 100644 --- a/apps/dashboard/src/lib/components/Org/SideBar.svelte +++ b/apps/dashboard/src/lib/components/Org/SideBar.svelte @@ -2,8 +2,8 @@ import { page } from '$app/stores'; import HelpIcon from 'carbon-icons-svelte/lib/Help.svelte'; import ForumIcon from 'carbon-icons-svelte/lib/Forum.svelte'; - - import TextChip from '$lib/components/Chip/Text.svelte'; + import { SettingsAdjust } from 'carbon-icons-svelte'; + import PrimaryButton from '$lib/components/PrimaryButton/index.svelte'; import OrgSelector from '$lib/components/OrgSelector/OrgSelector.svelte'; import HomeIcon from '$lib/components/Icons/HomeIcon.svelte'; import CourseIcon from '$lib/components/Icons/CourseIcon.svelte'; @@ -11,37 +11,18 @@ import SiteSettingsIcon from '$lib/components/Icons/SiteSettingsIcon.svelte'; import AudienceIcon from '$lib/components/Icons/AudienceIcon.svelte'; import Avatar from '$lib/components/Avatar/index.svelte'; - import { currentOrg, currentOrgPath } from '$lib/utils/store/org'; + import { currentOrgPath, currentOrgPlan, isFreePlan } from '$lib/utils/store/org'; + import { isOrgAdmin } from '$lib/utils/store/org'; import { profile } from '$lib/utils/store/user'; import { NavClasses } from '$lib/utils/constants/reusableClass'; import { sideBar } from './store'; + import { goto } from '$app/navigation'; - const menuItems = [ - { - path: '', - label: 'Dashboard' - }, - // { - // path: '/quiz', - // label: 'Quizzes' - // }, - { - path: '/courses', - label: 'Courses' - }, - { - path: '/community', - label: 'Community' - }, - // { - // path: '/site', - // label: 'Site settings', - // }, - { - path: '/audience', - label: 'Audience' - } - ]; + let menuItems: { + path: string; + label: string; + show: boolean; + }[] = []; function isActive(pagePath: string, itemPath: string) { const pageLinkItems = pagePath.split('/'); @@ -56,87 +37,137 @@ const toggleSidebar = () => { $sideBar.hidden = !$sideBar.hidden; }; + + const openModal = () => { + goto(window.location.pathname + '?upgrade=true'); + }; + + $: { + menuItems = [ + { + path: '', + label: 'Dashboard', + show: true + }, + // { + // path: '/quiz', + // label: 'Quizzes' + // }, + { + path: '/courses', + label: 'Courses', + show: true + }, + { + path: '/community', + label: 'Community', + show: true + }, + // { + // path: '/site', + // label: 'Site settings', + // }, + { + path: '/audience', + label: 'Audience', + show: true + }, + { + path: '/setup', + label: 'Setup', + show: $isOrgAdmin + } + ]; + }