Files
Learn_System/plans/admin-redesign/PLAN.md
T
Maxim Dolgolyov 8a7bed487f feat(admin): phase 1 — hash-router
AdminRouter wraps existing switchTab for deep-linking.

- frontend/js/admin/router.js (new, 102L): parse/navigate/current/on/off, recursion guard via _navigating flag

- admin.html: +1 <script> before admin.js

- admin.js: switchTab(btn, opts) + initAdminRouter IIFE for hashchange dispatch

Backward compat: all 21 onclick=switchTab(this) callsites continue working.

F5 / back / forward / deep-link verified.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 22:22:20 +03:00

4.5 KiB
Raw Blame History

Feature: Admin Panel Redesign

Branch: feature/admin-redesign Base branch: master Created: 2026-05-16 Status: 🟡 In Progress Strategy: Incremental Mode: Automated Execution: Orchestrator

Summary

Превратить admin-панель LearnSpace из монолитного tab-роутера (1900L HTML + 3500L JS в одном модуле) в master-detail SPA с hash-routing, lazy-loaded per-section модулями, dashboard-landing, Cmd+K command palette, per-row quick actions и deep entity pages вместо overlay-панели.

Текущее состояние:

  • frontend/admin.html ~1900L
  • frontend/js/admin/admin.js ~3500L (после недавнего extract из inline <script>)
  • 13 табов: stats, questions, tests, assignments, subjects, users, sessions, permissions, shop, gam, tpl, sims, games, sublog
  • switchTab() ручной tab-роутер, состояние теряется при F5
  • User detail = выезжающая .user-panel overlay внутри tab-users

Цели:

  • F5/bookmark на #users/123 работают
  • admin.js ≤ 800L
  • Dashboard + Ctrl+K + hover-actions для частых сценариев
  • Полноценная страница user/session вместо overlay

Build & Test Commands

  • Start: cd backend && npm start (vanilla JS, нет бандлера — server раздаёт static)
  • Dev: cd backend && npm run dev (nodemon)
  • Test: cd backend && npm test (node --test)
  • Lint: cd backend && npm run lint:routes (route auth checker)
  • Manual verify: открыть http://localhost:3000/admin и пройти основные сценарии

Phases

  • Phase 1: Hash-router [domain: frontend] → subplan
  • Phase 2: Split admin.html → per-section modules [domain: frontend] → subplan
  • Phase 3: Dashboard #overview [domain: fullstack] → subplan (parallelizable with 4, 5)
  • Phase 4: Cmd+K command palette [domain: fullstack] → subplan (parallelizable with 3, 5)
  • Phase 5: Per-row quick actions [domain: frontend] → subplan (parallelizable with 3, 4)
  • Phase 6: Deep entity pages [domain: frontend] → subplan

Параллелизация: фазы 3, 4, 5 независимы (touch different files, no shared state) — выполняются параллельно после завершения фазы 2.

Phase Progress Log

Phase Domain Status Review Build Committed
Phase 1: Hash-router frontend Implemented
Phase 2: Split sections frontend Not Started
Phase 3: Dashboard fullstack Not Started
Phase 4: Palette fullstack Not Started
Phase 5: Quick actions frontend Not Started
Phase 6: Deep pages frontend Not Started

Final Review

  • Comprehensive code review (final-reviewer agent)
  • Security review (auth-touching changes in new endpoints)
  • Full build passes (server starts, no errors)
  • Manual smoke test
  • Merged to master

Acceptance Criteria (whole feature)

  • F5 на любом #sub-route восстанавливает state
  • admin.js ≤ 800L
  • Ctrl+K находит пользователя по имени за <100ms
  • Dashboard #overview показывает данные за 24ч
  • Per-row hover-actions на users/sessions
  • #users/123 = полноценная страница, не overlay
  • Все existing onclick handlers продолжают работать (backward compat в фазах 1-5)
  • Нет регрессий в тестах

Tech Stack & Conventions Reference

  • Stack: vanilla JS, Express 4, SQLite (better-sqlite3 sync), JWT, WebSocket+SSE, KaTeX, Lucide
  • Frontend: pages = frontend/*.html, JS = /js/* или frontend/js/*, все API через window.LS.*
  • UI primitives: LS.modal, LS.confirm, LS.toast, LS.state, LS.skeleton, LS.esc
  • localStorage prefix: ls_*
  • Icons: inline SVG .ic или Lucide CDN — эмоджи запрещены
  • Search в коде: только ast-index (пользователь категорически запретил Grep)
  • Backend: layer-based — controllers/, routes/, services/, db/migrations/NNN_*.sql