25 | 26 | {{ page.title }} 27 | 28 |
29 | 47 |51 |
├── .github └── FUNDING.yml ├── .gitignore ├── CNAME ├── CONTRIBUTING.md ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── _config.yml ├── _data └── tags.yml ├── _layouts ├── default.html └── post.html ├── _posts ├── .gitkeep ├── 2015-12-13-first-status.md ├── 2015-12-20-first-warning.md ├── 2015-12-22-first-error.md ├── 2015-12-23-first-resolution.md ├── 2016-01-10-things-better.md └── 2017-08-01-scheduled-maintenance.md ├── archive.html ├── css └── style.css ├── favicon.png ├── img ├── .gitkeep └── screenshot.png ├── index.html ├── js └── script.js └── rss.xml /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [joshbeckman] 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _site/ 2 | .sass-cache/ 3 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | staticus.narro.co -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Contributing 2 | --- 3 | 4 | We love pull requests from everyone. By participating in this project, you agree to abide by our adopted [code of conduct](https://thoughtbot.com/open-source-code-of-conduct). 5 | 6 | Fork and clone the repo and get started: 7 | 8 | ```shell 9 | $ git clone git@github.com:NarroApp/staticus.git && cd staticus 10 | $ bundle install && jekyll serve 11 | ``` 12 | 13 | Push to your fork and [submit a pull request][pr]. 14 | 15 | [pr]: https://github.com/narroapp/staticus/compare/ 16 | 17 | At this point you're waiting on us. We like to at least comment on pull requests 18 | within three business days (and, typically, one business day). We may suggest 19 | some changes or improvements or alternatives. 20 | 21 | Some things that will increase the chance that your pull request is accepted: 22 | 23 | - Write a [good commit message][commit]. 24 | 25 | [commit]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html 26 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'github-pages' -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | RedCloth (4.2.9) 5 | activesupport (4.2.2) 6 | i18n (~> 0.7) 7 | json (~> 1.7, >= 1.7.7) 8 | minitest (~> 5.1) 9 | thread_safe (~> 0.3, >= 0.3.4) 10 | tzinfo (~> 1.1) 11 | blankslate (2.1.2.4) 12 | celluloid (0.16.0) 13 | timers (~> 4.0.0) 14 | classifier-reborn (2.0.3) 15 | fast-stemmer (~> 1.0) 16 | coffee-script (2.3.0) 17 | coffee-script-source 18 | execjs 19 | coffee-script-source (1.8.0) 20 | colorator (0.1) 21 | execjs (2.2.2) 22 | fast-stemmer (1.0.2) 23 | ffi (1.9.6) 24 | gemoji (2.1.0) 25 | github-pages (32) 26 | RedCloth (= 4.2.9) 27 | github-pages-health-check (~> 0.2) 28 | jekyll (= 2.4.0) 29 | jekyll-coffeescript (= 1.0.1) 30 | jekyll-mentions (= 0.2.1) 31 | jekyll-redirect-from (= 0.6.2) 32 | jekyll-sass-converter (= 1.2.0) 33 | jekyll-sitemap (= 0.6.3) 34 | jemoji (= 0.4.0) 35 | kramdown (= 1.5.0) 36 | liquid (= 2.6.1) 37 | maruku (= 0.7.0) 38 | mercenary (~> 0.3) 39 | pygments.rb (= 0.6.0) 40 | rdiscount (= 2.1.7) 41 | redcarpet (= 3.1.2) 42 | terminal-table (~> 1.4) 43 | github-pages-health-check (0.2.1) 44 | net-dns (~> 0.6) 45 | public_suffix (~> 1.4) 46 | hitimes (1.2.2) 47 | html-pipeline (1.9.0) 48 | activesupport (>= 2) 49 | nokogiri (~> 1.4) 50 | i18n (0.7.0) 51 | jekyll (2.4.0) 52 | classifier-reborn (~> 2.0) 53 | colorator (~> 0.1) 54 | jekyll-coffeescript (~> 1.0) 55 | jekyll-gist (~> 1.0) 56 | jekyll-paginate (~> 1.0) 57 | jekyll-sass-converter (~> 1.0) 58 | jekyll-watch (~> 1.1) 59 | kramdown (~> 1.3) 60 | liquid (~> 2.6.1) 61 | mercenary (~> 0.3.3) 62 | pygments.rb (~> 0.6.0) 63 | redcarpet (~> 3.1) 64 | safe_yaml (~> 1.0) 65 | toml (~> 0.1.0) 66 | jekyll-coffeescript (1.0.1) 67 | coffee-script (~> 2.2) 68 | jekyll-gist (1.1.0) 69 | jekyll-mentions (0.2.1) 70 | html-pipeline (~> 1.9.0) 71 | jekyll (~> 2.0) 72 | jekyll-paginate (1.1.0) 73 | jekyll-redirect-from (0.6.2) 74 | jekyll (~> 2.0) 75 | jekyll-sass-converter (1.2.0) 76 | sass (~> 3.2) 77 | jekyll-sitemap (0.6.3) 78 | jekyll-watch (1.2.1) 79 | listen (~> 2.7) 80 | jemoji (0.4.0) 81 | gemoji (~> 2.0) 82 | html-pipeline (~> 1.9) 83 | jekyll (~> 2.0) 84 | json (1.8.2) 85 | kramdown (1.5.0) 86 | liquid (2.6.1) 87 | listen (2.8.5) 88 | celluloid (>= 0.15.2) 89 | rb-fsevent (>= 0.9.3) 90 | rb-inotify (>= 0.9) 91 | maruku (0.7.0) 92 | mercenary (0.3.5) 93 | mini_portile (0.6.2) 94 | minitest (5.5.1) 95 | net-dns (0.8.0) 96 | nokogiri (1.8.2) 97 | mini_portile (~> 0.6.0) 98 | parslet (1.5.0) 99 | blankslate (~> 2.0) 100 | posix-spawn (0.3.9) 101 | public_suffix (1.4.6) 102 | pygments.rb (0.6.0) 103 | posix-spawn (~> 0.3.6) 104 | yajl-ruby (~> 1.1.0) 105 | rb-fsevent (0.9.4) 106 | rb-inotify (0.9.5) 107 | ffi (>= 0.5.0) 108 | rdiscount (2.1.7) 109 | redcarpet (3.1.2) 110 | safe_yaml (1.0.4) 111 | sass (3.4.10) 112 | terminal-table (1.4.5) 113 | thread_safe (0.3.4) 114 | timers (4.0.1) 115 | hitimes 116 | toml (0.1.2) 117 | parslet (~> 1.5.0) 118 | tzinfo (1.2.2) 119 | thread_safe (~> 0.1) 120 | yajl-ruby (1.3.1) 121 | 122 | PLATFORMS 123 | ruby 124 | 125 | DEPENDENCIES 126 | github-pages 127 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 NarroApp 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Staticus 2 | A static status page, designed to be blazingly fast and quick enough to update. [Demo][0] 3 | 4 | - Runs on GitHub pages (jekyll) 5 | - Supports multiple status channels (e.g. _Apps_ and _Data_) 6 | - Supports 'scheduled maintenance' posts 7 | - Supports uptime history (of configurable length) 8 | 9 | ## Usage 10 | 11 | To update the system status page (homepage), just create a new post in `_posts/`. 12 | 13 | Staticus uses a couple custom frontmatter fields: 14 | - `action` denotes the type of status message. (_incident-error_ or _incident-warning_ or _resolved_) 15 | 16 | Staticus also looks at the `tags` frontmatter to determine the appropriate channel for the update. You can update multiple channels with the same post. Define your channels in `_data/tags.yml`. 17 | 18 | - Any tag with `system: true` will be treated as a top-level system channel. 19 | - Any tag with `scheduled: true` will be treated as a scheduled channel. 20 | - These are shown at the top of the status page. 21 | 22 | To run on GitHub Pages: 23 | - Fork the repository 24 | - Update the `_posts` and `_data` respectively 25 | - Update the CSS styling (_optional_) 26 | - Update the `CNAME` file 27 | - Push it up! 28 | 29 | ### Example Frontmatter 30 | 31 | ``` 32 | --- 33 | layout: post 34 | title: First bad things happening 35 | date: 2017-01-01 11:11 36 | action: incident-error 37 | tags: [data, apps] 38 | --- 39 | ``` 40 | 41 | ## Installation 42 | 43 | ```sh 44 | # clone or download the repo 45 | $ bundle install 46 | $ jekyll serve 47 | ``` 48 | 49 | ## Examples 50 | 51 | These sites are using Staticus: 52 | - https://status.narro.co 53 | - https://status.officeluv.com 54 | 55 | 56 | ## Preview 57 | 58 |  59 | 60 | [0]: https://staticus.narro.co 61 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | url: https://staticus.narro.co 2 | author: NarroApp 3 | email: support@narro.co 4 | title: Staticus 5 | description: The status page for the Narro API and services 6 | homepage: https://www.narro.co 7 | 8 | permalink: pretty 9 | uptime_days: 60 10 | 11 | # TODO: Build pagination into archive 12 | gems: [jekyll-paginate] 13 | paginate: 2 14 | paginate_path: '/archive/page:num/' 15 | -------------------------------------------------------------------------------- /_data/tags.yml: -------------------------------------------------------------------------------- 1 | - slug: apps 2 | system: true 3 | name: Apps and Runtime 4 | - slug: data 5 | system: true 6 | name: Data Services 7 | - slug: maintenance 8 | scheduled: true 9 | name: Scheduled Maintenance 10 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 |21 | RSS 24 |
25 |33 | 36 | Homepage 37 | 38 |
39 |47 | {% if post.action contains 'incident' %} 48 |