Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
8c88a36
Added initial files for emil-editor from v0. Published alpha versions…
rajat1saxena Jun 15, 2025
61d2ff1
Added index.css and README
rajat1saxena Jun 16, 2025
dd55876
shadcn components
rajat1saxena Jun 16, 2025
3f32115
email-editor is fully stand-alone
rajat1saxena Jun 16, 2025
97cdaf0
WIP: Email Editor styles added
rajat1saxena Jun 16, 2025
9209819
Removed workspace deps
rajat1saxena Jun 16, 2025
a2bd58a
pnpm update
rajat1saxena Jun 16, 2025
ca2903b
Added license and updated readme
rajat1saxena Jun 17, 2025
baf86ff
Changet GH action branch
rajat1saxena Jun 17, 2025
56bc36a
Added a test changeset
rajat1saxena Jun 17, 2025
ae6e76e
Pull current branch, not latest tag
rajat1saxena Jun 17, 2025
141f2d4
Upgraded husky and removed test hook
rajat1saxena Jun 17, 2025
2638452
Ignored a package
rajat1saxena Jun 17, 2025
d503c87
Added .npmrc to gitignore
rajat1saxena Jun 17, 2025
e9a8ad2
Added cherry-picked changes
rajat1saxena Jun 17, 2025
9ec5afe
Remove dep install
rajat1saxena Jun 17, 2025
651393e
chore: update versions (#595)
rajat1saxena Jun 17, 2025
4681f43
Reverted dep removal
rajat1saxena Jun 17, 2025
95308d6
Switched to main branch
rajat1saxena Jun 17, 2025
be3c386
Exported rendering HTML function from the email-editor package;
rajat1saxena Jun 17, 2025
dd5edd2
Publishing email-editor
rajat1saxena Jun 18, 2025
d95bc70
chore: update versions (#596)
rajat1saxena Jun 18, 2025
4d4c803
Polished the types and remove unnecessary props
rajat1saxena Jun 19, 2025
4746650
Refactored contexts away
rajat1saxena Jun 19, 2025
8383821
Email editor integrated in dedicated editing page
rajat1saxena Jun 26, 2025
892cc72
WIP: Fixing email sending with new editor
rajat1saxena Jun 30, 2025
ab962f9
WIP: Email editor used in broadcast, sequence and product drip mails
rajat1saxena Jul 7, 2025
9ae9a57
Fixed email editor usage across broadcast, sequence and drip function…
rajat1saxena Jul 12, 2025
e602841
Auto save email filter on input field blur
rajat1saxena Jul 12, 2025
d8f2e35
Merge branch 'main' of github.com:codelitdev/courselit into rajat1sax…
rajat1saxena Jul 13, 2025
5354eb9
Timed auto-save badge
rajat1saxena Jul 13, 2025
5c0ba55
lint fixes
rajat1saxena Jul 13, 2025
ebcbb88
migration for wysiwyg email editor
rajat1saxena Jul 13, 2025
7c7728b
Improve sequences lists
rajat1saxena Jul 14, 2025
7262c00
Fixed drip email creation
rajat1saxena Jul 14, 2025
4478c8e
Unpublished product's page redirects to notFound
rajat1saxena Jul 14, 2025
cf66bb6
Removed feature branch from github action
rajat1saxena Jul 14, 2025
788cd75
CodeQL fixes
rajat1saxena Jul 14, 2025
2420de7
Updated docs
rajat1saxena Jul 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Changesets

Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets)

We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
26 changes: 26 additions & 0 deletions .changeset/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": [
"@courselit/web",
"@courselit/state-management",
"@courselit/utils",
"@courselit/queue",
"@courselit/icons",
"@courselit/components-library",
"tsconfig",
"tailwind-config",
"@courselit/page-blocks",
"@courselit/text-editor",
"@courselit/common-logic",
"@courselit/page-primitives",
"@courselit/common-models",
"@courselit/docs"
]
}
53 changes: 0 additions & 53 deletions .github/workflows/publish-docker-images.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,60 +6,7 @@ on:
- '*'

jobs:
# publish-packages:
# runs-on: ubuntu-latest
# steps:
# - name: checkout
# uses: actions/checkout@v1

# - name: Configure CI Git User
# run: |
# git config --global user.name 'Rajat Saxena'
# git config --global user.email 'hi@sub.rajatsaxena.dev'
# git remote set-url origin https://$GITHUB_ACTOR:$GITHUB_PAT@github.com/codelitdev/courselit
# env:
# GITHUB_PAT: ${{ secrets.PAT }}

