/ShutterSync

ShutterSync aims to address the need for professional photographers to efficiently share and collaborate on their work with clients, enhancing client engagement and project management.

Primary LanguageTypeScriptMIT LicenseMIT

CircleCI

MIT License React TypeScript Chakra ExpressJs MongoDB Heroku GCP Jest

Screenshot 1 Screenshot 2

ShutterSync

ShutterSync aims to address the need for professional photographers to efficiently share and collaborate on their work with clients, enhancing client engagement and project management.

Documentation

Documentation

Documentation & Testing You will need an API_KEY for production server.

Features

  • Lightweight image assets for display and you get to keep your original files
  • Light/dark mode toggle
  • Responsive design
  • User authentication
  • User authorization
  • User profile management
  • Album management
  • Photo management
  • Photo sharing

Tech Stack

Client: React, TypeScript, Chakra UI, Framermotion

Server: Node, Express, JavaScript, MongoDB, Cloudinary, Multer

Testing: Jest, React Testing Library, Supertest

Deployment: Heroku, Google Cloud Platform, Vercel

Installation

Run locally. Git clone first.

  npm install ShutterSync
  cd ShutterSync

You will need a Mongo DB setup if you want to run it with your DB.

Environment Variables

To run this project, you will need to add the following environment variables to your .env file

API_KEY DB_URI DB_URI PORT CLOUDINARY_API_KEY MAIL_HOST MAIL_PORT MAIL_USER MAIL_PWD MAIL_DOMAIN GOOGLE_PROJECT_ID GOOGLE_PRIVATE_KEY_ID GOOGLE_PRIVATE_KEY GOOGLE_CLIENT_EMAIL

CI Tests

CircleCI

API References

Include a 'x-api-key' header with your API_KEY in all requests

Sign up

  POST /api/auth/signup
Parameter Type Description
email string Required. Your email
name string Required. Your name
password string Required. Your password

Sign in

  POST /api/auth/signin
Parameter Type Description
email string Required. Your email
password string Required. Your password

Sign out

  GET /api/auth/signout

Get user

  GET /api/users/${id}
Parameter Type Description
id string Required. Id of user to fetch

Update user

  PUT /api/users/${id}
Parameter Type Description
id string Required. Id of user to update
name string Required. Your name
email string Required. Your email
password string Required. Your password

Delete user

  DELETE /api/users/${id}
Parameter Type Description
id string Required. Id of user to delete

Create an album

  POST /api/users/${userid}/albums
Parameter Type Description
userid string Required. Id of user
name string Required. Name of album

Get an album

  GET /api/users/${userid}/albums/${albumid}
Parameter Type Description
userid string Required. Id of user
albumid string Required. Id of album

Update an album

  PUT /api/users/${userid}/albums/${albumid}
Parameter Type Description
userid string Required. Id of user
albumid string Required. Id of album
name string Required. Name of album

Delete an album

  DELETE /api/users/${userid}/albums/${albumid}
Parameter Type Description
userid string Required. Id of user
albumid string Required. Id of album

Get all albums

  GET /api/users/${userid}/albums
Parameter Type Description
userid string Required. Id of user

Create a photo

  POST /api/users/${userid}/albums/${albumid}/photo
Parameter Type Description
userid string Required. Id of user
albumid string Required. Id of album
file binary Required. Name of photo

Get a photo

  GET /api/photos/${photoid}
Parameter Type Description
photoid string Required. Id of photo

Update a photo

  PUT /api/photos/${photoid}
Parameter Type Description
photoid string Required. Id of photo

Delete a photo

  DELETE /api/photos/${photoid}
Parameter Type Description
photoid string Required. Id of photo

Get all photos

  GET /api/users/${userid}/albums/${albumid}/photos
Parameter Type Description
userid string Required. Id of user
albumid string Required. Id of album

Authors