From fa3df31dad66215deef0021ef6c9088436cf8aea Mon Sep 17 00:00:00 2001 From: drusepth Date: Sat, 22 Oct 2022 19:51:37 -0700 Subject: [PATCH 1/8] tonight's maintenance update --- public/503.html | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/public/503.html b/public/503.html index ac5afd2d..3f5d6215 100644 --- a/public/503.html +++ b/public/503.html @@ -2,7 +2,7 @@ - Notebook | Server Error + Maintenance Mode @@ -58,7 +58,7 @@ } .error { - font-size: 9rem; + font-size: 6rem; font-weight: bold; padding: 0 4rem; border-right: 1px solid #707980; @@ -82,6 +82,13 @@ margin-bottom: 1rem; } + .maintenance-description { + color: #707980; + font-weight: 100; + font-size: 1.2rem; + margin-bottom: 1rem; + } + a { display: inline-block; padding: 0.7rem 2rem; @@ -131,14 +138,24 @@
-
503
+
+ Maintenance +
We'll be right back
- We're working on servers under scheduled maintenance and will be back shortly.
- Thank you for your patience! + We're updating the servers to prepare for National Novel Writing Month
+ and will be back shortly. Thank you for your patience! +
+
+ Expected maintenance window: 11:30pm PST — 1:15am PST +
+
From 95e4b579a3e7f3621e94199ee5fc40665c1b0e37 Mon Sep 17 00:00:00 2001 From: drusepth Date: Sat, 22 Oct 2022 21:26:21 -0700 Subject: [PATCH 2/8] new window --- public/503.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/503.html b/public/503.html index 3f5d6215..26c49cf6 100644 --- a/public/503.html +++ b/public/503.html @@ -150,7 +150,7 @@ and will be back shortly. Thank you for your patience!
- Expected maintenance window: 11:30pm PST — 1:15am PST + Expected maintenance window: 9:20pm PST — 10:00pm PST
From 5f00c41af630bf8d7f414008455ff6b9a5598516 Mon Sep 17 00:00:00 2001 From: drusepth Date: Mon, 24 Oct 2022 14:45:15 -0700 Subject: [PATCH 3/8] regress sidekiq 0.0.1 to resolve redis dependency in gemfile --- Gemfile.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7a31f7c2..765dac1d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1295,7 +1295,7 @@ GEM execjs coffee-script-source (1.12.2) concurrent-ruby (1.1.10) - connection_pool (2.2.5) + connection_pool (2.3.0) crass (1.0.6) csv (3.2.5) d3-rails (5.9.2) @@ -1555,9 +1555,9 @@ GEM railties (>= 3.2) tilt redcarpet (3.5.1) - redis (5.0.2) - redis-client (~> 0.7) - redis-client (0.7.3) + redis (5.0.5) + redis-client (>= 0.9.0) + redis-client (0.10.0) connection_pool remotipart (1.4.4) responders (3.0.1) @@ -1593,10 +1593,10 @@ GEM rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) semantic_range (3.0.0) - sidekiq (6.5.6) - connection_pool (>= 2.2.5) + sidekiq (6.5.5) + connection_pool (>= 2.2.2) rack (~> 2.0) - redis (>= 4.5.0, < 5) + redis (>= 4.5.0) simplecov (0.13.0) docile (~> 1.1.0) json (>= 1.8, < 3) From ee0d3329f6ac7e4bdac0158fe62da7181b2d9d8d Mon Sep 17 00:00:00 2001 From: drusepth Date: Mon, 24 Oct 2022 14:45:26 -0700 Subject: [PATCH 4/8] switch our font-awesome provider --- Gemfile | 3 ++- Gemfile.lock | 6 +++--- app/javascript/components/Footer.js | 4 ++++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index abcd2aea..fffb6f89 100644 --- a/Gemfile +++ b/Gemfile @@ -31,7 +31,8 @@ gem 'paypal-checkout-sdk' # Design gem 'material_icons' -gem 'font-awesome-rails' +# gem 'font-awesome-rails' +gem "font-awesome-sass", "~> 6.2.0" gem 'sass-rails' # Quality of Life diff --git a/Gemfile.lock b/Gemfile.lock index 765dac1d..0e2134a8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1347,8 +1347,8 @@ GEM rake filesize (0.2.0) flamegraph (0.9.5) - font-awesome-rails (4.7.0.8) - railties (>= 3.2, < 8.0) + font-awesome-sass (6.2.0) + sassc (~> 2.0) friendly_id (5.4.2) activerecord (>= 4.0.0) globalid (1.0.0) @@ -1690,7 +1690,7 @@ DEPENDENCIES engtagger filesize flamegraph - font-awesome-rails + font-awesome-sass (~> 6.2.0) htmlentities ibm_watson image_processing diff --git a/app/javascript/components/Footer.js b/app/javascript/components/Footer.js index 012fad14..d3931fc8 100644 --- a/app/javascript/components/Footer.js +++ b/app/javascript/components/Footer.js @@ -19,6 +19,10 @@ class Footer extends React.Component { GitHub +  ·  + + Discord +
From 5c3c76a002c2e157983f33a27a7899578e507289 Mon Sep 17 00:00:00 2001 From: drusepth Date: Mon, 24 Oct 2022 16:56:22 -0700 Subject: [PATCH 5/8] add billing faq --- app/controllers/subscriptions_controller.rb | 25 +- app/helpers/marketing_helper.rb | 7 + app/views/subscriptions/faq.html.erb | 285 ++++++++++++++++++++ app/views/subscriptions/new.html.erb | 2 + config/routes.rb | 5 +- 5 files changed, 314 insertions(+), 10 deletions(-) create mode 100644 app/helpers/marketing_helper.rb create mode 100644 app/views/subscriptions/faq.html.erb diff --git a/app/controllers/subscriptions_controller.rb b/app/controllers/subscriptions_controller.rb index 5887c081..2edb0063 100644 --- a/app/controllers/subscriptions_controller.rb +++ b/app/controllers/subscriptions_controller.rb @@ -1,7 +1,7 @@ class SubscriptionsController < ApplicationController protect_from_forgery except: :stripe_webhook - before_action :authenticate_user!, except: [:redeem] + before_action :authenticate_user!, except: [:redeem, :faq] before_action :set_navbar_actions, except: [:redeem, :prepay_paid] before_action :set_sidenav_expansion, except: [:redeem, :prepay_paid] @@ -231,6 +231,9 @@ class SubscriptionsController < ApplicationController redirect_back(fallback_location: subscription_path, notice: "Promo code successfully activated!") end + def faq + end + private def move_user_to_plan_requested(plan_id) @@ -264,12 +267,18 @@ class SubscriptionsController < ApplicationController end def set_navbar_actions - @navbar_actions = [{ - label: "Your plan", - href: main_app.subscription_path - }, { - label: "Billing history", - href: main_app.billing_history_path - }] + if user_signed_in? + @navbar_actions = [{ + label: "Your plan", + href: main_app.subscription_path + }, { + label: "Billing history", + href: main_app.billing_history_path + }, + { + label: 'Billing FAQ', + href: main_app.billing_faq_path + }] + end end end diff --git a/app/helpers/marketing_helper.rb b/app/helpers/marketing_helper.rb new file mode 100644 index 00000000..ad4a3551 --- /dev/null +++ b/app/helpers/marketing_helper.rb @@ -0,0 +1,7 @@ +module MarketingHelper + def linked_page_type(text:, page_type:) + content_tag(:a, href: send("#{page_type.name.downcase}_worldbuilding_info_path"), class: page_type.text_color) do + content_tag(:strong, text) + end + end +end diff --git a/app/views/subscriptions/faq.html.erb b/app/views/subscriptions/faq.html.erb new file mode 100644 index 00000000..753ab360 --- /dev/null +++ b/app/views/subscriptions/faq.html.erb @@ -0,0 +1,285 @@ +

