Commit Graph
233 Commits
Author SHA1 Message Date
kawaandClaude Haiku 4.5 0dae30b4e2 fix: resolve remaining TypeScript compilation errors
- Add placeholder property to TextFieldMD3 component and props interface
- Fix vite.config.ts to import defineConfig from vitest/config instead of vite
- Add type guard for validate property in schemas/index.ts to handle readonly array union types
- Remove unused StepIndicatorWithDispatch placeholder function from tests

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-26 17:37:47 +02:00
kawaandClaude Haiku 4.5 c04b149756 fix: resolve TypeScript compilation errors in Docker build
- Add vitest globals type definitions to tsconfig.app.json
- Enable globals in vite.config.ts test configuration
- Add explicit vitest imports and type references to all .test.ts files
- Add missing `placeholder` property to PasswordFieldProps interface
- Add missing `required` field to test field definitions in FieldRenderer.test.tsx
- Update FieldDef and BackendMeta interfaces to support readonly arrays
- Fix readonly array type incompatibilities in BackendSelectionStep.tsx
- Fix form submission handler type mismatch in RemoteConfigStep.tsx
- Remove unused helper functions and imports from StepIndicator.test.tsx

These changes resolve all TypeScript compilation errors preventing the Docker build from completing.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-26 17:34:47 +02:00
kawa 2f14d217b1 Update .gitea/workflows/publish-image.yml 2026-08-26 17:17:38 +02:00
kawa 782e261bc8 Update .gitea/workflows/publish-image.yml 2026-08-26 17:16:11 +02:00
kawaandClaude Haiku 4.5 d717508385 ci(gitea): add workflow for publishing Docker images
Adds Gitea CI/CD workflow that builds and pushes Docker images to the registry on tag push or manual trigger.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-26 15:26:42 +02:00
kawaandClaude Opus 5 32159a404d feat(docker): add containerized nginx deployment with runtime base path
Two-stage build: node builds the static bundle, nginx serves it. The bundle is
built against a placeholder base token that the entrypoint rewrites to $BASE_URL
at start, so one image serves from any path without a rebuild.

nginx config caches hashed assets forever, never caches index.html, and applies
security headers (CSP, no framing, no referrer) suited to an app that handles
cloud credentials client-side.

