├── .browserslistrc ├── .gitignore ├── LICENSE ├── README.md ├── api ├── package-lock.json ├── package.json └── server.js ├── appwrite ├── .env └── docker-compose.yml ├── babel.config.js ├── jsconfig.json ├── package-lock.json ├── package.json ├── postcss.config.js ├── public ├── cardhover.css ├── favicon.ico ├── images │ ├── tailwinder-buttons-poster.png │ ├── tailwinder-cards-poster.png │ ├── tailwinder-navbars-poster.png │ └── tailwinder-popup-poster.png └── index.html ├── src ├── App.vue ├── assets │ ├── images │ │ ├── edit-svg.svg │ │ ├── github.png │ │ ├── guest-icon.png │ │ ├── robotthumbnail.png │ │ └── upload-icon.png │ └── tailwind.css ├── components │ ├── Academycard.vue │ ├── Addcomment.vue │ ├── Card.vue │ ├── Changingname.vue │ ├── Comments.vue │ ├── Communitycard.vue │ ├── Componentcards.vue │ ├── Contributions.vue │ ├── Deepgram.vue │ ├── Flashmessage.vue │ ├── Footer.vue │ ├── Imagesupload.vue │ ├── Microphone.vue │ ├── Navbar.vue │ ├── Stoprecroding.vue │ ├── Tailwinder.vue │ ├── auth │ │ ├── Login.vue │ │ └── Signup.vue │ ├── buttons │ │ ├── Infobtn.vue │ │ ├── Primarybtn.vue │ │ └── Secondarybtn.vue │ ├── dropdown │ │ ├── Dropdown.vue │ │ ├── Dropdowncontent.vue │ │ └── Dropdownitems.vue │ └── main │ │ ├── Academy.vue │ │ ├── Addacademy.vue │ │ ├── Addcomponent.vue │ │ ├── Addthread.vue │ │ ├── Authpage.vue │ │ ├── Community.vue │ │ ├── Components.vue │ │ ├── Componentview.vue │ │ ├── Homepage.vue │ │ ├── Profile.vue │ │ ├── Threadview.vue │ │ ├── Tools.vue │ │ └── Videoview.vue ├── main.js ├── router │ └── index.js ├── services │ ├── UserService.js │ ├── bucketsService.js │ └── collectionService.js ├── store.js └── utils.js ├── tailwind.config.js └── vue.config.js /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | not ie 11 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Mostafa Said 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api", 3 | "version": "1.0.0", 4 | "description": "example project react with nodejs", 5 | "main": "server.js", 6 | "scripts": { 7 | "start": "node server.bundle.js", 8 | "build": "webpack", 9 | "dev": "nodemon ./server.js localhost 3080" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/MooseSaeed/appwrite-app" 14 | }, 15 | "author": "Mostafa Said", 16 | "license": "MIT", 17 | "bugs": { 18 | "url": "https://github.com/MooseSaeed/appwrite-app" 19 | }, 20 | "homepage": "https://github.com/bbachi/vuejs-nginx-docker#readme", 21 | "dependencies": { 22 | "express": "^4.17.3", 23 | "http-proxy-middleware": "^1.0.4", 24 | "node-appwrite": "^5.1.0" 25 | }, 26 | "devDependencies": { 27 | "del": "^5.1.0", 28 | "fancy-log": "^1.3.3", 29 | "gulp": "^4.0.2", 30 | "gulp-zip": "^5.0.1", 31 | "nodemon": "^2.0.15", 32 | "webpack": "^4.43.0", 33 | "webpack-cli": "^3.3.11", 34 | "webpack-stream": "^5.2.1" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /api/server.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const path = require("path"); 3 | const app = express(), 4 | bodyParser = require("body-parser"); 5 | port = 3080; 6 | 7 | // Init SDK 8 | const sdk = require("node-appwrite"); 9 | let client = new sdk.Client(); 10 | let users = new sdk.Users(client); 11 | let storage = new sdk.Storage(client); 12 | let database = new sdk.Database(client); 13 | 14 | client 15 | .setEndpoint("http://localhost/v1") // Your API Endpoint 16 | .setProject("tailwinder") // Your project ID 17 | .setKey( 18 | "516ab942fb7ea7439486dec71be12a566aec844ed3370b06a29d8c49f0eede4f1516efc45ad791a70d6be898d8d383cb0f4082f24c44ff509d7b7d3b14128721caf2c964b537568772a4b0d8aab52f9a55c0360eb39f9002eb7ee25d58848a351b4315388ee67eef527536e266d28601b6b25cdbdb5f881f674871cdbeaa7547" 19 | ); // Your secret API key 20 | 21 | app.use(bodyParser.json()); 22 | app.use(bodyParser.urlencoded({ extended: false })); 23 | app.use(express.static(path.join(__dirname, "../appwrite-app/build"))); 24 | 25 | //get user by ID 26 | app.get("/v1/users/:id", (req, res) => { 27 | let promise = users.get(req.params.id); 28 | 29 | promise.then( 30 | function (response) { 31 | res.json(response); 32 | }, 33 | function (error) { 34 | console.log(error); 35 | } 36 | ); 37 | }); 38 | 39 | //get user by ID 40 | app.get("/v1/users/:userid/prefs", (req, res) => { 41 | let promise = users.getPrefs(req.params.userid); 42 | 43 | promise.then( 44 | function (response) { 45 | res.json(response); 46 | }, 47 | function (error) { 48 | console.log(error); 49 | } 50 | ); 51 | }); 52 | 53 | // List collections 54 | app.get("/v1/database/collections", (req, res) => { 55 | let promise = database.listCollections(); 56 | 57 | promise.then( 58 | function (response) { 59 | res.json(response); 60 | }, 61 | function (error) { 62 | res.json(error); 63 | } 64 | ); 65 | }); 66 | 67 | // create new bucket 68 | app.post("/v1/storage/buckets", function (req, res) { 69 | let promise = storage.createBucket( 70 | req.body.bucketId, 71 | req.body.bucketName, 72 | "file" 73 | ); 74 | 75 | promise.then( 76 | function (response) { 77 | res.json(response); 78 | }, 79 | function (error) { 80 | console.log(error); 81 | } 82 | ); 83 | }); 84 | 85 | //get list of files in bucket 86 | app.get("/v1/storage/buckets/:id/files", (req, res) => { 87 | let promise = storage.listFiles(req.params.id); 88 | 89 | promise.then( 90 | function (response) { 91 | res.json(response); 92 | }, 93 | function (error) { 94 | res.json(error); 95 | } 96 | ); 97 | }); 98 | 99 | //Delete Bucket 100 | app.delete("/v1/storage/buckets/:bucketId", (req, res) => { 101 | let promise = storage.deleteBucket(req.params.bucketId); 102 | 103 | promise.then( 104 | function (response) { 105 | res.json(response); 106 | }, 107 | function (error) { 108 | console.log(error); 109 | } 110 | ); 111 | }); 112 | 113 | app.listen(port, () => { 114 | console.log(`Server listening on the port::${port}`); 115 | }); 116 | -------------------------------------------------------------------------------- /appwrite/.env: -------------------------------------------------------------------------------- 1 | _APP_ENV=production 2 | _APP_LOCALE=en 3 | _APP_OPTIONS_ABUSE=enabled 4 | _APP_OPTIONS_FORCE_HTTPS=disabled 5 | _APP_OPENSSL_KEY_V1=your-secret-key 6 | _APP_DOMAIN=localhost 7 | _APP_DOMAIN_TARGET=localhost 8 | _APP_CONSOLE_WHITELIST_ROOT=enabled 9 | _APP_CONSOLE_WHITELIST_EMAILS= 10 | _APP_CONSOLE_WHITELIST_IPS= 11 | _APP_SYSTEM_EMAIL_NAME=Appwrite 12 | _APP_SYSTEM_EMAIL_ADDRESS=team@appwrite.io 13 | _APP_SYSTEM_RESPONSE_FORMAT= 14 | _APP_SYSTEM_SECURITY_EMAIL_ADDRESS=certs@appwrite.io 15 | _APP_USAGE_STATS=enabled 16 | _APP_LOGGING_PROVIDER= 17 | _APP_LOGGING_CONFIG= 18 | _APP_USAGE_AGGREGATION_INTERVAL=30 19 | _APP_WORKER_PER_CORE=6 20 | _APP_REDIS_HOST=redis 21 | _APP_REDIS_PORT=6379 22 | _APP_REDIS_USER= 23 | _APP_REDIS_PASS= 24 | _APP_DB_HOST=mariadb 25 | _APP_DB_PORT=3306 26 | _APP_DB_SCHEMA=appwrite 27 | _APP_DB_USER=user 28 | _APP_DB_PASS=password 29 | _APP_DB_ROOT_PASS=rootsecretpassword 30 | _APP_INFLUXDB_HOST=influxdb 31 | _APP_INFLUXDB_PORT=8086 32 | _APP_STATSD_HOST=telegraf 33 | _APP_STATSD_PORT=8125 34 | _APP_SMTP_HOST= 35 | _APP_SMTP_PORT= 36 | _APP_SMTP_SECURE= 37 | _APP_SMTP_USERNAME= 38 | _APP_SMTP_PASSWORD= 39 | _APP_STORAGE_LIMIT=30000000 40 | _APP_STORAGE_PREVIEW_LIMIT=20000000 41 | _APP_STORAGE_ANTIVIRUS=disabled 42 | _APP_STORAGE_ANTIVIRUS_HOST=clamav 43 | _APP_STORAGE_ANTIVIRUS_PORT=3310 44 | _APP_STORAGE_DEVICE=Local 45 | _APP_STORAGE_S3_ACCESS_KEY= 46 | _APP_STORAGE_S3_SECRET= 47 | _APP_STORAGE_S3_REGION=us-eas-1 48 | _APP_STORAGE_S3_BUCKET= 49 | _APP_STORAGE_DO_SPACES_ACCESS_KEY= 50 | _APP_STORAGE_DO_SPACES_SECRET= 51 | _APP_STORAGE_DO_SPACES_REGION=us-eas-1 52 | _APP_STORAGE_DO_SPACES_BUCKET= 53 | _APP_FUNCTIONS_SIZE_LIMIT=30000000 54 | _APP_FUNCTIONS_TIMEOUT=900 55 | _APP_FUNCTIONS_BUILD_TIMEOUT=900 56 | _APP_FUNCTIONS_CONTAINERS=10 57 | _APP_FUNCTIONS_CPUS=0 58 | _APP_FUNCTIONS_MEMORY=0 59 | _APP_FUNCTIONS_MEMORY_SWAP=0 60 | _APP_FUNCTIONS_RUNTIMES=node-16.0,php-8.0,python-3.9,ruby-3.0 61 | _APP_EXECUTOR_SECRET=your-secret-key 62 | _APP_EXECUTOR_RUNTIME_NETWORK=appwrite_runtimes 63 | _APP_FUNCTIONS_ENVS=node-16.0,php-7.4,python-3.9,ruby-3.0 64 | _APP_FUNCTIONS_INACTIVE_THRESHOLD=60 65 | DOCKERHUB_PULL_USERNAME= 66 | DOCKERHUB_PULL_PASSWORD= 67 | DOCKERHUB_PULL_EMAIL= 68 | -------------------------------------------------------------------------------- /appwrite/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | traefik: 5 | image: traefik:2.5 6 | container_name: appwrite-traefik 7 | command: 8 | - --providers.file.directory=/storage/config 9 | - --providers.file.watch=true 10 | - --providers.docker=true 11 | - --providers.docker.exposedByDefault=false 12 | - --providers.docker.constraints=Label(`traefik.constraint-label-stack`,`appwrite`) 13 | - --entrypoints.appwrite_web.address=:80 14 | - --entrypoints.appwrite_websecure.address=:443 15 | restart: unless-stopped 16 | ports: 17 | - 80:80 18 | - 443:443 19 | volumes: 20 | - /var/run/docker.sock:/var/run/docker.sock 21 | - appwrite-config:/storage/config:ro 22 | - appwrite-certificates:/storage/certificates:ro 23 | depends_on: 24 | - appwrite 25 | networks: 26 | - gateway 27 | - appwrite 28 | 29 | appwrite: 30 | image: appwrite/appwrite:0.13.4 31 | container_name: appwrite 32 | restart: unless-stopped 33 | networks: 34 | - appwrite 35 | labels: 36 | - traefik.enable=true 37 | - traefik.constraint-label-stack=appwrite 38 | - traefik.docker.network=appwrite 39 | - traefik.http.services.appwrite_api.loadbalancer.server.port=80 40 | #http 41 | - traefik.http.routers.appwrite_api_http.entrypoints=appwrite_web 42 | - traefik.http.routers.appwrite_api_http.rule=PathPrefix(`/`) 43 | - traefik.http.routers.appwrite_api_http.service=appwrite_api 44 | # https 45 | - traefik.http.routers.appwrite_api_https.entrypoints=appwrite_websecure 46 | - traefik.http.routers.appwrite_api_https.rule=PathPrefix(`/`) 47 | - traefik.http.routers.appwrite_api_https.service=appwrite_api 48 | - traefik.http.routers.appwrite_api_https.tls=true 49 | volumes: 50 | - appwrite-uploads:/storage/uploads:rw 51 | - appwrite-cache:/storage/cache:rw 52 | - appwrite-config:/storage/config:rw 53 | - appwrite-certificates:/storage/certificates:rw 54 | - appwrite-functions:/storage/functions:rw 55 | depends_on: 56 | - mariadb 57 | - redis 58 | # - clamav 59 | - influxdb 60 | environment: 61 | - _APP_ENV 62 | - _APP_WORKER_PER_CORE 63 | - _APP_LOCALE 64 | - _APP_CONSOLE_WHITELIST_ROOT 65 | - _APP_CONSOLE_WHITELIST_EMAILS 66 | - _APP_CONSOLE_WHITELIST_IPS 67 | - _APP_SYSTEM_EMAIL_NAME 68 | - _APP_SYSTEM_EMAIL_ADDRESS 69 | - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS 70 | - _APP_SYSTEM_RESPONSE_FORMAT 71 | - _APP_OPTIONS_ABUSE 72 | - _APP_OPTIONS_FORCE_HTTPS 73 | - _APP_OPENSSL_KEY_V1 74 | - _APP_DOMAIN 75 | - _APP_DOMAIN_TARGET 76 | - _APP_REDIS_HOST 77 | - _APP_REDIS_PORT 78 | - _APP_REDIS_USER 79 | - _APP_REDIS_PASS 80 | - _APP_DB_HOST 81 | - _APP_DB_PORT 82 | - _APP_DB_SCHEMA 83 | - _APP_DB_USER 84 | - _APP_DB_PASS 85 | - _APP_SMTP_HOST 86 | - _APP_SMTP_PORT 87 | - _APP_SMTP_SECURE 88 | - _APP_SMTP_USERNAME 89 | - _APP_SMTP_PASSWORD 90 | - _APP_USAGE_STATS 91 | - _APP_INFLUXDB_HOST 92 | - _APP_INFLUXDB_PORT 93 | - _APP_STORAGE_LIMIT 94 | - _APP_STORAGE_ANTIVIRUS 95 | - _APP_STORAGE_ANTIVIRUS_HOST 96 | - _APP_STORAGE_ANTIVIRUS_PORT 97 | - _APP_STORAGE_DEVICE 98 | - _APP_STORAGE_S3_ACCESS_KEY 99 | - _APP_STORAGE_S3_SECRET 100 | - _APP_STORAGE_S3_REGION 101 | - _APP_STORAGE_S3_BUCKET 102 | - _APP_STORAGE_DO_SPACES_ACCESS_KEY 103 | - _APP_STORAGE_DO_SPACES_SECRET 104 | - _APP_STORAGE_DO_SPACES_REGION 105 | - _APP_STORAGE_DO_SPACES_BUCKET 106 | - _APP_FUNCTIONS_SIZE_LIMIT 107 | - _APP_FUNCTIONS_TIMEOUT 108 | - _APP_FUNCTIONS_BUILD_TIMEOUT 109 | - _APP_FUNCTIONS_CONTAINERS 110 | - _APP_FUNCTIONS_CPUS 111 | - _APP_FUNCTIONS_MEMORY 112 | - _APP_FUNCTIONS_MEMORY_SWAP 113 | - _APP_FUNCTIONS_RUNTIMES 114 | - _APP_EXECUTOR_SECRET 115 | - _APP_LOGGING_PROVIDER 116 | - _APP_LOGGING_CONFIG 117 | - _APP_STATSD_HOST 118 | - _APP_STATSD_PORT 119 | - _APP_MAINTENANCE_INTERVAL 120 | - _APP_MAINTENANCE_RETENTION_EXECUTION 121 | - _APP_MAINTENANCE_RETENTION_ABUSE 122 | - _APP_MAINTENANCE_RETENTION_AUDIT 123 | 124 | appwrite-realtime: 125 | image: appwrite/appwrite:0.13.4 126 | entrypoint: realtime 127 | container_name: appwrite-realtime 128 | restart: unless-stopped 129 | labels: 130 | - "traefik.enable=true" 131 | - "traefik.constraint-label-stack=appwrite" 132 | - "traefik.docker.network=appwrite" 133 | - "traefik.http.services.appwrite_realtime.loadbalancer.server.port=80" 134 | #ws 135 | - traefik.http.routers.appwrite_realtime_ws.entrypoints=appwrite_web 136 | - traefik.http.routers.appwrite_realtime_ws.rule=PathPrefix(`/v1/realtime`) 137 | - traefik.http.routers.appwrite_realtime_ws.service=appwrite_realtime 138 | # wss 139 | - traefik.http.routers.appwrite_realtime_wss.entrypoints=appwrite_websecure 140 | - traefik.http.routers.appwrite_realtime_wss.rule=PathPrefix(`/v1/realtime`) 141 | - traefik.http.routers.appwrite_realtime_wss.service=appwrite_realtime 142 | - traefik.http.routers.appwrite_realtime_wss.tls=true 143 | - traefik.http.routers.appwrite_realtime_wss.tls.certresolver=dns 144 | networks: 145 | - appwrite 146 | depends_on: 147 | - mariadb 148 | - redis 149 | environment: 150 | - _APP_ENV 151 | - _APP_WORKER_PER_CORE 152 | - _APP_OPTIONS_ABUSE 153 | - _APP_OPENSSL_KEY_V1 154 | - _APP_REDIS_HOST 155 | - _APP_REDIS_PORT 156 | - _APP_DB_HOST 157 | - _APP_DB_PORT 158 | - _APP_DB_SCHEMA 159 | - _APP_DB_USER 160 | - _APP_DB_PASS 161 | - _APP_USAGE_STATS 162 | - _APP_LOGGING_PROVIDER 163 | - _APP_LOGGING_CONFIG 164 | 165 | appwrite-worker-audits: 166 | image: appwrite/appwrite:0.13.4 167 | entrypoint: worker-audits 168 | container_name: appwrite-worker-audits 169 | restart: unless-stopped 170 | networks: 171 | - appwrite 172 | depends_on: 173 | - redis 174 | - mariadb 175 | environment: 176 | - _APP_ENV 177 | - _APP_OPENSSL_KEY_V1 178 | - _APP_REDIS_HOST 179 | - _APP_REDIS_PORT 180 | - _APP_REDIS_USER 181 | - _APP_REDIS_PASS 182 | - _APP_DB_HOST 183 | - _APP_DB_PORT 184 | - _APP_DB_SCHEMA 185 | - _APP_DB_USER 186 | - _APP_DB_PASS 187 | - _APP_LOGGING_PROVIDER 188 | - _APP_LOGGING_CONFIG 189 | 190 | appwrite-worker-webhooks: 191 | image: appwrite/appwrite:0.13.4 192 | entrypoint: worker-webhooks 193 | container_name: appwrite-worker-webhooks 194 | restart: unless-stopped 195 | networks: 196 | - appwrite 197 | depends_on: 198 | - redis 199 | - mariadb 200 | environment: 201 | - _APP_ENV 202 | - _APP_OPENSSL_KEY_V1 203 | - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS 204 | - _APP_REDIS_HOST 205 | - _APP_REDIS_PORT 206 | - _APP_REDIS_USER 207 | - _APP_REDIS_PASS 208 | - _APP_LOGGING_PROVIDER 209 | - _APP_LOGGING_CONFIG 210 | 211 | appwrite-worker-deletes: 212 | image: appwrite/appwrite:0.13.4 213 | entrypoint: worker-deletes 214 | container_name: appwrite-worker-deletes 215 | restart: unless-stopped 216 | networks: 217 | - appwrite 218 | depends_on: 219 | - redis 220 | - mariadb 221 | volumes: 222 | - appwrite-uploads:/storage/uploads:rw 223 | - appwrite-cache:/storage/cache:rw 224 | - appwrite-functions:/storage/functions:rw 225 | - appwrite-builds:/storage/builds:rw 226 | - appwrite-certificates:/storage/certificates:rw 227 | environment: 228 | - _APP_ENV 229 | - _APP_OPENSSL_KEY_V1 230 | - _APP_REDIS_HOST 231 | - _APP_REDIS_PORT 232 | - _APP_REDIS_USER 233 | - _APP_REDIS_PASS 234 | - _APP_DB_HOST 235 | - _APP_DB_PORT 236 | - _APP_DB_SCHEMA 237 | - _APP_DB_USER 238 | - _APP_DB_PASS 239 | - _APP_STORAGE_DEVICE 240 | - _APP_STORAGE_S3_ACCESS_KEY 241 | - _APP_STORAGE_S3_SECRET 242 | - _APP_STORAGE_S3_REGION 243 | - _APP_STORAGE_S3_BUCKET 244 | - _APP_STORAGE_DO_SPACES_ACCESS_KEY 245 | - _APP_STORAGE_DO_SPACES_SECRET 246 | - _APP_STORAGE_DO_SPACES_REGION 247 | - _APP_STORAGE_DO_SPACES_BUCKET 248 | - _APP_LOGGING_PROVIDER 249 | - _APP_LOGGING_CONFIG 250 | - _APP_EXECUTOR_SECRET 251 | 252 | appwrite-worker-database: 253 | image: appwrite/appwrite:0.13.4 254 | entrypoint: worker-database 255 | container_name: appwrite-worker-database 256 | restart: unless-stopped 257 | networks: 258 | - appwrite 259 | depends_on: 260 | - redis 261 | - mariadb 262 | environment: 263 | - _APP_ENV 264 | - _APP_OPENSSL_KEY_V1 265 | - _APP_REDIS_HOST 266 | - _APP_REDIS_PORT 267 | - _APP_REDIS_USER 268 | - _APP_REDIS_PASS 269 | - _APP_DB_HOST 270 | - _APP_DB_PORT 271 | - _APP_DB_SCHEMA 272 | - _APP_DB_USER 273 | - _APP_DB_PASS 274 | - _APP_LOGGING_PROVIDER 275 | - _APP_LOGGING_CONFIG 276 | 277 | appwrite-worker-builds: 278 | image: appwrite/appwrite:0.13.4 279 | entrypoint: worker-builds 280 | container_name: appwrite-worker-builds 281 | restart: unless-stopped 282 | networks: 283 | - appwrite 284 | depends_on: 285 | - redis 286 | - mariadb 287 | environment: 288 | - _APP_ENV 289 | - _APP_OPENSSL_KEY_V1 290 | - _APP_EXECUTOR_SECRET 291 | - _APP_REDIS_HOST 292 | - _APP_REDIS_PORT 293 | - _APP_REDIS_USER 294 | - _APP_REDIS_PASS 295 | - _APP_DB_HOST 296 | - _APP_DB_PORT 297 | - _APP_DB_SCHEMA 298 | - _APP_DB_USER 299 | - _APP_DB_PASS 300 | - _APP_LOGGING_PROVIDER 301 | - _APP_LOGGING_CONFIG 302 | 303 | appwrite-worker-certificates: 304 | image: appwrite/appwrite:0.13.4 305 | entrypoint: worker-certificates 306 | container_name: appwrite-worker-certificates 307 | restart: unless-stopped 308 | networks: 309 | - appwrite 310 | depends_on: 311 | - redis 312 | - mariadb 313 | volumes: 314 | - appwrite-config:/storage/config:rw 315 | - appwrite-certificates:/storage/certificates:rw 316 | environment: 317 | - _APP_ENV 318 | - _APP_OPENSSL_KEY_V1 319 | - _APP_DOMAIN_TARGET 320 | - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS 321 | - _APP_REDIS_HOST 322 | - _APP_REDIS_PORT 323 | - _APP_REDIS_USER 324 | - _APP_REDIS_PASS 325 | - _APP_DB_HOST 326 | - _APP_DB_PORT 327 | - _APP_DB_SCHEMA 328 | - _APP_DB_USER 329 | - _APP_DB_PASS 330 | - _APP_LOGGING_PROVIDER 331 | - _APP_LOGGING_CONFIG 332 | 333 | appwrite-worker-functions: 334 | image: appwrite/appwrite:0.13.4 335 | entrypoint: worker-functions 336 | container_name: appwrite-worker-functions 337 | restart: unless-stopped 338 | networks: 339 | - appwrite 340 | depends_on: 341 | - redis 342 | - mariadb 343 | - appwrite-executor 344 | environment: 345 | - _APP_ENV 346 | - _APP_OPENSSL_KEY_V1 347 | - _APP_REDIS_HOST 348 | - _APP_REDIS_PORT 349 | - _APP_REDIS_USER 350 | - _APP_REDIS_PASS 351 | - _APP_DB_HOST 352 | - _APP_DB_PORT 353 | - _APP_DB_SCHEMA 354 | - _APP_DB_USER 355 | - _APP_DB_PASS 356 | - _APP_FUNCTIONS_TIMEOUT 357 | - _APP_EXECUTOR_SECRET 358 | - _APP_USAGE_STATS 359 | - DOCKERHUB_PULL_USERNAME 360 | - DOCKERHUB_PULL_PASSWORD 361 | 362 | appwrite-executor: 363 | image: appwrite/appwrite:0.13.4 364 | entrypoint: executor 365 | container_name: appwrite-executor 366 | restart: unless-stopped 367 | stop_signal: SIGINT 368 | networks: 369 | appwrite: 370 | runtimes: 371 | volumes: 372 | - /var/run/docker.sock:/var/run/docker.sock 373 | - appwrite-functions:/storage/functions:rw 374 | - appwrite-builds:/storage/builds:rw 375 | - /tmp:/tmp:rw 376 | depends_on: 377 | - redis 378 | - mariadb 379 | - appwrite 380 | environment: 381 | - _APP_ENV 382 | - _APP_VERSION 383 | - _APP_FUNCTIONS_TIMEOUT 384 | - _APP_FUNCTIONS_BUILD_TIMEOUT 385 | - _APP_FUNCTIONS_CONTAINERS 386 | - _APP_FUNCTIONS_RUNTIMES 387 | - _APP_FUNCTIONS_CPUS 388 | - _APP_FUNCTIONS_MEMORY 389 | - _APP_FUNCTIONS_MEMORY_SWAP 390 | - _APP_FUNCTIONS_INACTIVE_THRESHOLD 391 | - _APP_EXECUTOR_SECRET 392 | - _APP_EXECUTOR_RUNTIME_NETWORK 393 | - _APP_LOGGING_PROVIDER 394 | - _APP_LOGGING_CONFIG 395 | - _APP_STORAGE_DEVICE 396 | - _APP_STORAGE_S3_ACCESS_KEY 397 | - _APP_STORAGE_S3_SECRET 398 | - _APP_STORAGE_S3_REGION 399 | - _APP_STORAGE_S3_BUCKET 400 | - _APP_STORAGE_DO_SPACES_ACCESS_KEY 401 | - _APP_STORAGE_DO_SPACES_SECRET 402 | - _APP_STORAGE_DO_SPACES_REGION 403 | - _APP_STORAGE_DO_SPACES_BUCKET 404 | - DOCKERHUB_PULL_USERNAME 405 | - DOCKERHUB_PULL_PASSWORD 406 | 407 | appwrite-worker-mails: 408 | image: appwrite/appwrite:0.13.4 409 | entrypoint: worker-mails 410 | container_name: appwrite-worker-mails 411 | restart: unless-stopped 412 | networks: 413 | - appwrite 414 | depends_on: 415 | - redis 416 | environment: 417 | - _APP_ENV 418 | - _APP_OPENSSL_KEY_V1 419 | - _APP_SYSTEM_EMAIL_NAME 420 | - _APP_SYSTEM_EMAIL_ADDRESS 421 | - _APP_REDIS_HOST 422 | - _APP_REDIS_PORT 423 | - _APP_REDIS_USER 424 | - _APP_REDIS_PASS 425 | - _APP_SMTP_HOST 426 | - _APP_SMTP_PORT 427 | - _APP_SMTP_SECURE 428 | - _APP_SMTP_USERNAME 429 | - _APP_SMTP_PASSWORD 430 | - _APP_LOGGING_PROVIDER 431 | - _APP_LOGGING_CONFIG 432 | 433 | appwrite-maintenance: 434 | image: appwrite/appwrite:0.13.4 435 | entrypoint: maintenance 436 | container_name: appwrite-maintenance 437 | restart: unless-stopped 438 | networks: 439 | - appwrite 440 | depends_on: 441 | - redis 442 | environment: 443 | - _APP_ENV 444 | - _APP_OPENSSL_KEY_V1 445 | - _APP_REDIS_HOST 446 | - _APP_REDIS_PORT 447 | - _APP_REDIS_USER 448 | - _APP_REDIS_PASS 449 | - _APP_MAINTENANCE_INTERVAL 450 | - _APP_MAINTENANCE_RETENTION_EXECUTION 451 | - _APP_MAINTENANCE_RETENTION_ABUSE 452 | - _APP_MAINTENANCE_RETENTION_AUDIT 453 | 454 | appwrite-usage: 455 | image: appwrite/appwrite:0.13.4 456 | entrypoint: usage 457 | container_name: appwrite-usage 458 | restart: unless-stopped 459 | networks: 460 | - appwrite 461 | depends_on: 462 | - influxdb 463 | - mariadb 464 | environment: 465 | - _APP_ENV 466 | - _APP_OPENSSL_KEY_V1 467 | - _APP_DB_HOST 468 | - _APP_DB_PORT 469 | - _APP_DB_SCHEMA 470 | - _APP_DB_USER 471 | - _APP_DB_PASS 472 | - _APP_INFLUXDB_HOST 473 | - _APP_INFLUXDB_PORT 474 | - _APP_USAGE_AGGREGATION_INTERVAL 475 | - _APP_REDIS_HOST 476 | - _APP_REDIS_PORT 477 | - _APP_REDIS_USER 478 | - _APP_REDIS_PASS 479 | 480 | appwrite-schedule: 481 | image: appwrite/appwrite:0.13.4 482 | entrypoint: schedule 483 | container_name: appwrite-schedule 484 | restart: unless-stopped 485 | networks: 486 | - appwrite 487 | depends_on: 488 | - redis 489 | environment: 490 | - _APP_ENV 491 | - _APP_REDIS_HOST 492 | - _APP_REDIS_PORT 493 | - _APP_REDIS_USER 494 | - _APP_REDIS_PASS 495 | 496 | mariadb: 497 | image: mariadb:10.7 # fix issues when upgrading using: mysql_upgrade -u root -p 498 | container_name: appwrite-mariadb 499 | restart: unless-stopped 500 | networks: 501 | - appwrite 502 | volumes: 503 | - appwrite-mariadb:/var/lib/mysql:rw 504 | environment: 505 | - MYSQL_ROOT_PASSWORD=${_APP_DB_ROOT_PASS} 506 | - MYSQL_DATABASE=${_APP_DB_SCHEMA} 507 | - MYSQL_USER=${_APP_DB_USER} 508 | - MYSQL_PASSWORD=${_APP_DB_PASS} 509 | command: 'mysqld --innodb-flush-method=fsync' 510 | 511 | redis: 512 | image: redis:6.2-alpine 513 | container_name: appwrite-redis 514 | restart: unless-stopped 515 | networks: 516 | - appwrite 517 | volumes: 518 | - appwrite-redis:/data:rw 519 | 520 | # clamav: 521 | # image: appwrite/clamav:1.2.0 522 | # container_name: appwrite-clamav 523 | # restart: unless-stopped 524 | # networks: 525 | # - appwrite 526 | # volumes: 527 | # - appwrite-uploads:/storage/uploads 528 | 529 | influxdb: 530 | image: appwrite/influxdb:1.5.0 531 | container_name: appwrite-influxdb 532 | restart: unless-stopped 533 | networks: 534 | - appwrite 535 | volumes: 536 | - appwrite-influxdb:/var/lib/influxdb:rw 537 | 538 | telegraf: 539 | image: appwrite/telegraf:1.4.0 540 | container_name: appwrite-telegraf 541 | restart: unless-stopped 542 | networks: 543 | - appwrite 544 | environment: 545 | - _APP_INFLUXDB_HOST 546 | - _APP_INFLUXDB_PORT 547 | 548 | networks: 549 | gateway: 550 | appwrite: 551 | runtimes: 552 | 553 | volumes: 554 | appwrite-mariadb: 555 | appwrite-redis: 556 | appwrite-cache: 557 | appwrite-uploads: 558 | appwrite-certificates: 559 | appwrite-functions: 560 | appwrite-builds: 561 | appwrite-influxdb: 562 | appwrite-config: 563 | appwrite-executor: 564 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "esnext", 5 | "baseUrl": "./", 6 | "moduleResolution": "node", 7 | "paths": { 8 | "@/*": [ 9 | "src/*" 10 | ] 11 | }, 12 | "lib": [ 13 | "esnext", 14 | "dom", 15 | "dom.iterable", 16 | "scripthost" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwinder", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build" 8 | }, 9 | "dependencies": { 10 | "animate.css": "^4.1.1", 11 | "appwrite": "^7.0.0", 12 | "click-outside-vue3": "^4.0.1", 13 | "core-js": "^3.8.3", 14 | "node-appwrite": "^5.1.0", 15 | "swiper": "^8.1.4", 16 | "vue": "^3.2.13", 17 | "vue-router": "^4.0.14" 18 | }, 19 | "devDependencies": { 20 | "@vue/cli-plugin-babel": "~5.0.0", 21 | "@vue/cli-service": "~5.0.0", 22 | "autoprefixer": "^10.4.4", 23 | "postcss": "^8.4.12", 24 | "tailwindcss": "^3.0.24" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/cardhover.css: -------------------------------------------------------------------------------- 1 | html { 2 | scroll-behavior: smooth; 3 | } 4 | body { 5 | -webkit-font-smoothing: antialiased; 6 | -moz-osx-font-smoothing: grayscale; 7 | } 8 | 9 | .card-wrap { 10 | will-change: transform; 11 | transform: perspective(1150px); 12 | transform-style: preserve-3d; 13 | border-radius: 0.75rem; 14 | } 15 | .card-wrap:hover .card-info { 16 | transform: translateY(0); 17 | } 18 | 19 | .card-wrap:hover .card-info, 20 | .card-wrap:hover .card-info p { 21 | transition: 0.6s cubic-bezier(0.23, 1, 0.32, 1); 22 | } 23 | 24 | .card-wrap:hover .card-info:after { 25 | transition: 5s cubic-bezier(0.23, 1, 0.32, 1); 26 | will-change: transform; 27 | transform: translateY(0); 28 | } 29 | 30 | .card-wrap:hover .card-bg { 31 | transition: 0.6s cubic-bezier(0.23, 1, 0.32, 1); 32 | } 33 | 34 | .card-wrap:hover .card { 35 | transition: 0.6s cubic-bezier(0.23, 1, 0.32, 1), 36 | box-shadow 2s cubic-bezier(0.23, 1, 0.32, 1); 37 | box-shadow: rgba(255, 255, 255, 0.2) 0 0 40px 5px, 38 | rgba(0, 0, 0, 0.66) 0 30px 60px 0, inset rgb(0, 0, 0) 0 0 0 5px; 39 | border-radius: 0.75rem; 40 | } 41 | 42 | .dark .card-wrap:hover .card { 43 | box-shadow: rgba(68, 68, 68, 0.2) 0 0 40px 5px, 44 | rgba(0, 0, 0, 0.66) 0 30px 60px 0, inset rgb(0, 0, 0) 0 0 0 5px; 45 | } 46 | 47 | .card { 48 | position: relative; 49 | flex: 0 0 256px; 50 | position: relative; 51 | overflow: hidden; 52 | width: 256px; 53 | height: 288px; 54 | transition: 1s cubic-bezier(0.445, 0.05, 0.55, 0.95); 55 | box-shadow: rgba(0, 0, 0, 0.66) 0 30px 60px 0, inset #333 0 0 0 5px, 56 | inset rgba(255, 255, 255, 0.5) 0 0 0 6px; 57 | transition: 1s cubic-bezier(0.445, 0.05, 0.55, 0.95); 58 | } 59 | 60 | .card-bg { 61 | position: absolute; 62 | top: -20px; 63 | left: -20px; 64 | width: 150%; 65 | height: 150%; 66 | background-repeat: no-repeat; 67 | background-position: center; 68 | background-size: cover; 69 | transition: 1s cubic-bezier(0.445, 0.05, 0.55, 0.95); 70 | pointer-events: none; 71 | } 72 | 73 | .card-info { 74 | padding: 20px; 75 | position: absolute; 76 | bottom: 0; 77 | color: #fff; 78 | will-change: transform; 79 | transform: translateY(40%); 80 | transition: 0.6s 1.6s cubic-bezier(0.215, 0.61, 0.355, 1); 81 | } 82 | .card-info p { 83 | opacity: 0; 84 | text-shadow: black 0 2px 3px; 85 | transition: 0.6s 1.6s cubic-bezier(0.215, 0.61, 0.355, 1); 86 | } 87 | .card-info * { 88 | position: relative; 89 | z-index: 1; 90 | } 91 | .card-info:after { 92 | content: ""; 93 | position: absolute; 94 | top: 0; 95 | left: 0; 96 | z-index: 0; 97 | width: 100%; 98 | height: 100%; 99 | background-image: linear-gradient( 100 | to bottom, 101 | transparent 0%, 102 | rgba(0, 0, 0, 0.6) 100% 103 | ); 104 | background-blend-mode: overlay; 105 | opacity: 1; 106 | will-change: transform; 107 | transform: translateY(100%); 108 | transition: 5s 1s cubic-bezier(0.445, 0.05, 0.55, 0.95); 109 | } 110 | 111 | .card:hover p { 112 | opacity: 1; 113 | } 114 | 115 | .card-info h1 { 116 | font-family: "Playfair Display"; 117 | text-shadow: rgba(0, 0, 0, 0.5) 0 10px 10px; 118 | } 119 | 120 | @media screen and (max-width: 1024px) { 121 | .card { 122 | transform: none !important; 123 | } 124 | .card-bg { 125 | transform: none !important; 126 | } 127 | .card-info p { 128 | transform: none !important; 129 | opacity: 1; 130 | } 131 | .card-wrap:hover .card-info:after { 132 | transform: none !important; 133 | } 134 | .card-wrap:hover .card-info, 135 | .card-wrap:hover .card-info p { 136 | transition: none; 137 | transform: none; 138 | } 139 | .card-wrap:hover .card-info { 140 | transform: none; 141 | } 142 | .card-info:after { 143 | position: relative; 144 | background-image: none; 145 | transform: none; 146 | transition: none; 147 | } 148 | .card-info { 149 | position: relative; 150 | color: #fff; 151 | transform: none; 152 | transition: none; 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MooseSaeed/Tailwinder/5a5a95d991252369d1b85b7ae0a9315dea90a04b/public/favicon.ico -------------------------------------------------------------------------------- /public/images/tailwinder-buttons-poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MooseSaeed/Tailwinder/5a5a95d991252369d1b85b7ae0a9315dea90a04b/public/images/tailwinder-buttons-poster.png -------------------------------------------------------------------------------- /public/images/tailwinder-cards-poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MooseSaeed/Tailwinder/5a5a95d991252369d1b85b7ae0a9315dea90a04b/public/images/tailwinder-cards-poster.png -------------------------------------------------------------------------------- /public/images/tailwinder-navbars-poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MooseSaeed/Tailwinder/5a5a95d991252369d1b85b7ae0a9315dea90a04b/public/images/tailwinder-navbars-poster.png -------------------------------------------------------------------------------- /public/images/tailwinder-popup-poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MooseSaeed/Tailwinder/5a5a95d991252369d1b85b7ae0a9315dea90a04b/public/images/tailwinder-popup-poster.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 |34 | {{ description }} 35 |
36 |
29 | Please
30 |
31 |
28 | {{ dateAndTime }} 29 |
30 |37 | {{ commentContext }} 38 |
39 |I don't have contributions, yet!
6 | 7 |21 | {{ document.$collection }} 22 |
23 |57 | {{ inputNumberErr }} 58 |
59 |{{ error }}
9 | 52 |10 | Enjoy saving your button design sets. 11 |
12 |{{ error }}
13 | 102 |6 | {{ error }} 7 |
8 |12 | {{ success }} 13 |
14 |6 | {{ error }} 7 |
8 |12 | {{ success }} 13 |
14 |6 | {{ error }} 7 |
8 |12 | {{ success }} 13 |
14 |7 | {{ pageSwitch ? "Got an account?" : "Haven't got an account?" }} 8 | (this.pageSwitch = !this.pageSwitch)" 11 | >{{ pageSwitch ? "Login" : "Sign Up" }} 13 |
14 |19 | {{ pageSwitch ? "Got an account?" : "Haven't got an account?" }} 20 | (this.pageSwitch = !this.pageSwitch)" 23 | >{{ pageSwitch ? "Login" : "Sign Up" }} 25 |
26 |37 | {{ name }} 38 |
39 |45 | {{ description }} 46 |
47 |
53 | - You can
54 |
20 | Open source Community for
21 |
22 |
32 | This is the right place for you if you love using TailwindCSS to 33 | create interresting stuff. Feel free to contribute and interact with 34 | fellow tailwinders. 35 |
36 |37 | I didn't update my bio. 38 |
39 |43 | {{ userPrefs.bio }} 44 |
45 |132 | {{ userprofile.email }} 133 |
134 | 135 | 142 |147 | Please confirm password if any changes in email. 148 | 155 |
156 |163 | {{ userPrefs.country }} 164 |
165 | 170 |175 | {{ userPrefs.github }} 176 |
177 | 182 |187 | {{ userPrefs.twitter }} 188 |
189 | 194 |78 | {{ context }} 79 |
80 |22 | Creating cards never been easier with this tool. 23 |
24 | 25 |34 | Create your own nav bar for your website. 35 |
36 | 37 |46 | Create popup modals for your website. 47 |
48 | 49 |58 | Creating your favorite buttons design set. 59 |
60 | 61 |{{ name }}
29 |33 | {{ description }} 34 |
35 |