Frequently-asked questions about billing on Notebook.ai

+ +
    +
  • +
    + help + What is Notebook.ai Premium? +
    +
    +

    + The free Notebook.ai experience was intentionally designed to be powerful enough for most amateur worldbuilders. + All users receive full access to the core trifecta of worldbuilding pages: + <%= linked_page_type(text: 'Characters', page_type: Character) %>, + <%= linked_page_type(text: 'Locations', page_type: Location) %>, and + <%= linked_page_type(text: 'Items', page_type: Item) %>. +

    +

    + Notebook.ai Premium is an optional upgrade for adventurous worldbuilders looking to take their fictional worlds + to the next level. A Premium subscription unlocks <%= Rails.application.config.content_types[:premium].count %> + additional page types for you to create: +

    +

    + <% Rails.application.config.content_types[:premium].each_with_index do |page_type, idx| %> + <%= linked_page_type(text: page_type.name.pluralize, page_type: page_type) %>, + <% end %> + and unlimited <%= linked_page_type(text: 'Universes', page_type: Universe) %> to + organize your worlds into. +

    +

    + Notebook.ai Premium also unlocks several other advanced features across the site, such as + Timelines, our AI-powered document analysis, Collections that organize your worlds in new ways, + and increased upload storage space for all of your images and reference material. +

    +
    +
  • +
  • +
    + help + What price tiers are available? +
    +
    +

    + There are two account tiers on Notebook.ai: Starter and Premium. +

    +

    + The free tier is called Starter. You can create unlimited + <%= linked_page_type(text: 'Characters', page_type: Character) %>, + <%= linked_page_type(text: 'Locations', page_type: Location) %>, and + <%= linked_page_type(text: 'Items', page_type: Item) %>, as well as create up + to 5 + <%= linked_page_type(text: 'Universes', page_type: Universe) %> to organize your + worlds into. +

    +

    + The paid tier is called Premium. Premium starts at $9 per month, but you can + secure it at a cheaper price by choosing longer subscription periods. Right now, + the following options are available: +

    +
      +
    • $9 per month, paid every month
    • +
    • $8 per month, paid every three months ($24 at a time)
    • +
    • $7 per month, paid once per year ($84 at a time)
    • +
    +
    +
  • +
  • +
    + help + When do subscriptions renew? +
    +
    +

    + Subscriptions automatically renew based on the date you started them. You can + see what day your subscription will renew by viewing your + <%= link_to 'Billing Page', subscription_path %> with a subscription active. +

    +
    +
  • +
  • +
    + help + What is your cancellation policy? +
    +
    +

    + You're free to cancel any subscription at any time, without any penalties or + additional fees. To do so, simply visit your + <%= link_to 'Billing Page', subscription_path %> and click "Downgrade" + to switch back to the free Starter tier. Your subscription will cancel + immediately and any unused time will be credited back to your account. +

    +
    +
  • +
  • +
    + help + How do I cancel my subscription? +
    +
    +

    + You can cancel a subscription at any time by visiting your + <%= link_to 'Billing Page', subscription_path %> and clicking "Downgrade" + to switch back to the free Starter tier. Your subscription will + cancel immediately and no longer renew. +

    +
    +
  • +
  • +
    + help + What happens to my notebook when I cancel my subscription? +
    +
    +

    + Once you've created any page on Notebook.ai, you will keep full access to + view, edit, and/or share that page, regardless of whether you have an + active Premium subscription or not. +

    +

    + While on the free Starter tier, you simply cannot create additional + Premium pages without re-upgrading to a new subscription. Your existing pages + are always yours and will never be locked behind any kind of payment to access. +

    +
    +
  • +
  • +
    + help + How do I purchase Premium without a subscription? +
    +
    +

    + Notebook.ai also offers prepaid subscriptions where you choose a duration of time + you'd like Premium for and pay upfront for that time. Afterwards, your account + will automatically be downgraded back to the free Starter tier, but you'll keep + full access to any pages you've already created. +

    +

    + To pay for Premium without a subscription, you'll need to purchase and activate a + Premium Code <%= link_to 'here', prepay_path %>. +

    +
    +
  • +
  • +
    + help + What are Premium Codes? +
    +
    +

    + Premium Codes are prepaid codes that can be shared with others and activated on any + account to enable Premium access for a set amount of time. Premium Codes are often + purchased by those who don't wish to have a renewing subscription, or wish to gift + Premium to someone else without sharing their payment details. +

    +

    + Premium Codes are available for purchase <%= link_to 'here', prepay_path %>. +

    +
    +
  • +
  • +
    + help + How do I pay with Paypal? +
    +
    +

    + Right now, we don't accept Paypal payments for the standard Premium subscription. +

    +

    + However, we do accept Paypal for Premium Code purchases, which can be activated for + the same Premium access without a recurring subscription. You can purchase Premium + codes <%= link_to 'here', prepay_path %>. +

    +
    +
  • +
  • +
    + help + How can I purchase Premium for a friend? +
    +
    +

    + The best way to purchase Premium for a friend is with Premium Codes. Premium Codes + allow for you to prepay for as much Premium as you'd like and receive a code that + you can share with your friend, which they can then activate on their account + whenever they want. +

    +
    +
  • +
  • +
    + help + How can I share my Premium access with my collaborators? +
    +
    +

    + When you have an active Premium subscription, any collaborators you add to your + universes will automatically receive Premium access when they're working within + your universe. This will let them create Premium pages as if they had Premium + themselves. +

    +
    +
  • +
  • +
    + help + How can I change or remove my payment information? +
    +
    +

    + Notebook.ai doesn't store your payment information anywhere on our site or servers; + instead, our industry-standard payment processor Stripe handles the secure storage + of your payment information. +

    +

    + While not storing your payment information protects us from data leaks that could + otherwise put your data at risk, it also means we can't provide access to directly + view or edit your existing payment information. +

    +

    + If you wish to change your saved payment method, we recommend you first delete + your existing payment method and simply add a new one. + You can delete existing payment methods or add new payment methods at any time + by visiting your <%= link_to 'Billing History', billing_history_path %> page. +

    +
    +
  • +
  • +
    + help + How do I request a refund? +
    +
    +

    + Please reach out to me directly at andrew@indentlabs.com. +

    +
    +
  • +
  • +
    + help + How can I download my entire notebook? +
    +
    +

    + Notebook.ai supports data exports in CSV, JSON, XML, YAML, and plaintext formats. +

    +

    + To export your notebook, just click "Export your data" in the + <%= link_to 'Data Vault', data_vault_path %> and select the format you want. +

    +
    +
  • +
  • +
    + help + Am I allowed to just use a free Notebook.ai account forever? +
    +
    +

    Of course! :)

    +

    + I wish I could provide Notebook.ai for free to everyone. In fact, the site is + intentionally designed for the free tier to be enough for most worldbuilders, + leaving the Premium subscription to those who want to dive deep and really flesh + out amazing worlds. +

    +

    + Offering a Premium subscription has kept the site running smoothly for over + half a million users since 2016—and we're not planning on going away + any time soon. Whether you're subscribed and supporting the site financially + or just using the site, sharing it with friends, and/or offering feedback, you're + still supporting the site. +

    +
    +
  • +