.gitattributes pins LF on the container-consumed files, since core.autocrlf
would otherwise give the entrypoint a CRLF shebang.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 15:03:19 +02:00
kawaandClaude Opus 5 48802cf13c chore: replace hardcoded /vite.svg favicon link with a placeholder note
The absolute /vite.svg path breaks once the app is served from a base path,
and the file was never replaced with a real logo. Leave instructions for
restoring it with the %BASE_URL% placeholder instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 15:03:13 +02:00
kawaandClaude Sonnet 4.6 a26608791f chore: complete v1.3 milestone — Backend Expansion
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>
2026-04-16 16:54:45 +02:00
kawaandClaude Opus 4.6 f75b499ad6 docs(phase-13): complete phase execution and verification
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 17:33:19 +02:00
kawaandClaude Sonnet 4.6 0fa7a86545 docs(13-04): complete plan — visual verification approved, phase 13 done
- Task 3 visual verification approved by user
- SUMMARY.md updated to reflect all 3 tasks complete
- STATE.md updated: phase 13 complete, 100% progress
- ROADMAP.md updated: phase 13 all 4 plans complete

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 17:28:15 +02:00
kawa 46b149d900 docs(13-04): complete RemoteConfigStep full backend integration plan
- 13-04-SUMMARY.md: all 18 backends wired, 6 new tests, 282/282 pass
- STATE.md: session updated, decisions recorded, progress 100%
- ROADMAP.md: phase 13 marked complete (4/4 plans)
- REQUIREMENTS.md: REMOTE-05 marked complete
2026-04-01 16:59:38 +02:00
kawa 2c596c96a0 test(13-04): add tests for new backend form rendering
- Test gdrive: GdriveAuthToggle with OAuth Token and Service Account tabs
- Test dropbox: OAuthInstructions toggle button visible
- Test ftp: host, username, password, port, TLS mode fields
- Test webdav: URL, username, password, vendor select fields
- Test smb: host and username fields
- Test http: only URL field, no username/password
2026-04-01 16:58:00 +02:00
kawa d0c00f7e56 feat(13-04): wire all new backends into RemoteConfigStep
- Replace manual backendLabel record with registry-derived Object.fromEntries
- Import OAuthInstructions and GdriveAuthToggle components
- Refactor 3-branch ternary into renderBackendFields() switch function
- Add gdrive branch: GdriveAuthToggle + generic loop for non-auth fields
- Add onedrive branch: OAuthInstructions + generic loop
- Add dropbox/box/pcloud branches: OAuthInstructions + generic loop
- Default branch covers all other backends (azure-files, swift, ftp, webdav, smb, http, seafile)
2026-04-01 16:55:22 +02:00
kawa 7c6f0acfb1 docs(13-03): complete category-grouped searchable backend selection plan
- 13-03-SUMMARY.md: BackendSelectionStep refactored with categories/search/icons
- STATE.md: decisions added, progress updated to 98%, session updated
- ROADMAP.md: phase 13 progress updated (3/4 summaries)
- REQUIREMENTS.md: REMOTE-03 marked complete
2026-04-01 16:53:34 +02:00
kawa aeb1528163 test(13-03): add search filter and category collapse tests
- 6 new test cases covering REMOTE-03 acceptance criteria
- Tests: all 3 category headings render, ftp search shows FTP+SFTP
- Tests: no-match query hides all categories
- Tests: Cloudflare description match finds S3-Compatible
- Tests: all 18 backend cards render without search
- Tests: category heading hidden when all backends filtered out
2026-04-01 16:51:54 +02:00
kawa 0a70620fd5 feat(13-03): add icon prop to BackendCard and category/search to BackendSelectionStep
- BackendCard accepts optional icon prop rendered in flex row with name
- BackendSelectionStep groups 18 backends into 3 category sections
- Search bar (type=search/searchbox role) filters across displayName, description, category label, field labels
- Empty categories hidden via conditional rendering
- BACKEND_ICONS wired to BackendCard icon prop
- Changed search input to type=search to preserve getByRole('textbox') selector in existing tests
2026-04-01 16:50:49 +02:00
kawa 683faf6f11 feat(13-02): add GdriveAuthToggle and BackendIcons components
- GdriveAuthToggle: two-tab segmented control (OAuth Token / Service Account)
  following AzureAuthToggle pattern; both fields always registered via CSS
  hidden/block; OAuth tab embeds OAuthInstructions component
- BackendIcons: inline SVG icon map for all 18 backends (Partial<Record<BackendType,...>>)
  using fill="currentColor" for MD3 dark-mode compatibility, no external deps
