DEV Community

Rahul
Rahul

Posted on

Building a Photo Sharing App with MERN

Modern web applications often require users to upload, organize, and share images. To learn more about full-stack development and cloud-based media management, I built CloudPix, a photo-sharing application using the MERN Stack.

In this article, I'll share how I designed and developed the application, the technologies I used, and the challenges I encountered during development.

Project Overview

CloudPix is a photo-sharing platform that allows users to:

  • Create and manage albums
  • Upload images
  • Organize photos into collections
  • Search for albums
  • Authenticate using Google OAuth

The goal was to build a scalable application while gaining hands-on experience with React, Node.js, MongoDB, and Cloudinary.

Tech Stack

The application was built using:

Frontend

  • React.js
  • React Router
  • Bootstrap

Backend

  • Node.js
  • Express.js

Database

  • MongoDB
  • Mongoose

Authentication

  • Google OAuth
  • JSON Web Tokens (JWT)

Media Storage

  • Cloudinary

Application Architecture

The project follows a typical MERN architecture:

  1. React handles the user interface.
  2. Express provides REST APIs.
  3. MongoDB stores application data.
  4. Cloudinary stores uploaded images.
  5. Google OAuth manages authentication.

This separation keeps the application organized and easier to maintain.

User Authentication

To simplify the login process, I integrated Google OAuth authentication.

The authentication flow works as follows:

  1. User clicks "Continue with Google".
  2. Google verifies the user's identity.
  3. The backend validates the token.
  4. User information is stored in MongoDB.
  5. JWT tokens are generated for protected routes.

This provides a secure and user-friendly authentication experience.

Album Management

One of the core features of CloudPix is album management.

Users can:

  • Create albums
  • View album details
  • Edit album information
  • Delete albums

Each album acts as a container for multiple uploaded images.

This structure makes it easier to organize photos and improves the overall user experience.

Image Uploads

Image uploads were implemented using Cloudinary.

The upload process includes:

  1. Selecting an image from the frontend.
  2. Sending the image to the backend.
  3. Uploading the file to Cloudinary.
  4. Receiving a secure image URL.
  5. Saving image information in MongoDB.

Using Cloudinary reduced storage requirements on the server while improving image delivery performance.

Search Functionality

To help users find content quickly, I implemented album search functionality.

Users can search albums based on:

  • Album name
  • Keywords

Search improves usability, especially when managing large numbers of albums.

Database Design

The database consists primarily of:

User Collection

Stores:

  • User information
  • Authentication details

Album Collection

Stores:

  • Album name
  • Description
  • Owner information

Image Collection

Stores:

  • Image URL
  • Cloudinary public ID
  • Album reference

Using separate collections helped maintain a clean and scalable database structure.

Challenges Faced

During development, I encountered several challenges:

Managing Image Uploads

Handling image uploads efficiently required proper integration between Express and Cloudinary.

Authentication Flow

Managing Google OAuth and JWT authentication together required careful backend validation.

Database Relationships

Creating relationships between users, albums, and images required thoughtful schema design.

Error Handling

Proper validation and error handling were necessary to ensure a smooth user experience.

Key Learnings

Building CloudPix helped me improve my understanding of:

  • MERN Stack architecture
  • REST API development
  • Authentication systems
  • Cloudinary integration
  • Database design with MongoDB
  • Full-stack application deployment

The project also provided valuable experience in organizing a larger application with multiple interconnected features.

Conclusion

CloudPix was an excellent learning experience that allowed me to combine authentication, cloud storage, database management, and frontend development into a single project.

By building a complete photo-sharing platform using the MERN Stack, I gained practical experience in designing scalable web applications and solving real-world development challenges.

As I continue my full-stack development journey, I plan to expand CloudPix with additional features such as image sharing, comments, and user interactions.

Top comments (0)