03 / Screenshots
Overview
Central Hub is a self-hosted operations dashboard built to provide one place for managing and viewing projects, tasks, systems, integrations, and service health.
The application runs on a Raspberry Pi and is exposed through Cloudflare Tunnel so it can be accessed remotely without directly opening inbound ports on the home network.
The project combines application development with infrastructure, database administration, Linux service management, and remote-access design.
Objective
The main goal was to create a central interface for systems and project information that would otherwise be spread across multiple applications, notes, terminals, and dashboards.
The system needed to be lightweight enough to run on a Raspberry Pi while still providing persistent storage, server-side functionality, and room for future integrations.
The project also serves as a practical environment for working with:
- Linux-hosted web applications
- PostgreSQL
- ORM-based database access
- Service monitoring
- Process management
- Remote access
- Infrastructure troubleshooting
Requirements
The initial requirements for Central Hub were:
- Run continuously on a Raspberry Pi
- Provide a responsive web interface
- Track projects and their current status
- Track tasks with priorities and workflow states
- Maintain an inventory of systems
- Display whether monitored systems are online
- Support future integrations
- Store application data persistently
- Allow secure remote access
- Automatically restart the application after failures or reboots
The project was intentionally designed as a self-hosted application rather than relying on a managed database or application-hosting service.
Architecture
Central Hub currently uses a Raspberry Pi as the application host.
The high-level request path is:
Internet
|
v
Cloudflare
|
v
Cloudflare Tunnel
|
v
Raspberry Pi
|
+-- Central Hub
| |
| +-- Next.js
| +-- Prisma
| +-- PostgreSQL
|
+-- Monitoring Services
|
+-- PM2
Cloudflare Tunnel provides the public path to the application without requiring the Raspberry Pi to be directly exposed to the internet.
The application itself uses Next.js for the frontend and server-side application logic.
Prisma provides the application layer for interacting with PostgreSQL.
PostgreSQL stores projects, tasks, systems, and other persistent application data.
PM2 manages the running application process on the Raspberry Pi.
Application Structure
The application is organized around several primary areas.
Projects
The Projects section stores information about ongoing and completed work.
Projects can be used to provide a high-level view of what is currently being worked on and what stage each project is in.
Tasks
The Tasks section provides more granular work tracking.
Tasks currently support workflow states including:
- TODO
- IN_PROGRESS
- DONE
Tasks also support priority levels:
- LOW
- MEDIUM
- HIGH
Systems
The Systems section maintains information about devices and services that are part of the environment.
This area is also used with monitoring data to provide visibility into whether tracked systems are currently reachable.
Integrations
The application includes an integrations area intended to provide a central location for services that connect Central Hub to other systems.
This section is still being developed as the rest of the environment evolves.
Settings
The Settings section provides a dedicated area for future configuration options rather than scattering configuration interfaces throughout the application.
Database
Central Hub uses PostgreSQL for persistent application data.
The database currently runs locally on the Raspberry Pi.
Prisma is used as the ORM between the application and PostgreSQL.
The primary models currently include:
- Project
- Task
- System
Database schema changes are handled through Prisma migrations.
This keeps database changes version-controlled alongside the application code rather than relying on manual schema edits.
Process Management
The application is managed with PM2 on the Raspberry Pi.
PM2 provides:
- Process management
- Automatic application restart
- Application logging
- Startup integration
This allows Central Hub to continue operating as a service instead of requiring the application to be manually started after every reboot.
Remote Access
The application is available through:
dashboard.etterdigital.dev
Remote access is handled through Cloudflare Tunnel.
Using a tunnel avoids forwarding a public port directly to the Raspberry Pi.
This also separates public DNS and access routing from the local network topology.
Monitoring Integration
Central Hub can query a Raspberry Pi monitoring service to determine whether tracked systems are currently online.
Environment variables are used to define the monitoring service location and authentication information.
Examples include:
PI_MONITOR_URL
PI_MONITOR_TOKEN
The dashboard uses the health-check response to calculate information such as the number of online systems.
This keeps monitoring logic separate from the main application instead of embedding every health check directly into the dashboard.
Challenges
Raspberry Pi Resource Limitations
Central Hub runs alongside other services on a Raspberry Pi.
That means CPU and memory usage need to remain reasonable, especially when running:
- Next.js
- PostgreSQL
- PM2
- Monitoring services
- Other self-hosted applications
The application therefore avoids unnecessary background services and infrastructure where possible.
Database Setup
PostgreSQL and Prisma required several configuration steps before the application could use migrations normally.
One issue involved Prisma attempting to create a shadow database during development migrations without sufficient PostgreSQL permissions.
The database permissions had to be corrected before migrations could run successfully.
Monitoring Integration
The dashboard originally displayed system counts without correctly reflecting live monitoring data.
The monitoring endpoint was then integrated so Central Hub could determine which systems were actually reporting as online.
Remote Access Performance
Because the application is hosted on a Raspberry Pi and accessed through Cloudflare Tunnel, initial response times can sometimes be slower than those of a cloud-hosted application.
This is an accepted limitation of the current hardware and hosting model.
Solutions
The project has used several approaches to keep the environment manageable.
Separate Application and Monitoring Responsibilities
Monitoring is handled by a dedicated monitoring service rather than placing all monitoring logic directly inside Central Hub.
This reduces coupling between the dashboard and individual monitoring checks.
Persistent Relational Storage
PostgreSQL was selected because the application includes multiple related data types and benefits from structured persistent storage.
Process Supervision
PM2 is used to supervise the Node.js application instead of relying on a manually launched development process.
Private-Origin Access
Cloudflare Tunnel allows the application to be reached remotely without exposing the Raspberry Pi directly with traditional port forwarding.
Security Considerations
Central Hub is treated differently from the public Etter Digital portfolio and project showcase.
It is an operational dashboard and can contain information about internal systems.
Because of that, the system is designed around the principle:
Public visibility / protected control
The public portfolio can show that the system exists and explain how it was engineered without exposing sensitive administrative details.
Cloudflare is used as the external access layer rather than exposing a raw local service directly to the internet.
Authentication and access control can continue to be strengthened as additional administrative functionality is added.
Secrets such as tokens and service credentials are stored using environment variables rather than being committed into the repository.
Current Limitations
Central Hub is still an active project.
Current limitations include:
- It runs on relatively limited Raspberry Pi hardware
- Some integrations are still incomplete
- Monitoring coverage is still being expanded
- The dashboard depends on services running within the local environment
- Backup and disaster-recovery processes still need additional work
These are tracked as areas for improvement rather than being hidden from the project documentation.
Results
Central Hub currently provides a working centralized interface for:
- Project tracking
- Task management
- System inventory
- Service health visibility
- Integrations
- Operational information
It is accessible remotely through dashboard.etterdigital.dev and runs from the same infrastructure used for several other Etter Digital services.
The project has also become a foundation for additional infrastructure work because other systems can be surfaced through the dashboard as they are built.
Lessons Learned
One of the main lessons from the project has been the importance of separating application development from infrastructure concerns while still understanding how they interact.
Building the interface was only part of the project.
The application also required work involving:
- Linux
- PostgreSQL administration
- Process management
- Networking
- DNS
- Cloudflare
- Monitoring
- Authentication
- Remote troubleshooting
The project also reinforced the value of keeping services modular.
Monitoring, database storage, application logic, and external routing are easier to troubleshoot when they remain clearly separated.
Future Improvements
Planned improvements include:
- Expanding system monitoring
- Adding additional integrations
- Improving authentication and access controls
- Improving backup and recovery procedures
- Adding deeper operational visibility
- Improving performance where possible on Raspberry Pi hardware
- Continuing to refine mobile usability
- Documenting additional system architecture
As the surrounding Etter Digital infrastructure grows, Central Hub will continue to serve as the private control surface for managing and observing those systems.
