A lightweight dashboard for your home server.
| Section | Link |
|---|---|
| About | Go to About |
| Preview | Go to Preview |
| Installation | Go to Installation |
| Arduino | Go to Arduino |
| Scriptable | Go to Scriptable |
| Usage | Go to Usage |
| Customization | Go to Customization |
| Author | Go to Author |
This is a minimalist personal homepage project built with Node.js (Express) backend and a React + Vite frontend styled with Tailwind CSS.
It serves system monitoring data (CPU, RAM, Disk, uptime), manages custom links via API, and shows network information.
The project is intended to be deployed on a Linux server and accessed locally or via LAN.
Version 1.0:
Release v1.0
You have three options to run Server Homepage: using Node.js/PM2, building from Dockerfile, or using the prebuilt Docker image.
Cloning the repository is only necessary if you want to modify the source code.
If you get stuck or encounter any issues, feel free to reach out by creating an issue on GitHub.
- Make sure you have Node.js installed (version 16+ recommended).
- Clone the repository:
git clone https://github.com/MuxBH28/server-homepage
cd server-homepage- In the project folder, install dependencies:
npm install
npm run build- Start the server:
node server.jsor better, use PM2 to manage the process:
pm2 start server.js- Access the homepage via
http://your-server-ip:6969/in your browser.
- Make sure you have Docker installed.
- Clone the repository:
git clone https://github.com/MuxBH28/server-homepage
cd server-homepage- Build the Docker image:
docker build -t server-homepage .- Run the container:
docker run -d -p 6969:6969 --name server-homepage server-homepage- Access the homepage via http://your-server-ip:6969/ in your browser.
- Make sure you have Docker installed.
- Pull the latest image from GitHub Container Registry:
docker pull ghcr.io/muxbh28/server-homepage:latest- Run the container:
docker run -d -p 6969:6969 --name server-homepage ghcr.io/muxbh28/server-homepage:latest- Access the homepage via http://your-server-ip:6969/ in your browser.
- To stop the container:
docker stop server-homepage- To remove the container:
docker rm server-homepageThis sketch runs on an ESP32 and serves as a visual indicator of your home server's overall health. It fetches system metrics—CPU load, temperature, and RAM usage—from a REST API and uses LEDs to represent the status:
- Green: Normal operation
- Yellow: Warning thresholds
- Red: Critical condition
- White blink: Successful data fetch
The ESP32 connects to WiFi and includes error handling for network issues. This project was created as an initial test to evaluate ESP32’s ability to communicate with the server, with future plans to expand into a wireless hub featuring a display, control buttons, and server restart functionality.
This sketch also runs on an ESP32 but focuses solely on visualizing CPU temperature. It retrieves temperature data from the server’s REST API and drives a micro servo to move a needle across a printed gauge face.
- The gauge background (
example_of_gauge_background.png) is designed for 180° servo rotation and can be printed for physical use. - The needle updates every minute, and the sketch includes robust WiFi connectivity and error handling.
This setup was built to test ESP32’s ability to drive physical indicators based on server data, laying the groundwork for a compact, analog-style temperature monitor.
Note: It is recommended to use an external power supply for the servo motor (5VDC), with a shared ground connection to the ESP32 to ensure stable operation and avoid electrical interference.
Server Homepage now includes Scriptable widget integration, allowing you to monitor your server’s status directly from your iOS home screen. The widget displays key real-time metrics, including CPU usage, RAM usage, CPU temperature, and network speeds (download & upload).
Detailed installation and setup instructions are available in scriptable/instructions.md.
- The system info is updated automatically based on the refresh interval set in the UI.
- You can add, edit, or delete custom links through the web interface, which are saved in
links.json. - Weather information is fetched from a configured API and cached in localStorage for performance.
The easiest way to change the background is to go to the settings and replace the path with your desired image. You can use a local file or an online image URL.
The default background image is:
./assets/background.jpg
One more option to change the background is to simply replace this file with your desired image, keeping the same filename and extension or in index.html change style of body tag.
Current default background is by Manuela from Pixabay
Custom links are stored in json/links.json on the server. You can edit this file manually or use the web UI to add/remove links.
The extra/premade-links folder contains predefined JSON files that can be used or copied.
Settings are stored in json/settings.json. You can edit them manually, but using the web UI is recommended to avoid errors.
By default, the server listens on port 6969. You can change this by modifying the PORT variable in server.js. But before that, check Installation if you changed something or used Docker.
The dashboard includes several indicators to help monitor the server's status:
- Battery (./svg/battery.svg) – Shows whether the dashboard is connected to server.
- CPU Temperature (./svg/temperature.svg) – Lights up if the CPU temperature is high.
- RAM Usage (./svg/ram-high.svg) – Indicates high memory usage.
- System Warning (./svg/check-engine.svg) – Alerts about general system issues.
- No Links (./svg/no-links.svg) – Displays when there are no available links.
- Storage (./svg/storage.svg) – Indicates that disk storages are almost full.
The SVG icons used in this project are proudly sourced from SVG Repo collection Car Parts 2.
The Server Homepage includes a dedicated Tools section, accessible separately from the main page. These tools provide various utilities for monitoring, interaction, and customization of your server environment.
Currently available tools:
- Process Viewer – Lists all active server processes with details such as PID, CPU usage, and memory consumption.
- Crypto Prices – Displays real-time prices of selected cryptocurrencies (e.g., Bitcoin, Ethereum), with automatic updates.
- Notes – A simple note-taking tool for storing personal or server-related notes. Changes are saved instantly.
- RSS Viewer – Fetches and displays the latest articles from a configured RSS feed.
- Power Options – Offers essential server commands: Shutdown, Restart, and Sleep.
- Hardware Info – Shows detailed specifications of the server hardware, including CPU, RAM, and storage.
- QR Code Maker – Converts any text or URL into a customizable QR code. You can adjust size, colors, and download the result.
- Process Viewer and Crypto Prices refresh every minute (or based on custom interval).
- RSS Viewer updates every 10 minutes.
- Notes load once and save changes immediately.
- Hardware Info is fetched only on initial load.
- Power Options and QR Code Maker do not require automatic refreshing.
- Improve mobile responsiveness
- Fix layout issues on smaller screens
- Optimize load time (Vite + lazy loading)
- Add loading indicators for system stats
- Improve accessibility (ARIA roles, keyboard navigation)
- Polish UI animations and transitions
- Ctrl+V to paste link
- Telegram notifications for warnings
- Background images from Immich (ImmichFrame)
- Ideas and suggestions are welcome! Feel free to share them by creating an issue on GitHub.
- The available demo is provided for reference purposes and may not reflect the most recent version of the project.
- The backend makes external requests to the following services:
- ipinfo.io – for public network information.
- api.coingecko.com – for retrieving cryptocurrency prices.
- hnrss.org – used as the default RSS feed source.
- github.com – for checking the latest available version of the project.
- Created by: MuxBH28
- Website: https://msehic.com
- Email: [email protected]
- GitHub: https://github.com/MuxBH28
Feel free to customize and extend the project as you like! Pull requests are very welcome. If you have any questions or issues, contact me via email or GitHub.