Newer
Older
smart-home-server / webclient-vue / docs / migration-plan.md
@Eugene Sukhodolskiy Eugene Sukhodolskiy 7 hours ago 3 KB Document Vue client migration plan

Migration Plan

Phase 1 - Specification And Contracts

  • Document current routes and workflows.
  • Document API calls and response shapes.
  • Identify backend gaps that block a clean Vue client.
  • Confirm JavaScript-only implementation.
  • Decide exact gnexus-ui-kit installation method.

Deliverable:

  • Complete docs in webclient-vue/docs/.

Phase 2 - Project Scaffold

  • Create Vue app under webclient-vue/.
  • Configure build tooling.
  • Add gnexus-ui-kit.
  • Add router.
  • Add API client wrapper.
  • Add app shell, layout, navigation, toast, modal, and error state primitives.

Deliverable:

  • New client opens locally and can call GET /api/v1/areas/list.

Phase 2.1 - Minimal Vertical Slice

Build the smallest complete app slice:

  • App shell.
  • Hash router.
  • API client.
  • Areas API module.
  • Favorites localStorage store with key sh_fav_areas.
  • /areas/favorites page.
  • Loading, empty, and error state components.

Acceptance criteria:

  • Running the dev server opens the Vue client.
  • / redirects to /areas/favorites.
  • /areas/favorites calls the backend areas list endpoint.
  • Existing favorite ids from localStorage are respected.
  • Empty favorites state is rendered correctly.
  • No old webclient/src/js code is imported.
  • UI-kit access is isolated behind local adapter components, even if adapters are initially minimal.

Phase 3 - Read-Only Screens

Implement without mutations first:

  • Areas favorites.
  • Areas tree.
  • Devices list.
  • Devices scanning list.
  • Scripts actions list.
  • Scripts regular list.
  • Scripts scopes list.

Deliverable:

  • New client can display the same operational data as the current client.

Phase 4 - Mutations And Modals

Implement user actions:

  • Run action script.
  • Enable/disable regular scripts.
  • Enable/disable scopes.
  • Device details.
  • Device reboot.
  • Device setup.
  • Area details.
  • Area create/edit.
  • Area devices modal.
  • Area actions modal.

Deliverable:

  • New client covers daily operational workflows.

Phase 5 - Hardening

  • Add concurrency limits to device live-state loading.
  • Add request cancellation on route leave/modal close.
  • Add normalized error handling.
  • Add stale data and retry states.
  • Add smoke checklist.

Deliverable:

  • New client is safe to use as primary UI.

Phase 6 - Switch-Over

  • Keep old webclient/ available as fallback.
  • Serve new client on the chosen route/domain.
  • Monitor backend logs and user-reported issues.
  • Remove or archive old client only after a stable period.

Open Decisions

  • Vue state library: Pinia or lightweight composables only.
  • Router mode: hash mode for compatibility or history mode with server config.
  • How to consume gnexus-ui-kit as an updatable dependency: package/git dependency preferred, submodule only if necessary.
  • Whether to keep proxy.php or use direct backend API from the new dev server.

Current Recommendations

  • Use JavaScript.
  • Use Pinia.
  • Use hash router for the first production-capable version.
  • Keep proxy.php compatibility in the API client, but allow direct backend URL through environment variables.
  • Integrate gnexus-ui-kit through local adapter components, not direct imports across feature code.