How do students earn and view course certificates?
0Classification: Areas: Frontend, Courses · Audience: Student, Teacher, Parent · Visibility: Public (draft) · Verified: sj-learn-certificates · 2026-09-24
After passing a course that has a certificate, students can view earned certificates via certificate APIs such as LP_Certificate::get_user_certificates().
Teachers may also see certificate tabs on Student Profile.
Evidence: class-lp-certificate.php.
Do I need a credit card to start SJ CRM?
0Classification: Areas: Frontend, Settings · Audience: Customer · Visibility: Public (draft) · Verified: sj-crm 2.9.17 / sj-crm-signup · 2026-09-23
No. New SaaS signups are created on the Free plan only. Paid plans are upgrades for existing workspaces and are handled separately by the Stripe billing add-on.
On the public SJ CRM site, signup is offered from Sign-up / Get Started (registration page). The signup plugin requires email verification for every new signup.
Evidence: sj-crm-signup plugin header and flow (free plan + required email verification); sj-crm-stripe comments that paid plans are upgrades; public homepage FAQ on sjcrmapp.com.
Does SJ CRM include a built-in AI chatbot for CRM records?
0Classification: Areas: Chatbot · Audience: Customer · Visibility: Public (draft) · Verified: sj-crm 2.9.17 · 2026-09-23
No. The SJ CRM core plugin does not embed an AI chatbot that reads CRM contacts, businesses, or other tenant records.
Product support on the public SJ CRM site is positioned as human email support, not a CRM chatbot. A marketing-site chat widget (if present) is not the same as an in-CRM AI assistant over your data.
Staff documentation for CRM operators can be provided through the separate SJ FAQs / Knowledge Base add-on. The SJ Chatbot product is documented separately and is not wired into SJ CRM core in the current master.
Evidence: no chatbot integration symbols in sj-crm; sj-crm-faq-addon wraps sj-faqs Help Center for staff knowledge; public support copy on sjcrmapp.com.
How do I find my CRMs if I have more than one workspace?
0Classification: Areas: Frontend, Chatbot · Audience: Customer · Visibility: Public (draft) · Verified: sj-crm-signup + theme integration · 2026-09-23
If you belong to more than one SJ CRM workspace on the SaaS network, use these tools:
- Find My CRMs — open
/find-my-crms/on the main site, enter your email, and (when an account matches) receive an email listing your CRM workspaces. The response message does not reveal whether an email exists. - CRM Picker — when signed in with access to multiple CRMs, open
/crm-picker/to choose a workspace or set a default. Single-CRM users may be redirected straight into their workspace.
Support agents can point customers to Find My CRMs before escalating account recovery. Do not publish personal workspace URLs or family CRM links in public docs.
Evidence: sj-crm-signup handle_find_my_crms_page(), handle_crm_picker_page(); theme integration links to /find-my-crms/ and /crm-picker/.
What happens when I cancel or downgrade my SJ CRM subscription?
0Classification: Areas: Settings, Frontend, Chatbot · Audience: Customer · Visibility: Public (draft) · Verified: sj-crm-stripe · 2026-09-23
Billing changes are handled by the Stripe add-on and, where enabled, the Stripe Customer Portal.
- Cancel — cancellation is typically scheduled for the end of the current period (
cancel_at_period_end). You keep access until that date. - Downgrade — downgrades are commonly scheduled as a pending change effective at period end, rather than cutting limits immediately.
- Cancel a scheduled change — if a pending downgrade/cancel is waiting, the billing UI/API can cancel that scheduled change before it applies.
- Upgrade — paid upgrades are generally applied more immediately (with Stripe proration behavior as configured).
Use Manage billing / Customer Portal when offered. After the effective date, plan limits and add-on gating follow the new plan. This FAQ does not invent refund policy beyond what Stripe/portal shows.
Evidence: sj-crm-stripe subscription UI, pending downgrade handling, portal session creation, checkout cancel-at-period-end behavior.
How do I return safely from a child or delegated lesson session?
0Classification: Areas: Frontend, Security · Audience: Parent, Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Delegated sessions let an adult open a learner context. Returning uses SJL_Delegated_Learner_Session::return_to_actor(). Parent/agent returns may require the adult password; teacher returns follow teacher rules.
Evidence: class-sjl-delegated-learner-session.php.
How are lesson times shown in my timezone?
0Classification: Areas: Booking, Frontend · Audience: Student, Parent · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-24
Students can store a viewer timezone in user meta sjbk_viewer_timezone. The my-appointments UI saves it via ajax_save_viewer_timezone so slots display in the viewer’s zone.
Evidence: class-sjbk-learn-student.php.
How do I buy a marketplace course with Stripe checkout?
0Classification: Areas: Marketplace, Payments · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-stripe · 2026-09-24
Marketplace checkout can use the LearnPress Stripe gateway (LP_Gateway_Stripe), with marketplace filters for gateway keys.
Evidence: class-lp-gateway-stripe.php; marketplace stripe filters.
Why is my company subdomain not available when I sign up?
0Classification: Areas: Frontend · Audience: Customer · Visibility: Public (draft) · Verified: sj-crm-signup 1.3.16 · 2026-09-23
During SaaS signup, the company subdomain is checked live via GET /sj-crm-signup/v1/check-subdomain.
A subdomain can be rejected because:
- It is already taken by another site.
- It is on the reserved list:
www,admin,mail,ftp,api,app,blog,help,support,status,demo. - It fails length/format rules (signup requires at least 3 characters for the subdomain label).
Choose a different label (for example your brand plus a short qualifier) and retry. Reserved names protect platform routing and common infrastructure hostnames.
Evidence: reserved array and redirect error in sj-crm-signup.php; REST route /check-subdomain.
Do paid SJ CRM plans include a free trial?
0Classification: Areas: Frontend, Settings · Audience: Customer · Visibility: Public (draft) · Verified: sj-crm-stripe 1.0.34 · 2026-09-23
Paid plan cards can show a free trial when the plan’s trial_days value is greater than zero. Checkout then passes trial_period_days to Stripe.
Code defaults for built-in paid plan templates use 14 trial days (enterprise-style templates may use 0). Operators can change trial_days per plan in Stripe network settings, so the live pricing page is the source of truth—not marketing PDFs.
Trial badges on Perfect for small businesses getting started For growing businesses that need more capacity For large organizations with unlimited needs typically appear for new checkouts when Basic
Pro
Enterprise
trial_days > 0. Free signup without a card is a separate flow documented elsewhere.
Evidence: plan fields and checkout arrays in sj-crm-stripe.php (trial_days / trial_period_days); trial badge in render_pricing_shortcode.
Can I pay yearly instead of monthly?
0Classification: Areas: Frontend, Settings · Audience: Customer · Visibility: Public (draft) · Verified: sj-crm-stripe 1.0.34 · 2026-09-23
Yes, when yearly pricing is configured for the plan. Each plan can store price_yearly and a Stripe yearly price ID alongside monthly fields.
The pricing shortcode Perfect for small businesses getting started For growing businesses that need more capacity For large organizations with unlimited needs can show a Monthly/Yearly toggle when the attribute Basic
Pro
Enterprise
show_billing_toggle="yes" is set (attribute default is no). Buttons use data-billing="monthly" / data-billing="yearly" and swap displayed amounts.
Dollar amounts in code templates are examples only; live Stripe prices and network plan settings control what customers are charged.
Evidence: billing toggle and yearly amount markup in sj-crm-stripe.php render_pricing_shortcode; plan admin fields for price_yearly.
Can I use a Stripe promotion or discount code when I upgrade?
0Classification: Areas: Settings, Frontend · Audience: Customer · Visibility: Public (draft) · Verified: sj-crm-stripe 1.0.34 · 2026-09-23
Yes. SJ CRM Stripe Checkout sessions for signup and upgrade set allow_promotion_codes to true, so Stripe’s Checkout page can show an “Add promotion code” field when the network has valid Stripe coupons/promotion codes.
Enter the code on the Stripe-hosted Checkout page—not inside the CRM admin form. If the field is missing, the promotion may be inactive, restricted to certain products, or not created in the connected Stripe account. Codes and discounts are configured in Stripe; SJ CRM only enables the Checkout option.
Evidence: Checkout session arrays in sj-crm-stripe.php with allow_promotion_codes => true (signup and upgrade flows).
How do I pay for courses with Paystack?
0Classification: Areas: Payments · Audience: Student · Visibility: Public (draft) · Verified: sj-learn-paystack · 2026-09-24
Paystack is available as a LearnPress gateway (PaystackGateway) with email + redirect checkout.
Evidence: PaystackGateway.php.
What happens when a marketplace purchase is refunded?
0Classification: Areas: Marketplace · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-marketplace · 2026-09-24
Refunds revoke course access for the related transaction via SJLM_Refunds::revoke_access_for_transaction().
Evidence: class-sjlm-refunds.php.
What are course prerequisites and locked enrollment?
0Classification: Areas: Courses · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-prerequisites-courses · 2026-09-24
Prerequisite courses must be finished before enrollment unlocks, via get_prerequisite_courses().
Evidence: prerequisites courses add-on.
Can I sign up a child on the first free lesson form?
0Classification: Areas: Booking, Network · Audience: Parent · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-24
Yes. The first-lesson guest flow can create a parent login and call SJL_Managed_Learners::create_and_link_learner() when booking for someone else.
Evidence: class-sjbk-learn-first-lesson.php.
Why does signup say my company name is already taken?
0Classification: Areas: Frontend · Audience: Customer · Visibility: Public (draft) · Verified: sj-crm-signup 1.3.16 · 2026-09-23
During signup, SJ CRM checks the company display name—not only the subdomain. company_name_is_taken() normalizes the name (via normalize_company_name()) and compares it to existing sites’ stored sj_crm_company_name values.
If another workspace already uses the same normalized company name, signup blocks with a “taken” style error even when a different subdomain is free. Choose a distinct legal/trade name (or a clear qualifier), or use a subdomain that matches your unique brand if the company field is colliding.
This is separate from reserved-subdomain rejection documented elsewhere.
Evidence: company_name_is_taken / normalize_company_name in sj-crm-signup.php.
What are SJ Learn student (s-*) and teacher (t-*) spaces?
0Classification: Areas: Frontend, Network · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-network 1.13.67 · 2026-09-24
SJ Learn uses separate multisite blogs for roles:
- Student space — path style
/s-{login}/, linked via user metasjl_student_site_id. - Teacher space — path style
/t-{login}/, linked viasjl_teacher_site_id.
Dual-role users often have both site IDs. Student UI and teacher UI are intentionally separate so learners do not see teacher tools on the student blog (and vice versa).
Evidence: provisioner meta writes; space docs in network plugin; SJL_Space_Switcher dual-site comments.
How does SJ Speak pronunciation work when there is no teacher recording?
0Classification: Areas: Lessons, Frontend · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-speak 1.3.31 · 2026-09-24
When a word has no custom teacher audio file, SJ Speak can still pronounce it using fallback playback (browser/SayIt-style voices) depending on play-button mode.
Modes in public settings include variants such as tooltip_fallback and tooltip_fallback_click: the orange/SayIt control may hide beside the word while playback remains available inside the tooltip card. “No voice / no recording yet” in teacher workflows usually means fallback voice is expected—not a silent/hidden play button unless the teacher explicitly chose a hide mode.
Evidence: play button mode switch in class-sj-speak-public.php (tooltip_fallback cases).
What are managed learners and linked accounts?
0Classification: Areas: Frontend, Network · Audience: Parent, Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
A managing account can link one or more managed learners (for example a parent booking for a child). Linked learner rows come from SJL_Managed_Learners::get_linked_learners().
Managed learners keep separate student spaces while the parent chooses who a booking is for.
Evidence: class-sjl-managed-learners.php.
How do I unsubscribe from an SJ Learn email?
0Classification: Areas: Frontend, Messages · Audience: Student, Teacher, Parent · Visibility: Public (draft) · Verified: sj-email-studio · 2026-09-24
Campaign emails include a signed one-click unsubscribe link (sjes_action=unsubscribe). Recipients do not need to be logged in.
Evidence: SJES_Tracking.
What is the Google One Tap prompt on SJ Learn pages?
0Classification: Areas: Frontend, Security · Audience: Student, Teacher, Parent · Visibility: Public (draft) · Verified: sj-login · 2026-09-24
When Google One Tap is enabled (one_tap_enabled), logged-out visitors may see a floating Google account card without clicking Sign in first.
Evidence: SJ_Login One Tap setting.
How do I view my login history?
0Classification: Areas: Frontend, Security · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-user-data · 2026-09-24
Use [sj_login_history] and [sj_last_login] on profile or account pages.
Evidence: SJ_User_Data_Frontend.
Why does a loading bar appear when I change lessons?
0Classification: Areas: Frontend, Lessons · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-page-loader · 2026-09-24
SJ Page Loader shows a perceived-loading bar for full-page navigations and in-course lesson changes. It signals progress; it does not make pages faster.
Evidence: SJ_Page_LoaderPlugin.
Where do I manage tables from my teacher profile?
0Classification: Areas: Frontend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-tables · 2026-09-24
Teacher spaces expose Profile → Table Manager (tab=table-manager) for create/edit/archive.
Evidence: SJ_Tables_Profile_Tab.
What does the SJ Theme demo switcher do?
0Classification: Areas: Frontend · Audience: Visitor · Visibility: Public (draft) · Verified: sj-theme-demo · 2026-09-24
Visitors can preview industry templates without saving settings. Registration is blocked while demo mode is active.
Evidence: SJ_Theme_Demo::handle_demo_switch / render_demo_switcher.
What emails are sent when a booking is created or cancelled?
0Classification: Areas: Booking, Messages · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-booking · 2026-09-24
On create, customers get confirmation and admins get notification. Status changes (confirm/cancel) send update mail.
Evidence: SJBK_Emails.
When do lesson reminder emails go out?
0Classification: Areas: Booking, Messages · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-booking · 2026-09-24
Built-in reminders (commonly 24-hour and 1-hour) run on cron hook sjbk_process_reminders. Rules are filterable via sjbk_reminder_rules.
Evidence: SJBK_Reminders.
Why does my teacher booking email include a schedule link?
0Classification: Areas: Booking, Messages · Audience: Teacher · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-24
Teacher/admin booking mail gets a schedule-time footer and a link into the 1:1 Lessons tab.
Evidence: SJBK_Learn_Teacher_Emails::append_teacher_footer.
How do leftover unused minutes after a shorter booking become available?
0Classification: Areas: Booking · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking · 2026-09-24
After a shorter booking inside a longer window, remaining time can be offered again, minus the service buffer (buffer_min).
Evidence: SJBK_Availability::get_slots.
How do I see who opened a booking link but did not finish?
0Classification: Areas: Booking, Frontend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-24
Schedule attempt tracking shows funnel stages (link opened → hold → sign-in → submitted) with about 30 days of visible history.
Evidence: SJBK_Learn_Schedule_Attempts.
How do I see my lesson cancellation stats?
0Classification: Areas: Booking, Frontend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-24
The teacher request/schedule panel can show student vs teacher cancellations against completed and total bookings.
Evidence: SJBK_Learn_Cancellation_Stats.
Why can’t students open wp-admin on their site?
0Classification: Areas: Frontend, Security · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Student subsites stay frontend-only. Teacher wp-admin access is limited to course/lesson editing needs.
Evidence: SJL_Frontend_Access.
Why does signup ask me to complete a security check?
0Classification: Areas: Frontend, Security · Audience: Student, Parent · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Network-wide Google reCAPTCHA protects first-lesson and other public forms. The secret stays server-side.
Evidence: SJL_Recaptcha::verify.
Why does an unpublished course show a friendly page instead of a 404?
0Classification: Areas: Courses, Frontend · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Draft, pending, or rejected courses render an unavailable message instead of a hard 404.
Evidence: SJL_Course_Unavailable.
Why does the course editor look different from the lesson editor?
0Classification: Areas: Courses, Backend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Courses and quizzes keep the classic editor so curriculum/pricing metaboxes stay visible. Lessons use a locked-down block allowlist.
Evidence: SJL_Teacher_Course_Editor / SJL_Teacher_Lesson_Editor.
Where can I see every shortcode I can put on teacher pages?
0Classification: Areas: Frontend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Teachers who avoid wp-admin can open a frontend reference page powered by [sjl_teacher_shortcodes].
Evidence: SJL_Teacher_Shortcodes.
Why did a your-teacher-started-a-game banner follow me around the site?
0Classification: Areas: Frontend, Lessons · Audience: Student · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-24
If a student is not on the lobby page, a site-wide invite banner still shows a live teacher launch so the invite is not missed.
Evidence: SJMGInvite.
Why does each notes gadget have its own name and ID?
0Classification: Areas: Lessons, Frontend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-paragraph-notes · 2026-09-24
Each lesson gadget gets a UUID/label so notes stay attached when the block is moved or duplicated.
Evidence: Notes_Widget_Registry.
Why did this newsletter show as opened?
0Classification: Areas: Frontend, Messages · Audience: Student, Teacher, Parent · Visibility: Public (draft) · Verified: sj-email-studio · 2026-09-24
Email Studio records opens with a signed 1×1 pixel request (sjes_action=open). A unique open event is stored when the tracker loads.
Evidence: SJES_Tracking::handle_open().
What happens when I click a link in an Email Studio message?
0Classification: Areas: Frontend, Messages · Audience: Student, Teacher, Parent · Visibility: Public (draft) · Verified: sj-email-studio · 2026-09-24
Campaign links are rewritten to signed redirects (sjes_action=click). A unique click is recorded, then you are sent to the original HTTPS URL.
Evidence: SJES_Tracking::rewrite_links() / handle_click().
Why does Google Sign-In appear on WooCommerce My Account or checkout?
0Classification: Areas: Frontend, Security · Audience: Student, Teacher, Parent · Visibility: Public (draft) · Verified: sj-login · 2026-09-24
When WooCommerce integration is enabled, the Google button is injected on shop login, register, and checkout login forms.
Evidence: SJ_Login_Frontend WooCommerce form hooks.
Does signing in with Google link to my existing SJ Learn account?
0Classification: Areas: Frontend, Security · Audience: Student, Teacher, Parent · Visibility: Public (draft) · Verified: sj-login · 2026-09-24
If the Google email matches an existing WordPress user, you are logged into that account and google_id is stored once. A second account is not created.
Evidence: SJ_Login_Google::login_existing_user().
Why did Google create a WooCommerce Customer instead of a student?
0Classification: Areas: Frontend, Security · Audience: Student, Parent · Visibility: Public (draft) · Verified: sj-login · 2026-09-24
New Google registrations can receive the WooCommerce Customer role when WooCommerce is active, following store registration settings.
Evidence: SJ_Login::is_registration_allowed() role assignment.
What is erased when I request deletion of my activity data?
0Classification: Areas: Frontend, Security · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-user-data · 2026-09-24
Erase Personal Data removes this plugin’s activity rows for that email. It does not delete the WordPress user account by itself.
Evidence: SJ_User_Data_Frontend::register_data_eraser().
What is the difference between slot booking and range booking?
0Classification: Areas: Booking, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking · 2026-09-24
A service is either fixed slots ([sj_booking_slots]) or a start–end range ([sj_booking_range]). The widget and services API expose that mode.
Evidence: SJBK_Services::MODE_SLOTS / MODE_RANGE.
Why can’t visitors book one of my services online?
0Classification: Areas: Booking, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking · 2026-09-24
The front-end widget only lists services marked bookable online, and only while online booking is enabled in settings.
Evidence: SJBK_Services::is_publicly_bookable().
What is the visitor policy checkbox on the booking form?
0Classification: Areas: Booking, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking · 2026-09-24
Teachers can require visitors to accept a custom visitor-policy statement before a booking is submitted.
Evidence: SJBK_Admin visitor_policy_text.
Why did my reservation expire before I finished booking?
0Classification: Areas: Booking, Frontend · Audience: Student, Parent · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-24
Choosing a time creates a short-lived hold. If it expires (sjbk_hold_expired / missing hold), you must pick a time again.
Evidence: SJBK_Learn_Managed_Booking hold errors.
Why can’t I change the learner after I reserved a time?
0Classification: Areas: Booking, Frontend · Audience: Parent, Student · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-24
A hold is bound to one managed learner. Switching Booking for after the hold requires a new time selection (sjbk_hold_bound).
Evidence: SJBK_Learn_Managed_Booking::bind_hold().
What title appears on my Google or Outlook lesson event?
0Classification: Areas: Booking, Integrations · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking-calendar · 2026-09-24
Calendar events are titled like “{course or service} — {student}”, with a longer description that can include welcome text, phone, notes, and booking ID.
Evidence: SJBK_Calendar_Event_Details::get_title().
Is Outlook calendar connect different from Google?
0Classification: Areas: Booking, Integrations · Audience: Teacher · Visibility: Public (draft) · Verified: sj-booking-calendar · 2026-09-24
Outlook uses Microsoft Graph OAuth (tenant common, Calendars.ReadWrite). Google uses its own OAuth client. Both push the same event title/body helpers.
Evidence: SJBK_Calendar_Outlook / SJBK_Calendar_Google.
When should I use /s-myname/ versus /t-myname/?
0Classification: Areas: Frontend, Network · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
/s-{login}/ is the Learning Space; /t-{login}/ is the Teaching Space. They are different blogs, not two views of one site.
Evidence: SJL_Frontend_Access::is_student_subsite() / is_teacher_subsite().
Why was I sent away from Learning on my teacher site?
0Classification: Areas: Frontend, Network · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Dual-role users with two blogs cannot open My Courses on /t-*. Learning tabs redirect to the student blog.
Evidence: SJL_Profile_Tabs::maybe_redirect_cross_blog_profile().
What do pending, approved, and rejected mean on Become a Teacher?
0Classification: Areas: Frontend, Network · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
The application form shows pending review, approved (Teaching unlocked), or rejected (you may apply again). Only one application per day is accepted.
Evidence: [sjl_teacher_application] / sjl_teacher_status.
Why was my approved course sent back for review?
0Classification: Areas: Courses, Network · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
A large content change after approval can reset the course to changes-requested so it is not left live without a new review.
Evidence: SJL_Course_Approval after-edit hash check.
Why can’t I sign in with an old family login?
0Classification: Areas: Frontend, Security · Audience: Parent, Student · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Legacy duplicate logins are blocked (sjl_legacy_duplicate) and tell you to use the current family account email instead.
Evidence: SJL_Account_Phone.
What can a parent see about a child account versus a teacher?
0Classification: Areas: Frontend, Security · Audience: Parent, Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Booking-for access never grants instructor-private or learner-self tools. Teachers on /t-* use teacher access; the child on their own space uses learner-self access.
Evidence: SJL_Managed_Learner_Access stacks A/B/C.
Can guests still open a teacher’s public course or book pages?
0Classification: Areas: Frontend, Network · Audience: Visitor, Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Logged-out visitors can still reach teacher storefront and booking URLs. Private student blogs stay gated except login/register.
Evidence: SJL_Frontend_Access public storefront paths.
Why can I browse a course but not enroll or buy it?
0Classification: Areas: Courses, Frontend · Audience: Student · Visibility: Public (draft) · Verified: sj-learn-prerequisites-courses · 2026-09-24
Prerequisites can block enroll and purchase separately from viewing the course page, and they add a dedicated enroll-button error code.
Evidence: LP_Prere_Course_Hooks enroll/purchase filters.
How is Match different from Memory flip?
0Classification: Areas: Frontend, Lessons · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-24
Match is a two-column tap-pair game with streak/accuracy scoring. Memory uses flip / resolve-miss on the same room API.
Evidence: SJMGMatch_Engine; REST match-select.
Where do match scores and live watch come from?
0Classification: Areas: Frontend, Lessons · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-24
Scores (correct, wrong, streak, stars) live on the room state. Teachers with watch permission can list live sessions and see running scores.
Evidence: Match_Engine score object; REST /live / /live-sessions.
When should I use [sayit], [sayit_player], or [sayit_mp3_player]?
0Classification: Areas: Lessons, Frontend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-speak · 2026-09-24
Three SayIt shortcodes remain for inline word, player, and MP3 player. SJ Speak can dequeue the old SayIt script so playback stays on Speak audio.
Evidence: SJ_Speak_Public shortcodes / enable_sayit_shortcodes.
Why do some lesson words play only after the page loads?
0Classification: Areas: Lessons, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-speak · 2026-09-24
Shortcodes missing data-mp3-file ask the server in bulk (sj_speak_resolve_audio_bulk) to resolve each word’s audio URL before play buttons work.
Evidence: Speak bulk audio resolve AJAX.
Why do instructor course or student counts look wrong on the directory?
0Classification: Areas: Frontend, Marketplace · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-marketplace · 2026-09-24
LearnPress counts only main-site courses. Marketplace replaces those numbers with network index totals from sjlm_courses.
Evidence: SJLM_Instructor_Stats.
What happens after I return from Paystack?
0Classification: Areas: Courses, Billing · Audience: Student · Visibility: Public (draft) · Verified: sj-learn-paystack · 2026-09-24
The return URL carries a reference. The plugin verifies it against Paystack’s API before marking the LearnPress order paid.
Evidence: PaystackGateway::verify_payment().
How does the wishlist heart work without reloading the page?
0Classification: Areas: Courses, Frontend · Audience: Student · Visibility: Public (draft) · Verified: sj-learn-wishlist · 2026-09-24
The button reads and toggles saved courses through wishlist REST routes (learnpress/v1/wishlist / toggle) instead of a full page post.
Evidence: LP_Jwt_Wishlist_V1_Controller.
What does service capacity control?
0Classification: Areas: Booking, Settings · Audience: Teacher · Visibility: Public (draft) · Verified: sj-booking · 2026-09-24
Capacity is how many concurrent bookings can share one slot (default 1).
Evidence: SJBK_Services capacity field.
What do appointment statuses mean?
0Classification: Areas: Booking, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking · 2026-09-24
A booking moves through pending → confirmed → completed, or cancelled / no-show.
Evidence: SJBK_Appointments::STATUSES.
Why is a new booking pending instead of confirmed?
0Classification: Areas: Booking, Settings · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking · 2026-09-24
The site default status (default_status) decides whether new web bookings start pending or confirmed.
Evidence: SJBK_Settings default_status.
Can I withdraw a lesson request I sent?
0Classification: Areas: Booking, Frontend · Audience: Student, Parent · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-24
Students can withdraw a still-pending request. Confirmed lessons cancel instead of withdraw.
Evidence: SJBK_Learn_Student::ajax_cancel_lesson().
Why did an outside calendar event block a slot?
0Classification: Areas: Booking, Integrations · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking-calendar · 2026-09-24
Busy times from connected calendars become blocked windows, with a pad (commonly 30 minutes) kept free on each side.
Evidence: SJBK_Calendar_Sync::merge_calendar_blocks.
What happens after too many failed logins?
0Classification: Areas: Frontend, Security · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-user-data · 2026-09-24
Repeated failures can lock the account (max_login_attempts / lockout_duration) and optionally email a new-device alert.
Evidence: User Data lockout settings.
Why did Google sign-in say the security check failed?
0Classification: Areas: Frontend, Security · Audience: Student, Teacher, Parent · Visibility: Public (draft) · Verified: sj-login · 2026-09-24
Cached pages can hold a stale nonce. The Google button refreshes it (sj_login_refresh_nonce) before verifying the token.
Evidence: SJ_Login_Google::refresh_nonce().
What does Student online in Gadgets mean?
0Classification: Areas: Frontend, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
The selected student is Online, Away, or offline from lesson-dock presence pings (cleared on logout).
Evidence: SJL_Student_Presence gadget / ping AJAX.
When can the host start a Memory game?
0Classification: Areas: Frontend, Lessons · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-24
Only the host token can start after the guest has joined.
Evidence: REST POST /sj-memory-games/v1/rooms/{code}/start.
Who can edit a game deck?
0Classification: Areas: Frontend, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-24
Decks are owned by the creating teacher; listing and edits follow that owner_id.
Evidence: SJMGDatabase decks / REST /decks.
How are Sea Battle packs different from Memory decks?
0Classification: Areas: Frontend, Lessons · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-24
Sea Battle uses question packs (built-in or Game Deck words→pictures), not Memory pair boards.
Evidence: SJMGSea_Packs.
How is a lesson-block rating scored and sorted?
0Classification: Areas: Lessons, Frontend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-paragraph-notes · 2026-09-24
Fluency, Grammar, Vocabulary, and Pronunciation (1–5) average into an overall score that can sort weakest- or strongest-first.
Evidence: Lesson_Ratings / sjl_rating_save.
Why does a course show Free or a struck-through price?
0Classification: Areas: Frontend, Marketplace · Audience: Student · Visibility: Public (draft) · Verified: sj-learn-marketplace · 2026-09-24
Sale price undercuts list price. Zero-price courses show Free.
Evidence: Catalog card sale_price vs price.
What happens when a student or teacher space is created?
0Classification: Areas: Network, Frontend · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
New spaces get starter pages and SJ Theme, and are kept private/not indexed for search engines.
Evidence: SJL_Provisioner::create_student_site() / create_site().
Why does my space use the main SJ Learn logo?
0Classification: Areas: Network, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-24
Student/teacher sites inherit logo and title theme mods from the main site.
Evidence: SJL_Subsite_Theme::apply_branding_from_main_site().
What quiz question types can I add?
0Classification: Areas: Courses, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-core · 2026-09-24
Built-in types include True/False, single choice, multi choice, and fill in blanks.
Evidence: QuestionPostModel::get_types().
What does the eye icon on a curriculum item do?
0Classification: Areas: Courses, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-learn-core · 2026-09-24
Preview lets guests open that lesson without enrolling (_lp_preview).
Evidence: curriculum preview button / has_preview().
How do quiz passing grade and time limit work?
0Classification: Areas: Courses, Lessons · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-learn-core · 2026-09-24
A quiz can require a passing percent and a duration, or run with unlimited time.
Evidence: LP_Quiz passing_grade / duration.
Why does the page loader appear when I change lessons?
0Classification: Areas: Frontend, Lessons · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-page-loader · 2026-09-24
In-course AJAX lesson changes can show the same loader as a full page load when LearnPress AJAX loading is enabled.
Evidence: lp_ajax_enabled / LearnPress content-loading events.
What can I style on a service card?
0Classification: Areas: Frontend, Backend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-service-cards · 2026-09-24
Each Service Card block has icon, price, and feature lines in the block editor, not only title text.
Evidence: block sj-service-cards/service-card attributes.
How close to a lesson can I cancel or reschedule?
0Classification: Areas: Booking, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking · 2026-09-25
Cancel and reschedule are allowed only while still inside the customer edit notice window (hours before the start time).
Evidence: SJBK_Account::within_edit_window / customer_edit_notice_hours.
How do I refresh a stale booking REST nonce?
0Classification: Areas: Booking, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking · 2026-09-25
If a cached page holds an expired nonce, the booking UI fetches a new one before the next write.
Evidence: REST GET /sjbk/v1/nonce.
Why was a first-lesson booking blocked by rate limits or reCAPTCHA?
0Classification: Areas: Booking, Frontend · Audience: Student, Parent · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-25
Public first-lesson forms are rate-limited and scored with reCAPTCHA so bots cannot flood teachers.
Evidence: RECAPTCHA_ACTION sj_first_lesson.
Are guest schedule pages indexed by search engines?
0Classification: Areas: Booking, Frontend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-25
Guest schedule URLs send noindex so private booking tokens do not appear in search results.
Evidence: [sjbk_guest_schedule] noindex headers.
Why do course booking pages use pretty slugs?
0Classification: Areas: Booking, Courses · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-25
Course booking URLs are rewritten to readable slugs instead of raw query IDs.
Evidence: SJBK_Learn_Course_Booking_Slug.
How does a booking match an existing appointment identity?
0Classification: Areas: Booking, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-25
Learn matching uses email, user ID, and learner links so the same person is not stored as two customers.
Evidence: SJBK_Learn_Appointment_Identity.
How is the instructor resolved when a lesson is booked?
0Classification: Areas: Booking, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-25
The booking looks up the teacher from the schedule, course, or assigned instructor map—not from the page author alone.
Evidence: SJBK_Learn_Instructors.
Why does a confirmed lesson stay confirmed until complete or no-show?
0Classification: Areas: Booking, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-booking-learn · 2026-09-25
Past confirmed lessons are not auto-closed. A teacher (or complete/no-show action) must move them out of confirmed.
Evidence: Appointment status stays confirmed until complete or no_show.
Does rematch reuse the same room?
0Classification: Areas: Frontend, Lessons · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-25
Rematch creates a new room code. Players must join the new room; the old code is finished.
Evidence: Rematch creates a new room (not reuse).
How does the lobby know a launch was joined?
0Classification: Areas: Frontend, Lessons · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-25
The lobby polls launch joined status until the student claim succeeds or the launch expires.
Evidence: Poll launch joined status.
Where does the Sea Battle pack dropdown get its list?
0Classification: Areas: Frontend, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-25
The dropdown lists playable packs only (built-in plus decks that qualify as Sea packs).
Evidence: list_playable.
Why are Sea packs missing from the Add Deck editor?
0Classification: Areas: Frontend, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-25
The Add Deck editor is for Memory pair decks. Sea packs are a separate playable list and are not shown there.
Evidence: Sea packs are excluded from the Add Deck editor.
How is a live board state pushed to watchers?
0Classification: Areas: Frontend, Lessons · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-25
During play the host posts the current board so Watch live can follow flips and Sea shots.
Evidence: REST POST /sj-memory-games/v1/rooms/{code}/live.
Who can watch live or hard-reset a room?
0Classification: Areas: Frontend, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-mini-games · 2026-09-25
Watch live and hard-reset are limited to users who pass the live-watch capability (typically the teacher on that site).
Evidence: can_watch_live.
What does bulk resolve Speak audio do?
0Classification: Areas: Frontend, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-speak · 2026-09-25
Bulk resolve walks terms that are missing or conflicting audio and applies the chosen recorded or fallback source.
Evidence: Speak bulk resolve audio.
What lesson gadget types can I add?
0Classification: Areas: Frontend, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-25
Gadgets are toggle, action, or panel. Toggle stays on/off, action fires once, panel opens extra UI in the dock.
Evidence: Lesson gadget types toggle / action / panel.
How are notes widgets registered?
0Classification: Areas: Frontend, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-paragraph-notes · 2026-09-25
Each notes widget has a UUID in the registry so the same dock item can be renamed or moved without losing saved notes.
Evidence: Notes widgets UUID registry.
Is there a REST API for teacher lesson notes?
0Classification: Areas: Frontend, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-paragraph-notes · 2026-09-25
Teachers save and load lesson notes through a dedicated REST route scoped to that lesson and student.
Evidence: Teacher lesson notes REST.
What happens when I return from Stripe Connect?
0Classification: Areas: Marketplace, Billing · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-marketplace · 2026-09-25
The return URL refreshes Connect account status so payouts show ready or still-needed actions.
Evidence: Stripe Connect return/status refresh.
Does publishing a course update the marketplace catalog?
0Classification: Areas: Frontend, Marketplace · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-marketplace · 2026-09-25
Publishing or updating a public course writes that row into the marketplace catalog index.
Evidence: Publishing a course updates the catalog index.
How does marketplace catalog search pagination work?
0Classification: Areas: Frontend, Marketplace · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-marketplace · 2026-09-25
Search and next-page load more catalog cards over AJAX without a full page reload.
Evidence: Catalog search pagination AJAX.
Why did a course price look wrong after I saved it?
0Classification: Areas: Courses, Marketplace · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-marketplace · 2026-09-25
After an AJAX price save, a repair pass rewrites catalog/list price so sale and Free states stay consistent.
Evidence: Price repair after AJAX price save.
Does the Woo cart show the certificate title and image?
0Classification: Areas: Courses, Billing · Audience: Student · Visibility: Public (draft) · Verified: sj-learn-certificates · 2026-09-25
Yes. Paid certificate line items use the certificate title and image, not a generic product placeholder.
Evidence: Certificate title/image in Woo cart.
Which template does the marketplace page use?
0Classification: Areas: Frontend, Marketplace · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-marketplace · 2026-09-25
The marketplace page renders the catalog template (cards, search, pagination), not a generic page builder layout.
Evidence: Marketplace page uses the catalog template.
Why can’t a second parent register with the same phone?
0Classification: Areas: Network, Frontend · Audience: Parent, Student · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-25
A phone already stored on another account blocks a second parent signup so household contact stays unique.
Evidence: Duplicate phone blocks a second parent.
Why can’t a legacy_duplicate account log in?
0Classification: Areas: Network, Security · Audience: Student, Parent · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-25
Accounts marked legacy_duplicate are blocked from login so the surviving household account is used.
Evidence: legacy_duplicate cannot log in.
Does SJ Learn remember Learning vs Teaching space?
0Classification: Areas: Network, Frontend · Audience: Student, Teacher · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-25
After you switch, the last Learning or Teaching space is remembered for the next visit.
Evidence: Remember last Learning vs Teaching space.
Why did Gutenberg return 403 for a teacher?
0Classification: Areas: Courses, Backend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-core · 2026-09-25
Teachers can hit a REST capability gap in the block editor. A caps shim grants the editor routes they need.
Evidence: Teacher Gutenberg 403 REST caps shim.
When do Assignment and H5P items appear in the curriculum?
0Classification: Areas: Courses, Lessons · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-core · 2026-09-25
Assignment and H5P curriculum items are offered only when those add-ons are active.
Evidence: Assignment/H5P curriculum items if add-ons are active.
Is the public wishlist REST readable?
0Classification: Areas: Frontend, Courses · Audience: Student · Visibility: Public (draft) · Verified: sj-learn-wishlist · 2026-09-25
Wishlist list endpoints can be read for public wishlists; writes still require the owning user.
Evidence: Public wishlist REST is readable.
Why are collection cards cropped?
0Classification: Areas: Frontend, Courses · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-learn-collections · 2026-09-25
Collection cards use a hard crop of 600×400 so the grid stays even regardless of the original image.
Evidence: Collection card hard-cropped 600×400.
Why was a message flagged for phone or email?
0Classification: Areas: Frontend, Messages · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-25
Messages that include a phone number or email can be flagged so contact details stay on-platform until staff review.
Evidence: Messages with phone/email flagged.
What does the course content scanner check before submit?
0Classification: Areas: Courses, Backend · Audience: Teacher · Visibility: Public (draft) · Verified: sj-learn-core · 2026-09-25
Before publish/submit, the scanner looks for blocked contact details or policy issues in course content.
Evidence: Course content scanner before submit.
Why do account menu items differ by role or space?
0Classification: Areas: Network, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-25
Account menus are built per role and Learning vs Teaching space, so students do not see teacher-only items.
Evidence: Account menu items per role/space.
What is Site Setup after a space is provisioned?
0Classification: Areas: Network, Frontend · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-learn-network · 2026-09-25
After a student or teacher space is created, Site Setup finishes starter pages, menus, and theme defaults.
Evidence: Site Setup after space provision.
Why do lesson REST responses omit notes shortcodes?
0Classification: Areas: Frontend, Lessons · Audience: Teacher, Student · Visibility: Public (draft) · Verified: sj-learn-core · 2026-09-25
Lesson REST content strips notes dock shortcodes so AJAX lesson loads do not render teacher-only widgets in the main HTML.
Evidence: Lesson REST strips notes shortcodes.
What’s the Items module for?
0Tracks physical things: equipment, inventory, tools, hardware.
What’s the Rentals module for?
0Tracks rental properties and bookings linked to contacts over date ranges.
What’s the difference between contacts and businesses?
0Contacts are people. Businesses are companies or organizations. They can have many contacts attached.
What’s the difference between tags and categories?
0Categories are structured — a contact belongs to one category at a time. Tags are loose and searchable.
What is SJ CRM and who is it for?
1SJ CRM is a contact and business management tool built for small businesses, freelancers, and solo operators who need to keep track of people, jobs, and money without paying enterprise prices or sitting through training videos.
Can I import my existing contacts from another system?
0Yes. Go to SJ CRM → Export/Import and upload a CSV file. The importer will let you map your CSV columns to SJ CRM fields.
How much does SJ CRM cost?
0Pricing is shown on the Pricing page. Plans are charged monthly or annually, with annual being cheaper per month.
Early Access subscribers keep their original price for life — if pricing ever changes, your rate doesn’t change with it.
How do I cancel my subscription?
0Open your account menu and click Subscription. From there, click Manage Billing to open the secure customer portal where you can cancel any time.
If you cancel, your account stays active until the end of the period you’ve already paid for. You can export all your data before it ends — nothing is held hostage.
Is there a free trial?
0Instead of a free trial, SJ CRM has a 30-day money-back guarantee. Sign up, use it for real, and if it’s not right for you within the first 30 days, email support@sjnotebook.com for a full refund. No paperwork, no questions designed to talk you out of it.
This way you get to use the actual product on real data — not a stripped-down trial version.
Can I cancel my subscription anytime?
0Yes. Open Subscription from your sidebar and click Manage Billing to open the secure customer portal. Cancel any time with one click.
If you cancel, your account stays active until the end of the period you’ve already paid for. You can export all your data before then — nothing is held hostage.
What payment methods do you accept?
0All major credit and debit cards (Visa, MasterCard, American Express, Discover). Payment processing is handled by Stripe — your full card number never touches our servers.
How do I update my credit card?
0Open Subscription from your sidebar, click Manage Billing, and update your payment method in the Stripe customer portal.
If your card is about to expire, Stripe usually sends you a reminder email a few days ahead.
Why was my payment declined?
0The most common reasons:
- The card has expired or was reissued with a new number.
- The billing address on file doesn’t match what your bank has.
- Your bank flagged the charge as suspicious (often happens for first-time international charges).
- The card hit its limit.
The fastest fix is to call your bank, then update the card under Subscription → Manage Billing. If you’re stuck, email support@sjnotebook.com.
What’s the difference between contacts and businesses?
0Contacts are people. Names, emails, phone numbers, addresses.
Businesses are companies or organizations. They can have many contacts attached.
For example, Jane Smith is a contact. Smith Plumbing LLC is the business. Jane is linked to Smith Plumbing as the owner. If Smith Plumbing also has an office manager, that person is a separate contact also linked to the same business.
Can a contact be linked to more than one business?
0Yes. Link a contact to as many businesses as makes sense.
What’s the difference between tags and categories?
0Categories are structured — a contact belongs to one category at a time (Customer, Lead, Vendor, etc.).
Tags are loose. Stick as many tags on a contact as you want (vip, referral, holiday-card, prefers-text, etc.). Tags are flexible and searchable.
Use categories for the big picture. Use tags for the messy details that don’t fit a clean hierarchy.
How do I search across everything in my CRM?
0Click Advanced Search in the sidebar. It searches across contacts, businesses, projects, items, and notes.
What format should my CSV file be in?
0A standard comma-separated CSV with a header row. UTF-8 recommended.
Can I export all my data?
0Yes, anytime. Go to Export/Import and choose what to export (CSV or JSON).
Where is my data stored?
0On US-based servers (Namecheap, Inc.) with HTTPS encryption in transit, password hashing at rest, and daily backups.
Each customer has their own isolated data — one customer can never see another customer’s contacts, businesses, or anything else.
Will my data be sold or used to train AI?
0No. Your data is never sold, mined, or used to train AI models.
How often is my data backed up?
0Daily automated backups with 30 days of history.
What happens to my data if I cancel?
0Account stays active until paid period ends. Data retained 30 days after cancellation, then deleted.
Can I have multiple users on one account?
0Multi-user support depends on your plan. Solo plans are for one user. Team plans add additional seats. See the Pricing page for current limits.
How do I change my password?
0Click your name in the top-right corner of any screen, then Edit Profile. Scroll to New Password, click Generate Password (or type your own), and click Update Profile.
Use a unique password — not one you reuse on other sites.
How do I update my email address?
0Click your name → Edit Profile → update Email → confirm via email link.
What if I forgot my password?
0On the login page, click Lost your password? and enter your email or username. You’ll get a reset link by email within a few minutes.
If the email doesn’t arrive: check spam, then check that you’re using the email address associated with your CRM account (not a different one).
Does SJ CRM work on mobile?
0Yes in modern mobile browsers. Native apps in development.
Is there a desktop app?
0A native desktop app for Windows, Mac, and Linux is in active development — same idea as the mobile apps: distraction-free, offline-capable, syncs when you’re back online.
For now, the web app works on every desktop browser.
What browsers are supported?
0Modern browsers updated within the last 2 years. Internet Explorer is not supported.
How do I report a bug?
0Email support@sjnotebook.com with steps, expected vs actual, URL, browser/OS, screenshot.
How do I request a feature?
0Email support@sjnotebook.com describing what you want to accomplish.
How fast is support?
0Usually within one business day; urgent issues often same-day.
What’s the Items module for?
0Items tracks physical things: equipment, inventory, tools, hardware. Each item can have a name, serial number, location, condition, purchase date, and notes.
Useful for: tracking equipment loaned to clients, managing tool inventory across job sites, keeping a master list of company assets.
What are Health Profiles for?
0Health Profiles store medical and care information for contacts: medical history, current medications, allergies, emergency contacts, doctor info.
Useful for: caregivers managing aging parents, in-home care providers, schools tracking student health forms, anyone who needs medical context attached to a person.
Privacy note: Health information is sensitive. SJ CRM is not a HIPAA-covered platform. Don’t store regulated PHI for clinical use.
What’s the Rentals module for?
0Rentals tracks rental properties and bookings. Each property has a name, address, amenities, and notes. Bookings link a contact to a property over a date range.
Useful for: short-term rental hosts, equipment rental businesses, vacation home managers, anything where you’re scheduling someone into a thing for a period of time.