# - name: Checkout and pull branch
# run: |
# LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`)
# git checkout $LATEST_TAG

# - name: Setup pnpm
# uses: pnpm/action-setup@v2
# with:
# version: 8

# - name: Install Packages
# run: pnpm install

# - name: Authenticate with Registry
# run: |
# echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc
# pnpm whoami
# env:
# NPM_TOKEN: ${{ secrets.NPM }}

# - name: Build packages
# run: |
# pnpm --filter @courselit/icons build
# pnpm --filter @courselit/common-models build
# pnpm --filter @courselit/utils build
# pnpm --filter @courselit/text-editor build
# pnpm --filter @courselit/state-management build
# pnpm --filter @courselit/components-library build
# pnpm --filter @courselit/common-widgets build

# - name: Publish package
# run: |
# pnpm publish
# env:
# GH_TOKEN: ${{ secrets.PAT }}
# GITHUB_TOKEN: ${{ secrets.PAT }}
# NPM_TOKEN: ${{ secrets.NPM }}

publish-docker-images:
# needs: publish-packages
runs-on: ubuntu-latest
steps:
- name: checkout
Expand Down
62 changes: 62 additions & 0 deletions .github/workflows/publish-packages.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Publish NPM packages

on:
push:
branches:
- main
tags-ignore:
- '**'

concurrency: ${{ github.workflow }}-${{ github.ref }}

env:
CI: true

jobs:
publish-packages:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v1

- name: Configure CI Git User
run: |
git config --global user.name 'Rajat Saxena'
git config --global user.email 'hi@sub.rajatsaxena.dev'
git remote set-url origin https://$GITHUB_ACTOR:$GITHUB_PAT@github.com/codelitdev/courselit
env:
GITHUB_PAT: ${{ secrets.PAT }}

- name: Checkout and pull branch
run: |
git checkout ${{ github.ref_name }}
git pull origin ${{ github.ref_name }}

- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8

- name: Install Packages
run: pnpm install

- name: Authenticate with Registry
run: |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc
pnpm whoami
env:
NPM_TOKEN: ${{ secrets.NPM }}

- name: Create and publish versions
id: changesets
uses: changesets/action@v1
with:
commit: "chore: update versions"
title: "chore: update versions"
publish: pnpm ci:publish
env:
GITHUB_TOKEN: ${{ secrets.PAT }}
NPM_TOKEN: ${{ secrets.NPM }}

- name: Echo changeset output
run: echo "${{ steps.changesets.outputs.hasChangesets }}"
1 change: 1 addition & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ jobs:
run: |
pnpm --filter @courselit/icons build
pnpm --filter @courselit/page-models build
pnpm --filter @courselit/email-editor build
pnpm --filter @courselit/common-models build
pnpm --filter @courselit/utils build
pnpm --filter @courselit/text-editor build
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,6 @@ report*.json
.DS_Store

# Dev tools files
.eslintcache
.eslintcache

.npmrc
3 changes: 1 addition & 2 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#!/usr/bin/env sh
. "$(dirname "$0")/_/husky.sh"

