Flow Design for Creating Profiles and Joining as a Member

Considerations for ‘Join the Coop’ below the ‘Create your profile’ block:

  • some users will visit this block once and not change their relationship with the Coop thereafter
  • others will return to the page several times as they modify their relationship
  • user and membership information is essentially the same as for listeners, artists and label owners: use a consistent form layout
  • minimise the information to be collected and maintained by the coop
  • do not set up a corresponding stripe user until it is necessary - i.e. until a financial / KYC relationship is required
  • be clear on the distinction between listening for free, paid up listening and membership
  • make sure the membership and donation / support offer is prominent and easy to take up
  • be clear about privacy… what is asked for and why, permissions to display on profiles

Figma Design Flow

  • Start here with sign-up 0.1
  • then the emails 0.2 (email confirmation, password reset, welcome email)
  • followed by create your profile 0.3 for the first time, and decide if you just want to listen to full length tracks for an hour for free, or get some credits rightaway. You can also decide to join the coop as a listener member or as a label or artist (sets the role and selects the appropriate membership ‘product’ for the checkout
  • Next’ at that point takes you straight to the player if you are just listening for free, but if you’re going to buy credits or be a member, you need to go through the checkout - checkout design - configured in stripe - (detail to follow)
  • After checkout success, the listener or member can go straight to the player / community or wherever and return to the Update Your Profile (0.41,0.42) page where the profile can be maintained, and additional membership products added. If you are a member, you’ll see your membership details here and any supporter shares you have purchased.
  • the ‘profile switcher’ buttons appear at the head of the profile to help navigate the profile detail, like pictures, bios, and other descriptive content mostly needed by the player for good artist ‘persona’ and label content. Listeners only have a single profile. They can use this to create playlists and (optionally) make them public along with any bio information they choose to add.
  • Finally, there is a Leaving Resonate (0.43) process to be handled

Products and Pricing

Credit Packs and Memberships are set up as Stripe Products:

Credit packs are priced as follows (both in credit chooser and in stripe product pricing). The more you get, the better the unit value for money:
0.03 Credits - for FREE = 1 hour of exploring
Buy 5 credits for €7 = typically 16 hours of listening
Buy 10 credits for €12 = typically 32 hours of listening
Buy 20 credits for €22 = typically 64 hours of listening
Buy 50 credits for €50 = typically 128 hours of listening
(Projections are based on historical analysis (90k plays) at an average cost of €0.026 per play and a track duration of 4 minutes on average. 1.022 credits = €1.25 = price of typical old skool download.)

Donations …can wait until we have build a separate fundraising page:
We decided that we should keep these signup flow pages focused on selling listening credit and membership . Donations and fundraising can be given a separate page, offering different methods, including the use of open collective as well as collection via stripe checkout and in future, Resonate merchandise products.

Key to tables:

Attribute: the attribute name associated with an object in one of the API’s or a ‘local’ variable(v_)
obj: the API object (or endpoint) concerned: UU = user in UserAPI; SU = user in Stripe API aka customer object; SM = Stripe User [Metadata]; SP = product in Stripe API (Stripe API reference – Metadata)
FieldName: What we call the field on the UI
Action / Display: the expected behaviour for the attribute … e.g. display only? if create/update, what syntax/logical/relational checks are made.
Prompt: Brief UI message (if necessary)
Help Text: Could be revealed by click or ‘hover text’
Link: To guidance / faq entries …on public forum? Or in website for better change control?

0.3 CREATE YOUR PROFILE - land on this page after clicking the verify email link (or other (future) ID verification step)

Select at top of page (toggle button for I’m an Artist / Label or similar) selection - this will have a small effect on the fields displayed and behaviours below. Artists are able to have multiple display profile ‘personas’ linked to one account.

Block Title: Create your profile

Attribute obj FieldName Action / Display Prompt Help Text Link
username UU User Name create unique username (mandatory, validate) Choose a user name This is your unique ‘handle’ across Resonate. It’s not public unless you choose to display a public profile. ???
email UU email display, no update If you need to change your username password go to… ???
country UU Country Select Two-letter country code (ISO 3166-1 alpha-2) Mandatory Code picker We need to know your country to pay music rights correctly ???
newsletterNotification UU Newsletter? Boolean select Default Y OK for us to contact you by email? ???

Block on Listening and Membership (no title - keep the page clean and reduce text)

Attribute Action / Display Prompt Help Text Link
v_credits GetCreditsNow? dropdown select amount See chooser value text options The more you get, the better the value! Link to 'What are credits" or “Our Pricing / Stream2Own” in Handbook. On player, after free plays expire, offer a link to page 0.4 at end of each 45 sec sample play.
v_member_bool Membership select checkbox? Become a Member for €x / year (if Listener) Become Member for free if you upload your music (If Artist/Label) Benefits of membership: * join the community * have your say and vote * special offers, events and a share in profits Link to Terms and Conditions and membership pages
n/a - section break only Support (block heading) Support Us! We need your support to build our platform and community
v_sshares Supporter Shares (only shown if Membership selected) enter number of €1 shares (integer 0- 100000) We pay interest and redeem if we make enough of a surplus one day! Please pay on the checkout page Link to Terms and Conditions

Name and Address:

Collected by Stripe-hosted checkout and held securely by Stripe on our behalf for memberships (even if the membership is offered ‘free’ for artists) and for payment purposes. A privacy message should be displayed here: “This information is held only for legal, payment and statistical purposes and will not be disclosed or appear on any public profile in our (eco-)system without your permission”

Attribute obj FieldName Action / Display Prompt Help Text Link
firstName UU First Name Mandatory Your given name
lastName UU Last Name Mandatory Your family name
fullName UU Full Name Mandatory (defaults to firstName+" "+lastName) How you would like us to write your full name
address.line1 SU Address Line 1 Mandatory Number, Street, PO Box
address.line2 SU Address Line 2 Optional Apartment, suite, unit, or building
address.city SU City Mandatory City, district, suburb, town, or village.
address.postal_code SU Postal Code Mandatory ZIP or postal code
address.state SU Region Optional State, county, province, or region

Community Forum Profile:

There is a separate user profile in the Discourse forum and some of the profile user data will be carried forward to it from the user API and any profile created in 0.3. The profile input prompt in Discourse must make it clear that the community profile and the player profile / bio information are different and that the user maintains both. Username and email address may only be changed on 0.4, not in Discourse. The handbook link should make this clear. “Only your username and email will be used to create an account in our Resonate Community Forum” by default this will remain private (viewable only by administrators) until you choose to make it public by visiting forum and updating it. Learn more about our Community Forum (link)"

Block Title: ‘Next’ Button

Submission Redirection depends on user selection:
Nothing purchased → Go directly to player
Something purchased (credits or membership product) → Go to stripe hosted checkout with each purchase as line item. Users real name, address and credit card details taken by Stripe.
We need to check that the stripe hosted checkout create customer action works similarly to a Stripe API POST: Stripe API reference – Create a customer) posting the SU attribute data captured above, plus SM metadata. In addition, the fullName and the username should be inserted as metadata fields in the Stripe customer object metadata with corresponding values.

