Build a Google Photos Clone with Next.js and Cloudinary – Tutorial
Learn how to use Next.js and Cloudinary to build a Google Photos Clone. Your app will be able to transform and enhance the images.
✏️ Colby Fayock created this course.
https://colbyfayock.com/
🔗 Starter Template: https://github.com/colbyfayock/demo-photo-library-starter
🔗 Bonus Credits & Background Removals: https://cld.media/freecodecamp
🔗 Next Cloudinary: https://next.cloudinary.dev/
🔗 Photobox: https://www.photobox.dev/
Cloudinary provided a grant to make this course possible.
⭐️ Contents ⭐️
⌨️ (0:00:00) Intro
⌨️ (0:03:07) Creating a new Next.js app from a starter template
⌨️ (0:05:32) Installing & Configuring the Cloudinary Node.js SDK
⌨️ (0:10:00) Listing photos from Cloudinary
⌨️ (0:15:07) Optimized & Responsive Images with Next Cloudinary
⌨️ (0:23:29) Uploading Images with the CldUploadButton
⌨️ (0:32:24) Passing Server Data to the Client with Tanstack Query
⌨️ (0:39:58) Creating a custom hook to manage resource requests
⌨️ (0:43:53) Optimisticly updating UI on Upload using Tanstack Query
⌨️ (0:52:18) Tagging Images & Fetching Images by Tag
⌨️ (0:55:33) Optimizing Server to Client resource and request management
⌨️ (1:01:55) Creating dynamic routes for viewing individual images
⌨️ (1:11:01) Using AI to Improve, Restore, and Remove Backgrounds from Images
⌨️ (1:28:32) Adding animated loading placeholders for images
⌨️ (1:34:33) Dynamically Cropping & Resizing images to different aspect ratios
⌨️ (1:46:48) Customizing images with filters and effects
⌨️ (1:55:23) Saving and updating an image with applied transformations and effects
⌨️ (2:11:46) Refreshing and updating UI state on save
⌨️ (2:19:14) Saving an image as a copy
⌨️ (2:23:14) Deleting images
⌨️ (2:30:04) Invalidating Tanstack Query tags on change
⌨️ (2:33:01) Adding image resource metadata to info panel
⌨️ (2:37:32) Setting up a Next.js loading UI for React Suspense streaming
⌨️ (2:42:13) Adding loading indicators to homepage gallery
⌨️ (2:43:08) Creating a collage from multiple images
⌨️ (3:06
Watch on YouTube ↗
(saves to browser)
Sign in to unlock AI tutor explanation · ⚡30
Playlist
Uploads from freeCodeCamp.org · freeCodeCamp.org · 0 of 60
← Previous
Next →
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
React: Production Server Setup Part 2 - Live Coding with Jesse
freeCodeCamp.org
cookies vs localStorage vs sessionStorage - Beau teaches JavaScript
freeCodeCamp.org
Browser history tutorial - Beau teaches JavaScript
freeCodeCamp.org
Graph Data Structure Intro (inc. adjacency list, adjacency matrix, incidence matrix)
freeCodeCamp.org
React: Parameterized Routing with Next.js - Live Coding with Jesse
freeCodeCamp.org
React: Dealing with jQuery Issues - Live Coding with Jesse
freeCodeCamp.org
setInterval and setTimeout: timing events - Beau teaches JavaScript
freeCodeCamp.org
Browser and Device Testing - Live Coding with Jesse
freeCodeCamp.org
Last Minute Updates - Live Coding with Jesse
freeCodeCamp.org
Post Launch Updates - Live Coding with Jesse
freeCodeCamp.org
React: Setting Up Google Analytics - Live Coding with Jesse
freeCodeCamp.org
React: Masonry Layout - Live Coding with Jesse
freeCodeCamp.org
Load Balancing Digital Ocean Droplets - Live Coding with Jesse
freeCodeCamp.org
try, catch, finally, throw - error handling in JavaScript
freeCodeCamp.org
Load Balancing: SSL Passthrough Setup - Live Coding with Jesse
freeCodeCamp.org
Graphs: breadth-first search - Beau teaches JavaScript
freeCodeCamp.org
React: Masonry Layout Part 2 - Live Coding with Jesse
freeCodeCamp.org
React: WordPress API Live Search - Live Coding with Jesse
freeCodeCamp.org
Creating WordPress Custom Post Types - Live Coding With Jesse
freeCodeCamp.org
Dates - Beau teaches JavaScript
freeCodeCamp.org
Miscellaneous Front End Updates - Live Coding with Jesse
freeCodeCamp.org
Merging a Pull Request from GitHub - Live Coding with Jesse
freeCodeCamp.org
React + Prettier + Standard JS - Live Coding with Jesse
freeCodeCamp.org
React: Sortable Responsive Table - Live Coding with Jesse
freeCodeCamp.org
Geolocation Sorting by Distance - Live Coding with Jesse
freeCodeCamp.org
Tradeoff Matrix - Agile Software Development
freeCodeCamp.org
The Definition of Ready - Agile Software Development
freeCodeCamp.org
Getting first React job without experience - Ask Preethi
freeCodeCamp.org
React: Google Analytics Click Tracking - Live Coding with Jesse
freeCodeCamp.org
Submitting a PR to an Open Source Project - Live Coding with Jesse
freeCodeCamp.org
Should I go back to school to get CS degree? - Ask Preethi
freeCodeCamp.org
Hero Section CSS Changes - Live Coding with Jesse
freeCodeCamp.org
Working Agreement - Agile Software Development
freeCodeCamp.org
A day at Pennybox with Co-Founder Reji Eapen
freeCodeCamp.org
React: Sorting and Filtering Data - Live Coding with Jesse
freeCodeCamp.org
React: Sorting and Filtering Data Part 2 - Live Coding with Jesse
freeCodeCamp.org
React: Building a New UI - Live Coding with Jesse
freeCodeCamp.org
Definition of Done - Agile Software Development
freeCodeCamp.org
Getting started with jQuery (tutorial) - Beau teaches JavaScript
freeCodeCamp.org
Making a React Blog with WordPress Content - Live Coding with Jesse
freeCodeCamp.org
React, NextJS, CSS - Live Coding with Jesse
freeCodeCamp.org
jQuery events - Beau teaches JavaScript
freeCodeCamp.org
React/NextJS Routing and WordPress API Custom Types - Live Coding with Jesse
freeCodeCamp.org
React: Working with API Data - Live Coding with Jesse
freeCodeCamp.org
React: Refactoring Components - Live Streaming with Jesse
freeCodeCamp.org
jQuery effects - Beau teaches JavaScript
freeCodeCamp.org
More React Refactoring - Live Coding with Jesse
freeCodeCamp.org
animate in jQuery - Beau teaches JavaScript
freeCodeCamp.org
"Finishing" My React Site - Live Coding with Jesse
freeCodeCamp.org
Starting a New React Project (P2D1) - Live Coding with Jesse
freeCodeCamp.org
React Project 2 Day 2: Learning Material UI - Live Coding with Jesse
freeCodeCamp.org
The Agile Manifesto - Agile Software Development
freeCodeCamp.org
jQuery: get and set with http, text, val, and attr - Beau teaches JavaScript
freeCodeCamp.org
React Project 2 Day 3 - Live Coding with Jesse
freeCodeCamp.org
The INVEST approach to product backlog items
freeCodeCamp.org
React Project 2 Day 4 - Live Coding with Jesse
freeCodeCamp.org
Chickens and Pigs - Agile Software Development
freeCodeCamp.org
React Project 2 Day 5 - Live Coding with Jesse
freeCodeCamp.org
jQuery: add and remove DOM elements - Beau teaches JavaScript
freeCodeCamp.org
React Project 2 Day 6 - Live Coding with Jesse
freeCodeCamp.org
More on: LLM Engineering
View skill →Related AI Lessons
⚡
⚡
⚡
⚡
The Layoffs Aren’t About AI Replacing You. They’re About Funding It.
Medium · AI
The shortest boom in history: why the “AI Era” will end sooner than you think.
Medium · AI
Elon Musk has given up on solar power (on Earth)
TechCrunch AI
The 2026 Guide to AI-Powered Job Hunting (Every Tool, Tactic, and Trap)
Dev.to · Thy Alpha
🎓
Tutor Explanation
DeepCamp AI