From b2f344fd30b596140b92eb270bd9cfd32e93278c Mon Sep 17 00:00:00 2001
From: Nuwan
Date: Thu, 14 Aug 2025 22:06:18 +0530
Subject: [PATCH] PLG email for 2+ session
email reminders for the users to have 2+ session
VRFS-5661
---
...group_session_reminder_columns_to_users.rb | 12 ++
ruby/lib/jam_ruby.rb | 1 +
ruby/lib/jam_ruby/app/mailers/user_mailer.rb | 24 ++++
.../group_session_reminder1.html.erb | 44 +++++++
.../group_session_reminder1.text.erb | 26 ++++
.../group_session_reminder2.html.erb | 18 +++
.../group_session_reminder2.text.erb | 10 ++
.../group_session_reminder3.html.erb | 10 ++
.../group_session_reminder3.text.erb | 10 ++
.../jam_ruby/lib/group_session_reminder.rb | 47 ++++++++
.../jam_ruby/resque/scheduled/hourly_job.rb | 1 +
ruby/spec/mailers/user_mailer_spec.rb | 114 +++++++++++++++++-
web/config/application.rb | 3 +
web/config/environments/development.rb | 1 +
web/config/locales/en.yml | 52 ++++++++
15 files changed, 372 insertions(+), 1 deletion(-)
create mode 100644 ruby/db/migrate/20250814120328_add_group_session_reminder_columns_to_users.rb
create mode 100644 ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder1.html.erb
create mode 100644 ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder1.text.erb
create mode 100644 ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder2.html.erb
create mode 100644 ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder2.text.erb
create mode 100644 ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder3.html.erb
create mode 100644 ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder3.text.erb
create mode 100644 ruby/lib/jam_ruby/lib/group_session_reminder.rb
diff --git a/ruby/db/migrate/20250814120328_add_group_session_reminder_columns_to_users.rb b/ruby/db/migrate/20250814120328_add_group_session_reminder_columns_to_users.rb
new file mode 100644
index 000000000..e67929a4e
--- /dev/null
+++ b/ruby/db/migrate/20250814120328_add_group_session_reminder_columns_to_users.rb
@@ -0,0 +1,12 @@
+ class AddGroupSessionReminderColumnsToUsers < ActiveRecord::Migration
+ def self.up
+ execute "ALTER TABLE users ADD COLUMN group_session_reminder1_sent_at TIMESTAMP"
+ execute "ALTER TABLE users ADD COLUMN group_session_reminder2_sent_at TIMESTAMP"
+ execute "ALTER TABLE users ADD COLUMN group_session_reminder3_sent_at TIMESTAMP"
+ end
+ def self.down
+ execute "ALTER TABLE users DROP COLUMN group_session_reminder1_sent_at"
+ execute "ALTER TABLE users DROP COLUMN group_session_reminder2_sent_at"
+ execute "ALTER TABLE users DROP COLUMN group_session_reminder3_sent_at"
+ end
+ end
diff --git a/ruby/lib/jam_ruby.rb b/ruby/lib/jam_ruby.rb
index 40604d0ec..fb13366a1 100755
--- a/ruby/lib/jam_ruby.rb
+++ b/ruby/lib/jam_ruby.rb
@@ -124,6 +124,7 @@ require "jam_ruby/lib/email_profile_reminder"
require "jam_ruby/lib/email_signup_survey"
require "jam_ruby/lib/gear_setup_reminder"
require "jam_ruby/lib/test_gear_reminder"
+require "jam_ruby/lib/group_session_reminder"
require "jam_ruby/amqp/amqp_connection_manager"
require "jam_ruby/database"
require "jam_ruby/message_factory"
diff --git a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb
index 562d713fd..81b42ac7e 100644
--- a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb
+++ b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb
@@ -504,6 +504,30 @@ module JamRuby
end
end
+ def group_session_reminder1(user)
+ @user = user
+ mail(:to => user.email, :subject => I18n.t('user_mailer.group_session_reminder1.subject')) do |format|
+ format.text
+ format.html { render layout: "user_mailer_beta" }
+ end
+ end
+
+ def group_session_reminder2(user)
+ @user = user
+ mail(:to => user.email, :subject => I18n.t('user_mailer.group_session_reminder2.subject')) do |format|
+ format.text
+ format.html { render layout: "user_mailer_beta" }
+ end
+ end
+
+ def group_session_reminder3(user)
+ @user = user
+ mail(:to => user.email, :subject => I18n.t('user_mailer.group_session_reminder3.subject')) do |format|
+ format.text
+ format.html { render layout: "user_mailer_beta" }
+ end
+ end
+
def signup_survey(user)
@user = user
@subject = I18n.t('user_mailer.signup_survey.subject')
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder1.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder1.html.erb
new file mode 100644
index 000000000..949f64d84
--- /dev/null
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder1.html.erb
@@ -0,0 +1,44 @@
+<%=I18n.t('user_mailer.group_session_reminder1.greeting') -%> <%= @user.first_name -%> -
+
+
+ <%=I18n.t('user_mailer.group_session_reminder1.paragraph1').html_safe -%>
+
+
+
+
<%=I18n.t('user_mailer.group_session_reminder1.office_hours') -%>
+ <%=I18n.t('user_mailer.group_session_reminder1.paragraph2').html_safe -%>
+
+
+
+
<%=I18n.t('user_mailer.group_session_reminder1.hosted_sessions') -%>
+ <%=I18n.t('user_mailer.group_session_reminder1.paragraph3').html_safe -%>
+
+
+
+
<%=I18n.t('user_mailer.group_session_reminder1.inviting_your_friends') -%>
+ <%=I18n.t('user_mailer.group_session_reminder1.paragraph4').html_safe -%>
+
+
+
+
<%=I18n.t('user_mailer.group_session_reminder1.finding_good_matches') -%>
+ <%=I18n.t('user_mailer.group_session_reminder1.paragraph5').html_safe -%>
+
+
+
+
<%=I18n.t('user_mailer.group_session_reminder1.scheduling_sessions') -%>
+ <%=I18n.t('user_mailer.group_session_reminder1.paragraph6').html_safe -%>
+
+
+
+
<%=I18n.t('user_mailer.group_session_reminder1.asking_for_help') -%>
+ <%=I18n.t('user_mailer.group_session_reminder1.paragraph7').html_safe -%>
+
+
+
+ <%=I18n.t('user_mailer.group_session_reminder1.paragraph8').html_safe -%>
+
+
+
+ <%=I18n.t('user_mailer.group_session_reminder1.regards') -%>,
+ <%=I18n.t('user_mailer.group_session_reminder1.signature') -%>
+
\ No newline at end of file
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder1.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder1.text.erb
new file mode 100644
index 000000000..3553275e6
--- /dev/null
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder1.text.erb
@@ -0,0 +1,26 @@
+<%=I18n.t('user_mailer.group_session_reminder1.greeting') -%> <%= @user.first_name -%> -
+
+<%=I18n.t('user_mailer.group_session_reminder1.paragraph1') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder1.office_hours') -%>
+<%=I18n.t('user_mailer.group_session_reminder1.paragraph2') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder1.hosted_sessions') -%>
+<%=I18n.t('user_mailer.group_session_reminder1.paragraph3') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder1.inviting_your_friends') -%>
+<%=I18n.t('user_mailer.group_session_reminder1.paragraph4') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder1.finding_good_matches') -%>
+<%=I18n.t('user_mailer.group_session_reminder1.paragraph5') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder1.scheduling_sessions') -%>
+<%=I18n.t('user_mailer.group_session_reminder1.paragraph6') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder1.asking_for_help') -%>
+<%=I18n.t('user_mailer.group_session_reminder1.paragraph7') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder1.paragraph8') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder1.regards') -%>,
+<%=I18n.t('user_mailer.group_session_reminder1.signature') -%>
\ No newline at end of file
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder2.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder2.html.erb
new file mode 100644
index 000000000..c2c756891
--- /dev/null
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder2.html.erb
@@ -0,0 +1,18 @@
+<%=I18n.t('user_mailer.group_session_reminder2.greeting') -%> <%= @user.first_name -%> -
+
+
+ <%=I18n.t('user_mailer.group_session_reminder2.paragraph1').html_safe -%>
+
+
+
+ <%=I18n.t('user_mailer.group_session_reminder2.paragraph2').html_safe -%>
+
+
+
+ <%=I18n.t('user_mailer.group_session_reminder2.paragraph3').html_safe -%>
+
+
+
+ <%=I18n.t('user_mailer.group_session_reminder2.regards') -%>,
+ <%=I18n.t('user_mailer.group_session_reminder2.signature') -%>
+
\ No newline at end of file
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder2.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder2.text.erb
new file mode 100644
index 000000000..95890a6e0
--- /dev/null
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder2.text.erb
@@ -0,0 +1,10 @@
+<%=I18n.t('user_mailer.group_session_reminder2.greeting') -%> <%= @user.first_name -%> -
+
+<%=I18n.t('user_mailer.group_session_reminder2.paragraph1') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder2.paragraph2') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder2.paragraph3') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder2.regards') -%>,
+<%=I18n.t('user_mailer.group_session_reminder2.signature') -%>
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder3.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder3.html.erb
new file mode 100644
index 000000000..7d66a1efb
--- /dev/null
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder3.html.erb
@@ -0,0 +1,10 @@
+<%= I18n.t('user_mailer.group_session_reminder3.greeting') -%> <%= @user.first_name -%> -
+
+<%= I18n.t('user_mailer.group_session_reminder3.paragraph1') -%>
+
+<%= I18n.t('user_mailer.group_session_reminder3.paragraph2') -%>
+
+<%= I18n.t('user_mailer.group_session_reminder3.paragraph3') -%>
+
+<%= I18n.t('user_mailer.group_session_reminder3.regards') -%>,
+<%= I18n.t('user_mailer.group_session_reminder3.signature') -%>
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder3.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder3.text.erb
new file mode 100644
index 000000000..58f54466b
--- /dev/null
+++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/group_session_reminder3.text.erb
@@ -0,0 +1,10 @@
+<%=I18n.t('user_mailer.group_session_reminder3.greeting') -%> <%= @user.first_name -%> -
+
+<%=I18n.t('user_mailer.group_session_reminder3.paragraph1') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder3.paragraph2') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder3.paragraph3') -%>
+
+<%=I18n.t('user_mailer.group_session_reminder3.regards') -%>,
+<%=I18n.t('user_mailer.group_session_reminder3.signature') -%>
diff --git a/ruby/lib/jam_ruby/lib/group_session_reminder.rb b/ruby/lib/jam_ruby/lib/group_session_reminder.rb
new file mode 100644
index 000000000..7d58c4101
--- /dev/null
+++ b/ruby/lib/jam_ruby/lib/group_session_reminder.rb
@@ -0,0 +1,47 @@
+module JamRuby
+ class GroupSessionReminder
+
+ @@log = Logging.logger[GroupSessionReminder]
+
+ def self.send_reminders
+ begin
+ cutoff_date = Date.parse(Rails.application.config.group_session_reminders_effective_from_date) # Define a cutoff date for the group session reminder emails
+
+ reminder1_users(cutoff_date).find_each(batch_size:100) do |user|
+ UserMailer.group_session_reminder1(user).deliver_now
+ User.where(id: user.id).update_all(group_session_reminder1_sent_at: Time.now)
+ end
+
+ reminder2_users(cutoff_date).find_each(batch_size:100) do |user|
+ UserMailer.group_session_reminder2(user).deliver_now
+ User.where(id: user.id).update_all(group_session_reminder2_sent_at: Time.now)
+ end
+
+ reminder3_users(cutoff_date).find_each(batch_size:100) do |user|
+ UserMailer.group_session_reminder3(user).deliver_now
+ User.where(id: user.id).update_all(group_session_reminder3_sent_at: Time.now)
+ end
+ rescue Exception => e
+ @@log.error("unable to send GroupSessionReminder email #{e}")
+ puts "unable to send GroupSessionReminder email #{e}"
+ end
+ end
+
+ def self.prospect_users
+ User.where("users.first_certified_gear_at IS NOT NULL AND users.first_real_music_session_at IS NULL")
+ end
+
+ def self.reminder1_users(cutoff_date)
+ GroupSessionReminder.prospect_users.where("users.created_at > ? AND users.first_music_session_at IS NOT NULL AND users.group_session_reminder1_sent_at IS NULL", cutoff_date)
+ end
+
+ def self.reminder2_users(cutoff_date)
+ GroupSessionReminder.prospect_users.where("users.created_at > ? AND users.group_session_reminder1_sent_at IS NOT NULL AND users.group_session_reminder2_sent_at IS NULL AND users.first_music_session_at < ?", cutoff_date, 3.days.ago)
+ end
+
+ def self.reminder3_users(cutoff_date)
+ GroupSessionReminder.prospect_users.where("users.created_at > ? AND users.group_session_reminder2_sent_at IS NOT NULL AND users.group_session_reminder3_sent_at IS NULL AND users.first_music_session_at < ?", cutoff_date, 5.days.ago)
+ end
+
+ end
+end
\ No newline at end of file
diff --git a/ruby/lib/jam_ruby/resque/scheduled/hourly_job.rb b/ruby/lib/jam_ruby/resque/scheduled/hourly_job.rb
index e685f4321..1e617f526 100644
--- a/ruby/lib/jam_ruby/resque/scheduled/hourly_job.rb
+++ b/ruby/lib/jam_ruby/resque/scheduled/hourly_job.rb
@@ -17,6 +17,7 @@ module JamRuby
EmailSignupSurvey.send_survey
GearSetupReminder.send_reminders
TestGearReminder.send_reminders
+ GroupSessionReminder.send_reminders
ConnectionManager.new.cleanup_dangling
@@log.info("done")
diff --git a/ruby/spec/mailers/user_mailer_spec.rb b/ruby/spec/mailers/user_mailer_spec.rb
index 918909116..c4428cea3 100644
--- a/ruby/spec/mailers/user_mailer_spec.rb
+++ b/ruby/spec/mailers/user_mailer_spec.rb
@@ -16,7 +16,7 @@ describe UserMailer do
UserMailer.deliveries.clear
end
- describe "should send confirm email", focus: true do
+ describe "should send confirm email" do
let (:mail) { UserMailer.deliveries[0] }
let (:signup_confirmation_url) { "/confirm" }
@@ -210,4 +210,116 @@ describe UserMailer do
# it { mail.text_part.body.include?("New JamKazam Musicians in your Area").should be_true }
# end
+ describe "sends group session reminder 1", focus: true do
+ let(:mail) { ActionMailer::Base.deliveries.last }
+
+ before(:each) do
+ ActionMailer::Base.deliveries.clear
+ UserMailer.group_session_reminder1(user).deliver_now
+ end
+
+ it "sends exactly one email" do
+ expect(ActionMailer::Base.deliveries.length).to eq(1)
+ end
+
+ it "has the correct from address" do
+ #expect(mail.from).to eq([UserMailer::DEFAULT_SENDER])
+ mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
+ end
+
+ it "has the correct recipient" do
+ expect(mail.to).to eq([user.email])
+ end
+
+ it "is multipart" do
+ expect(mail).to be_multipart
+ end
+
+ it "has the expected subject" do
+ expect(mail.subject).to include("It’s time to start playing music with others online!")
+ end
+
+ it "includes the correct content in the HTML part" do
+ expect(mail.html_part.body.to_s).to include("Now that you have set up your gearand checked it out in a solo session on your own")
+ end
+
+ it "includes the correct content in the text part" do
+ expect(mail.text_part.body.to_s).to include("Now that you have set up your gearand checked it out in a solo session on your own")
+ end
+ end
+
+ describe "sends group session reminder 2", focus: true do
+ let(:mail) { ActionMailer::Base.deliveries.last }
+
+ before(:each) do
+ ActionMailer::Base.deliveries.clear
+ UserMailer.group_session_reminder2(user).deliver_now
+ end
+
+ it "sends exactly one email" do
+ expect(ActionMailer::Base.deliveries.length).to eq(1)
+ end
+
+ it "has the correct from address" do
+ mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
+ end
+
+ it "has the correct recipient" do
+ expect(mail.to).to eq([user.email])
+ end
+
+ it "is multipart" do
+ expect(mail).to be_multipart
+ end
+
+ it "has the expected subject" do
+ expect(mail.subject).to include("Take the last step to play online with others now, and experience the joy")
+ end
+
+ it "includes the correct content in the HTML part" do
+ expect(mail.html_part.body.to_s).to include("If you signed up for JamKazam to play music with others online")
+ end
+
+ it "includes the correct content in the text part" do
+ expect(mail.text_part.body.to_s).to include("If you signed up for JamKazam to play music with others online")
+ end
+ end
+
+ describe "sends group session reminder 3", focus: true do
+ let(:mail) { ActionMailer::Base.deliveries.last }
+
+ before(:each) do
+ ActionMailer::Base.deliveries.clear
+ UserMailer.group_session_reminder3(user).deliver_now
+ end
+
+ it "sends exactly one email" do
+ expect(ActionMailer::Base.deliveries.length).to eq(1)
+ end
+
+ it "has the correct from address" do
+ mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
+ end
+
+ it "has the correct recipient" do
+ expect(mail.to).to eq([user.email])
+ end
+
+ it "is multipart" do
+ expect(mail).to be_multipart
+ end
+
+ it "has the expected subject" do
+ expect(mail.subject).to include("Don’t waste your free 30-day premium gold plan–get in a session with others now!")
+ end
+
+ it "includes the correct content in the HTML part" do
+ expect(mail.html_part.body.to_s).to include("When you sign up for JamKazam, we give you a free 30-day premium")
+ end
+
+ it "includes the correct content in the text part" do
+ expect(mail.text_part.body.to_s).to include("When you sign up for JamKazam, we give you a free 30-day premium")
+ end
+ end
+
end
diff --git a/web/config/application.rb b/web/config/application.rb
index 3ad90d1aa..ef6447f11 100644
--- a/web/config/application.rb
+++ b/web/config/application.rb
@@ -521,9 +521,12 @@ if defined?(Bundler)
config.user_match_monitoring_email = "user_match_monitoring_email@jamkazam.com"
config.send_user_match_mail_only_to_jamkazam_team = true
config.signup_survey_url = "https://www.surveymonkey.com/r/WVBKLYL"
+
config.signup_survey_cutoff_date = "2025-06-10"
config.gear_setup_reminders_effective_from_date = "2025-06-10"
config.test_gear_reminders_effective_from_date = "2025-07-24"
+ config.group_session_reminders_effective_from_date = "2025-08-12"
+
config.action_mailer.asset_host = config.action_controller.asset_host
end
end
diff --git a/web/config/environments/development.rb b/web/config/environments/development.rb
index 4656ca7d4..4a71c74be 100644
--- a/web/config/environments/development.rb
+++ b/web/config/environments/development.rb
@@ -130,4 +130,5 @@ SampleApp::Application.configure do
config.signup_survey_cutoff_date = "2025-06-10"
config.gear_setup_reminders_effective_from_date = "2025-06-10"
config.test_gear_reminders_effective_from_date = "2025-07-24"
+ config.group_session_reminders_effective_from_date = "2025-08-12"
end
diff --git a/web/config/locales/en.yml b/web/config/locales/en.yml
index ba1c37d74..c369b7a4d 100644
--- a/web/config/locales/en.yml
+++ b/web/config/locales/en.yml
@@ -196,6 +196,58 @@ en:
If you have any trouble or feel confused while testing things out, you can email us for help at support@jamkazam.com. You can also visit with a JamKazam support team member in our weekly Zoom office hours, which is offered every Wednesday from 11am to 12pm US Central Time.
regards: "Best Regards,"
signature: "JamKazam Team"
+ group_session_reminder1:
+ subject: "It’s time to start playing music with others online!"
+ greeting: "Hello"
+ paragraph1: |
+ Now that you have set up your gear and checked it out in a solo session on your own, you are ready to get into the fun part –actually playing music online with other musicians! If you’re not sure how to go about this, here are a few good ways to get connected and start playing with others.
+ office_hours: Office Hours
+ paragraph2: |
+ JamKazam hosts an “office hours” session every Tuesday 7-8pm US Central Time. You can join this JamKazam session as a safe space with a JamKazam support team member to experience and learn how to play in online sessions, or to ask questions about particular features or issues you’re having. To find this session, start the JamKazam app, click the Find Session tile, then click the Open Jams tile, and look for the session called “JamKazam Office Hours”, and click the Join icon on this session.
+ hosted_sessions: Hosted Sessions
+ paragraph3: |
+ Members of the JamKazam community host sessions regularly across a variety of genres and artists (e.g. blues, jazz, bluegrass, country, metal, etc). These are public sessions, intended for anyone to join. To see what sessions are upcoming, go to the JamKazam blog here: https://jamkazam.com/blog/. Click on the most recent JamKazam News post, and scroll down to find the Upcoming Events section. You’ll find a list of hosted sessions with dates/times, and you can click the link of any hosted session for a description and instructions on how to find and join the hosted session.
+ inviting_your_friends: Inviting Your Friends
+ paragraph4: |
+ If you have bandmates or friends who play, invite them to sign up at https://jamkazam.com. Our support team can help them get ready to go, and then you’ll be able to play with people you already know and love.
+ finding_good_matches: Finding Good Matches in the JamKazam Community
+ paragraph5: |
+ If you don’t already have bandmates or musical friends, or if you do but would like to continue to grow your musical network and connections, we can help you connect with the “right” musicians who are already here in the JamKazam community. JamKazam has a unique feature you can use to search/filter our community by: 1) instruments played and skill level, 2) preferred genres, 3) date last active, and 4) latency –so you can make sure you’ll have good sessions with minimal lag. Once you find musicians who area good match, you can view the details of their profiles and message them to introduce yourself and see if they’d like to try playing together in sessions. Read this help article to learn how to use these search and messaging features.
+ scheduling_sessions: Scheduling Sessions
+ paragraph6: |
+ Another way to find others who want to play the kinds of music you’re interested in is to schedule future sessions and see if others in the JamKazam community RSVP to join you in your session. Read this help article to learn how to use this feature.
+ asking_for_help: Asking Us For Help
+ paragraph7: |
+ If you’re having trouble finding good musical matches and connections, you can always ask us for help. To do this, either open a help ticket here: https://www.jamkazam.com/help_desk. Or send us an email at support@jamkazam.com. We can reach out into our community to help you try to find the right musicians. In your message, please tell us what genre(s) and what specific musical artists’ music you want to play, what other instruments you’re looking for, and what skill level (e.g. beginner, intermediate, advanced) you’re looking for.
+ paragraph8: |
+ As a final suggestion, don’t be shy! If you’re worried you won’t play well enough, or you might get embarrassed, please set those intrusive thoughts aside. The musicians in the JamKazam community are very friendly, patient, supportive, and welcoming. This is the culture we all aspire to, and you’ll find it here 99% of the time (there’s always that one guy, right?). Reach out and make new musical friends. You’ll be glad you did!
+ regards: "Best Regards,"
+ signature: "JamKazam Team"
+
+ group_session_reminder2:
+ subject: "Take the last step to play online with others now, and experience the joy"
+ greeting: "Hello"
+ paragraph1: |
+ If you signed up for JamKazam to play music with others online, you’re now just one step short of doing it. Take that step now to experience the joy of playing more often, to build new musical friendships, and to develop your musical skills! There’s so much to gain, and really nothing at all to lose. We have many stories of years-long friendships that have developed on JamKazam and resulted in plane trips and meetups in the real world to hang out, visit, and play.
+ paragraph2: |
+ Don’t let any worries get in your way. The musicians in the JamKazam community are very friendly, patient, supportive, and welcoming. Reach out and make new musical friends. You’ll be glad you did!
+ paragraph3: |
+ We sent you an email a couple days ago with several suggestions on great ways to get connected. Refer back to that email for all those detailed instructions and tips. And if you get stuck, don’t hesitate to reach out to us to ask for help at support@jamkazam.com.
+ regards: "Best Regards,"
+ signature: "JamKazam Team"
+
+ group_session_reminder3:
+ subject: "Don’t waste your free 30-day premium gold plan–get in a session with others now!"
+ greeting: "Hello"
+ paragraph1: |
+ When you sign up for JamKazam, we give you a free 30-day premium gold plan so you can fully experience how amazing our online sessions are and how JamKazam can help you play more music with more people to bring more musical joy to your life.
+ paragraph2: |
+ Don’t waste your 30-day window! Get connected to other musicians who want to play the kinds of music you’re into, and get rolling. We sent you an email a couple days ago with several suggestions on great ways to get connected. Refer back to that email for all those detailed instructions and tips.
+ paragraph3: |
+ And if you get stuck, don’t hesitate to reach out to us to ask for help at support@jamkazam.com.
+ regards: "Best Regards,"
+ signature: "JamKazam Team"
+
signup_survey:
subject: "Let us help you to be successful on JamKazam"
greeting: "Hi"