Note that the checkout process determines which membership ‘product’ (currently listener membership or artist membership) has been acquired. In the checkout process, for simplicity, we are presenting these as mutually exclusive options, but technically the rulebook allows a user to be both. In the 'Update Your Profile screens we can allow Listeners to become artists and add an artist membership ‘product’ to their profile, or artists to ‘revert’ to Listeners if they have not made a qualifying contribution (music uploaded for at least one artist profile they own).

We need to trap any unexpected errors and write errors to an error log. (We need to ensure failed mappings between Resonate users and the stripe customer are resolved quickly.)

Redirect to Stripe checkout. After stripe success message, go straight to player, or back to page 0.4 ‘Update your profile’ if there has been a problem / process has been abandoned.

0.4 PROFILE UPDATE - 2 main states after initial onboarding flow - non-member (0.41) vs member (0.42)

0.41 Update your profile (not yet a member)

Hi username / email / (country)
You have n credits left ( = max m hours listening) (display value) (currently retrieved from Tracks Api)

Credit Chooser:

This is similar to the block on 0.3, except that it assumes the user has already seen the chooser and made a selection of credit. The remaining credit (and approximate listening time) is shown alongside the credit chooser. This is therefore a selection of additional credit and the minimum selection is “No thanks, I’ve got enough for now.”