pnpm exec lint-staged
pnpm test
pnpm exec lint-staged
Binary file not shown.
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/emails/broadcasts-hub.png
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.
Binary file modified apps/docs/public/assets/emails/compose-sequence-email.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/docs/public/assets/emails/compose-sequence.png
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/emails/email-editor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/docs/public/assets/emails/sequences-hub.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: 2 additions & 2 deletions apps/docs/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ export const SIDEBAR: Sidebar = {
link: "en/email-marketing/mail-access-request",
},
{
text: "Broadcast mails",
link: "en/email-marketing/broadcast-mails",
text: "Broadcasts",
link: "en/email-marketing/broadcasts",
},
{
text: "Sequences (Campaigns)",
Expand Down
67 changes: 0 additions & 67 deletions apps/docs/src/pages/en/email-marketing/broadcast-mails.md

This file was deleted.

75 changes: 75 additions & 0 deletions apps/docs/src/pages/en/email-marketing/broadcasts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
title: Broadcasts
description: Send one-off emails to your audience
layout: ../../../layouts/MainLayout.astro
---

Broadcast emails are typically sent to your entire list or specific segments simultaneously, making them ideal for announcements, promotions, or updates.

> This feature is currently in beta, which means you may encounter bugs. Please report them in our <a href="https://discord.com/invite/GR4bQsN" target="_blank">Discord</a> group if you run into any issues.

> **Before you start**: If your school is hosted on [courselit.app](https://courselit.app), you need to get approved to send marketing emails. [Request access here](/en/email-marketing/mail-access-request).

## Broadcasts Hub

From the `Dashboard`, go to `Mails` to land on the `Broadcasts` hub. Here, you will see all the broadcasts you have ever worked on.

![Broadcasts Hub](/assets/emails/broadcasts-hub.png)

## Compose Your Email

1. Click the `New broadcast` button on the right, in the `Broadcasts` hub.

2. Let's get acquainted with the interface. In the following image, we have marked all the sections. To see the description of a section, note its number in the screenshot and find its description below.

- 1. **User Filters**: To select the users.
- 2. **Total Selected Users**: The total number of selected users as per the applied filters.
- 3. **Subject**: The email subject goes here.
- 4. **Email Preview**: Live email preview.
> During the preview, variables will be displayed as placeholders. The actual values will be replaced when sending the actual email.
- 5. **Mail Edit Button**: Opens the mail for editing.
- 6. **Send Button**: Sends the email immediately.
- 7. **Schedule Button**: Lets you schedule an email for later.

![Broadcast Compose](/assets/emails/compose-broadcast.png)

3. Upon clicking the **Mail Edit** button, a full-page email editor will open where you can edit the email.

> When done, simply press the exit button. All changes are auto-saved.

![Email editor](/assets/emails/email-editor.png)

We have annotated the screenshot of the CourseLit email editor:

- 1. **Variables**: You can use these variables in your emails. These variables will be replaced with the actual data when sending the email.
- 2. **Email Preview**: The live preview of the email.
- 3. **Settings Pane**: The settings pane for the email and the selected block.
- 4. **Exit Button**: The email editor exit button.

4. If you are not yet ready to send the email or schedule it, you can simply go back to the Broadcasts hub by clicking on the `Broadcasts` breadcrumb (located at the top of the page).

## Send Immediately

Once your email is ready, you can either send it right away or schedule it for later. Click the `Send` button to send the email immediately.

## Schedule for Later

Click the `Schedule` button to see an additional input box to enter the date and time to send the email, as shown below. The time you select here is based on your own time zone.

> In the background, all dates and times are converted to UTC.

![Schedule Broadcast Mail](/assets/emails/schedule.jpeg)

### Canceling a Scheduled Email

Once an email is scheduled, you will see the time it will be sent at the bottom, as shown below. Simply click the `Cancel sending` button to cancel the scheduled send.

![Cancel Scheduled Mail](/assets/emails/scheduled-mail.jpeg)

## Next Step

Let's see how to send automated email campaigns (also known as sequences) when something happens in your school. [Click here](/en/email-marketing/sequences).

## 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 to <a href="https://twitter.com/courselit" target="_blank">@CourseLit</a>.
16 changes: 8 additions & 8 deletions apps/docs/src/pages/en/email-marketing/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,26 @@ description: Send broadcasts and email sequences using CourseLit
layout: ../../../layouts/MainLayout.astro
---

Sending timely emails to your audience keeps them engaged, which is why CourseLit includes a seamless integration solution for email marketing and automation.
Sending timely emails to your audience keeps them engaged, which is why CourseLit includes a seamless solution for email marketing and automation.

> The feature is currently in beta, which means you may encounter bugs. Please report them in our <a href="https://discord.com/invite/GR4bQsN" target="_blank">Discord</a> group if you run into any.
> This feature is currently in beta, which means you may encounter bugs. Please report them in our <a href="https://discord.com/invite/GR4bQsN" target="_blank">Discord</a> group if you run into any issues.

## Mailing Capabilities

CourseLit offers two types of mails.
CourseLit offers two types of emails:

#### 1. [Broadcasts](/en/email-marketing/broadcast-mails)
#### 1. [Broadcasts](/en/email-marketing/broadcasts)

Send one-off emails to selected recipients for quick updates or newsletters.

#### 2. [Sequences](/en/email-marketing/sequences)

Automatically send a series of emails triggered by specific events in the system.

## Next step
## Next Step

Learn [how to send broadcast emails](/en/email-marketing/broadcast-mails) to your audience.
Learn [how to send broadcast emails](/en/email-marketing/broadcasts) to your audience.

## Stuck somewhere?
## 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 to <a href="https://twitter.com/courselit" target="_blank">@CourseLit</a>.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Fill out the form and hit `Save`.

## Next step

Let's see [how to send broadcast emails](/en/email-marketing/broadcast-mails).
Let's see [how to send broadcast emails](/en/email-marketing/broadcasts).

## Stuck somewhere?

Expand Down
Loading
Loading