Skip to content

Add onboarding for new users - #746

Merged
abrichr merged 10 commits into
OpenAdaptAI:mainfrom
KIRA009:feature/onboarding
Jun 20, 2024
Merged

Add onboarding for new users#746
abrichr merged 10 commits into
OpenAdaptAI:mainfrom
KIRA009:feature/onboarding

Conversation

@KIRA009

@KIRA009 KIRA009 commented Jun 13, 2024

Copy link
Copy Markdown
Contributor

What kind of change does this PR introduce?

This PR introduces an onboarding mechanism to the dashboard.

Summary
This PR introduces a change where the dashboard is launched by default when the app is launched. The dashboard also displays an onboarding modal, which the user can dismiss and it won't pop up again. The modal contains an input box to capture the email of the user if they wan't to receive regular updates about OpenAdapt. It also contains a link that can be used to schedule a short meeting with @abrichr

This PR address #711

Checklist

  • My code follows the style guidelines of OpenAdapt
  • I have performed a self-review of my code
  • If applicable, I have added tests to prove my fix is functional/effective
  • I have linted my code locally prior to submission
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation (e.g. README.md, requirements.txt)
  • New and existing unit tests pass locally with my changes

How can your code be run and tested?
Run the app as usual python -m openadapt.entrypoint. The dashboard should launch by default, and you should see an onboarding form. Closing the modal (by clicking on X or outside the modal) or set a config variable to false, and the modal will not be shown again on subsequent page visits.

Other information

@abrichr abrichr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thank you for putting this together @KIRA009 !

Got the nvm error again, nvm use 21 got around it:

(openadapt-py3.10) abrichr@MacBook-Pro-5 OpenAdapt % git checkout feature/onboarding                                                                                                                                                                      
branch 'feature/onboarding' set up to track 'KIRA009/feature/onboarding'.
Switched to a new branch 'feature/onboarding' 

(openadapt-py3.10) abrichr@MacBook-Pro-5 OpenAdapt % poetry install   
...

