├── .editorconfig ├── .env.example ├── .gitignore ├── .nowignore ├── .prettierrc ├── .travis.yml ├── docs.md ├── media ├── cron-syntax.png ├── docs │ ├── create-new-job-2.png │ ├── create-new-job.png │ ├── dashboard.png │ ├── error-creating-job.png │ ├── job-detail.png │ ├── job-logs-detail.png │ └── job-logs.png ├── favicon.ico ├── icons │ ├── api.svg │ ├── cluster.svg │ ├── customizable.svg │ ├── global.svg │ ├── logs.svg │ ├── notifications.svg │ ├── open-source.svg │ ├── setup.svg │ └── stripe.svg └── logo.svg ├── notes.md ├── now.json ├── package.json ├── readme.md ├── saasify.json ├── src ├── billing.ts ├── bootstrap.ts ├── db.ts ├── format-date.ts ├── grpc-utils.ts ├── jobs.ts ├── logs.ts ├── monitoring.ts ├── notification-channels │ ├── email.ts │ └── slack.ts ├── notifications.ts ├── routes.ts ├── scheduler.ts ├── server.ts └── types.ts ├── tsconfig.json ├── tsoa.json ├── web ├── .gitignore ├── config-overrides.js ├── package.json ├── public │ ├── favicon.ico │ ├── iframeResizer.contentWindow.min.js │ ├── index.html │ └── robots.txt ├── readme.md ├── src │ ├── App.css │ ├── App.js │ ├── components │ │ ├── JobLogsTable │ │ │ ├── JobLogsTable.js │ │ │ └── styles.module.css │ │ ├── JobsTable │ │ │ ├── JobsTable.js │ │ │ └── styles.module.css │ │ ├── NewJobForm │ │ │ ├── NewJobForm.js │ │ │ └── styles.module.css │ │ ├── Paper │ │ │ ├── Paper.js │ │ │ └── styles.module.css │ │ ├── RemoveJobModal │ │ │ └── RemoveJobModal.js │ │ └── index.js │ ├── index.js │ ├── lib │ │ └── sdk.js │ └── styles │ │ ├── app.module.css │ │ └── global.css └── yarn.lock └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | indent_style = space 4 | indent_size = 2 5 | end_of_line = lf 6 | insert_final_newline = true 7 | trim_trailing_whitespace = true 8 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | # ------------------------------------------------------------------------------ 2 | # This is an example .env file. 3 | # 4 | # All of these environment vars must be defined either in your environment or in 5 | # a local .env file in order to run this app. 6 | # 7 | # @see https://github.com/rolodato/dotenv-safe 8 | # ------------------------------------------------------------------------------ 9 | 10 | GOOGLE_APPLICATION_CREDENTIALS= 11 | 12 | GOOGLE_PROJECT_ID= 13 | GOOGLE_PROJECT_LOCATION= 14 | 15 | # Optionally used for usage reporting to Saasify 16 | #SAASIFY_PROVIDER_TOKEN= 17 | 18 | # Optionally used for sending email notifications 19 | #MAILGUN_API_KEY= 20 | #MAILGUN_DOMAIN= 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | .dummy 14 | 15 | # Directory for instrumented libs generated by jscoverage/JSCover 16 | lib-cov 17 | 18 | # Coverage directory used by tools like istanbul 19 | coverage 20 | 21 | # nyc test coverage 22 | .nyc_output 23 | 24 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 25 | .grunt 26 | 27 | # Bower dependency directory (https://bower.io/) 28 | bower_components 29 | 30 | # node-waf configuration 31 | .lock-wscript 32 | 33 | # Compiled binary addons (http://nodejs.org/api/addons.html) 34 | build/Release 35 | 36 | # Dependency directories 37 | node_modules/ 38 | jspm_packages/ 39 | 40 | # Typescript v1 declaration files 41 | typings/ 42 | 43 | # Optional npm cache directory 44 | .npm 45 | 46 | # Optional eslint cache 47 | .eslintcache 48 | 49 | # Optional REPL history 50 | .node_repl_history 51 | 52 | # Output of 'npm pack' 53 | *.tgz 54 | 55 | # Yarn Integrity file 56 | .yarn-integrity 57 | 58 | # dotenv environment variables file 59 | .env 60 | 61 | .next/ 62 | 63 | dist/ 64 | build/ 65 | 66 | .now 67 | .google.json 68 | -------------------------------------------------------------------------------- /.nowignore: -------------------------------------------------------------------------------- 1 | web/ 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "jsxSingleQuote": true, 4 | "semi": false, 5 | "tabWidth": 2, 6 | "bracketSpacing": true, 7 | "jsxBracketSameLine": false, 8 | "arrowParens": "always", 9 | "trailingComma": "none" 10 | } 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | cache: yarn 3 | node_js: 4 | - 12 5 | -------------------------------------------------------------------------------- /docs.md: -------------------------------------------------------------------------------- 1 | # Simple Cron 2 | 3 | Simple Cron is a dead simple cloud service to make HTTP calls on a regular schedule. It is named after the classic UNIX Cron program which allowed you to schedule jobs to be run locally. 4 | 5 | Some common use cases for cron jobs include: 6 | 7 | - Monitoring uptime of websites or services 8 | - Sending out reports or emails once a week 9 | - Kicking off a backup process once a day 10 | - Running workflows on a regular schedule 11 | - Powering bots to automate social media 12 | 13 | ## Dashboard 14 | 15 |
16 |
17 |
28 |
29 |
53 |
54 |
61 |
62 |
78 |
79 |
86 |
87 |
94 |
95 |
52 |
53 |