progress
This commit is contained in:
parent
a61870b802
commit
64d5e75045
@ -1,3 +1,4 @@
|
|||||||
|
// File: ./eleventy.js
|
||||||
const yaml = require('js-yaml');
|
const yaml = require('js-yaml');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
|
47
framework.md
Normal file
47
framework.md
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
Proposed Framework Categories (Y-axis):
|
||||||
|
1. Storage & File System Artifacts
|
||||||
|
|
||||||
|
Static file system analysis (encrypted/unencrypted)
|
||||||
|
Registry analysis
|
||||||
|
Database forensics
|
||||||
|
|
||||||
|
2. Memory & Runtime Artifacts
|
||||||
|
|
||||||
|
Memory forensics of live systems
|
||||||
|
Process analysis
|
||||||
|
Virtualization forensics
|
||||||
|
|
||||||
|
3. Network & Communication Artifacts
|
||||||
|
|
||||||
|
Webserver log analysis
|
||||||
|
System log analysis
|
||||||
|
PKI examination
|
||||||
|
Radio signal analysis
|
||||||
|
VoIP forensics
|
||||||
|
Network packet analysis (PCAP)
|
||||||
|
|
||||||
|
4. Application & Code Artifacts
|
||||||
|
|
||||||
|
Malware analysis
|
||||||
|
Darknet website source code analysis
|
||||||
|
Browser forensics
|
||||||
|
Email forensics
|
||||||
|
|
||||||
|
5. Multimedia & Content Artifacts
|
||||||
|
|
||||||
|
Video/image/audio authenticity analysis
|
||||||
|
Steganography detection
|
||||||
|
Content recovery
|
||||||
|
|
||||||
|
6. Transaction & Financial Artifacts
|
||||||
|
|
||||||
|
Blockchain payment analysis
|
||||||
|
Cryptocurrency exchange analysis
|
||||||
|
Financial transaction forensics
|
||||||
|
|
||||||
|
7. Platform & Infrastructure Artifacts
|
||||||
|
|
||||||
|
Mobile forensics
|
||||||
|
Cloud forensics
|
||||||
|
IoT device forensics
|
||||||
|
Social media/OSINT analysis
|
@ -1,3 +1,5 @@
|
|||||||
|
<!-- file: "./src/_layouts/base.njk" -->
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en" class="theme-auto">
|
<html lang="en" class="theme-auto">
|
||||||
<head>
|
<head>
|
||||||
@ -28,20 +30,21 @@
|
|||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="bg-gray-50 dark:bg-gray-900 text-gray-900 dark:text-gray-100 transition-colors duration-200">
|
<body class="bg-gray-50 dark:bg-gray-900 text-gray-900 dark:text-gray-100 transition-colors duration-200 min-h-screen flex flex-col">
|
||||||
|
|
||||||
<!-- Navigation -->
|
<!-- Navigation -->
|
||||||
<nav class="bg-white dark:bg-gray-800 shadow-sm border-b border-gray-200 dark:border-gray-700">
|
<nav class="bg-white dark:bg-gray-800 shadow-sm border-b border-gray-200 dark:border-gray-700">
|
||||||
<div class="max-w-7xl mx-auto px-4">
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 w-full">
|
||||||
<div class="flex justify-between items-center h-16">
|
<div class="flex justify-between items-center h-16">
|
||||||
<!-- Left Navigation -->
|
<!-- Left Navigation -->
|
||||||
<div class="flex items-center space-x-8">
|
<div class="flex items-center space-x-4 md:space-x-8">
|
||||||
<a href="/"
|
<a href="/"
|
||||||
class="nav-link {% if page.url == '/' %}nav-link-active{% endif %}"
|
class="nav-link {% if page.url == '/' %}nav-link-active{% endif %}"
|
||||||
data-page="home">
|
data-page="home">
|
||||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"/>
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"/>
|
||||||
</svg>
|
</svg>
|
||||||
Start
|
<span class="hidden sm:inline">Start</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="/status/"
|
<a href="/status/"
|
||||||
@ -50,7 +53,7 @@
|
|||||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/>
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/>
|
||||||
</svg>
|
</svg>
|
||||||
Status
|
<span class="hidden sm:inline">Status</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="/about/"
|
<a href="/about/"
|
||||||
@ -59,7 +62,7 @@
|
|||||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
||||||
</svg>
|
</svg>
|
||||||
Über
|
<span class="hidden sm:inline">Über</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="/privacy/"
|
<a href="/privacy/"
|
||||||
@ -68,13 +71,13 @@
|
|||||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/>
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/>
|
||||||
</svg>
|
</svg>
|
||||||
Datenschutz
|
<span class="hidden sm:inline">Datenschutz</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Center Logo -->
|
<!-- Center Logo -->
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="bg-blue-600 dark:bg-blue-500 text-white px-4 py-2 rounded-lg font-bold text-lg">
|
<div class="bg-blue-600 dark:bg-blue-500 text-white px-4 py-2 rounded-lg font-bold text-lg shadow-sm">
|
||||||
DFIR
|
DFIR
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -104,13 +107,58 @@
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<main class="min-h-screen">
|
<main class="flex-grow">
|
||||||
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 w-full py-8">
|
||||||
{{ content | safe }}
|
{{ content | safe }}
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="mt-auto">
|
||||||
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 w-full py-8">
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||||
|
<!-- About Section -->
|
||||||
|
<div>
|
||||||
|
<h3 class="text-sm font-semibold text-gray-700 dark:text-gray-300 mb-3">DFIR Tools Hub</h3>
|
||||||
|
<p class="text-sm text-gray-600 dark:text-gray-400">
|
||||||
|
Self-hosted directory for Digital Forensics and Incident Response tools. Built for academic and lab environments.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Quick Links -->
|
||||||
|
<div>
|
||||||
|
<h3 class="text-sm font-semibold text-gray-700 dark:text-gray-300 mb-3">Quick Links</h3>
|
||||||
|
<ul class="space-y-2 text-sm">
|
||||||
|
<li>
|
||||||
|
<a href="https://github.com/your-lab/dfir-tools-hub" class="footer-link">
|
||||||
|
GitHub Repository
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/api/tools.json" class="footer-link">
|
||||||
|
Tools API
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/api/status.json" class="footer-link">
|
||||||
|
Status API
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-8 pt-8 border-t border-gray-200 dark:border-gray-700">
|
||||||
|
<p class="text-center text-sm text-gray-500 dark:text-gray-400">
|
||||||
|
© 2025 DFIR Lab. Open source under MIT License.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
<!-- Tool Detail Modal (initially hidden) -->
|
<!-- Tool Detail Modal (initially hidden) -->
|
||||||
<div id="tool-modal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50 hidden">
|
<div id="tool-modal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50 hidden">
|
||||||
<div class="bg-white dark:bg-gray-800 rounded-lg max-w-2xl w-full max-h-[90vh] overflow-y-auto">
|
<div class="bg-white dark:bg-gray-800 rounded-lg shadow-xl max-w-2xl w-full max-h-[90vh] overflow-y-auto">
|
||||||
<div class="p-6" id="tool-modal-content">
|
<div class="p-6" id="tool-modal-content">
|
||||||
<!-- Content will be populated by JavaScript -->
|
<!-- Content will be populated by JavaScript -->
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,8 +3,11 @@ layout: base.njk
|
|||||||
title: "Über"
|
title: "Über"
|
||||||
description: "Über DFIR Tools Hub"
|
description: "Über DFIR Tools Hub"
|
||||||
---
|
---
|
||||||
|
<!-- ffile: "./src/about/index.njk" -->
|
||||||
|
|
||||||
<div class="max-w-4xl mx-auto px-4 py-8">
|
|
||||||
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
||||||
|
<div class="max-w-4xl">
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<div>
|
<div>
|
||||||
<h1 class="text-2xl font-bold text-gray-900 dark:text-gray-100 mb-4">Über</h1>
|
<h1 class="text-2xl font-bold text-gray-900 dark:text-gray-100 mb-4">Über</h1>
|
||||||
@ -26,3 +29,4 @@ description: "Über DFIR Tools Hub"
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
@ -1,3 +1,4 @@
|
|||||||
|
/* File: ./src/css/main.css */
|
||||||
/* CSS Reset and Base Styles */
|
/* CSS Reset and Base Styles */
|
||||||
* {
|
* {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
@ -294,11 +295,11 @@ body {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
padding: 0.5rem 0.75rem;
|
padding: 0.5rem 0.75rem;
|
||||||
border-radius: 0.375rem;
|
border-radius: 0.5rem;
|
||||||
font-size: 0.875rem;
|
font-size: 0.875rem;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
transition: all 0.2s ease-in-out;
|
transition: all 0.2s ease-in-out;
|
||||||
color: var(--gray-600);
|
color: var(--gray-700);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
@ -309,7 +310,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.dark .nav-link {
|
.dark .nav-link {
|
||||||
color: var(--gray-300);
|
color: var(--gray-400);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark .nav-link:hover {
|
.dark .nav-link:hover {
|
||||||
@ -318,14 +319,14 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.nav-link-active {
|
.nav-link-active {
|
||||||
color: var(--gray-900) !important;
|
color: var(--blue-700) !important;
|
||||||
background-color: var(--gray-200) !important;
|
background-color: var(--blue-50) !important;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark .nav-link-active {
|
.dark .nav-link-active {
|
||||||
color: var(--gray-100) !important;
|
color: var(--blue-400) !important;
|
||||||
background-color: var(--gray-700) !important;
|
background-color: var(--blue-900) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.view-mode-btn {
|
.view-mode-btn {
|
||||||
@ -349,7 +350,7 @@ body {
|
|||||||
|
|
||||||
.dark .view-mode-btn {
|
.dark .view-mode-btn {
|
||||||
background-color: var(--gray-800);
|
background-color: var(--gray-800);
|
||||||
color: var(--gray-300);
|
color: var(--gray-400);
|
||||||
border-color: var(--gray-600);
|
border-color: var(--gray-600);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,25 +360,26 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.view-mode-active {
|
.view-mode-active {
|
||||||
background-color: var(--gray-900) !important;
|
background-color: var(--blue-600) !important;
|
||||||
color: white !important;
|
color: white !important;
|
||||||
border-color: var(--gray-900) !important;
|
border-color: var(--blue-600) !important;
|
||||||
|
border-radius: 0.5rem !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark .view-mode-active {
|
.dark .view-mode-active {
|
||||||
background-color: var(--gray-100) !important;
|
background-color: var(--blue-500) !important;
|
||||||
color: var(--gray-900) !important;
|
color: white !important;
|
||||||
border-color: var(--gray-100) !important;
|
border-color: var(--blue-500) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.view-mode-active:hover {
|
.view-mode-active:hover {
|
||||||
background-color: var(--gray-800) !important;
|
background-color: var(--blue-700) !important;
|
||||||
border-color: var(--gray-800) !important;
|
border-color: var(--blue-700) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark .view-mode-active:hover {
|
.dark .view-mode-active:hover {
|
||||||
background-color: var(--gray-200) !important;
|
background-color: var(--blue-600) !important;
|
||||||
border-color: var(--gray-200) !important;
|
border-color: var(--blue-600) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.theme-btn {
|
.theme-btn {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
# File: ./src/data/services.yaml
|
||||||
# Service Status Configuration
|
# Service Status Configuration
|
||||||
# This file configures the services monitored on the status page
|
# This file configures the services monitored on the status page
|
||||||
# Connect to Uptime Kuma API for real-time data
|
# Connect to Uptime Kuma API for real-time data
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
# File: ./src/data/tools.yaml
|
||||||
# DFIR Tools Database
|
# DFIR Tools Database
|
||||||
# Edit this file to add, remove, or modify tools
|
# Edit this file to add, remove, or modify tools
|
||||||
# Structure: Each tool should have required fields marked with *
|
# Structure: Each tool should have required fields marked with *
|
||||||
|
@ -3,10 +3,11 @@ layout: base.njk
|
|||||||
title: "Start"
|
title: "Start"
|
||||||
description: "DFIR Tools Verzeichnis"
|
description: "DFIR Tools Verzeichnis"
|
||||||
---
|
---
|
||||||
|
<!-- file: "./src/index.njk" -->
|
||||||
|
|
||||||
<!-- Header Content -->
|
<!-- Header Content -->
|
||||||
<div class="bg-white dark:bg-gray-800 shadow-sm border-b border-gray-200 dark:border-gray-700">
|
<div class="bg-white dark:bg-gray-800 shadow-sm border-b border-gray-200 dark:border-gray-700">
|
||||||
<div class="max-w-6xl mx-auto px-4 py-6">
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
|
||||||
<!-- Search Bar -->
|
<!-- Search Bar -->
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<div class="relative max-w-md">
|
<div class="relative max-w-md">
|
||||||
@ -17,7 +18,7 @@ description: "DFIR Tools Verzeichnis"
|
|||||||
type="text"
|
type="text"
|
||||||
id="search-input"
|
id="search-input"
|
||||||
placeholder="Tools suchen..."
|
placeholder="Tools suchen..."
|
||||||
class="pl-10 pr-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-gray-500 focus:border-gray-500 w-full bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100"
|
class="pl-10 pr-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 w-full bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -61,7 +62,7 @@ description: "DFIR Tools Verzeichnis"
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<div class="max-w-6xl mx-auto px-4 py-6">
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6">`
|
||||||
<!-- Tool Selector Mode -->
|
<!-- Tool Selector Mode -->
|
||||||
<div id="view-selector" class="view-mode view-mode-active">
|
<div id="view-selector" class="view-mode view-mode-active">
|
||||||
<!-- Dimension Selectors -->
|
<!-- Dimension Selectors -->
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// File: ./src/js/modal.js
|
||||||
// Tool detail modal functionality
|
// Tool detail modal functionality
|
||||||
(function() {
|
(function() {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// File: ./src/js/search.js
|
||||||
// Search and filtering functionality
|
// Search and filtering functionality
|
||||||
(function() {
|
(function() {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// File: ./src/js/status.js
|
||||||
// Status page functionality for Uptime Kuma integration
|
// Status page functionality for Uptime Kuma integration
|
||||||
(function() {
|
(function() {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// File: ./src/js/theme.js
|
||||||
// Theme management functionality
|
// Theme management functionality
|
||||||
(function() {
|
(function() {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -3,8 +3,9 @@ layout: base.njk
|
|||||||
title: "Datenschutz"
|
title: "Datenschutz"
|
||||||
description: "Datenschutzerklärung"
|
description: "Datenschutzerklärung"
|
||||||
---
|
---
|
||||||
|
<!-- file: "./src/privacy/index.njk" -->
|
||||||
<div class="max-w-4xl mx-auto px-4 py-8">
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
||||||
|
<div class="max-w-4xl">
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<div>
|
<div>
|
||||||
<h1 class="text-2xl font-bold text-gray-900 dark:text-gray-100 mb-4">Datenschutz</h1>
|
<h1 class="text-2xl font-bold text-gray-900 dark:text-gray-100 mb-4">Datenschutz</h1>
|
||||||
@ -41,3 +42,4 @@ description: "Datenschutzerklärung"
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
@ -3,8 +3,9 @@ layout: base.njk
|
|||||||
title: "Status"
|
title: "Status"
|
||||||
description: "Service Status"
|
description: "Service Status"
|
||||||
---
|
---
|
||||||
|
<!-- file: "./src/status/index.njk" -->
|
||||||
|
|
||||||
<div class="max-w-6xl mx-auto px-4 py-8">
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<div>
|
<div>
|
||||||
<h1 class="text-2xl font-bold text-gray-900 dark:text-gray-100 mb-4">Service Status</h1>
|
<h1 class="text-2xl font-bold text-gray-900 dark:text-gray-100 mb-4">Service Status</h1>
|
||||||
@ -46,15 +47,9 @@ description: "Service Status"
|
|||||||
<!-- Last Updated -->
|
<!-- Last Updated -->
|
||||||
<div class="text-center text-sm text-gray-500 dark:text-gray-400">
|
<div class="text-center text-sm text-gray-500 dark:text-gray-400">
|
||||||
<p>Aktualisiert: <span id="last-updated">Nie</span></p>
|
<p>Aktualisiert: <span id="last-updated">Nie</span></p>
|
||||||
<button id="refresh-status" class="mt-2 px-4 py-2 bg-gray-600 text-white rounded-lg hover:bg-gray-700 transition-colors">
|
<button id="refresh-status" class="mt-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors">
|
||||||
Aktualisieren
|
Aktualisieren
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Pass service data to JavaScript -->
|
|
||||||
<script>
|
|
||||||
window.servicesData = {{ services | dump | safe }};
|
|
||||||
window.uptimeKumaConfig = {{ services.uptimeKuma | dump | safe }};
|
|
||||||
</script>
|
|
Reference in New Issue
Block a user