(openadapt-py3.10) abrichr@MacBook-Pro-5 OpenAdapt % python -m openadapt.entrypoint 
...
DB_URL=sqlite:////Users/abrichr/oa/OpenAdapt/openadapt/data/openadapt.db                                        
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.                                                                                                                                                                                                
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.                                             
INFO  [alembic.runtime.migration] Running upgrade a29b537fabe6 -> bb25e889ad71, generate_unique_user_id                                                                                                                                                   
2024-06-13 13:51:37.244 | INFO     | openadapt.config:persist_config:357 - Persisting config to /Users/abrichr/oa/OpenAdapt/openadapt/data/config.json                                                                                                    
Exception in thread Thread-3 (run_client):                                                                                                                                                                                                                
Traceback (most recent call last):                                                                                           
  File "/opt/homebrew/Cellar/python@3.10/3.10.14/Frameworks/Python.framework/Versions/3.10/lib/python3.10/threading.py", line 1016, in _bootstrap_inner                                                                                                   
    self.run()                                                                                                               
  File "/opt/homebrew/Cellar/python@3.10/3.10.14/Frameworks/Python.framework/Versions/3.10/lib/python3.10/threading.py", line 953, in run                                                                                                                 
    self._target(*self._args, **self._kwargs)                                                                                                                                                                                                             
  File "/Users/abrichr/oa/OpenAdapt/openadapt/app/dashboard/run.py", line 35, in run_client               
    dashboard_process = subprocess.Popen(                                                                                    
  File "/opt/homebrew/Cellar/python@3.10/3.10.14/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 971, in __init__                                                                                                           
    self._execute_child(args, executable, preexec_fn, close_fds,                                   
  File "/opt/homebrew/Cellar/python@3.10/3.10.14/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 1863, in _execute_child                                                                                                    
    raise child_exception_type(errno_num, err_msg, err_filename)                                   
FileNotFoundError: [Errno 2] No such file or directory: 'node'                                          
^C^C^C^Cn^C^C^C^C^C^C^Z                                                                                                                                                                                                                                   
zsh: suspended  python -m openadapt.entrypoint                                                                                                                                                                                                            
(openadapt-py3.10) abrichr@MacBook-Pro-5 OpenAdapt % pkill -f openadapt                            
(openadapt-py3.10) abrichr@MacBook-Pro-5 OpenAdapt %                                                                         
[1]  + terminated  python -m openadapt.entrypoint                                                                                                                                                                                                         
(openadapt-py3.10) abrichr@MacBook-Pro-5 OpenAdapt % nvm use 21                                                                                                                                                                                           
Now using node v21.7.3 (npm v10.5.0)                                                                                         
(openadapt-py3.10) abrichr@MacBook-Pro-5 OpenAdapt % python -m openadapt.entrypoint  
image

Great start! What do you think about:

  • Clearly dividing this into three sections, e.g. horizontally or vertically. Ideally use a pre-built component, I think we're using Daisy elsewhere.
  1. Tutorials: Eventually we can link to a different page, but for now maybe just a few screenshots and descriptions:

a. System tray recording
b. Dashboard visualization
c. Dashboard configuration
c. Dashboard scrubbing

  1. Register for updates

  2. Book a call

  • Changing:

Let's get started with a quick onboarding process.

to:

Get started with OpenAdapt in a few easy steps.

@KIRA009

KIRA009 commented Jun 13, 2024

Copy link
Copy Markdown
Contributor Author

@abrichr Based on what you said, I think what we could do is, increase the size of the modal, use a component like https://mantine.dev/core/stepper/ to clearly divide the onboarding to steps

  1. How to use OpenAdapt
  2. Register for updates
  3. Book a call

And then, for the first step, what do you think about embedding a video recording (like a demo) hosted on youtube (or any other video platform, vimeo ,etc.) I think a video demo would be more engaging that a series of screenshots and texts

@abrichr

abrichr commented Jun 13, 2024

Copy link
Copy Markdown
Member

Sounds great! If possible it would be preferable to keep everything visible, e.g. with an accordion, so as to reduce friction as much as possible.

@KIRA009 can you please also document python -m openadapt.entrypoint in the README?

@KIRA009

KIRA009 commented Jun 14, 2024

Copy link
Copy Markdown
Contributor Author

@abrichr I have used the demo video from openadapt.ai as the first step of onboarding. Also, if you want to view the onboarding again, please change SHOW_ONBOARDING_MODAL in your config.json to true

@abrichr

abrichr commented Jun 14, 2024

Copy link
Copy Markdown
Member

@KIRA009

If possible it would be preferable to keep everything visible, e.g. with an accordion, so as to reduce friction as much as possible.

I think the stepper adds unnecessary friction. How about just using the Divider from mantine?

@KIRA009

KIRA009 commented Jun 14, 2024

Copy link
Copy Markdown
Contributor Author

@abrichr I have updated it, with the dividers

@abrichr

abrichr commented Jun 17, 2024

Copy link
Copy Markdown
Member

@KIRA009 I don't see the changes, have you pushed them?

@KIRA009

KIRA009 commented Jun 17, 2024

Copy link
Copy Markdown
Contributor Author

@abrichr Pushed

@abrichr

abrichr commented Jun 17, 2024

Copy link
Copy Markdown
Member

Thank you. It looks like the content overflows the modal:

image

Can you please make sure the content isn't overflowing? Or how about instead of a modal we just push them to an /onboarding page?

Also please add this sentence:

Welcome to OpenAdapt! Thank you for joining us on our mission to build open source desktop AI. Your feedback is extremely valuable!

To start, please watch the demonstration below. Then try it yourself!

If you'd like to contribute directly to our development, please consider the following open Bounties (no development experience required):

Here, place a bounty card (see https://github.com/algora-io/sdk) for #764.

Also, please replace the <video> tag with the embedded Youtube version: https://www.youtube.com/watch?v=OVERugs50cQ

@KIRA009

KIRA009 commented Jun 18, 2024

Copy link
Copy Markdown
Contributor Author

@abrichr Updated

@abrichr

abrichr commented Jun 18, 2024

Copy link
Copy Markdown
Member

@KIRA009 getting there! Some thoughts:

  • Can you please move the Register for Updates and Book a Call to the top?
  • Change this:

To start, please watch the demonstration below. Then try it yourself!

To this:

To start, please watch the demonstration below. Then try it yourself! If you have any issues, please submit a Github Issue.

  • The redirect seems to take a while. Is there some way we can load up the onboarding page by default on the first load, rather than waiting for a redirect?

  • Move this section below the video:

If you'd like to contribute directly to our development, please consider the following open Bounties (no development experience required):

  • please also disable the "Start recording" button

@KIRA009

KIRA009 commented Jun 19, 2024

Copy link
Copy Markdown
Contributor Author

Updated
image

@abrichr
abrichr merged commit bdf153e into OpenAdaptAI:main Jun 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants