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 & Testing
You will need an API_KEY for production server.
- 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
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
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.
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
Include a 'x-api-key' header with your API_KEY in all requests
Parameter |
Type |
Description |
email |
string |
Required. Your email |
name |
string |
Required. Your name |
password |
string |
Required. Your password |
Parameter |
Type |
Description |
email |
string |
Required. Your email |
password |
string |
Required. Your password |
Parameter |
Type |
Description |
id |
string |
Required. Id of user to fetch |
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 |
Parameter |
Type |
Description |
id |
string |
Required. Id of user to delete |
POST /api/users/${userid}/albums
Parameter |
Type |
Description |
userid |
string |
Required. Id of user |
name |
string |
Required. Name of album |
GET /api/users/${userid}/albums/${albumid}
Parameter |
Type |
Description |
userid |
string |
Required. Id of user |
albumid |
string |
Required. Id of 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 /api/users/${userid}/albums/${albumid}
Parameter |
Type |
Description |
userid |
string |
Required. Id of user |
albumid |
string |
Required. Id of album |
GET /api/users/${userid}/albums
Parameter |
Type |
Description |
userid |
string |
Required. Id of user |
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 /api/photos/${photoid}
Parameter |
Type |
Description |
photoid |
string |
Required. Id of photo |
PUT /api/photos/${photoid}
Parameter |
Type |
Description |
photoid |
string |
Required. Id of photo |
DELETE /api/photos/${photoid}
Parameter |
Type |
Description |
photoid |
string |
Required. Id of photo |
GET /api/users/${userid}/albums/${albumid}/photos
Parameter |
Type |
Description |
userid |
string |
Required. Id of user |
albumid |
string |
Required. Id of album |