Sign inSign up

jordanroher/starbase-80

By jordanroher

•Updated 13 days ago

A nice homepage for self-hosted services.

Image
Developer tools
Web servers
1

100K+

jordanroher/starbase-80 repository overview

⁠Starbase 80

DR T'ANA: (to Mariner) "You wanna goof around, go work on Starbase 80!"
JET: "Damn, Starbase 80?!"

⁠About

A nice looking homepage for Docker containers or any services and links.

No actual integration with Docker. Loads instantly. Dark mode follows your OS.

If you make a change to the config JSON, restart this container and refresh.

Inspired by Ben Phelps' Homepage⁠ and Umbrel⁠. Dedicated to Star Trek: Lower Decks⁠.

⁠Docker and source code

⁠Live demo

⁠Preview

Starbase 80 preview image, showing a grid of services



Starbase 80 preview image, showing a grid of services, in dark mode

⁠Change history

⁠1.6.1

  • Added iconBubblePadding boolean option to categories and services

⁠1.6.0

  • Added CATEGORYBUBBLECOLORLIGHT and CATEGORYBUBBLECOLORDARK for greater control of category bubble colors
  • Added category.bubbleBGLight and category.bubbleBGDark to theme individual category bubble background colors

⁠1.5.5

  • Updated to node:23-slim

⁠1.5.4

  • Re-added wget to allow for health checks

⁠1.5.3

⁠1.5.2

  • Fixed issue with Material icons having incorrect left margin
  • Fixed aspect ratio issues on images

⁠1.5.1

  • Changed links to be on the entire service object
  • Added underline option

⁠1.5.0

  • Fixed dark mode manual override

⁠1.4.2

  • Added apple-touch-icon-precomposed link

⁠1.4.0

  • Rewrote the entire application to not use React. Now it's just a Node application that emits static HTML.
  • Removed lots of packages

⁠1.3.0

  • Removed all JavaScript as part of the build step. The image will be slightly larger and take longer to start up and shut down, but the page will be even lighter.

⁠1.2.0

  • Moved config.json bind mount destination to /app/src/config/config.json for improved Portainer and volume support. The previous bind mount location will continue to work, but we recommend updating your bind mounts.

⁠Docker

⁠Sample Docker compose

services:
    starbase80:
        image: jordanroher/starbase-80
        ports:
            - 80:4173
        environment:
            - TITLE=Starbase 80
            - LOGO=/starbase80.jpg
        volumes:
            - ./config.json:/app/src/config/config.json
            - ./public/favicon.ico:/app/public/favicon.ico
            - ./public/logo.png:/app/public/logo.png
            - ./public/icons:/app/public/icons

⁠Environment variables

VariableDefaultNotes
TITLEMy WebsiteSet to TITLE= to hide the title
LOGO/logo.pngSet to LOGO= to hide the logo
HEADERtrueSet to false to hide the title and logo
HEADERLINEtrueSet to false to turn off the header border line
CATEGORIESnormalSet to "small" for smaller, uppercase category labels
BGCOLORtheme(colors.slate.50)Page background color in light mode. Set to any hex color or Tailwind color using the theme syntax.
BGCOLORDARKtheme(colors.gray.950)Page background color in dark mode. Set to any hex color or Tailwind color using the theme syntax.
CATEGORYBUBBLECOLORLIGHTtheme(colors.white)Background color for category bubbles (if enabled) in light mode. Set to any hex color or Tailwind color using the theme syntax.
CATEGORYBUBBLECOLORDARKtheme(colors.black)Background color for category bubbles (if enabled) in dark mode. Set to any hex color or Tailwind color using the theme syntax.
NEWWINDOWtrueSet to false to not have links open in a new window
THEMEautoSet to "auto", or "dark" to force a display mode (e.g. dark mode)
HOVERnoneSet to "underline" for an underline effect on titles when hovering/focusing on that service

⁠Volumes (bind mounts)

