performwp / performwp/perform

Add setup wizard for first-run onboarding

Open
#108 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

area: admin-ui area: settings enhancement priority: medium status: needs-spec
Dominant language
PHP
Stars
5
Forks
2
PR merge metrics
No merged PRs in 30d

Description

Goal

Add a setup wizard that helps new users configure Perform safely without needing to understand every module on the first visit.

Thought process

Perform now has multiple modules with different risk profiles: safe defaults, frontend-output changes, cache behavior, optional integrations, and advanced asset controls. A first-run wizard can reduce confusion and help users enable the right modules in a controlled order.

The wizard should not replace the full settings UI. It should guide first setup, explain tradeoffs briefly, and only save settings after explicit confirmation.

Proposed flow

  1. Welcome and site profile

    • Basic site type selection such as blog/content, business site, store, or custom.
    • Keep copy product-focused and short.
  2. Safe performance defaults

    • Offer low-risk optimizations that do not require site-specific inspection.
    • Show exactly which settings will be enabled before saving.
  3. Cache setup

    • Explain page cache prerequisites and exclusions.
    • Offer cache enablement only when the environment looks compatible.
  4. Optional integrations

    • Show integration-specific settings only when the dependency or required configuration exists.
  5. Assets Manager introduction

    • Keep advanced asset unloading out of the default path.
    • Link users to the Assets Manager with a clear warning that changes should be tested per site.
  6. Summary and save

    • Persist selected settings using existing option contracts.
    • Provide a next-step route to the dashboard/settings page.

Implementation notes

  • Use WordPress admin UI patterns and existing @wordpress/* components where React is used.
  • Do not create new option keys unless they are needed for wizard state, such as completed/skipped/version.
  • Preserve all existing settings keys.
  • Make the wizard dismissible and re-openable from settings.
  • Avoid enabling high-risk output changes automatically.

Acceptance criteria

  • New users see a guided first-run path after activation or first settings visit.
  • Existing users are not forced into the wizard during upgrade.
  • The wizard can be skipped and reopened later.
  • Every saved setting maps to an existing Perform setting or a clearly documented wizard-state option.
  • The final step shows a summary before persisting changes.
  • The UI is keyboard accessible and follows WordPress admin design patterns.

Validation

  • Unit tests for wizard state option handling if added.
  • E2E/admin smoke test for first-run, skip, reopen, and save flows.
  • npm run lint
  • npm run build
  • composer test
  • composer phpstan

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating the existing settings UI, option contracts, and any React-based admin entry points, then compare them with the proposed first-run flow. Validate state handling with the requested unit and E2E/admin smoke tests, followed by npm run lint, npm run build, composer test, and composer phpstan; done means the wizard supports first-run, skip, reopen, summary, and accessible save flows without forcing existing users through it.

Written by the indexing model from the issue text.

Assessment

Tech stack
php, react
Domain
backend, frontend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.