Skip to content

Commit 4f9542b

Browse files
author
Rajat
committed
Merge branch 'main' of github.com:codelitdev/courselit into small-fixes-march-2026
2 parents 7a55b34 + ef0c85b commit 4f9542b

132 files changed

Lines changed: 8406 additions & 1244 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/code-quality.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
name: Code Quality
2-
on: [push]
2+
on:
3+
push:
4+
branches:
5+
- '**'
6+
tags-ignore:
7+
- '*'
38

49
jobs:
510
lint:

.github/workflows/publish-docker-images.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Publish NPM Packages
1+
name: Publish Docker images
22

33
on:
44
push:

.github/workflows/test.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
name: Testing
2-
on: [push]
2+
on:
3+
push:
4+
branches:
5+
- '**'
6+
tags-ignore:
7+
- '*'
38

49
jobs:
510
test:

AGENTS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
- Use **Cursors** (`.cursor()`) to stream data from MongoDB, ensuring the script remains memory-efficient regardless of dataset size.
1717
- Use **Batching** with `bulkWrite` (e.g., batches of 500) to maximize performance and minimize network roundtrips.
1818
- Ensure **Idempotency** (safe to re-run) by using upserts or `$setOnInsert` where applicable.
19+
- When making changes to the structure of the Course, consider how it affects its representation on its public page (`apps/web/app/(with-contexts)/(with-layout)/p/[id]/page.tsx`) and the course viewer (`apps/web/app/(with-contexts)/course/[slug]/[id]/page.tsx`).
1920

2021
### Workspace map (core modules):
2122

@@ -48,6 +49,7 @@
4849
- Always add or update test when introducing changes to `apps/web/graphql` folder, even if nobody asked.
4950
- Run `pnpm test` to run the tests.
5051
- Fix any test or type errors until the whole suite is green.
52+
- Refrain from creating new files when adding tests in `apps/web/graphql` subdirectories. Re-use `logic.test.ts` files for adding new test suites i.e. describe blocks.
5153

5254
## PR instructions
5355

154 KB
Loading
155 KB
Loading

apps/docs/src/pages/en/courses/add-content.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ layout: ../../../layouts/MainLayout.astro
66

77
CourseLit uses the concept of a `Lesson`. It is very similar to what we generally see in books, i.e., a large piece of information is divided into smaller chunks called lessons.
88

9-
Similarly, you can break down your course into `Lessons` and group the lessons into [Sections](/en/products/section).
9+
Similarly, you can break down your course into `Lessons` and group the lessons into [Sections](/en/courses/section).
1010

1111
## Sections
1212

apps/docs/src/pages/en/courses/section.md

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,18 @@ Here’s how sections look in various parts of the platform.
4646

4747
![Edit Section Settings](/assets/products/edit-section-settings.png)
4848

49+
## Rearranging Sections
50+
51+
You can move sections up or down as you like. Click the chevron up or down buttons to move a section.
52+
53+
![Move a section](/assets/products/section-reordering.png)
54+
55+
## Moving a Lesson Between Sections
56+
57+
Use the drag-and-drop handles on the left side of a lesson's listing to move it to any section.
58+
59+
![Move a lesson](/assets/products/lesson-reordering.png)
60+
4961
## Drip a Section
5062

5163
You can release a section on a **specific date** or **after a certain number of days have elapsed since the time a student enrolls**.
@@ -55,22 +67,28 @@ If drip configuration is enabled for a section, a student won't be able to acces
5567
### Drip by Date
5668

5769
1. If you want a section to be available to users on a specific date, this is the option you should opt for.
70+
2. Exact-date sections unlock only when their chosen date and time arrives.
71+
3. Unlocking an exact-date section does not change the timing of other relative drip sections.
5872

5973
![Drip by Date](/assets/products/drip-by-date.png)
6074

61-
2. Select the date on which this section will be dripped.
62-
3. Click `Continue` to save it.
75+
4. Select the date on which this section will be dripped.
76+
5. Click `Continue` to save it.
6377

6478
### Drip After a Certain Number of Days From Last Dripped Content
6579

6680
1. If you want a section to be available to users after a certain number of days have elapsed since the last dripped content, this is the option you should opt for.
81+
2. Relative-date sections are released in section order. A later relative section waits for the earlier relative section before its own delay begins.
82+
3. The first relative section counts from the student's enrollment date. After that, each newly released relative section becomes the anchor for the next relative section.
6783

6884
> For the first dripped section, the date of enrollment will be considered the last dripped content date.
6985
7086
![Drip After a Certain Number of Days Have Elapsed](/assets/products/drip-by-specific-days.png)
7187

72-
2. Select the number of days.
73-
3. Click `Continue` to save it.
88+
4. Select the number of days.
89+
5. Click `Continue` to save it.
90+
91+
> Rearranging a section with drip enabled may affect its drip schedule; use caution.
7492
7593
### Notify Users When a Section Has Dripped
7694

@@ -94,7 +112,7 @@ On the course viewer, the customer will see the clock icon against the section n
94112

95113
2. Click `Delete` on the confirmation dialog.
96114

97-
> A section must be empty (i.e., have no lessons attached to it) in order to be deleted.
115+
> A section must be empty (i.e., have no lessons attached) before it can be deleted. Move any lessons to another section to make it empty.
98116
99117
## Next Step
100118

apps/queue/.env

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,36 @@
1+
# Port for the queue service to listen on
12
PORT=4000
3+
4+
# email configuration for sending notifications (e.g., course updates, reminders)
25
EMAIL_USER=email_user
36
EMAIL_PASS=email_pass
47
EMAIL_HOST=email_host
8+
9+
10+
# MongoDB connection string for storing queue data and job information
511
DB_CONNECTION_STRING=mongodb://db.string
12+
13+
# Redis configuration for caching and job queue management
614
REDIS_HOST=localhost
715
REDIS_PORT=6379
16+
17+
# Maximum number of times to retry a failed job before marking it as failed
818
SEQUENCE_BOUNCE_LIMIT=3
19+
20+
# Domain for constructing URLs in notifications and links
921
DOMAIN=courselit.app
10-
PIXEL_SIGNING_SECRET=super_secret_string
22+
23+
# Secret key for signing tracking pixels (used in email notifications)
24+
PIXEL_SIGNING_SECRET=super_secret_string
25+
26+
# Optional: enables PostHog exception tracking when set.
27+
POSTHOG_API_KEY=
28+
29+
# Optional: PostHog host URL (default shown here).
30+
POSTHOG_HOST=https://us.i.posthog.com
31+
32+
# Optional: per-source exception cap per minute (default: 100).
33+
POSTHOG_ERROR_CAP_PER_SOURCE_PER_MINUTE=100
34+
35+
# Optional: deployment environment label sent in telemetry (default: unknown).
36+
DEPLOY_ENV=local

apps/queue/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ The following environment variables are used by the queue service:
2121
- `EMAIL_PORT` - SMTP server port (default: `587`)
2222
- `PORT` - HTTP server port (default: `80`)
2323
- `NODE_ENV` - Environment mode. When set to `production`, emails are actually sent; otherwise they are only logged
24+
- `POSTHOG_API_KEY` - Enables PostHog error tracking when set
25+
- `POSTHOG_HOST` - PostHog host URL (default: `https://us.i.posthog.com`)
26+
- `POSTHOG_ERROR_CAP_PER_SOURCE_PER_MINUTE` - Per-source exception cap (default: `100`)
27+
- `DEPLOY_ENV` - Deployment environment label used in telemetry (default: `unknown`)
2428
- `SEQUENCE_BOUNCE_LIMIT` - Maximum number of bounces allowed for email sequences (default: `3`)
2529
- `PROTOCOL` - Protocol used for generating site URLs (default: `https`)
2630
- `DOMAIN` - Base domain name for generating site URLs

0 commit comments

Comments
 (0)