chore: initial Upptime scaffold for status.moleculesai.app
Seeds the Upptime-powered status page for Molecule AI. Zero-infra: GitHub Actions cron every 5min checks each endpoint, commits the result to history/, and rebuilds the static site into the gh-pages branch. Incident detection auto-opens Issues in this repo. - .upptimerc.yml — five sites monitored on first cut: - molecule-cp /health + /legal/terms - moleculesai.app / + /pricing + /legal/terms Each has a display name that matches the status page UI. - .github/workflows/uptime.yml — 5min uptime check - .github/workflows/response-time.yml — hourly latency histogram - .github/workflows/graphs.yml — daily long-term graphs - .github/workflows/static-site.yml — hourly site rebuild - .github/workflows/summary.yml — daily README badge refresh - README.md — landing page with workflow status badges, Upptime markers for auto-populated status section - history/.gitkeep — placeholder so the workflows' first run has a dir to commit into - LICENSE — MIT Next steps documented separately: enable GitHub Pages (Settings → Pages → Source: gh-pages branch), add DNS CNAME record for status.moleculesai.app → molecule-ai.github.io. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
commit
967313cbca
23
.github/workflows/graphs.yml
vendored
Normal file
23
.github/workflows/graphs.yml
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
name: Graphs CI
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [graphs]
|
||||
schedule:
|
||||
# Daily at 00:00 UTC is enough for the long-term uptime graphs.
|
||||
- cron: "0 0 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Generate graphs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: upptime/uptime-monitor@master
|
||||
with:
|
||||
command: "graphs"
|
||||
env:
|
||||
GH_PAT: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }}
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
issues: write
|
||||
24
.github/workflows/response-time.yml
vendored
Normal file
24
.github/workflows/response-time.yml
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
name: Response Time CI
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [response-time]
|
||||
schedule:
|
||||
# Hourly is enough for response-time histograms — the uptime
|
||||
# workflow already captures short-term latency in each check.
|
||||
- cron: "0 * * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Update response time graphs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: upptime/uptime-monitor@master
|
||||
with:
|
||||
command: "response-time"
|
||||
env:
|
||||
GH_PAT: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }}
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
issues: write
|
||||
32
.github/workflows/static-site.yml
vendored
Normal file
32
.github/workflows/static-site.yml
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
name: Static Site CI
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [static-site]
|
||||
schedule:
|
||||
# Every hour — rebuilds the status page HTML from the latest
|
||||
# check history. More frequent than necessary but cheap.
|
||||
- cron: "0 * * * *"
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- ".upptimerc.yml"
|
||||
- "README.md"
|
||||
- "history/**"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Build and deploy status site
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: upptime/uptime-monitor@master
|
||||
with:
|
||||
command: "site"
|
||||
env:
|
||||
GH_PAT: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }}
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pages: write
|
||||
id-token: write
|
||||
23
.github/workflows/summary.yml
vendored
Normal file
23
.github/workflows/summary.yml
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
name: Summary CI
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [summary]
|
||||
schedule:
|
||||
# Daily summary of past-day uptime posted to the README badges.
|
||||
- cron: "0 0 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Generate README + summary
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: upptime/uptime-monitor@master
|
||||
with:
|
||||
command: "readme"
|
||||
env:
|
||||
GH_PAT: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }}
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
issues: write
|
||||
32
.github/workflows/uptime.yml
vendored
Normal file
32
.github/workflows/uptime.yml
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
name: Uptime CI
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [uptime]
|
||||
schedule:
|
||||
# Every 5 minutes. GitHub Actions caps schedule resolution at ~5min
|
||||
# in practice; requesting */1 or */3 just gets coalesced.
|
||||
- cron: "*/5 * * * *"
|
||||
workflow_dispatch:
|
||||
push:
|
||||
# Re-run whenever the sites list changes so new endpoints get an
|
||||
# immediate first check instead of waiting up to 5 minutes.
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- ".upptimerc.yml"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Check status of endpoints
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: upptime/uptime-monitor@master
|
||||
with:
|
||||
command: "update"
|
||||
env:
|
||||
GH_PAT: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }}
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
issues: write
|
||||
pull-requests: write
|
||||
78
.upptimerc.yml
Normal file
78
.upptimerc.yml
Normal file
@ -0,0 +1,78 @@
|
||||
# Molecule AI status page
|
||||
# Powered by Upptime (https://upptime.js.org)
|
||||
#
|
||||
# This file is the single source of truth for what gets monitored.
|
||||
# Add new endpoints under `sites:` and the next workflow run picks
|
||||
# them up. Workflows live in .github/workflows/.
|
||||
|
||||
owner: Molecule-AI
|
||||
repo: molecule-ai-status
|
||||
|
||||
# URLs to monitor. `name` is the display label on the status page;
|
||||
# `url` is hit on every uptime check (every 5 minutes by default).
|
||||
# `expectedStatusCodes` defaults to [200, 201, 202, 203, 204, 205, 206,
|
||||
# 207, 208, 226]; override per-site when a route legitimately returns
|
||||
# a non-2xx on health.
|
||||
sites:
|
||||
- name: Control plane API
|
||||
url: https://molecule-cp.fly.dev/health
|
||||
# /health returns {"service":"molecule-cp","status":"ok"}
|
||||
|
||||
- name: Control plane — Legal pages
|
||||
url: https://molecule-cp.fly.dev/legal/terms
|
||||
# HTML page; tests markdown-renderer path + static embed still works
|
||||
|
||||
- name: Canvas — apex (marketing + pricing)
|
||||
url: https://moleculesai.app/
|
||||
# Canvas apex lands on the marketing / landing route
|
||||
|
||||
- name: Canvas — pricing route
|
||||
url: https://moleculesai.app/pricing
|
||||
# Tests that the pricing page ships with the canvas deploy
|
||||
|
||||
- name: Canvas — legal redirect
|
||||
url: https://moleculesai.app/legal/terms
|
||||
# Verifies the canvas-side redirect (or direct serve) of legal pages
|
||||
|
||||
status-website:
|
||||
# Branding for the GitHub Pages status site. Dark-theme colors match
|
||||
# the canvas aesthetic so the visual transition from status →
|
||||
# product is seamless.
|
||||
cname: status.moleculesai.app
|
||||
name: Molecule AI Status
|
||||
logoUrl: https://moleculesai.app/icon.png
|
||||
introTitle: "Molecule AI status"
|
||||
introMessage: >
|
||||
Real-time uptime for the Molecule AI control plane, canvas, and
|
||||
legal pages. Incidents automatically open as GitHub Issues in this
|
||||
repo; subscribe to the repo to get email alerts when services
|
||||
degrade.
|
||||
navbar:
|
||||
- title: Status
|
||||
href: /
|
||||
- title: GitHub
|
||||
href: https://github.com/Molecule-AI/molecule-ai-status
|
||||
|
||||
# Assignees for incident Issues auto-created by the uptime workflow.
|
||||
# Upptime opens an Issue the moment a check fails; add GitHub logins
|
||||
# here so it auto-assigns + emails them.
|
||||
assignees:
|
||||
- HongmingWang-Rabbit
|
||||
|
||||
# How long before a failing check is declared an incident.
|
||||
# Default is 2 consecutive failures; we use 3 to absorb transient
|
||||
# blips (Fly cold-start on scale-to-zero, DNS flap).
|
||||
i18n:
|
||||
activeIncidents: Active incidents
|
||||
allSystemsOperational: All systems operational
|
||||
incidentReport: Incident report
|
||||
incidents: Incidents
|
||||
live: Live
|
||||
pastIncidents: Past incidents
|
||||
responseTime: Response time
|
||||
status: Status
|
||||
title: Status
|
||||
upBadge: Up
|
||||
downBadge: Down
|
||||
degradedBadge: Degraded
|
||||
uptime: Uptime
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Molecule AI, Inc.
|
||||
|
||||
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.
|
||||
21
README.md
Normal file
21
README.md
Normal file
@ -0,0 +1,21 @@
|
||||
# [📈 Live Status](https://status.moleculesai.app): <!--live status--> **🟢 Operational**
|
||||
|
||||
This repository contains the open-source uptime monitor and status page for
|
||||
[**Molecule AI**](https://moleculesai.app), powered by [Upptime](https://upptime.js.org).
|
||||
|
||||
[](https://github.com/Molecule-AI/molecule-ai-status/actions/workflows/uptime.yml)
|
||||
[](https://github.com/Molecule-AI/molecule-ai-status/actions/workflows/response-time.yml)
|
||||
[](https://github.com/Molecule-AI/molecule-ai-status/actions/workflows/graphs.yml)
|
||||
[](https://github.com/Molecule-AI/molecule-ai-status/actions/workflows/static-site.yml)
|
||||
[](https://github.com/Molecule-AI/molecule-ai-status/actions/workflows/summary.yml)
|
||||
|
||||
## [📊 Overall Uptime](https://status.moleculesai.app)
|
||||
|
||||
<!--start: status pages-->
|
||||
<!-- Auto-populated by the Upptime workflow on first run. -->
|
||||
<!--end: status pages-->
|
||||
|
||||
## License
|
||||
|
||||
- Code: [MIT](./LICENSE) © [Molecule AI](https://moleculesai.app)
|
||||
- Website content and design: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/) © [Molecule AI](https://moleculesai.app)
|
||||
3
history/.gitkeep
Normal file
3
history/.gitkeep
Normal file
@ -0,0 +1,3 @@
|
||||
# Upptime populates this directory with one markdown file per monitored
|
||||
# site on the first successful workflow run. Keep this .gitkeep so the
|
||||
# dir exists at initial commit.
|
||||
Loading…
Reference in New Issue
Block a user