From d2561f40776f6cb621b7a966e68bba0b369b66fa Mon Sep 17 00:00:00 2001
From: Guillermo Zevallos
Date: Thu, 23 Mar 2023 13:34:14 -0500
Subject: [PATCH 01/66] added .example.env
---
client/.example.env | 2 ++
server/.example.env | 7 +++++++
2 files changed, 9 insertions(+)
create mode 100644 client/.example.env
create mode 100644 server/.example.env
diff --git a/client/.example.env b/client/.example.env
new file mode 100644
index 0000000..5f6feca
--- /dev/null
+++ b/client/.example.env
@@ -0,0 +1,2 @@
+VITE_GOOGLE_CLIENT_ID= google cloud
+VITE_SERVER= URL backend
\ No newline at end of file
diff --git a/server/.example.env b/server/.example.env
new file mode 100644
index 0000000..80a6239
--- /dev/null
+++ b/server/.example.env
@@ -0,0 +1,7 @@
+PORT=8000
+SD_API_Key= stable diffusion api key
+MONGODB_CNN= mongo connection
+GOOGLE_CLIENT_ID= google cloud
+GOOGLE_SECRET_ID= google cloud
+COOKIE_SECRET= any text that serves as a key for the cookie
+CLIENT_URL= ULR frontend
\ No newline at end of file
From 396e697e29b4ee1fe79671ae58a286058c3ac547 Mon Sep 17 00:00:00 2001
From: Guillermo Zevallos
Date: Thu, 23 Mar 2023 14:05:16 -0500
Subject: [PATCH 02/66] change
---
server/package.json | 1 -
1 file changed, 1 deletion(-)
diff --git a/server/package.json b/server/package.json
index f0a3989..88aee52 100644
--- a/server/package.json
+++ b/server/package.json
@@ -11,7 +11,6 @@
},
"keywords": [],
"author": "",
- "license": "ISC",
"dependencies": {
"bcryptjs": "^2.4.3",
"cloudinary": "^1.33.0",
From bd78026d77133116995105360fc94616e87b256a Mon Sep 17 00:00:00 2001
From: Guillermo Zevallos
Date: Thu, 23 Mar 2023 14:06:04 -0500
Subject: [PATCH 03/66] remove cloudinary
---
server/package-lock.json | 664 +--------------------------------------
server/package.json | 1 -
2 files changed, 2 insertions(+), 663 deletions(-)
diff --git a/server/package-lock.json b/server/package-lock.json
index 6498b88..3916f2a 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -7,10 +7,8 @@
"": {
"name": "server",
"version": "1.0.0",
- "license": "ISC",
"dependencies": {
"bcryptjs": "^2.4.3",
- "cloudinary": "^1.33.0",
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"express": "^4.18.2",
@@ -1137,15 +1135,6 @@
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "optional": true,
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/@tsconfig/node10": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
@@ -1358,7 +1347,7 @@
"version": "8.8.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "devOptional": true,
+ "dev": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -1370,46 +1359,11 @@
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
- "devOptional": true,
+ "dev": true,
"engines": {
"node": ">=0.4.0"
}
},
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "optional": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/agent-base/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/agent-base/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
"node_modules/arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -1421,18 +1375,6 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
- "node_modules/ast-types": {
- "version": "0.13.4",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
- "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
- "optional": true,
- "dependencies": {
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -1564,31 +1506,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/cloudinary": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/cloudinary/-/cloudinary-1.33.0.tgz",
- "integrity": "sha512-pdqOgd2QAMCFWujdYw1yhZ+lHPTzc6YIfg4WIvbRyoojIbSd/YgnHT8OSnk/OM4Q1WPFD5FM9EEom+4ehG80IA==",
- "dependencies": {
- "cloudinary-core": "^2.10.2",
- "core-js": "^3.6.5",
- "lodash": "^4.17.21",
- "q": "^1.5.1"
- },
- "engines": {
- "node": ">=0.6"
- },
- "optionalDependencies": {
- "proxy-agent": "^5.0.0"
- }
- },
- "node_modules/cloudinary-core": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/cloudinary-core/-/cloudinary-core-2.13.0.tgz",
- "integrity": "sha512-Nt0Q5I2FtenmJghtC4YZ3MZZbGg1wLm84SsxcuVwZ83OyJqG9CNIGp86CiI6iDv3QobaqBUpOT7vg+HqY5HxEA==",
- "peerDependencies": {
- "lodash": ">=4.0"
- }
- },
"node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -1621,22 +1538,6 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
- "node_modules/core-js": {
- "version": "3.27.2",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz",
- "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==",
- "hasInstallScript": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "optional": true
- },
"node_modules/cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
@@ -1655,15 +1556,6 @@
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true
},
- "node_modules/data-uri-to-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
- "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==",
- "optional": true,
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -1672,27 +1564,6 @@
"ms": "2.0.0"
}
},
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "optional": true
- },
- "node_modules/degenerator": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz",
- "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==",
- "optional": true,
- "dependencies": {
- "ast-types": "^0.13.2",
- "escodegen": "^1.8.1",
- "esprima": "^4.0.0",
- "vm2": "^3.9.8"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -1745,59 +1616,6 @@
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
- "node_modules/escodegen": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
- "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
- "optional": true,
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=4.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "optional": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "optional": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
@@ -1885,12 +1703,6 @@
"node": ">= 8.0.0"
}
},
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "optional": true
- },
"node_modules/fast-xml-parser": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz",
@@ -1907,15 +1719,6 @@
"url": "https://paypal.me/naturalintelligence"
}
},
- "node_modules/file-uri-to-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz",
- "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==",
- "optional": true,
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
@@ -1949,33 +1752,6 @@
"node": ">= 0.6"
}
},
- "node_modules/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "optional": true,
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
- "node_modules/ftp": {
- "version": "0.3.10",
- "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz",
- "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==",
- "optional": true,
- "dependencies": {
- "readable-stream": "1.1.x",
- "xregexp": "2.0.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -1994,52 +1770,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/get-uri": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz",
- "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==",
- "optional": true,
- "dependencies": {
- "@tootallnate/once": "1",
- "data-uri-to-buffer": "3",
- "debug": "4",
- "file-uri-to-path": "2",
- "fs-extra": "^8.1.0",
- "ftp": "^0.3.10"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/get-uri/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/get-uri/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
- "node_modules/graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
- "optional": true
- },
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -2085,79 +1815,6 @@
"node": ">= 0.8"
}
},
- "node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "optional": true,
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/http-proxy-agent/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/http-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "optional": true,
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/https-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -2193,12 +1850,6 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
- "node_modules/ip": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
- "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
- "optional": true
- },
"node_modules/ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
@@ -2207,21 +1858,6 @@
"node": ">= 0.10"
}
},
- "node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "optional": true
- },
- "node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "optional": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
"node_modules/kareem": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
@@ -2230,33 +1866,11 @@
"node": ">=12.0.0"
}
},
- "node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
- "optional": true,
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "optional": true,
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
@@ -2451,15 +2065,6 @@
"node": ">= 0.6"
}
},
- "node_modules/netmask": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
- "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
- "optional": true,
- "engines": {
- "node": ">= 0.4.0"
- }
- },
"node_modules/oauth": {
"version": "0.9.15",
"resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
@@ -2500,80 +2105,6 @@
"node": ">= 0.8"
}
},
- "node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "optional": true,
- "dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/pac-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==",
- "optional": true,
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4",
- "get-uri": "3",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "5",
- "pac-resolver": "^5.0.0",
- "raw-body": "^2.2.0",
- "socks-proxy-agent": "5"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/pac-proxy-agent/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/pac-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
- "node_modules/pac-resolver": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz",
- "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==",
- "optional": true,
- "dependencies": {
- "degenerator": "^3.0.2",
- "ip": "^1.1.5",
- "netmask": "^2.0.2"
- },
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -2647,15 +2178,6 @@
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
"integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
},
- "node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
- "optional": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -2668,54 +2190,6 @@
"node": ">= 0.10"
}
},
- "node_modules/proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz",
- "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==",
- "optional": true,
- "dependencies": {
- "agent-base": "^6.0.0",
- "debug": "4",
- "http-proxy-agent": "^4.0.0",
- "https-proxy-agent": "^5.0.0",
- "lru-cache": "^5.1.1",
- "pac-proxy-agent": "^5.0.0",
- "proxy-from-env": "^1.0.0",
- "socks-proxy-agent": "^5.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/proxy-agent/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
- "optional": true
- },
"node_modules/punycode": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
@@ -2724,15 +2198,6 @@
"node": ">=6"
}
},
- "node_modules/q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
- "engines": {
- "node": ">=0.6.0",
- "teleport": ">=0.2.0"
- }
- },
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@@ -2777,18 +2242,6 @@
"node": ">= 0.8"
}
},
- "node_modules/readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
- "optional": true,
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -2912,57 +2365,11 @@
"npm": ">= 3.0.0"
}
},
- "node_modules/socks-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==",
- "optional": true,
- "dependencies": {
- "agent-base": "^6.0.2",
- "debug": "4",
- "socks": "^2.3.3"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/socks-proxy-agent/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "optional": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/socks-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "optional": true
- },
"node_modules/socks/node_modules/ip": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
"integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
},
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
@@ -2980,12 +2387,6 @@
"node": ">= 0.8"
}
},
- "node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
- "optional": true
- },
"node_modules/strnum": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
@@ -3060,18 +2461,6 @@
"integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==",
"optional": true
},
- "node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
- "optional": true,
- "dependencies": {
- "prelude-ls": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -3113,15 +2502,6 @@
"resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
"integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
},
- "node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "optional": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -3169,22 +2549,6 @@
"node": ">= 0.8"
}
},
- "node_modules/vm2": {
- "version": "3.9.13",
- "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.13.tgz",
- "integrity": "sha512-0rvxpB8P8Shm4wX2EKOiMp7H2zq+HUE/UwodY0pCZXs9IffIKZq6vUti5OgkVCTakKo9e/fgO4X1fkwfjWxE3Q==",
- "optional": true,
- "dependencies": {
- "acorn": "^8.7.0",
- "acorn-walk": "^8.2.0"
- },
- "bin": {
- "vm2": "bin/vm2"
- },
- "engines": {
- "node": ">=6.0"
- }
- },
"node_modules/webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
@@ -3205,30 +2569,6 @@
"node": ">=12"
}
},
- "node_modules/word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/xregexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
- "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==",
- "optional": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "optional": true
- },
"node_modules/yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
diff --git a/server/package.json b/server/package.json
index 88aee52..84f3065 100644
--- a/server/package.json
+++ b/server/package.json
@@ -13,7 +13,6 @@
"author": "",
"dependencies": {
"bcryptjs": "^2.4.3",
- "cloudinary": "^1.33.0",
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"express": "^4.18.2",
From 11b34fc9f5a16e441361a3fbe4cfd53fe2f32bea Mon Sep 17 00:00:00 2001
From: Guillermo Zevallos <60801438+ZevaGuillo@users.noreply.github.com>
Date: Thu, 23 Mar 2023 13:07:40 -0600
Subject: [PATCH 04/66] Create LICENSE
---
LICENSE | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 LICENSE
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..713e7c7
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Guillermo Zevallos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
From 645974623f49f44816f7a44ae5a77b77352ff16f Mon Sep 17 00:00:00 2001
From: Guillermo Zevallos
Date: Thu, 23 Mar 2023 14:13:24 -0500
Subject: [PATCH 05/66] Update README
---
README.md | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++-
pixelai.png | Bin 0 -> 417484 bytes
2 files changed, 68 insertions(+), 1 deletion(-)
create mode 100644 pixelai.png
diff --git a/README.md b/README.md
index a07adb2..15582c6 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,68 @@
-# AI-image-generation
\ No newline at end of file
+
+# AI Image Generation (PixelAI)
+PixelAI is an application that uses artificial intelligence to generate images from text.
+
+## Features
+
+- Text-to-image generation
+- Share generated images in a gallery.
+- User management
+- Create images with predefined models.
+
+
+## Installation
+
+Install my project with npm
+
+```bash
+ npm install AI-image-generation
+ cd AI-image-generation
+```
+
+## Environment Variables
+
+To run this project, you will need to add the following environment variables to your .env file
+
+
+**Frontend:**
+```
+VITE_GOOGLE_CLIENT_ID
+VITE_SERVER
+```
+
+**Backend:**
+```
+PORT
+SD_API_Key
+MONGODB_CNN
+GOOGLE_CLIENT_ID
+GOOGLE_SECRET_ID
+COOKIE_SECRET
+CLIENT_URL
+```
+## Demo
+
+[Live Demo](https://pixelai.vercel.app/) 😎
+
+
+## Screenshots
+
+
+
+
+## Tech Stack
+
+**Client:** React, Typescript, Redux, TailwindCSS
+
+**Server:** Node, Express, MongoDB
+
+
+## Feedback
+
+If you have any feedback, please reach out to us at guiller.zeva16@gmail.com
+
+
+## License
+
+[MIT](https://choosealicense.com/licenses/mit/)
+
diff --git a/pixelai.png b/pixelai.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb41e804eb29033488e594a820f0a755fa683f50
GIT binary patch
literal 417484
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
|