Block Title: ‘Update’ Button(s)

Submission Redirection depends on user selection:
Nothing purchased and no Stripe user → Redirect to player
Nothing purchased and Stripe user exists → Redirect to Stripe checkout user fields update only… only necessary for artists / labels who need to update their street address for payment purposes.
Purchases → Redirect to Stripe checkout user fields and payment.

Newsletter Y/N (UU: newsletterNotification)
Leaving Resonate? (link to 0.43)

0.42 Update your profile (member)

Hi username / email
You are a Listener / Artist Member (current membership)
Membership began / ends. Renew Now… memberships listed in a table:

Attribute obj FieldName Action / Display
Role UU Role [if Role = user, display ‘Listener’]
current_period_start SP Start_Date
current_period_end SP Until
[If Role = User]price{object} [else] metadata{trackid} SP Contribution [either the Listener’s payment or ‘yes’ if a qualifying trackid is present. If not, ‘Pending’ is displayed]

You have n credits left ( = max m hours listening) (display value) (currently retrieved from Tracks Api)

Block: Get some more credits now:

Attribute Action / Display Prompt Help Text Link
v_credits GetCreditsNow? dropdown select amount Get some more credits now €x (=$) = up to <chooservalue/.0025> hours We will add this to your balance

Get membership shares from Stripe API for this member (retrieve product supporter shares); If NO membership shares show:

Attribute obj FieldName Action / Display
n/a - section break only Support (block heading) Support Us! We need your support to build our platform and community
v_sshares Supporter Shares - enter number of €1 shares (integer 0- 100000 max) We pay interest and redeem if we make enough of a surplus one day! Please pay on the checkout page - Link to Terms and Conditions

If previous purchases of shares found, list in table format:

