Archives v1.3 milestone (Phase 13: 18 rclone backends), updates PROJECT.md with all 30 validated requirements, reorganizes ROADMAP.md with all 4 milestones in collapsed details blocks, adds v1.2 and v1.3 retrospective entries. Also commits minor CSS token fixes in src/ (text-on-surface-container class alignment) that were uncommitted from phase 13 execution. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4.7 KiB
Milestones
v1.3 Backend Expansion (Shipped: 2026-04-16)
Phases completed: 1 phase (13), 4 plans Timeline: 2026-04-01 (1 day) Stats: 28 files changed, +3,959 / -206 lines; total 6,055 TypeScript LOC
Key accomplishments:
- BACKEND_REGISTRY expanded from 7 → 18 backends; BackendType derived from
keyof typeof— no manual union to maintain - BACKEND_SCHEMAS auto-generated from registry via
Object.fromEntries— zero per-backend boilerplate - OAuthInstructions collapsible component with backend-specific
rclone authorizecommands (TDD, 4 tests) - GdriveAuthToggle dual-auth component (OAuth token vs service account) for Google Drive
- BackendSelectionStep with category groups, instant search filtering, and inline SVG icons
- RemoteConfigStep wired for all 18 backends via
renderBackendFields()switch function;backendLabelderived from registry
Archive: .planning/milestones/v1.3-ROADMAP.md, .planning/milestones/v1.3-REQUIREMENTS.md
v1.2 UI Polish & Clarity (Shipped: 2026-04-01)
Phases completed: 5 phases (8–12), 14 plans Timeline: 2026-03-31 → 2026-04-01 (2 days) Stats: 78 files changed, +9,908 / -287 lines
Key accomplishments:
- Full MD3 color token system — CSS custom properties in a single token file, all components use semantic classes (
bg-surface,text-on-primary, etc.) - Dark mode toggle (System/Light/Dark) — DOM class toggle pattern (not React Context), persisted in localStorage, zero FOUC
- TextFieldMD3 with CSS-only floating label (
peer-[:not(:placeholder-shown)]), MD3 button hierarchy constants, rebuilt StepIndicator with numbered circles + checkmarks - App intro section, step descriptions, remote name live config preview, and contextual help/tooltip enrichment across all 18 credential fields
- Mobile-responsive layout, MD3
focus-visiblering-3 indicators on all interactive elements - Step fade/slide transition with
prefers-reduced-motionguard; auto-scroll to first validation error - Dark mode visibility fixes: semantic tokens on select, h2 headings, DeploymentStep form controls, ReviewStep security checkbox
Archive: .planning/milestones/v1.3-ROADMAP.md (includes v1.2 phases in archive)
v1.0 MVP (Shipped: 2026-03-27)
Phases completed: 4 phases, 18 plans Timeline: 2026-03-26 → 2026-03-27 (2 days) Stats: ~2,746 LOC TypeScript/TSX, 101 files, 73 commits
Key accomplishments:
- Vite 6 + React 18 + TypeScript scaffold with Tailwind v4, Vitest, and zero-error dev server
- Backend Schema Registry as single source of truth — drives form rendering, Zod validation, and config generation for Azure Blob, S3, S3-compatible
- 4 pure generator functions (rclone.conf, Intune install/detection, RMM script) — 61 tests, UTF-8 no-BOM, SYSTEM-context safe
- Multi-step wizard (backend selection → config → deployment options) with full back-navigation and no data loss — 87 tests GREEN
- Review + download + security layer — live preview, security gate, individual downloads, ZIP bundle, clipboard copy — 98 tests GREEN
- Pure client-side: no backend, no localStorage writes, credentials never leave the browser
Tech debt deferred to v1.1:
scriptTargetscollected in DeploymentStep but ignored by ReviewStep (all output blocks render unconditionally)- ReviewStep missing explicit Back button (UX inconsistency)
- Backend list hardcoded in BackendSelectionStep, not driven by BACKEND_REGISTRY keys
BackendFormValues<T>dead export in src/schemas/index.tsact()warnings in BackendSelectionStep tests
v1.1 Backlog & Tech Debt (Shipped: 2026-03-31)
Phases completed: 3 phases, 11 plans Timeline: 2026-03-30 → 2026-03-31 (2 days) Stats: 47 files changed, +7,311 / -210 lines
Key accomplishments:
- Registry-driven architecture — BACKEND_REGISTRY enriched with
displayName,description,fields; BackendSelectionStep fully data-driven viaObject.entries() - 4 new cloud backends — OneDrive, SFTP (password + key auth), GCS, and Backblaze B2 added end-to-end through registry, schema, and UI
- SftpAuthToggle component — CSS-hidden toggle for SFTP auth method (password vs SSH key), following AzureAuthToggle pattern
- RemoteConfigStep extended for all 7 backends — registry-loop renders all fields; SFTP has dedicated branch
- Inline field validation —
FieldDef.validateregex rules on 3 fields; wired viabuildZodSchema().regex() - Contextual tooltips (UX-01) —
FieldDef.tooltipTextrendered via ⓘ button across all field types
Tech debt carried forward:
- 7 browser UI verifications pending (confirmatory, not discovery)
- FieldRenderer aria inconsistency between text-branch and select-branch (cosmetic)
- Phase 7 Nyquist compliance partial