feat: add JFA-Go and SoulSync docker-compose configs

- jfa-go-docker-compose.yml: Jellyfin account invitation system (invite.jefflix.lol)
- soulsync-docker-compose.yml: Spotify/Tidal to Soulseek music sync
- tsconfig.json: formatting updates and jsx mode fix
- package-lock.json: lock dependencies

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-02-04 23:37:02 +00:00
parent 38dc171af7
commit 95ac4129b3
4 changed files with 4116 additions and 5 deletions

21
jfa-go-docker-compose.yml Normal file
View File

@ -0,0 +1,21 @@
services:
jfa-go:
image: hrfee/jfa-go
container_name: jfa-go
restart: unless-stopped
ports:
- "8056:8056"
volumes:
- ./jfa-go-data:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.jfa-go.rule=Host(`invite.jefflix.lol`)"
- "traefik.http.services.jfa-go.loadbalancer.server.port=8056"
networks:
- traefik-public
environment:
- TZ=Europe/Berlin
networks:
traefik-public:
external: true

4000
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,76 @@
services:
# slskd - Soulseek client with REST API
slskd:
image: slskd/slskd:latest
container_name: slskd
restart: unless-stopped
environment:
- SLSKD_REMOTE_CONFIGURATION=true
- SLSKD_SHARED_DIR=/shared
- SLSKD_DOWNLOADS_DIR=/downloads
- SLSKD_NO_HTTPS=true
- TZ=Europe/Berlin
volumes:
- ./config/slskd:/app
- ./downloads:/downloads
# Share some of your music library back (important - avoid bans!)
- /mnt/hetzner-media/media/music:/shared:ro
# Transfer folder - completed downloads move here for import
- ./transfer:/transfer
ports:
- "50300:50300" # Soulseek listen port
- "50300:50300/udp"
networks:
- soulsync-network
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.slskd.rule=Host(`soulseek.jefflix.lol`) || Host(`slskd.jefflix.lol`)"
- "traefik.http.routers.slskd.entrypoints=web"
- "traefik.http.services.slskd.loadbalancer.server.port=5030"
- "traefik.docker.network=traefik-public"
# SoulSync - Spotify/Tidal to Soulseek sync
soulsync:
image: boulderbadgedad/soulsync:latest
container_name: soulsync
restart: unless-stopped
environment:
- TZ=Europe/Berlin
- PUID=1000
- PGID=1000
- PYTHONPATH=/app
- FLASK_ENV=production
volumes:
- ./config/soulsync:/app/data
- ./config/soulsync/logs:/app/logs
- ./config/soulsync/config:/app/config
- ./config/soulsync/storage:/app/storage
# Access to existing music library for comparison
- /mnt/hetzner-media/media/music:/music:ro
# Downloads from slskd
- ./downloads:/downloads
# Transfer folder for completed/processed files
- ./transfer:/transfer
depends_on:
- slskd
networks:
- soulsync-network
- traefik-public
- media-network
extra_hosts:
- "host.docker.internal:host-gateway"
labels:
- "traefik.enable=true"
- "traefik.http.routers.soulsync.rule=Host(`soulsync.jefflix.lol`)"
- "traefik.http.routers.soulsync.entrypoints=web"
- "traefik.http.services.soulsync.loadbalancer.server.port=8008"
- "traefik.docker.network=traefik-public"
networks:
soulsync-network:
driver: bridge
traefik-public:
external: true
media-network:
external: true

View File

@ -1,6 +1,10 @@
{
"compilerOptions": {
"lib": ["dom", "dom.iterable", "esnext"],
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"target": "ES6",
"skipLibCheck": true,
@ -11,7 +15,7 @@
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"jsx": "react-jsx",
"incremental": true,
"plugins": [
{
@ -19,9 +23,19 @@
}
],
"paths": {
"@/*": ["./*"]
"@/*": [
"./*"
]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts",
".next/dev/types/**/*.ts"
],
"exclude": [
"node_modules"
]
}