A dynamically-populated homepage that uses Starbase 80's config-template rendering, in combination with consul-template's dynamic service rendering, to create live dashboards for users.
Go to file
Jordan Roher 790dcb7a5f Trying an automated workflow
Added sample config
2023-04-22 11:06:06 -07:00
.github/workflows Trying an automated workflow 2023-04-22 11:06:06 -07:00
.vscode Odd exclusion 2023-04-19 15:01:08 -07:00
src Trying an automated workflow 2023-04-22 11:06:06 -07:00
.dockerignore Trying an automated workflow 2023-04-22 11:06:06 -07:00
.gitignore Trying an automated workflow 2023-04-22 11:06:06 -07:00
compose.yml Removed baked-in images 2023-04-20 15:47:29 -07:00
config.json.sample Working on getting the dockerfile right 2023-04-20 16:42:30 -07:00
docker-entrypoint.sh Trying an automated workflow 2023-04-22 11:06:06 -07:00
dockerfile Trying an automated workflow 2023-04-22 11:06:06 -07:00
index.html Trying an automated workflow 2023-04-22 11:06:06 -07:00
license Updated readme 2023-04-21 07:56:51 -07:00
package-lock.json Improved readme 2023-04-21 13:34:14 -07:00
package.json Updated readme 2023-04-21 07:56:51 -07:00
postcss.config.js Vite + Tailwind 2023-04-19 14:40:25 -07:00
preview-dark.jpg Added light mode and dark mode screenshots 2023-04-21 20:54:02 -07:00
preview.jpg Added light mode and dark mode screenshots 2023-04-21 20:54:02 -07:00
readme.md Added light mode and dark mode screenshots 2023-04-21 20:54:02 -07:00
tailwind.config.js Added background color themeing 2023-04-21 15:02:15 -07:00
tsconfig.json No more fake services 2023-04-19 19:31:29 -07:00
tsconfig.node.json Vite + Tailwind 2023-04-19 14:40:25 -07:00
version Trying an automated workflow 2023-04-22 11:06:06 -07:00
vite.config.ts Removed baked-in images 2023-04-20 15:47:29 -07:00

Starbase 80

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

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.

Preview

Light mode
Dark mode

Icons

Use your own

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

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

Dashboard icons

Use Dashboard icons by specifying a name without any prefix.

# Specify an 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" from the list of Tailwind colors. Do not prefix with "bg-".

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

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

Options

# Specify an icon in config.json
"icon": "/icons/jellyfin.jpg", # mostly required, but if set to "" it removes the icon
"iconColor": "blue-500", # optional, defaults to a contrasting color
"iconBG": "gray-200", # optional, defaults to a complementary color
"iconBubble": false, # optional, defaults to true, turns off bubble and shadow when false

For iconColor and iconBG, use a Tailwind color. Turn off background color with a value of "transparent". Do not prefix with "bg-".

Docker compose

services:
    homepage:
        image: jordanroher/starbase-80
        ports:
            - 4173:4173
        environment:
            - TITLE=Starbase 80 # defaults to "My Website", set to TITLE= to hide the title
            - LOGO=/starbase80.jpg # defaults to /logo.png, set to LOGO= to hide the logo
            - HEADER=true # defaults to true, set to false to hide the title and logo
            - HEADERLINE=true # defaults to true, set to false to turn off the header border line
            - HEADERTOP=true # defaults to false, set to true to force the header to always stay on top
            - CATEGORIES=small # defaults to normal, set to small for smaller, uppercase category labels
            - BGCOLOR=#fff # defaults to theme(colors.slate.50), set to any hex color or Tailwind color using the theme syntax
            - BGCOLORDARK=#000 # defaults to theme(colors.gray.950), set to any hex color or Tailwind color using the theme syntax
        volumes:
            - ./config.json:/app/src/config.json # required
            - ./public/favicon.ico:/app/public/favicon.ico # optional
            - ./public/logo.png:/app/public/logo.png # optional, or you can reference something in /icons
            - ./public/icons:/app/public/icons # or wherever, JSON icon paths are relative to /app/public

config.json format

Categories

Can have as many categories as you like.

  • category: Title, optional, displays above services
  • bubble: boolean, optional, defaults to false, shows a bubble around category
  • services: Array of services

Service

  • name: Name, required
  • uri: Hyperlink, required
  • description: 2-3 words, optional
  • icon: optional, relative URI, absolute URI, service name (Dashboard icon) or mdi-service name (Material Design icon)
  • iconBG: optional, hex code or Tailwind color (do not prefix with bg-). Background color for icons.
  • iconColor: optional, hex code or Tailwind color (do not prefix with bg-). Only used as the fill color for Material Design icons.
  • iconBubble: option, true or false, when false the bubble and shadow are removed from the icon

Template

[
	{
		"category": "Category name",
		"bubble": false,
		"services": [
			{
				"name": "My Cloud App",
				"uri": "https://website.com",
				"description": "Fun site",
				"icon": "mdi-cloud",
				"iconBG": "#fff",
				"iconColor": "#000",
				"iconBubble": false
			}
		]
	}
]

Example

[
	{
		"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": "/icons/authelia.png"
			},
			{
				"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"
			}
		]
	}
]