The second part of the PDF conversion project focuses on the React components that make an asynchronous upload-and-convert workflow understandable to a visitor. The goal is to keep the page responsive while files are being processed elsewhere.

The Image component represents one converted page. It checks whether its image is available, shows a grid-style loading indicator while it waits, and opens a larger modal view when a visitor selects a completed image. A download control remains close to the image it represents.

Because processing time is not fixed, the component polls for the image at gradually longer intervals. It stops after a sensible timeout instead of retrying forever, which avoids an endless loading state when a conversion fails.

The PdfImages wrapper manages pagination and limits the number of thumbnails visible at once. It presents file details, calculates page ranges, and maps the returned image metadata into reusable Image components.

The S3Upload component asks the application API for a signed request, then sends the selected file directly to S3. While those requests are in progress, it displays a loading state; once the upload completes, it prepares image paths for the first result pages.

A separate Zip component waits for the archive generated by the backend and replaces its loader with a download button once it is ready. The final deployment step adds Amplify hosting, publishes the application resources, and leaves room for a custom domain when the project is ready.