PathRequiredNotes
/app/src/config/config.jsontrueConfiguration with list of sites and links
/app/public/favicon.icofalseWebsite favicon
/app/public/logo.pngfalseLogo in the header
/app/public/iconsfalseOr wherever you want to put them, JSON icon paths are relative to /app/public

⁠Configuration

⁠Sample config.json

[
	{
		"category": "Services",
		"services": [
			{
				"name": "Archivebox",
				"uri": "https://archivebox.mywebsite.com",
				"description": "Backup webpages",
				"icon": "/icons/archivebox.jpg"
			},
			{
				"name": "Authelia",
				"uri": "https://auth.mywebsite.com",
				"description": "Authentication",
				"icon": "selfhst-authelia"
			},
			{
				"name": "Calibre",
				"uri": "https://calibre.mywebsite.com",
				"description": "eBook library",
				"icon": "/icons/calibre.png"
			}
		]
	},
	{
		"category": "Devices",
		"bubble": true,
		"services": [
			{
				"name": "Router",
				"uri": "http://192.168.1.1/",
				"description": "Netgear Orbi",
				"icon": "/icons/router.png"
			},
			{
				"name": "Home Assistant",
				"uri": "http://homeassistant.local:8123/",
				"description": "Home automation",
				"icon": "home-assistant",
				"iconBubble": false
			},
			{
				"name": "Synology",
				"uri": "http://synology:5000",
				"description": "Network storage",
				"icon": "/icons/synology.png"
			}
		]
	}
]

⁠Category variables

NameDefaultRequiredNotes
categoryfalseDisplays above the list of services
bubblefalsefalseShows a bubble around category
bubbleBGLightfalseBackground color for category bubbles. Must be a Tailwind color⁠ (do not prefix with bg-).
bubbleBGDarkfalseBackground color for category bubbles in dark mode. Must be a Tailwind color⁠ (do not prefix with bg-).
iconBubblePaddingfalsefalseIf true, adds a slight padding around each service's icons which are in a bubble.
servicestrueArray of services

⁠Service variables

NameDefaultRequiredNotes
nametrueTitle of service
uritrueHyperlink to resource
descriptionfalse2-3 words which appear below the title
iconfalseRelative URI, absolute URI, service name (Dashboard icon⁠), mdi- service name (Material Design icon⁠), selfhst- icon name selfh.st icon⁠
iconBGfalseBackground color for icons. Hex code or Tailwind color⁠ (do not prefix with bg-).
iconColorfalseOnly used as the fill color for Material Design icons. Hex code or Tailwind color⁠ (do not prefix with bg-).
iconBubbletruefalseIf false the bubble and shadow are removed from the icon
iconBubblePaddingfalsefalseOverrides bubblePadding set at the category level
iconAspectsquarefalseSet to "width" or "height" to constrain the icon to the width or height of the icon, respectively
newWindowfalseSet to true or false to override the environment variable NEWWINDOW for this service

⁠Icons

⁠Volume / bind mount

Create a volume or bind mount to a subfolder of /app/public and specify a relative path.

# Your folder
compose.yml
- icons
  - jellyfin.jpg
  - ghost.jpg
  - etc

# Bind mount
./icons:/app/public/icons

# Icon in config.json
"icon": "/icons/jellyfin.jpg"

⁠Dashboard icons

Use Dashboard icons⁠ by specifying a name without any prefix.

# Icon in config.json
"icon": "jellyfin"

⁠Material design

Use any Material Design icon⁠ by prefixing the name with mdi-.

Fill the icon by providing an "iconColor."

Use "black" or "white" for those colors.

# Icon in config.json
"icon": "mdi-cloud",
"iconColor": "black"

⁠Selfh.st icons

Use any selfh.st icon⁠ by prefixing the name with selfhst-.

# Icon in config.json
"icon": "selfhst-couchdb"

Tag summary

Content type

Image

Digest

sha256:249bcbb10…

Size

219.3 MB

Last updated

13 days ago

docker pull jordanroher/starbase-80