Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
3c5771b
WIP: Logout page (#616)
rajat1saxena Sep 14, 2025
122d0f9
v0.62.1
rajat1saxena Sep 14, 2025
952f0f4
Next 15 (#633)
rajat1saxena Sep 18, 2025
080cfb0
v0.63.0
rajat1saxena Sep 18, 2025
1ee3ac9
Section backgrounds (#634)
rajat1saxena Sep 25, 2025
a0ad57e
Lint fixes
Sep 25, 2025
48ee0e4
Triple backticks are crashing the text editor (#641)
rajat1saxena Oct 3, 2025
0aba80e
v0.63.2
Oct 3, 2025
7d65baf
Updating the package version
Oct 4, 2025
4126039
Updating the package version
Oct 4, 2025
c31e331
Certificates (#648)
rajat1saxena Oct 9, 2025
2cecfb4
jq check and version update
Oct 9, 2025
e098607
Added a vision doc
Oct 11, 2025
b3f9832
Page blocks improvements (#652)
rajat1saxena Oct 13, 2025
bda88c7
v0.63.4
Oct 13, 2025
9deda40
Fixed: settings crash
Oct 13, 2025
17a0b47
v0.63.5
Oct 13, 2025
5fbdc5f
Onboarding (#655)
rajat1saxena Oct 25, 2025
35d5c36
Fixed page.tsx of dashboard
Oct 25, 2025
658f600
swallowing error
Oct 25, 2025
7d62627
added todo
Oct 25, 2025
57a9da5
v0.63.6
Oct 26, 2025
e929d63
Large file uploads (#658)
rajat1saxena Nov 3, 2025
c70a776
v0.64.0
Nov 3, 2025
77896b6
moved init into function
Nov 3, 2025
7ea83d1
Entities deletion and media cleanup (#664)
rajat1saxena Nov 13, 2025
2de668d
checkout main while releasing
Nov 13, 2025
a85a188
Added pull command
Nov 13, 2025
ea8b1d2
v0.65.0
Nov 13, 2025
99fc07f
Corrected file name
Nov 13, 2025
ea2793b
Added AGENTS.md
Nov 15, 2025
cac1d33
Nextjs 16 (#667)
rajat1saxena Nov 16, 2025
e1a3c61
v0.65.1
Nov 16, 2025
069ada1
Reverted the update logic (#672)
rajat1saxena Nov 18, 2025
9ad49bb
v0.65.2
Nov 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
"updateInternalDependencies": "patch",
"ignore": [
"@courselit/web",
"@courselit/state-management",
"@courselit/utils",
"@courselit/queue",
"@courselit/icons",
Expand Down
11 changes: 11 additions & 0 deletions .cursor/rules/basics.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
alwaysApply: true
---

- Use `pnpm` as package manager.
- The project is structured as a monorepo i.e. a pnpm workspace. The apps are in `apps` folder and re-usable packages are in `packages`.
- Command for running script in a workspace: `pnpm --filter <workspace> <command>`.
- Command for running tests: `pnpm test`.
- The project uses shadcn for building UI so stick to its conventions and design.
- In `apps/web` workspace, create a string first in `apps/web/ui-config/strings.ts` and then import it in the `.tsx` files, instead of using inline strings.
- When working with forms, always use refs to keep the current state of the form's data and use it to enable/disable the form submit button.
1 change: 0 additions & 1 deletion .eslintignore

This file was deleted.

6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ coverage
# Text editors configurations
.vscode
.rgignore
.cursor

# Env file
.env*.local
Expand All @@ -39,4 +38,7 @@ report*.json
# Dev tools files
.eslintcache

.npmrc
.npmrc

# Jest files
globalConfig.json
3 changes: 0 additions & 3 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
#!/usr/bin/env sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged
20 changes: 20 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## Development Tips

- Use `pnpm` as package manager.
- The project is structured as a monorepo i.e. a pnpm workspace. The apps are in `apps` folder and re-usable packages are in `packages`.
- Command for running script in a workspace: `pnpm --filter <workspace> <command>`.
- Command for running tests: `pnpm test`.
- The project uses shadcn for building UI so stick to its conventions and design.
- In `apps/web` workspace, create a string first in `apps/web/config/strings.ts` and then import it in the `.tsx` files, instead of using inline strings.
- When working with forms, always use refs to keep the current state of the form's data and use it to enable/disable the form submit button.
- Check the name field inside each package's package.json to confirm the right name—skip the top-level one.

## Testing instructions

- Always add or update test when introducing changes to `apps/web/graphql` folder, even if nobody asked.
- Run `pnpm test` to run the tests.
- Fix any test or type errors until the whole suite is green.

## PR instructions

- Always run `pnpm lint` and `pnpm prettier` before committing.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions apps/docs/public/assets/schools/self-host.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/docs/public/assets/users/delete-user.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions apps/docs/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ export const SIDEBAR: Sidebar = {
en: {
"Getting started": [
{ text: "What is CourseLit", link: "en/introduction" },
{ text: "Our vision", link: "en/vision" },
{ text: "Features", link: "en/features" },
],
"Online courses": [
Expand All @@ -58,6 +59,7 @@ export const SIDEBAR: Sidebar = {
{ text: "Add content", link: "en/courses/add-content" },
{ text: "Manage sections", link: "en/products/section" },
{ text: "Invite customers", link: "en/products/invite-customers" },
{ text: "Certificates", link: "en/products/certificates" },
],
"Digital downloads": [
{ text: "Introduction", link: "en/downloads/introduction" },
Expand All @@ -77,6 +79,7 @@ export const SIDEBAR: Sidebar = {
text: "Unlock additional products",
link: "en/communities/grant-access-to-additional-products",
},
{ text: "Delete a community", link: "en/communities/delete" },
],
"Email marketing and automation": [
{ text: "Introduction", link: "en/email-marketing/introduction" },
Expand Down Expand Up @@ -120,6 +123,7 @@ export const SIDEBAR: Sidebar = {
{ text: "User permissions", link: "en/users/permissions" },
{ text: "Filter users", link: "en/users/filters" },
{ text: "Segment users", link: "en/users/segments" },
{ text: "Delete a user", link: "en/users/delete" },
],
Developers: [
{ text: "Introduction", link: "en/developers/introduction" },
Expand Down
201 changes: 201 additions & 0 deletions apps/docs/src/pages/en/communities/delete.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
---
title: Delete a Community
description: Guide to safely deleting communities and all associated data
layout: ../../../layouts/MainLayout.astro
---

Deleting a community is a permanent operation that removes the community and all its associated data from your school. This includes all posts, comments, members, and payment plans.

> **Important**: Community deletion is permanent and cannot be undone. All community content, memberships, and payment plans will be permanently removed.

## How Community Deletion Works

When you delete a community, CourseLit performs a comprehensive cleanup:

1. **Content Deletion**: Removes all posts, comments, and reports
2. **Membership Cleanup**: Cancels all memberships and payment plans
3. **Page Removal**: Deletes the community's public page
4. **Media Cleanup**: Removes all associated media files
5. **Community Document**: Deletes the community itself

## Prerequisites

To delete a community, you must have the `Manage Community` permission.

> **Note**: Even community moderators cannot delete a community. Only users with the `Manage Community` permission (typically site admins) can perform this operation.

## Deleting a Community

1. Navigate to the **Communities** area from your admin dashboard
2. Select the community you want to delete
3. Click on **Manage** to open settings
4. Scroll down to the Danger zone and click on **Delete Community** button

![Delete community](/assets/communities/delete-community.png)

5. Confirm the deletion when prompted

## What Gets Deleted

### Community Content

All content within the community is permanently removed:

- **Posts**: All posts created in the community
- **Comments**: All comments on posts, including nested replies
- **Reports**: All content reports filed by members
- **Media**: All images, videos, and files uploaded to posts (when media uploads are enabled)

### Memberships & Subscriptions

All membership-related data is removed:

- **Community Memberships**: All member records for the community
- **Payment Subscriptions**: All active subscriptions are automatically cancelled
- **Payment Plans**: All payment plans associated with the community
- **Included Product Memberships**: If the community's payment plans included access to courses, those memberships are also removed
- **Post Subscriptions**: All user subscriptions to community posts

### Community Infrastructure

The community's infrastructure is removed:

- **Community Page**: The public-facing community page
- **Community Settings**: All configuration and settings
- **Categories**: All community categories
- **Featured Images**: Community banner and featured images

### Related Data

Additional data associated with the community:

- **Activities**: Activity logs related to payment plan enrollments
- **Notifications**: Notifications related to the community (for members)

## What Happens to Members

When a community is deleted:

1. **Active Subscriptions**: All payment subscriptions are automatically cancelled through your payment provider (Stripe, PayPal, etc.)
2. **Membership Records**: All membership records are permanently deleted
3. **Access Revoked**: Members immediately lose access to the community
4. **Included Products**: If members had access to courses through the community's payment plan, that access is also revoked

## Payment Plan Considerations

### Subscription Cancellations

- All active subscriptions are cancelled automatically
- Payment providers (Stripe, PayPal, etc.) are notified
- No further charges will occur
- Members will not receive refunds automatically

### Included Products

If your community's payment plans [included access to courses](/en/communities/grant-access-to-additional-products) or other products:

- All memberships to those products (activated through the community plan) are removed
- Activity logs for those memberships are deleted
- Direct purchases of those products (not through the community) are not affected

## Media Cleanup

The deletion process handles media files appropriately:

- **Community Images**: Featured images and banners are deleted
- **Post Media**: When media uploads are enabled, all media from posts is deleted
- **User Avatars**: Not affected (user avatars are tied to user accounts, not communities)

> **Note**: Currently, media uploads in community posts are not enabled. When this feature is activated, the deletion process will handle post media cleanup automatically.

## Safety Measures

CourseLit implements safety measures to ensure proper deletion:

1. **Permission Check**: Only users with `Manage Community` permission can delete
2. **Confirmation Required**: Deletion requires explicit confirmation
3. **Atomic Operation**: The entire deletion succeeds or fails as a unit
4. **Subscription Cancellation**: Automatic cancellation prevents future charges

## Before Deleting a Community

Consider these steps before deleting:

1. **Notify Members**: Inform community members about the upcoming deletion
2. **Export Data**: If you need to preserve any content, export it manually. Only works for self-hosted installations.
3. **Handle Refunds**: Process any necessary refunds through your payment provider
4. **Alternative Actions**: Consider making the community private instead of deleting it

## After Deletion

After a community is deleted:

- The community page returns a 404 error
- Members cannot access the community anymore
- All content is permanently lost
- Payment subscriptions are cancelled
- The community name becomes available for reuse

## Handling Refunds

Community deletion does not automatically issue refunds. To handle refunds:

1. **Before Deletion**: Note all active subscriptions and their subscription IDs
2. **Access Payment Provider**: Log into your Stripe, PayPal, or other payment provider dashboard
3. **Process Refunds**: Manually issue refunds as appropriate
4. **Delete Community**: Once refunds are processed, proceed with deletion

## Alternative to Deletion

If you want to preserve content but stop new members from joining:

1. **Disable the Community**: Toggle the community to "disabled" in settings
2. **Remove Payment Plans**: Archive all payment plans

This approach preserves content while preventing new access.

## Troubleshooting

### Cannot Delete Community

If you encounter errors:

- **"Action not allowed"**: You don't have the `Manage Community` permission
- **"Item not found"**: The community may have already been deleted or doesn't exist
- **"Community not found"**: You may not have access to this community

### Subscription Cancellation Issues

If subscriptions fail to cancel:

1. Manually cancel subscriptions in your payment provider's dashboard
2. Contact support if issues persist

### Partial Deletion

If deletion fails partway through:

- The operation is designed to be atomic, but in rare cases, partial deletion may occur
- Contact support with error details
- Manual cleanup may be required

## Best Practices

1. **Communicate Early**: Give members advance notice before deletion
2. **Export Important Content**: Save any valuable discussions or content
3. **Process Refunds First**: Handle refunds before deleting to maintain records
4. **Document the Decision**: Keep records of why and when the community was deleted
5. **Consider Alternatives**: Evaluate if disabling is sufficient instead of deletion

## GDPR and Data Protection

Community deletion helps with data protection compliance:

- All member data within the community is removed
- Personal information in posts and comments is deleted
- Membership records are permanently erased
- The operation can be part of a broader data cleanup strategy

## Stuck somewhere?

We are always here for you. Come chat with us in our <a href="https://discord.com/invite/GR4bQsN" target="_blank">Discord</a> channel or send a tweet at <a href="https://twitter.com/courselit" target="_blank">@CourseLit</a>.
14 changes: 9 additions & 5 deletions apps/docs/src/pages/en/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ Send broadcasts and email sequences to your audience.
</p>
</a>
</section>
<section class="card">
<a href="/en/schools/set-up-payments">
<header>Payment Gateway Integration</header>
<p>
Integrate your own payment gateway, such as Stripe, and keep 100% of your earnings.
</p>
</a>
</section>
</div>

### Other noteworthy features
Expand All @@ -65,10 +73,6 @@ Effortlessly track your students' progress, control platform access, and more.

Invite your entire team and control their access with our intuitive permission editor.

##### Payment integration

Start getting paid directly with ease—integrate your own [Stripe](https://stripe.com) or [Razorpay](https://razorpay.com) account in just a few clicks!

##### Third Party Integrations

Integrate analytics, chatbots etc., by injecting third party code snippets.
Expand All @@ -83,4 +87,4 @@ Read and modify the source code to build your own variations.

## Stuck somewhere?

We are always here for you. Come chat with us in our <a href="https://discord.com/invite/GR4bQsN" target="_blank">Discord</a> channel or send a tweet at <a href="https://twitter.com/courselit" target="_blank">@CourseLit</a>.
We are always here for you. Come chat with us in our <a href="https://discord.com/invite/GR4bQsN" target="_blank">Discord</a> channel or send a tweet at <a href="https://x.com/courselit" target="_blank">@CourseLit</a>.
24 changes: 18 additions & 6 deletions apps/docs/src/pages/en/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,39 @@ layout: ../../layouts/MainLayout.astro

## What is CourseLit?

CourseLit is a **Learning Management System** for modern day creators who want to sell courses and digital downloads from their own websites.
CourseLit is an **all-in-one suite** for building, selling, and marketing your digital products, such as courses, memberships and digital downloads.

CourseLit was born out of frustration with the exorbitant costs and limitations of traditional course builders and LMS platforms like Teachable, Thinkific, and Podia. That’s why **we offer all essential features—course creation, memberships, website, analytics, email marketing and payment gateways—in a single Pro Plan priced under $20/month**, empowering solo creators like marketing coaches and small businesses like digital agencies with 1-50 employees to scale without financial strain or costly upgrades.

Plus, CourseLit is fully open-source and self-hostable, letting you host your educational empire at zero license cost—only server expenses of $5–$20/month on AWS or DigitalOcean. Our up-to-date documentation and vibrant community (via Discord and GitHub) make this process a breeze, ensuring you own your platform and destiny, free from vendor lock-in.

## Why did we create it?

We are building the **"WordPress of course and membership platforms"**.

Discover [our vision](/en/vision) for creating CourseLit and learn why we set out to build a unique platform, despite the many options already available.

## Features

CourseLit has got everything you'd ever need to successfully run your online teaching business.
CourseLit has everything you'd ever need to successfully run your online teaching business, including **course creation, memberships, website, analytics, email marketing**, and **payment gateways**—all bundled to power your growth.

See all the features [here](/en/features).

## Try CourseLit

Visit <a href="https://courselit.app" target="_blank">courselit.app</a> to use the cloud hosted version. Sign up for a free account to get a **14 days trial period** to experience the platform without any restrictions. **No credit card required**.
Visit <a href="https://courselit.app" target="_blank">courselit.app</a> to use the cloud-hosted version. Sign up for a free account to get a **14-day trial period** to experience the platform without any restrictions. **No credit card required**.

## Self Hosting

CourseLit is an open-source LMS and can be hosted on a server where you control everything. If data ownership is at the center of your business, self-hosting CourseLit is a way to go.
CourseLit is an open-source LMS and can be hosted on a server where you control everything. If data ownership is at the center of your business, self-hosting CourseLit is the way to go.

Follow [our guide](/en/self-hosting/introduction) for full, step by step instructions for hosting CourseLit on your server.
Follow [our guide](/en/self-hosting/introduction) for full, step-by-step instructions for hosting CourseLit on your server.

## Join Our Community

Join our [Discord](https://discord.com/invite/GR4bQsN) channel to get help, to request for features or to just hang out with an awesome community of creators.
Join our [Discord](https://discord.com/invite/GR4bQsN) channel to get help, request features, or just hang out with an awesome community of creators.

You can also stay updated by following us on [X](https://x.com/courselit).

## Learn More

Expand Down
Loading
Loading