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>
This commit is contained in:
2026-04-16 16:54:45 +02:00
co-authored by Claude Sonnet 4.6
parent f75b499ad6
commit a26608791f
19 changed files with 591 additions and 230 deletions
+2 -2
View File
@@ -19,11 +19,11 @@ function IntroSection({ onStart }: { onStart: () => void }) {
<h2 className="text-2xl font-bold text-on-surface mb-4">
Go from zero to a deployable rclone setup in minutes
</h2>
<p className="text-base text-on-surface-variant max-w-lg mb-3">
<p className="text-base text-on-surface-container max-w-lg mb-3">
Ready2Blob walks you through configuring rclone for Azure Blob, S3, OneDrive, and 4 more
cloud backends no syntax knowledge required.
</p>
<p className="text-base text-on-surface-variant max-w-lg mb-8">
<p className="text-base text-on-surface-container max-w-lg mb-8">
The wizard generates a ready-to-use <code className="font-mono text-sm">rclone.conf</code>{' '}
and deployment scripts (Intune / RMM) you can download and run immediately.
</p>
@@ -85,7 +85,7 @@ export function BackendSelectionStep() {
return (
<div>
<h2 className="text-2xl font-bold text-on-surface mb-2">Step 1: Select Backend</h2>
<p className="text-sm text-on-surface-variant mt-1 mb-4">
<p className="text-sm text-on-surface-container mt-1 mb-4">
Name your remote and pick the cloud storage provider you want to connect to.
Your choice determines which credentials are required in the next step.
</p>
@@ -104,7 +104,7 @@ export function BackendSelectionStep() {
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
placeholder="Search backends..."
className="w-full px-4 py-2.5 rounded-xl border border-outline bg-surface-container text-on-surface placeholder:text-on-surface-variant/50 focus:outline-none focus:ring-2 focus:ring-primary mt-4"
className="w-full px-4 py-2.5 rounded-xl border border-outline bg-surface-container text-on-surface placeholder:text-on-surface-container/50 focus:outline-none focus:ring-2 focus:ring-primary mt-4"
/>
<div data-testid="backend-cards" className="mt-4">
{CATEGORY_ORDER.map(cat => {
+1 -1
View File
@@ -22,7 +22,7 @@ export function DeploymentStep() {
return (
<div>
<h2 className="text-2xl font-bold text-on-surface mb-2">Step 3: Deployment Options</h2>
<p className="text-sm text-on-surface-variant mt-1 mb-4">
<p className="text-sm text-on-surface-container mt-1 mb-4">
Choose how the generated config gets deployed to the target machine and which deployment
script formats to produce.
</p>
+1 -1
View File
@@ -46,7 +46,7 @@ export function OAuthInstructions({ backendName, authorizeCommand, steps }: OAut
{expanded && (
<div className="border-t border-outline px-4 py-3">
<ol className="flex flex-col gap-2 list-decimal list-inside text-sm text-on-surface-variant">
<ol className="flex flex-col gap-2 list-decimal list-inside text-sm text-on-surface-container">
{resolvedSteps.map((step, index) => {
// The second step contains the command — render it with a code block
if (step.startsWith('Run the authorize command:')) {
+1 -1
View File
@@ -225,7 +225,7 @@ export function RemoteConfigStep() {
return (
<div>
<h2 className="text-2xl font-bold text-on-surface mb-2">Step 2: Configure {backendLabel[backendType]}</h2>
<p className="text-sm text-on-surface-variant mt-1 mb-4">
<p className="text-sm text-on-surface-container mt-1 mb-4">
Enter the credentials for your selected backend. These values are written directly into the
generated rclone.conf and are never sent to any server.
</p>
+1 -1
View File
@@ -73,7 +73,7 @@ export function ReviewStep() {
return (
<div>
<h2 className="text-2xl font-bold text-on-surface mb-2">Step 4: Review &amp; Download</h2>
<p className="text-sm text-on-surface-variant mt-1 mb-4">
<p className="text-sm text-on-surface-container mt-1 mb-4">
Review your generated files and download them. Acknowledge the security notice before
copying or downloading credentials.
</p>