Skip to main content
Search...

course overview

Build PhotoDuck — a photo sharing app with resumable uploads — from scratch.

What You Will Build

This course walks you through building PhotoDuck -- a photo sharing app with a full upload pipeline. You start with a single file upload and finish with a production-grade system using multipart uploads, resumable transfers, React integration, persistence, and validation.

Loading diagram...

Who Is This For

  • Developers who are new to @gentleduck/upload and want a structured learning path
  • Teams evaluating @gentleduck/upload for file upload needs
  • Anyone who learns best by building something real

Prerequisites

  • TypeScript basics (types, interfaces, async/await)
  • React basics (components, hooks, context)
  • Node.js installed (v18+) or Bun
  • Basic knowledge of S3/MinIO is helpful but not required

How to Follow Along

Each chapter builds on the previous one. Every chapter ends with:

  • A checkpoint showing the complete code so far
  • FAQ questions answering common doubts about what you just learned

Estimated time: ~10-15 minutes per chapter.

You can follow along by creating a new project:

Create a new project directory and initialize it:

mkdir photoduck && cd photoduck
npm init -y
npm install @gentleduck/upload typescript tsx
npx tsc --init
mkdir src
mkdir photoduck && cd photoduck
npm init -y
npm install @gentleduck/upload typescript tsx
npx tsc --init
mkdir src

You are ready. Start with Chapter 1: Your First Upload.

Course Map

ChapterTopicWhat You Learn
1Your First UploadcreateUploadClient, UploadApi, dispatch, phases, progress events
2Strategies & BackendsPostStrategy, createStrategyRegistry, presigned URLs, strategy architecture
3React IntegrationUploadProvider, useUploader, dropzone UI, progress bars
4Multipart UploadsmultipartStrategy, chunked uploads, signPart, completeMultipart, concurrency
5Validation & RejectionUploadValidationRules, file type/size limits, custom validators, rejection events
6Persistence & ResumePersistenceAdapter, cursors, rebind, resumable uploads across sessions
7Plugins & HooksUploadPlugin, UploadHooks, debugging, metrics, custom extensions
8Production ReadinessRetry policies, error normalization, concurrency tuning, fingerprinting, testing