+ +

Have a question that wasn't answered here?

+

+ Feel free to reach out to me any time at andrew@indentlabs.com + or post on the <%= link_to 'Site Support', 'https://www.notebook.ai/forum/site-support' %> + discussion board. I'm constantly working to make the site better and I'm always happy + to help! +

diff --git a/app/views/subscriptions/new.html.erb b/app/views/subscriptions/new.html.erb index 065d2a9e..0cc66bbb 100644 --- a/app/views/subscriptions/new.html.erb +++ b/app/views/subscriptions/new.html.erb @@ -39,6 +39,8 @@ You will be charged <%= number_to_currency(@active_billing_plan.monthly_cents / 100) %> on the <%= renewal_day %><%= renewal_day.ordinal %> of each month. <% end %> + + Click <%= link_to 'here', billing_faq_path %> to view our cancellation policy and other frequently-asked questions. <% end %> <% end %>

diff --git a/config/routes.rb b/config/routes.rb index 1ccb9ef4..c2c3b40d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -175,8 +175,9 @@ Rails.application.routes.draw do # Info pages scope '/about' do - get '/paper', to: 'main#paper', as: :green_paper - get '/privacy', to: 'main#privacyinfo', as: :privacy_policy + get '/paper', to: 'main#paper', as: :green_paper + get '/privacy', to: 'main#privacyinfo', as: :privacy_policy + get '/billing/faq', to: 'subscriptions#faq' end # Landing pages From 7029e5209ecfbf4d814bb93a452fc52770b225a3 Mon Sep 17 00:00:00 2001 From: drusepth Date: Mon, 24 Oct 2022 16:57:13 -0700 Subject: [PATCH 6/8] Revert "switch our font-awesome provider" This reverts commit ee0d3329f6ac7e4bdac0158fe62da7181b2d9d8d. --- Gemfile | 3 +-- Gemfile.lock | 6 +++--- app/javascript/components/Footer.js | 4 ---- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index fffb6f89..abcd2aea 100644 --- a/Gemfile +++ b/Gemfile @@ -31,8 +31,7 @@ gem 'paypal-checkout-sdk' # Design gem 'material_icons' -# gem 'font-awesome-rails' -gem "font-awesome-sass", "~> 6.2.0" +gem 'font-awesome-rails' gem 'sass-rails' # Quality of Life diff --git a/Gemfile.lock b/Gemfile.lock index 0e2134a8..765dac1d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1347,8 +1347,8 @@ GEM rake filesize (0.2.0) flamegraph (0.9.5) - font-awesome-sass (6.2.0) - sassc (~> 2.0) + font-awesome-rails (4.7.0.8) + railties (>= 3.2, < 8.0) friendly_id (5.4.2) activerecord (>= 4.0.0) globalid (1.0.0) @@ -1690,7 +1690,7 @@ DEPENDENCIES engtagger filesize flamegraph - font-awesome-sass (~> 6.2.0) + font-awesome-rails htmlentities ibm_watson image_processing diff --git a/app/javascript/components/Footer.js b/app/javascript/components/Footer.js index d3931fc8..012fad14 100644 --- a/app/javascript/components/Footer.js +++ b/app/javascript/components/Footer.js @@ -19,10 +19,6 @@ class Footer extends React.Component { GitHub -  ·  - - Discord - From 528221b6871b25961a58c881af68b9e602c65220 Mon Sep 17 00:00:00 2001 From: drusepth Date: Mon, 24 Oct 2022 14:53:44 -0700 Subject: [PATCH 7/8] add discord link to footer --- app/javascript/components/Footer.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/components/Footer.js b/app/javascript/components/Footer.js index 012fad14..49d066f3 100644 --- a/app/javascript/components/Footer.js +++ b/app/javascript/components/Footer.js @@ -19,6 +19,10 @@ class Footer extends React.Component { GitHub +  ·  + + Discord + From 87ec82fe747bace2fb5c8144bc63024e89da918e Mon Sep 17 00:00:00 2001 From: drusepth Date: Mon, 24 Oct 2022 17:21:33 -0700 Subject: [PATCH 8/8] verbiage tweaks --- app/views/subscriptions/faq.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/subscriptions/faq.html.erb b/app/views/subscriptions/faq.html.erb index 753ab360..cc71ea76 100644 --- a/app/views/subscriptions/faq.html.erb +++ b/app/views/subscriptions/faq.html.erb @@ -87,7 +87,7 @@ additional fees. To do so, simply visit your <%= link_to 'Billing Page', subscription_path %> and click "Downgrade" to switch back to the free Starter tier. Your subscription will cancel - immediately and any unused time will be credited back to your account. + immediately and any unused time will be credited to your account.

@@ -108,7 +108,7 @@
  • help - What happens to my notebook when I cancel my subscription? + What happens to my notebook pages when I cancel my subscription?

    @@ -133,7 +133,7 @@ Notebook.ai also offers prepaid subscriptions where you choose a duration of time you'd like Premium for and pay upfront for that time. Afterwards, your account will automatically be downgraded back to the free Starter tier, but you'll keep - full access to any pages you've already created. + full access to any pages you've created.

    To pay for Premium without a subscription, you'll need to purchase and activate a