feat: initial VanityOnTour status page

- HTML dashboard with auto-refresh (5min countdown)
- Python checker: HTTP status, SSL expiry, App Store data
- GitHub Actions: runs every 5 min, deploys via FTP to Hostinger
- Monitors 13 services + iOS app + 6 SSL certs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OliverGiertz 2026-04-06 17:15:55 +00:00
commit f0211e0e5c
5 changed files with 979 additions and 0 deletions

232
public/status.json Normal file
View file

@ -0,0 +1,232 @@
{
"generated_at": "2026-04-06T17:15:32Z",
"overall": "up",
"services": [
{
"name": "VanityOnTour",
"url": "https://vanityontour.de",
"group": "websites",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 326,
"error": null
},
{
"name": "News Portal",
"url": "https://news.vanityontour.de",
"group": "websites",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 204,
"error": null
},
{
"name": "Wiki",
"url": "https://wiki.vanityontour.de",
"group": "websites",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 505,
"error": null
},
{
"name": "StaySense",
"url": "https://staysense.vanityontour.de",
"group": "websites",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 121,
"error": null
},
{
"name": "StaySense Landing",
"url": "https://landing.staysense.vanityontour.de",
"group": "websites",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 130,
"error": null
},
{
"name": "N8N Automation",
"url": "https://n8n.vanityontour.de",
"group": "tools",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 37,
"error": null
},
{
"name": "Nginx Proxy Manager",
"url": "https://nginx.vanityontour.de",
"group": "tools",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 33,
"error": null
},
{
"name": "Uptime Kuma",
"url": "https://server.vanityontour.de",
"group": "tools",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 122,
"error": null
},
{
"name": "Statistiken",
"url": "https://stats.vanityontour.de",
"group": "tools",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 162,
"error": null
},
{
"name": "App Backend",
"url": "https://app.vanityontour.de",
"group": "tools",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 84,
"error": null
},
{
"name": "CloudPanel",
"url": "https://ng.vanityontour.de",
"group": "tools",
"expect": [
200,
301,
302
],
"status": "up",
"status_code": 200,
"response_time_ms": 67,
"error": null
},
{
"name": "RSS News API",
"url": "https://news.vanityontour.de/health",
"group": "apis",
"expect": [
200
],
"status": "up",
"status_code": 200,
"response_time_ms": 93,
"error": null
},
{
"name": "StaySense API",
"url": "https://staysense.vanityontour.de/api/health",
"group": "apis",
"expect": [
200
],
"status": "up",
"status_code": 200,
"response_time_ms": 91,
"error": null
}
],
"ssl": {
"vanityontour.de": {
"valid": true,
"expires_in_days": 88,
"expires_at": "2026-07-04"
},
"news.vanityontour.de": {
"valid": true,
"expires_in_days": 61,
"expires_at": "2026-06-07"
},
"wiki.vanityontour.de": {
"valid": true,
"expires_in_days": 88,
"expires_at": "2026-07-04"
},
"n8n.vanityontour.de": {
"valid": true,
"expires_in_days": 41,
"expires_at": "2026-05-18"
},
"staysense.vanityontour.de": {
"valid": true,
"expires_in_days": 39,
"expires_at": "2026-05-16"
},
"server.vanityontour.de": {
"valid": true,
"expires_in_days": 79,
"expires_at": "2026-06-24"
}
},
"app": {
"name": "Vanity Expense Logbook",
"version": "3.0.12",
"rating": 4,
"rating_count": 1,
"rating_current_version": 4,
"rating_count_current_version": 1,
"price": "0,99 €",
"category": "Travel",
"last_update": "2026-03-16",
"min_ios": "18.2",
"store_url": "https://apps.apple.com/de/app/vanity-expense-logbook/id6742772476",
"icon_url": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/d9/da/6b/d9da6bc5-5acb-b038-c535-7901be47cb31/AppIcon-0-0-1x_U007emarketing-0-11-0-85-220.png/200x200bb.jpg",
"seller": "OLIVER GIERTZ",
"error": null
}
}