diff --git a/blueprints/chroma/chroma.svg b/blueprints/chroma/chroma.svg
new file mode 100644
index 00000000..60112fc5
--- /dev/null
+++ b/blueprints/chroma/chroma.svg
@@ -0,0 +1,7 @@
+
diff --git a/blueprints/chroma/docker-compose.yml b/blueprints/chroma/docker-compose.yml
new file mode 100644
index 00000000..81ebe240
--- /dev/null
+++ b/blueprints/chroma/docker-compose.yml
@@ -0,0 +1,15 @@
+version: "3.8"
+
+services:
+ chroma:
+ image: chromadb/chroma:1.5.6
+ restart: unless-stopped
+ expose:
+ - "8000"
+ environment:
+ - ANONYMIZED_TELEMETRY=FALSE
+ volumes:
+ - chroma-data:/data
+
+volumes:
+ chroma-data:
diff --git a/blueprints/chroma/meta.json b/blueprints/chroma/meta.json
new file mode 100644
index 00000000..101ec0fa
--- /dev/null
+++ b/blueprints/chroma/meta.json
@@ -0,0 +1,18 @@
+{
+ "id": "chroma",
+ "name": "Chroma",
+ "version": "1.5.6",
+ "description": "Chroma is an open-source embedding database for AI applications, with persistent vector storage and a simple HTTP API.",
+ "logo": "chroma.svg",
+ "links": {
+ "github": "https://github.com/chroma-core/chroma",
+ "website": "https://www.trychroma.com/",
+ "docs": "https://docs.trychroma.com/"
+ },
+ "tags": [
+ "ai",
+ "vector-database",
+ "embeddings",
+ "database"
+ ]
+}
diff --git a/blueprints/chroma/template.toml b/blueprints/chroma/template.toml
new file mode 100644
index 00000000..532cb80f
--- /dev/null
+++ b/blueprints/chroma/template.toml
@@ -0,0 +1,6 @@
+[config]
+[[config.domains]]
+serviceName = "chroma"
+port = 8000
+host = "${domain}"
+path = "/api/v2/heartbeat"
diff --git a/blueprints/homebox/docker-compose.yml b/blueprints/homebox/docker-compose.yml
new file mode 100644
index 00000000..b305c45b
--- /dev/null
+++ b/blueprints/homebox/docker-compose.yml
@@ -0,0 +1,16 @@
+version: "3.8"
+
+services:
+ homebox:
+ image: ghcr.io/sysadminsmedia/homebox:latest
+ restart: unless-stopped
+ expose:
+ - "7745"
+ environment:
+ - TZ=${TZ}
+ - HBOX_AUTH_API_KEY_PEPPER=${HBOX_AUTH_API_KEY_PEPPER}
+ volumes:
+ - homebox-data:/data
+
+volumes:
+ homebox-data:
diff --git a/blueprints/homebox/homebox.svg b/blueprints/homebox/homebox.svg
new file mode 100644
index 00000000..029b516f
--- /dev/null
+++ b/blueprints/homebox/homebox.svg
@@ -0,0 +1 @@
+
diff --git a/blueprints/homebox/meta.json b/blueprints/homebox/meta.json
new file mode 100644
index 00000000..2cc46c51
--- /dev/null
+++ b/blueprints/homebox/meta.json
@@ -0,0 +1,18 @@
+{
+ "id": "homebox",
+ "name": "Homebox",
+ "version": "latest",
+ "description": "Homebox is a self-hosted home inventory and organization app for tracking belongings, locations, and labels.",
+ "logo": "homebox.svg",
+ "links": {
+ "github": "https://github.com/sysadminsmedia/homebox",
+ "website": "https://homebox.software/",
+ "docs": "https://homebox.software/en/"
+ },
+ "tags": [
+ "inventory",
+ "home",
+ "organization",
+ "self-hosted"
+ ]
+}
diff --git a/blueprints/homebox/template.toml b/blueprints/homebox/template.toml
new file mode 100644
index 00000000..70e45cbe
--- /dev/null
+++ b/blueprints/homebox/template.toml
@@ -0,0 +1,13 @@
+[variables]
+timezone = "Etc/UTC"
+api_key_pepper = "${password:64}"
+
+[config]
+[[config.domains]]
+serviceName = "homebox"
+port = 7745
+host = "${domain}"
+
+[config.env]
+TZ = "${timezone}"
+HBOX_AUTH_API_KEY_PEPPER = "${api_key_pepper}"
diff --git a/blueprints/kavita/docker-compose.yml b/blueprints/kavita/docker-compose.yml
new file mode 100644
index 00000000..c4db4893
--- /dev/null
+++ b/blueprints/kavita/docker-compose.yml
@@ -0,0 +1,21 @@
+version: "3.8"
+
+services:
+ kavita:
+ image: jvmilazz0/kavita:latest
+ restart: unless-stopped
+ expose:
+ - "5000"
+ environment:
+ - TZ=${TZ}
+ volumes:
+ - kavita-config:/kavita/config
+ - kavita-media:/manga
+ - kavita-books:/books
+ - kavita-comics:/comics
+
+volumes:
+ kavita-config:
+ kavita-media:
+ kavita-books:
+ kavita-comics:
diff --git a/blueprints/kavita/kavita.svg b/blueprints/kavita/kavita.svg
new file mode 100644
index 00000000..d2940227
--- /dev/null
+++ b/blueprints/kavita/kavita.svg
@@ -0,0 +1 @@
+
diff --git a/blueprints/kavita/meta.json b/blueprints/kavita/meta.json
new file mode 100644
index 00000000..e7ea31a9
--- /dev/null
+++ b/blueprints/kavita/meta.json
@@ -0,0 +1,18 @@
+{
+ "id": "kavita",
+ "name": "Kavita",
+ "version": "latest",
+ "description": "Kavita is a self-hosted digital library server for reading manga, comics, and ebooks from any device.",
+ "logo": "kavita.svg",
+ "links": {
+ "github": "https://github.com/Kareadita/Kavita",
+ "website": "https://www.kavitareader.com/",
+ "docs": "https://wiki.kavitareader.com/installation/docker/"
+ },
+ "tags": [
+ "media",
+ "ebooks",
+ "comics",
+ "library"
+ ]
+}
diff --git a/blueprints/kavita/template.toml b/blueprints/kavita/template.toml
new file mode 100644
index 00000000..20187dad
--- /dev/null
+++ b/blueprints/kavita/template.toml
@@ -0,0 +1,11 @@
+[variables]
+timezone = "Etc/UTC"
+
+[config]
+[[config.domains]]
+serviceName = "kavita"
+port = 5000
+host = "${domain}"
+
+[config.env]
+TZ = "${timezone}"
diff --git a/blueprints/languagetool/docker-compose.yml b/blueprints/languagetool/docker-compose.yml
new file mode 100644
index 00000000..3b6e8105
--- /dev/null
+++ b/blueprints/languagetool/docker-compose.yml
@@ -0,0 +1,8 @@
+version: "3.8"
+
+services:
+ languagetool:
+ image: collabora/languagetool:6.6
+ restart: unless-stopped
+ expose:
+ - "8010"
diff --git a/blueprints/languagetool/languagetool.svg b/blueprints/languagetool/languagetool.svg
new file mode 100644
index 00000000..24b55c7e
--- /dev/null
+++ b/blueprints/languagetool/languagetool.svg
@@ -0,0 +1,6 @@
+
diff --git a/blueprints/languagetool/meta.json b/blueprints/languagetool/meta.json
new file mode 100644
index 00000000..5cdf905f
--- /dev/null
+++ b/blueprints/languagetool/meta.json
@@ -0,0 +1,18 @@
+{
+ "id": "languagetool",
+ "name": "LanguageTool",
+ "version": "6.6",
+ "description": "LanguageTool is an open-source grammar, style, and spell checker that can run as a self-hosted HTTP service.",
+ "logo": "languagetool.svg",
+ "links": {
+ "github": "https://github.com/languagetool-org/languagetool",
+ "website": "https://languagetool.org/",
+ "docs": "https://dev.languagetool.org/http-server"
+ },
+ "tags": [
+ "writing",
+ "grammar",
+ "spellcheck",
+ "api"
+ ]
+}
diff --git a/blueprints/languagetool/template.toml b/blueprints/languagetool/template.toml
new file mode 100644
index 00000000..82a64fba
--- /dev/null
+++ b/blueprints/languagetool/template.toml
@@ -0,0 +1,6 @@
+[config]
+[[config.domains]]
+serviceName = "languagetool"
+port = 8010
+host = "${domain}"
+path = "/v2/languages"
diff --git a/blueprints/pairdrop/docker-compose.yml b/blueprints/pairdrop/docker-compose.yml
new file mode 100644
index 00000000..7dd5cbaa
--- /dev/null
+++ b/blueprints/pairdrop/docker-compose.yml
@@ -0,0 +1,17 @@
+version: "3.8"
+
+services:
+ pairdrop:
+ image: lscr.io/linuxserver/pairdrop:latest
+ restart: unless-stopped
+ expose:
+ - "3000"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TZ}
+ volumes:
+ - pairdrop-config:/config
+
+volumes:
+ pairdrop-config:
diff --git a/blueprints/pairdrop/meta.json b/blueprints/pairdrop/meta.json
new file mode 100644
index 00000000..84937691
--- /dev/null
+++ b/blueprints/pairdrop/meta.json
@@ -0,0 +1,18 @@
+{
+ "id": "pairdrop",
+ "name": "PairDrop",
+ "version": "latest",
+ "description": "PairDrop is a self-hosted local file sharing web app for sending files and text between nearby devices.",
+ "logo": "pairdrop.svg",
+ "links": {
+ "github": "https://github.com/schlagmichdoch/PairDrop",
+ "website": "https://pairdrop.net/",
+ "docs": "https://github.com/schlagmichdoch/PairDrop/blob/master/docs/host-your-own.md"
+ },
+ "tags": [
+ "file-sharing",
+ "p2p",
+ "web-app",
+ "self-hosted"
+ ]
+}
diff --git a/blueprints/pairdrop/pairdrop.svg b/blueprints/pairdrop/pairdrop.svg
new file mode 100644
index 00000000..56e79667
--- /dev/null
+++ b/blueprints/pairdrop/pairdrop.svg
@@ -0,0 +1 @@
+
diff --git a/blueprints/pairdrop/template.toml b/blueprints/pairdrop/template.toml
new file mode 100644
index 00000000..a7134500
--- /dev/null
+++ b/blueprints/pairdrop/template.toml
@@ -0,0 +1,11 @@
+[variables]
+timezone = "Etc/UTC"
+
+[config]
+[[config.domains]]
+serviceName = "pairdrop"
+port = 3000
+host = "${domain}"
+
+[config.env]
+TZ = "${timezone}"
diff --git a/blueprints/shiori/docker-compose.yml b/blueprints/shiori/docker-compose.yml
new file mode 100644
index 00000000..213c3c96
--- /dev/null
+++ b/blueprints/shiori/docker-compose.yml
@@ -0,0 +1,15 @@
+version: "3.8"
+
+services:
+ shiori:
+ image: ghcr.io/go-shiori/shiori:v1.8.0-2-g585ea34
+ restart: unless-stopped
+ expose:
+ - "8080"
+ environment:
+ - SHIORI_DIR=/srv/shiori
+ volumes:
+ - shiori-data:/srv/shiori
+
+volumes:
+ shiori-data:
diff --git a/blueprints/shiori/meta.json b/blueprints/shiori/meta.json
new file mode 100644
index 00000000..fa818d7f
--- /dev/null
+++ b/blueprints/shiori/meta.json
@@ -0,0 +1,18 @@
+{
+ "id": "shiori",
+ "name": "Shiori",
+ "version": "v1.8.0-2-g585ea34",
+ "description": "Shiori is a simple self-hosted bookmark manager with offline archive support and a web interface.",
+ "logo": "shiori.svg",
+ "links": {
+ "github": "https://github.com/go-shiori/shiori",
+ "website": "https://go-shiori.github.io/shiori/",
+ "docs": "https://go-shiori.github.io/shiori/"
+ },
+ "tags": [
+ "bookmarks",
+ "read-it-later",
+ "archiving",
+ "self-hosted"
+ ]
+}
diff --git a/blueprints/shiori/shiori.svg b/blueprints/shiori/shiori.svg
new file mode 100644
index 00000000..0ce7e245
--- /dev/null
+++ b/blueprints/shiori/shiori.svg
@@ -0,0 +1,5 @@
+
diff --git a/blueprints/shiori/template.toml b/blueprints/shiori/template.toml
new file mode 100644
index 00000000..158ba003
--- /dev/null
+++ b/blueprints/shiori/template.toml
@@ -0,0 +1,5 @@
+[config]
+[[config.domains]]
+serviceName = "shiori"
+port = 8080
+host = "${domain}"
diff --git a/blueprints/wakapi/docker-compose.yml b/blueprints/wakapi/docker-compose.yml
new file mode 100644
index 00000000..ce399231
--- /dev/null
+++ b/blueprints/wakapi/docker-compose.yml
@@ -0,0 +1,18 @@
+version: "3.8"
+
+services:
+ wakapi:
+ image: ghcr.io/muety/wakapi:latest
+ restart: unless-stopped
+ expose:
+ - "3000"
+ environment:
+ - WAKAPI_PASSWORD_SALT=${WAKAPI_PASSWORD_SALT}
+ - WAKAPI_DB_TYPE=sqlite3
+ - WAKAPI_DB_NAME=/data/wakapi.db
+ - WAKAPI_LISTEN_IPV4=0.0.0.0
+ volumes:
+ - wakapi-data:/data
+
+volumes:
+ wakapi-data:
diff --git a/blueprints/wakapi/meta.json b/blueprints/wakapi/meta.json
new file mode 100644
index 00000000..2512f265
--- /dev/null
+++ b/blueprints/wakapi/meta.json
@@ -0,0 +1,18 @@
+{
+ "id": "wakapi",
+ "name": "Wakapi",
+ "version": "latest",
+ "description": "Wakapi is a self-hosted WakaTime-compatible backend for tracking coding activity and developer statistics.",
+ "logo": "wakapi.svg",
+ "links": {
+ "github": "https://github.com/muety/wakapi",
+ "website": "https://wakapi.dev/",
+ "docs": "https://github.com/muety/wakapi#-installation"
+ },
+ "tags": [
+ "developer-tools",
+ "analytics",
+ "wakatime",
+ "self-hosted"
+ ]
+}
diff --git a/blueprints/wakapi/template.toml b/blueprints/wakapi/template.toml
new file mode 100644
index 00000000..939158b3
--- /dev/null
+++ b/blueprints/wakapi/template.toml
@@ -0,0 +1,11 @@
+[variables]
+password_salt = "${password:64}"
+
+[config]
+[[config.domains]]
+serviceName = "wakapi"
+port = 3000
+host = "${domain}"
+
+[config.env]
+WAKAPI_PASSWORD_SALT = "${password_salt}"
diff --git a/blueprints/wakapi/wakapi.svg b/blueprints/wakapi/wakapi.svg
new file mode 100644
index 00000000..4acaecb6
--- /dev/null
+++ b/blueprints/wakapi/wakapi.svg
@@ -0,0 +1 @@
+