Attribute obj FieldName Action / Display Prompt Help Text Link
shares_date SP Date Display DD/MM/YYYY column 1
shares_amount SP Amount € integer € column 2
Total Total Calculate sum of shares (total row)
v_sshares Add Add more! - enter number of €1 shares (integer 0- (100000- Total)max We pay interest and redeem if we make enough of a surplus one day! Please pay on the checkout page Link to Terms and Conditions

Block Title: More About YOU (Optional - post-signup) - for a later epic.

Attribute obj FieldName Action / Display Prompt Help Text Link
hear_about SM How did you hear about us? Optional: Dropdown of sources: Friend, Social Media, Press Article, Newsletter, Blog, Website, Other Choose main one
hear_about_other SM Optional appears only if ‘Other’ selected for hear_about Please Specify:
volunteer_bool SM Volunteer? Optional: Default N. Are you interested in volunteering for Resonate? If you say Yes we may contact you using your email address. About volunteering - forum link
skills_offered SM Skills offered? Optional: Dropdown of skills: Music Curation and Catalogue Management, Community Management and Moderation, Software Development, Accounting/Business Administration, Marketing/PR, Other Choose all applicable What are the skills that you can offer? Select all that apply
skills_offered_other SM Optional appears only if ‘Other’ selected for skills_offered 35 characters max? Please Specify:

Newsletter Y/N (UU: newsletterNotification)
Leaving Resonate? (link to 0.43)

Role and Profile Change Logic

Notes on changing from artist → label, label → artist, label/artist → listener:

Scenario

The user will be returning to update their profile as a member - a listener, artist or label (Role = user, artist, label respectively) the relevant title button will be shown selected so that the user knows their role at the outset.

0,1 Profiles Exist

If no profiles, or only a single user profile (usergroup) exists, the possibility to switch from label to artist, or artist to label will be offered and the Role will simply be changed on Update. The previously created order-line-item can remain and need not change. If going back to Listener, the previously created artist/label order-line-item will be DELETED (stripe API called), and on update, a Listener membership will be created, together with a request for payment in the checkout.

2-n Profiles Exist

If multiple profiles (usergroups) exist and you are an artist, it is possible to change role to label. An ‘Are you sure?’ message should be displayed with a link to the handbook ‘About labels and Artists on Resonate’. If the user is a label, with existing ‘child’ artist profiles, the option to switch back to an artist should be accompanied with a message ‘Are you sure?’ Your (parent) label profile will be deleted’. The profile (usergroup) of the label will be deleted, but the artist profiles(usergroups) under it will be retained an linked to the user as artist ‘alias’ profiles’. If the user no longer has the right to represent any of those profiles as artists, the user MUST delete the profiles they do not represent and the corresponding music must be taken down from the player. Provide a link to guidance in the handbook.

The ‘become a member’ checkbox is replaced by a ‘You are a member’ message. Note that artists and labels have membership by pledging (in t’s and c’s) to upload music… if they do not honour this pledge (reminders sent) they will be asked to convert their membership to a Listener membership and pay the subscription - invoice sent, artist profiles (usergroups) deleted.

0.43 Leaving Resonate

:frowning: are you sure?
Why are you leaving?
Can we keep in touch? (newsletter etc) N - delete my data
You have x credits / earnings on account. We can refund you for amounts greater than €10
Artists / labels - contact us about removing tracks.

2 Likes

@Nick_M would this also be the place to specify what this stuff looks like for the admin? For example, can the admin view users in a list? what fields are available on that list etc?

@boopboop yes there are user api endpoints for that, and a security model. I think its best to break our what it looks like for a admin / memberships persons into separate areas though:

and

… on memberships I am hoping we can make use of Stripe Dashboard to resolve queries with the sale of our membership products and top-ups… but if that’s no good we will have to build a bunch of screens to render the stripe api data.

1 Like

Stripe Checkout Integration

Sample Screenshots from Demo


Subscription payment (including discount code)

Success message

Stripe Notes and Docs

Overview of Subscriptions

Code samples and local build instructions on github

There are several code samples to use, including Node and GO. I’ll focus on Node for now (but the GO version would be good for later?)

Customer Conversion

Resonate has about 1500 customer objects to date. They have been matched on email address with customer records in the new membership register (members and shares, version 5), adding the Stripe id. We should retain the customer objects of those who have expired memberships, but remove those which have failed KYC or are failure (if possible). We will need to create new customer records for those members who have paid by alternative means (bank transfer)

The stripe CLI allows customers to be created with a simple command:

nick@mars:~$ stripe customers create
{
“id”: “cus_KdbsRzkyxnqWpQ”,
“object”: “customer”,
“account_balance”: 0,
“address”: null,
“balance”: 0,
“created”: 1637518820,
“currency”: null,
“default_source”: null,
“delinquent”: false,
“description”: null,
“discount”: null,
“email”: null,
“invoice_prefix”: “02A32540”,
“invoice_settings”: {
“custom_fields”: null,
“default_payment_method”: null,
“footer”: null
},
“livemode”: false,
“metadata”: {
},
“name”: null,
“next_invoice_sequence”: 1,
“phone”: null,
“preferred_locales”: [

],
“shipping”: null,
“sources”: {
“object”: “list”,
“data”: [

],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_KdbsRzkyxnqWpQ/sources"

},
“subscriptions”: {
“object”: “list”,
“data”: [

],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_KdbsRzkyxnqWpQ/subscriptions"

},
“tax_exempt”: “none”,
“tax_ids”: {
“object”: “list”,
“data”: [

],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_KdbsRzkyxnqWpQ/tax_ids"

},
“tax_info”: null,
“tax_info_verification”: null
}
nick@mars:~$

The customer appears in the Stripe dashboard (test dataset)

Working through this example at the moment:

…more to follow… update in progress

2 Likes

@aug Stuff I need to do / discuss with you on this today:

  • amend the stripe product pricing: simplify by using standard pricing for the supporter shares and the memberships instead of group pricing. Use custom UI code instead to enforce the minimum €5 purchase. (The streaming credit top-up packs are also standard pricing)
  • find the current member welcome communications and reproduce similar in the stripe invoice confirmation / payment success page text
  • discuss what we do about ‘persisting’ data… totals etc that we don’t want to have to call in the stripe api and re-calculate every time

Pages linked to by Stripe in the sign-up flow (and/or product descriptions):

Supporter shares terms and conditions: the most recent General Meeting Approved work on this is at:
Terms and Conditions of Resonate Supporter Shares v1 - Google Docs

Suggest we update the terms-conditions with a single over-arching service terms and conditions document based upon some of the revised and approved text in the Supporter Share T&C’s above, plus the player T’s and C’s. The supporter shares text needs to be in a separate page (on the new website) linked to from the sign-up / checkout flow.

Persisting Data…

This could be a pain… we should minimise the amount of data that we have to pull back from Stripe - for example to complete this ‘update your account’ page:

…we might be able to replace the products part of it with a call to the stripe customer portal associated with the hosted stripe checkout:

The return uri from that is customisable/dynamic (it says) so I guess it could return to a Resonate page for the current user / profile.

That will bring back the current and previous subscriptions and previous purchases of credits.

Here’s a nice video

Discussion:

PRO: using Stripe customer portal might give some saving in coding effort
PRO: very easy to add new products and subscriptions …for example @richjensen 's ‘resnodes’
PRO: webhooks are easy to implement …eg for updates to credit balances, change of membership status
CON: locks us in to Stripe too much
CON: we still have to at least persist the current membership state and a balance on our side
CON: If we had a user just wanting to buy some supporter shares or top up, maybe it would be too confusing to drop them into a generic customer portal / billing page with many products (Is it possible to restrict the page to relevant products / services only - e.g. streaming credits / subscriptions, depending on context?)

Conclusion: possible fallback / short-term option - try it out / could use both while our own integration is in the works. Maybe better UX if we we have our own integration (via API) with some memberships & shares data in db.

1 Like

Email Communications

Overview

The ‘free listening’ signup and the success flow from stripe checkout (paid listening, different types of membership subscription, supporter shares purchase) results in sign-up emails which depend on the outcome of the checkout process. Standard invoice confirmations are sent. Events are created in stripe and we will ‘listen’ for them with a webhook, sending the appropriate emails.

Goals

To provide ‘custom’ welcome and guidance for members in addition to a straightforward checkout invoice / receipt for subscriptions, credit packs etc

Events

  • Sign-up - for free listening
  • Listener Subscription
  • Artist Subscription
  • Label Subscription
  • Leaving (terminate any of the memberships)
  • Additional Supporter Shares (Existing subscriber returning to checkout, purchasing supporter shares)
  • Packs of Credits

Email Text

The existing signup email text (currently sent by the ID server / wordpress), with a few additions and modifications will be suitable… suggested modified / new text below for each event:

Sign-up - for free listening / listen only

Welcome to Resonate!

The music streaming platform owned by its Members:

  • Share in the profits
  • Vote in all co-op elections
  • Access to members forum
  • Receive special member offers

Listeners can choose to become Co-op Members by registering and paying an annual fee of 5 euros (about $6 US). You don’t have to be a Member to listen but it is a great way to support Resonate and have a say in how it grows.

Co-op Membership is free to artists when they share their music through the site.

Unlike other streaming services, Resonate has no ads and no monthly subscription fees. Instead, listeners purchase a track for about one euro paid over nine plays, starting at less than a penny and doubling with each play. After the ninth play, listeners own the track and the right to stream it for free from their account. This way, listeners start as explorers and become backers, on average paying artists better than twice the rate of corporate platforms.

Your Listener account comes with .003 Resonate credits - about 1 hour of listening time for free, but you can buy some top-up credit in a pack in our checkout - follow the link from our player when you are ready!

We ask for your ongoing consent to retain your name and email address in our records so that we can contact you about your access to our service in accordance with our terms and conditions. If you gave us your consent to contact you by email in future with news about Resonate and its services, we promise to do so without spam or disclosure to anyone else without your permission. If you want to withdraw your consent or unsubscribe at any time please update your profile or contact unsubscribe@resonate.coop.

Listener Subscription

Welcome to Resonate.

Resonate is the world’s first co-operative music streaming service. We are delighted you have chosen to join us and listen to streamed music in a more ethical way.

Your Listener Member account comes with .003 Resonate credits - about 1 hour of listening time for free, but if you have already bought some extra top-up credit in a pack, THANK YOU. We wish you many more hours of happy Play Fair listening!

As a Member you are now a co-owner of our platform. Please participate in our members forum and have your say in our governance and development.

If you have purchased some supporter shares, THANK YOU: they are a great way to boost development of our platform. And if we’re successful, and make a surplus, you might even earn some interest on your investment! (Terms and conditions apply)

Together we can build an inclusive, fair and dignified music streaming platform of the future.

We ask for your ongoing consent to retain your name and email address in our records so that we can contact you about your access to our service in accordance with our terms and conditions. If you gave us your consent to contact you by email in future with news about Resonate and its services we promise to do so without spam or disclosure to anyone else without your permission. If you want to withdraw your consent or unsubscribe at any time please update your profile or contact unsubscribe@resonate.coop. Please see our privacy policy

Artist Subscription

Welcome!

Thank you for creating an artist subscription with Resonate - it’s free if you upload music!

First, make sure you complete your artist profile(s), if you haven’t done that already: profile photo, cover photo, bio and links. This is used for your page on the Resonate Player, helping listeners discover more of your creative world.

You will find you can enter multiple artist ‘personas’ with your artist account, but we suggest you start with one!

Next, upload your music. We recommend starting with the music you would like to add first, then back catalogue.

Once your music is live on Resonate, you become eligible to become a ‘music-maker’ member in the co-op.

As a co-op member you own your own streaming service, guide its governance and share in our profits.

Remember that you can purchase supporter shares anytime: they are a great way to boost development of our platform. And if we’re successful, and make a surplus, you might even earn some interest on your investment! (Terms and conditions apply)

Get Started

We ask for your ongoing consent to retain your name and email address in our records so that we can contact you about your access to our service in accordance with our terms and conditions. If you gave us your consent to contact you by email in future with news about Resonate and its services we promise to do so without spam or disclosure to anyone else without your permission. If you want to withdraw your consent or unsubscribe at any time please update your profile or contact unsubscribe@resonate.coop. Please see our privacy policy

Label Subscription

Welcome!

Thank you for creating a label subscription with Resonate - it’s free if you upload music for your artists!

First, make sure you complete your label profile and artist profile(s), if you haven’t done that already: profile photo, cover photo, bio and links. This is used for your pages on the Resonate Player, helping listeners discover more of your creative world.

Next, upload your music. Right now, this is a little tedious for labels - you have to add tracks and metadata in our online form, one at a time, but soon we will be adding a new ‘bulk’ uploading process where we can automate the loading of tracks and metadata from industry-standard release notification files. Until then, perhaps start with some tracks and artists you would like to introduce and showcase early.

Once your music is live on Resonate, you become eligible to become a ‘music-maker’ member in the co-op.

As a co-op member you own your own streaming service, guide its governance and share in our profits.

Remember that you can purchase supporter shares anytime: they are a great way to boost development of our platform. And if we’re successful, and make a surplus, you might even earn some interest on your investment! (Terms and conditions apply)

Get Started

We ask for your ongoing consent to retain your name and email address in our records so that we can contact you about your access to our service in accordance with our terms and conditions. Please ensure you have the permission of all individuals you represent as a label before you share any of their personal data with our service. If you gave us your consent to contact you by email in future with news about Resonate and its services we promise to do so without spam or disclosure to anyone else without your permission. If you want to withdraw your consent or unsubscribe at any time please update your profile or contact unsubscribe@resonate.coop. Please see our privacy policy

Leaving (terminate any of the subscriptions)

Sorry you are leaving!

Your subscription has terminated / expired and your account will revert to a basic listening account. You will lose membership privileges, but you can get those back anytime by renewing your subscription and making a membership contribution - a Listener subscription or uploading a track.

If you have less than €10 value in credits on account with us, we can’t return your credits but we can redistribute them fairly to artists on the platform. We hope that is OK! If you purchased supporter shares, we will keep a record of them, but if you want to receive interest, or give notice to withdraw them sometime in future, you will have to re-subscribe as a member.

We are sorry you are leaving us. If you can, please share your reasons for leaving with us by email to members@resonate.coop. We value constructive guidance and want to improve!

We ask for your ongoing consent to retain your name and email address in our records so that we can keep in contact with news about Resonate and its services. We promise to do so without spam or disclosure to anyone else without your permission. If you want to withdraw your consent, unsubscribe or ask for all your data to be removed entirely, please contact leaving@resonate.coop. Please see our privacy policy

Additional Supporter Shares (Existing subscriber returning to checkout, purchasing supporter shares)

THANK YOU for investing in our supporter shares! They are a great way to boost development of our platform. And if we’re successful, and make a surplus, you might even earn some interest on your investment! (Terms and conditions apply)

Please save your receipt for your records. You can visit your profile and access your account anytime to review all your subscriptions and purchases with Resonate.

Packs of Credits

** No separate thank-you email necessary for simple credit top-up - only the stripe-standard checkout invoice **

3 Likes

DRAFT Notes from Progress Review Meeting

3rd December 2021 @angus , @auggod @Nick_M

Summary:

Great progress demoed by @auggod this week, but we still have a lot to do. We won’t be able to get the flow into production, but should be able to get it all into ninja for test with stripe test data at the back end. There are migration jobs we need to prepare and test before we cut over to the new system and migrate in January.

Purpose:

  • Review progress with implementing the flow design (figma)
  • Review progress with Stripe Checkout integration
  • Discuss related issues with User API and Player design (keeping stripe user id and balances)
  • Discuss timeline and target for next week - so that Aug can get some holiday!

Flow Implementation

  • Aug has been working locally to implement most of the flow in the UI, including the ‘update your account’ pages. BONUS!
  • ALSO including great work in the profile creator /maintenance pages where the graphical elements of the profiles are now displayed with the text data.
  • @auggod pointed out (comments in figma) that the tickboxes for “I agree to the terms and conditions of service” and GDPR consents need to be in place, even for listen only with free credit (no checkout). For memebership subscriptions, the “I agree to the terms of membership” tickbox and “I agree to the terms and conditions for supporter shares” need to be in place.
  • Need to update the figma design to reflect this - consider expert UX review for possible improvements.
  • Flow looks good. Need further tidy up of the ‘go to checkout’ page. See tasks below.
  • add a figma UI design element for the ‘go to checkout’ page. Consider what else belongs on it:
  • GDPR consent / privacy policy tickbox - @Nick_M @auggod
  • Link and consent tickbox for terms and conditions of supporter shares - @Nick_M @auggod
  • Note: there should already be a consent note and link to the general terms and conditions of the player and website in the basic profile after we sign up with a name and address. - check this. - @Nick_M @auggod
  • Check that the uri’s for all pages reference the new website and that we have the correct text in place - @Nick_M @auggod to check with @Timothee

Stripe Checkout Integration

@auggod and @Nick_M discussed the use of a ‘standard’ stripe customer portal instance (in addition to the checkout) to do all the user subscription and product updating, but this isn’t necessary now as Aug has been making such good progress with the ‘custom’ product selection and summary of products. Stripe customer portal is a useful fallback, however.

API Design Issues / Changes

  • store stripe customer ref on users table … or on a new table (on users table don’t go for a key-value pair field - messy to access) @auggod to decide
  • consider adding other fields: credit listening balance (updated when packs of credits are purchased - code needed to do that - webhook trigger from checkout) - @auggod
  • remove search by email address from stripe api code - @auggod

Webhooks and Emails

Data Migration considerations

  • use the new membership roster list as the basis for memberships (based on the agreed membership expiry criteria) and create corresponding stripe subscription products for the current users (do we need to also create historical, expired subscriptions?) @Nick_M to share membership rosters with @auggod
  • add the corresponding stripe userid for all users we are SURE we can match - security risk here - how can we ensure we have NO mismatches. Is it safer to simply recreate a new stripe user and a fresh record rather than risk this? @angus, @auggod @Nick_M discuss next week.
  • use the player credit balances to populate a new credit balance for each user in the user-api @auggod to decide
4 Likes

@auggod @Nick_M @angus this all sounds brilliant! Y’all are doing an amazing job :sunflower:

2 Likes

Is there an update on these items? Additional resources needed? Anticipated delivery? See related: User Onboarding and Accounting Epic - #44 by richjensen