- Created src/components/icons/ directory
2026-04-01 16:27:14 +02:00
kawa e00fc2b03b feat(13-02): implement OAuthInstructions component with tests
- Collapsible disclosure with expanded=false by default
- Shows backend-specific rclone authorize command in code block
- Accepts custom steps array or defaults to 5-step generic OAuth flow
- Styled with MD3 tokens (bg-surface-container, border-outline, rounded-xl)
- All 4 behavior tests pass (TDD)
2026-04-01 16:25:18 +02:00
kawaandClaude Sonnet 4.6 f7a79647f0 docs(13-01): complete registry refactor and 18-backend expansion plan
- 13-01-SUMMARY.md: full execution summary with decisions, deviations, and task commits
- STATE.md: updated position to phase 13 plan 01 complete, added key decisions
- ROADMAP.md: 13-01 checked off, phase 13 progress 1/4
- REQUIREMENTS.md: REMOTE-01, REMOTE-02, REMOTE-06 marked complete (3/6 v1.3 requirements)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 16:23:25 +02:00
kawa 3010cdb0c6 feat(13-01): auto-generate BACKEND_SCHEMAS, update RCLONE_TYPE_MAP for all 18 backends
- BACKEND_SCHEMAS now auto-generated via Object.fromEntries over registry keys
- RCLONE_TYPE_MAP expanded with 11 new entries for all 18 backend types
- RCLONE_TYPE_MAP exported for direct testing
- index.test.ts: added auto-generation coverage (3 tests) + 4 new backend schema smoke tests
- rclone-conf.test.ts: added RCLONE_TYPE_MAP exhaustiveness test + gdrive/ftp/smb conf output tests
- Rule 1 fix: BackendSelectionStep test used /next/i regex matching WebDAV "NextCloud" card buttons
2026-04-01 16:20:18 +02:00
kawa b8c64937ea feat(13-01): add 18 backends to BACKEND_REGISTRY with category field
- Removed explicit BackendType union literal; derived via keyof typeof BACKEND_REGISTRY
- Added BackendCategory type and category field to all 18 backend entries
- Added BackendMeta interface for individual entry typing
- Removed circular Record<BackendType,...> cast; replaced with as const
- Added 11 new backends: azure-files, swift, gdrive, dropbox, box, pcloud, ftp, webdav, smb, http, seafile
- Updated registry.test.ts: 48 tests covering all 18 backends, category assertions, field validation
2026-04-01 16:16:58 +02:00
kawaandClaude Opus 4.6 7e02b01595 fix(13): revise plans based on checker feedback
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:04:24 +02:00
kawaandClaude Opus 4.6 4bf3f1e45f docs(13): create phase plan for backend expansion
4 plans across 3 waves to expand from 7 to 17 rclone backends:
- Plan 01 (W1): Registry refactoring, BackendType derivation, 10 new entries
- Plan 02 (W2): OAuthInstructions, GdriveAuthToggle, BackendIcons components
- Plan 03 (W2): BackendSelectionStep UX overhaul with categories, search, icons
- Plan 04 (W3): RemoteConfigStep wiring for all new backends + visual verify

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:58:51 +02:00
kawa fac90462f7 docs(phase-13): add research and validation strategy 2026-04-01 15:50:21 +02:00
kawaandClaude Sonnet 4.6 5228ae2a0a docs(13): research phase domain — rclone backend expansion
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 15:49:15 +02:00
kawaandClaude Opus 4.6 9437d6c9b5 docs(state): record phase 13 context session
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:27:41 +02:00
kawaandClaude Opus 4.6 31725bca4f docs(13): capture phase context
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:27:30 +02:00
kawaandClaude Opus 4.6 934bbfbf62 docs(phase-12): complete phase execution and verification
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:09:19 +02:00
kawa 5986d5dbec docs(12-01): complete dark mode visibility fixes plan
- SUMMARY.md: dark mode h2 and form control semantic token fixes
- STATE.md: position updated, decisions recorded
- ROADMAP.md: phase 12 marked complete
- REQUIREMENTS.md: DARK-01, DARK-02 marked complete
2026-04-01 14:06:25 +02:00
kawa d3329311e1 docs(12-02): complete FieldRenderer select dark mode fix plan
- 12-02-SUMMARY.md: select element bg-surface-container text-on-surface fix
- STATE.md: updated position and decisions
- ROADMAP.md: phase 12 progress updated
- REQUIREMENTS.md: DARK-03 marked complete
2026-04-01 14:05:23 +02:00
kawa 945f90d789 feat(12-01): style DeploymentStep form controls and ReviewStep checkbox
- DeploymentStep: include-install label uses text-on-surface, checkbox uses accent-primary
- DeploymentStep: fieldset legends use text-on-surface-container font-medium
- DeploymentStep: all radio/checkbox labels use flex gap-2 text-on-surface cursor-pointer
- DeploymentStep: all radios and checkboxes use accent-primary
- ReviewStep: security checkbox uses accent-[var(--r2b-warning)] for warning-themed accent
2026-04-01 14:05:14 +02:00
kawa f6b4070ff9 feat(12-01): add semantic token classes to all step h2 headings
- BackendSelectionStep h2: text-2xl font-bold text-on-surface mb-2
- RemoteConfigStep h2: text-2xl font-bold text-on-surface mb-2
- DeploymentStep h2: text-2xl font-bold text-on-surface mb-2
- ReviewStep h2: text-2xl font-bold text-on-surface mb-2
2026-04-01 14:04:21 +02:00
kawa 94e90e0641 feat(12-02): add bg-surface-container text-on-surface to select element in FieldRenderer
- Added bg-surface-container and text-on-surface semantic token classes to select element className
- Fixes select dropdown invisible text in dark mode (browser-applied white background)
- 204 tests pass, zero regressions
2026-04-01 14:03:57 +02:00
kawaandClaude Opus 4.6 a193a183f8 docs(12): create phase plan for dark mode visibility fixes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 14:00:04 +02:00
kawaandClaude Opus 4.6 94f70deb3d docs(phase-12): add research and validation strategy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 13:55:55 +02:00
kawaandClaude Sonnet 4.6 c5110b1c67 docs(12): research phase dark mode visibility fixes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 13:54:51 +02:00
kawaandClaude Opus 4.6 0f6e0f7a5b test(11): complete UAT - 8 passed, 0 issues
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 13:46:44 +02:00
kawaandClaude Opus 4.6 40a82487dd docs(phase-11): complete phase execution and verification
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 13:36:12 +02:00
kawa 0c27818030 docs(11-02): complete step animation and scroll-to-error plan
- Create 11-02-SUMMARY.md documenting POLISH-03 and POLISH-04 completion
- Update STATE.md: phase 11 complete, 100% progress, new decisions added
- Update ROADMAP.md: phase 11 plan progress (2/2 complete)
- Update REQUIREMENTS.md: mark POLISH-03 and POLISH-04 complete
2026-04-01 13:32:39 +02:00
kawa 90cdeda142 feat(11-02): auto-scroll to first errored field on validation failure
- BackendSelectionStep: add onInvalidSubmit scrolling to remote-name input
- BackendSelectionStep: pass onInvalidSubmit to form onSubmit and handleCardClick
- RemoteConfigStep: add FieldErrors import from react-hook-form
- RemoteConfigStep: add onInvalidSubmit scrolling to first errored field by key
- RemoteConfigStep: pass onInvalidSubmit to form onSubmit
2026-04-01 13:30:39 +02:00
kawa 8b7daa860c test(11-02): add failing tests for auto-scroll to first error on validation failure
- Add scrollIntoView mock (vi.fn()) in beforeEach to both test files
- Add POLISH-04 test in BackendSelectionStep: scrolls to remote-name on empty submit
- Add POLISH-04 test in RemoteConfigStep: scrolls to first errored field on empty submit
2026-04-01 13:29:48 +02:00
kawa 9af58bc970 feat(11-02): add step transition animation with reduced-motion guard
- Add @keyframes step-in (opacity 0->1, translateY 8px->0, 200ms ease-out) to index.css
- Register --animate-step-in token in @theme block
- Add @media prefers-reduced-motion: reduce guard disabling animation
- Add key={state.currentStep} and animate-step-in class to step wrapper in App.tsx
2026-04-01 13:28:38 +02:00
kawa 3af06493ea docs(11-01): complete mobile responsiveness and MD3 focus indicators plan
- 11-01-SUMMARY.md: execution summary for POLISH-01/POLISH-02
- STATE.md: position advanced to phase 11 plan 01 complete, decisions added
- ROADMAP.md: phase 11 progress updated (1/2 plans complete)
- REQUIREMENTS.md: POLISH-01 and POLISH-02 marked complete
2026-04-01 13:26:58 +02:00
kawa 9015db565e feat(11-01): MD3 focus-visible ring-3 indicators on all interactive elements
- md3-buttons.ts: upgrade ring-2/50 to ring-3 on all three constants (FILLED, OUTLINED, TEXT)
- BackendCard: add focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-primary
- StepIndicator: upgrade group-focus-visible completed-step circle from ring-2/50 to ring-3
- ThemeToggle: add focus-visible ring-3 with ring-inset to both selected/unselected branches
- FieldRenderer: select uses focus-visible:ring-2 (was focus:ring-2); tooltip buttons get focus-visible:ring-2 rounded
2026-04-01 13:25:00 +02:00
kawa 07f97d9f25 feat(11-01): mobile-responsive layout for wizard steps
- BackendSelectionStep: responsive grid (1-col mobile, 2-col desktop) for cards; button row stacks vertically on mobile
- BackendCard: add w-full to fill grid cell on all viewports
- RemoteConfigStep/DeploymentStep/ReviewStep: flex-col sm:flex-row button rows; w-full sm:w-auto on Back/Next buttons
- StepIndicator: add hidden sm:block to all three label spans (completed, active, future)
2026-04-01 13:23:43 +02:00
kawaandClaude Opus 4.6 e22d44d807 docs(11-polish-responsiveness): create phase plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 13:14:51 +02:00
kawa 4472c1294c docs(phase-11): add research and validation strategy 2026-04-01 13:10:23 +02:00
kawaandClaude Sonnet 4.6 5fb0300f80 docs(phase-11): research polish & responsiveness phase
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 13:09:13 +02:00
kawaandClaude Opus 4.6 b7ba16326f docs(phase-10): complete phase execution and verification
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 13:02:45 +02:00
kawa 74fa072e10 docs(10-02): complete live remote name preview plan
- Create 10-02-SUMMARY.md with task details and deviations
- Update STATE.md: add decision, session info, update progress to 100%
- Update ROADMAP.md: phase 10 marked complete (3/3 summaries)
- Update REQUIREMENTS.md: mark UX-02 complete
2026-04-01 12:58:27 +02:00