feat: promote botfights from web-only to container app
Convert botfights from external link to real container app on port 9100. Add manifest, update marketplace/discover/kiosk/session configs, switch registry URLs to git.tx1138.com. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
548107eb8b
commit
918fec0af7
73
apps/botfights/manifest.yml
Normal file
73
apps/botfights/manifest.yml
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
app:
|
||||||
|
id: botfights
|
||||||
|
name: BotFights
|
||||||
|
version: 1.0.0
|
||||||
|
description: Bot competition arena with 2-player arcade fighting mode. AI bots battle in trivia challenges while humans duke it out with controllers. Built for Bitcoiners.
|
||||||
|
category: community
|
||||||
|
|
||||||
|
container:
|
||||||
|
image: git.tx1138.com/lfg2025/botfights:1.0.0
|
||||||
|
pull_policy: always
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- storage: 500Mi
|
||||||
|
|
||||||
|
resources:
|
||||||
|
cpu_limit: 2
|
||||||
|
memory_limit: 512Mi
|
||||||
|
disk_limit: 500Mi
|
||||||
|
|
||||||
|
security:
|
||||||
|
capabilities: []
|
||||||
|
readonly_root: true
|
||||||
|
no_new_privileges: true
|
||||||
|
user: 1001
|
||||||
|
seccomp_profile: default
|
||||||
|
network_policy: bridge
|
||||||
|
apparmor_profile: default
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- host: 9100
|
||||||
|
container: 9100
|
||||||
|
protocol: tcp # Web UI + API
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- type: bind
|
||||||
|
source: botfights-data
|
||||||
|
target: /app/server/data
|
||||||
|
- type: tmpfs
|
||||||
|
target: /tmp
|
||||||
|
options: [rw,noexec,nosuid,size=64m]
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- NODE_ENV=production
|
||||||
|
|
||||||
|
health_check:
|
||||||
|
type: http
|
||||||
|
endpoint: http://localhost:9100
|
||||||
|
path: /api/health
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 30s
|
||||||
|
|
||||||
|
interfaces:
|
||||||
|
main:
|
||||||
|
name: Web UI
|
||||||
|
description: Bot arena and arcade fighter with controller support
|
||||||
|
type: ui
|
||||||
|
port: 9100
|
||||||
|
protocol: http
|
||||||
|
path: /
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
author: Dorian
|
||||||
|
license: MIT
|
||||||
|
tags:
|
||||||
|
- bitcoin
|
||||||
|
- gaming
|
||||||
|
- arcade
|
||||||
|
- fighter
|
||||||
|
- bots
|
||||||
|
- competition
|
||||||
|
- controller
|
||||||
@ -575,7 +575,7 @@ export const dummyApps: Record<string, PackageDataEntry> = {
|
|||||||
'current-dependencies': {},
|
'current-dependencies': {},
|
||||||
'last-backup': null,
|
'last-backup': null,
|
||||||
'interface-addresses': {
|
'interface-addresses': {
|
||||||
main: { 'tor-address': '', 'lan-address': 'https://botfights.net' }
|
main: { 'tor-address': '', 'lan-address': 'http://localhost:9100' }
|
||||||
},
|
},
|
||||||
status: ServiceStatus.Running
|
status: ServiceStatus.Running
|
||||||
}
|
}
|
||||||
|
|||||||
@ -110,7 +110,7 @@ const launchableApps = computed<KioskApp[]>(() => {
|
|||||||
'dwn': '/app/dwn/',
|
'dwn': '/app/dwn/',
|
||||||
'nostr-rs-relay': '/app/nostr-rs-relay/',
|
'nostr-rs-relay': '/app/nostr-rs-relay/',
|
||||||
'indeedhub': 'http://localhost:8190',
|
'indeedhub': 'http://localhost:8190',
|
||||||
'botfights': 'https://botfights.net',
|
'botfights': 'http://localhost:9100',
|
||||||
'nwnn': 'https://nwnn.l484.com',
|
'nwnn': 'https://nwnn.l484.com',
|
||||||
'484-kitchen': 'https://484.kitchen',
|
'484-kitchen': 'https://484.kitchen',
|
||||||
'call-the-operator': 'https://cta.tx1138.com',
|
'call-the-operator': 'https://cta.tx1138.com',
|
||||||
|
|||||||
@ -7,7 +7,6 @@ import { PackageState } from '@/types/api'
|
|||||||
/** Web-only app detection (no container -- external websites) */
|
/** Web-only app detection (no container -- external websites) */
|
||||||
export const WEB_ONLY_APP_URLS: Record<string, string> = {
|
export const WEB_ONLY_APP_URLS: Record<string, string> = {
|
||||||
'indeedhub': `${window.location.protocol}//${window.location.hostname}:7777`,
|
'indeedhub': `${window.location.protocol}//${window.location.hostname}:7777`,
|
||||||
'botfights': 'https://botfights.net',
|
|
||||||
'nwnn': 'https://nwnn.l484.com',
|
'nwnn': 'https://nwnn.l484.com',
|
||||||
'484-kitchen': 'https://484.kitchen',
|
'484-kitchen': 'https://484.kitchen',
|
||||||
'call-the-operator': 'https://cta.tx1138.com',
|
'call-the-operator': 'https://cta.tx1138.com',
|
||||||
@ -93,7 +92,7 @@ export const APP_URLS: Record<string, { dev: string; prod: string }> = {
|
|||||||
'tailscale': { dev: 'http://localhost:8240', prod: 'http://localhost:8240' },
|
'tailscale': { dev: 'http://localhost:8240', prod: 'http://localhost:8240' },
|
||||||
'lnd': { dev: 'http://localhost:8081', prod: 'http://localhost:8081' },
|
'lnd': { dev: 'http://localhost:8081', prod: 'http://localhost:8081' },
|
||||||
'bitcoin-knots': { dev: 'http://localhost:8334', prod: 'http://localhost:8334' },
|
'bitcoin-knots': { dev: 'http://localhost:8334', prod: 'http://localhost:8334' },
|
||||||
'botfights': { dev: 'https://botfights.net', prod: 'https://botfights.net' },
|
'botfights': { dev: 'http://localhost:9100', prod: 'http://localhost:9100' },
|
||||||
'nwnn': { dev: 'https://nwnn.l484.com', prod: 'https://nwnn.l484.com' },
|
'nwnn': { dev: 'https://nwnn.l484.com', prod: 'https://nwnn.l484.com' },
|
||||||
'484-kitchen': { dev: 'https://484.kitchen', prod: 'https://484.kitchen' },
|
'484-kitchen': { dev: 'https://484.kitchen', prod: 'https://484.kitchen' },
|
||||||
'call-the-operator': { dev: 'https://cta.tx1138.com', prod: 'https://cta.tx1138.com' },
|
'call-the-operator': { dev: 'https://cta.tx1138.com', prod: 'https://cta.tx1138.com' },
|
||||||
|
|||||||
@ -42,6 +42,7 @@ export const APP_PORTS: Record<string, number> = {
|
|||||||
'fips': 8202,
|
'fips': 8202,
|
||||||
'routstr': 8200,
|
'routstr': 8200,
|
||||||
'indeedhub': 7777,
|
'indeedhub': 7777,
|
||||||
|
'botfights': 9100,
|
||||||
'dwn': 3100,
|
'dwn': 3100,
|
||||||
'endurain': 8080,
|
'endurain': 8080,
|
||||||
}
|
}
|
||||||
@ -93,7 +94,6 @@ export const HTTPS_PROXY_PATHS: Record<string, string> = {
|
|||||||
|
|
||||||
/** External HTTPS apps -- always loaded directly */
|
/** External HTTPS apps -- always loaded directly */
|
||||||
export const EXTERNAL_URLS: Record<string, string> = {
|
export const EXTERNAL_URLS: Record<string, string> = {
|
||||||
'botfights': 'https://botfights.net',
|
|
||||||
'nwnn': 'https://nwnn.l484.com',
|
'nwnn': 'https://nwnn.l484.com',
|
||||||
'484-kitchen': 'https://484.kitchen',
|
'484-kitchen': 'https://484.kitchen',
|
||||||
'call-the-operator': 'https://cta.tx1138.com',
|
'call-the-operator': 'https://cta.tx1138.com',
|
||||||
|
|||||||
@ -18,7 +18,7 @@ export const SERVICE_NAMES = new Set([
|
|||||||
'indeedhub-build_postgres_1', 'indeedhub-build_redis_1', 'indeedhub-build_minio_1',
|
'indeedhub-build_postgres_1', 'indeedhub-build_redis_1', 'indeedhub-build_minio_1',
|
||||||
'indeedhub-build_minio-init_1', 'indeedhub-build_relay_1',
|
'indeedhub-build_minio-init_1', 'indeedhub-build_relay_1',
|
||||||
// L484 web-only apps — parked in Services for now
|
// L484 web-only apps — parked in Services for now
|
||||||
'botfights', 'nwnn', '484-kitchen', 'call-the-operator',
|
'nwnn', '484-kitchen', 'call-the-operator',
|
||||||
'syntropy-institute', 't-zero', 'arch-presentation',
|
'syntropy-institute', 't-zero', 'arch-presentation',
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ export const APP_CATEGORY_MAP: Record<string, string> = {
|
|||||||
'nostr-vpn': 'networking', 'fips': 'networking', 'routstr': 'community',
|
'nostr-vpn': 'networking', 'fips': 'networking', 'routstr': 'community',
|
||||||
'tailscale': 'networking', 'nginx-proxy-manager': 'networking', 'portainer': 'networking',
|
'tailscale': 'networking', 'nginx-proxy-manager': 'networking', 'portainer': 'networking',
|
||||||
'uptime-kuma': 'networking', 'dwn': 'data',
|
'uptime-kuma': 'networking', 'dwn': 'data',
|
||||||
'botfights': 'l484', 'nwnn': 'l484', '484-kitchen': 'l484',
|
'botfights': 'community', 'nwnn': 'l484', '484-kitchen': 'l484',
|
||||||
'call-the-operator': 'l484', 'syntropy-institute': 'l484', 't-zero': 'l484',
|
'call-the-operator': 'l484', 'syntropy-institute': 'l484', 't-zero': 'l484',
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,7 +55,6 @@ export function getAppCategory(id: string, pkg: PackageDataEntry): string {
|
|||||||
|
|
||||||
// Web-only app IDs and their URLs
|
// Web-only app IDs and their URLs
|
||||||
export const WEB_ONLY_APP_URLS: Record<string, string> = {
|
export const WEB_ONLY_APP_URLS: Record<string, string> = {
|
||||||
'botfights': 'https://botfights.net',
|
|
||||||
'nwnn': 'https://nwnn.l484.com',
|
'nwnn': 'https://nwnn.l484.com',
|
||||||
'484-kitchen': 'https://484.kitchen',
|
'484-kitchen': 'https://484.kitchen',
|
||||||
'call-the-operator': 'https://cta.tx1138.com',
|
'call-the-operator': 'https://cta.tx1138.com',
|
||||||
@ -69,11 +68,6 @@ export function isWebOnlyApp(id: string): boolean {
|
|||||||
|
|
||||||
// Web-only apps (no container) -- always show as installed bookmarks
|
// Web-only apps (no container) -- always show as installed bookmarks
|
||||||
export const WEB_ONLY_APPS: Record<string, PackageDataEntry> = {
|
export const WEB_ONLY_APPS: Record<string, PackageDataEntry> = {
|
||||||
'botfights': {
|
|
||||||
state: 'running' as PackageState,
|
|
||||||
manifest: { id: 'botfights', title: 'BotFights', version: '1.0.0', description: { short: 'AI bot arena — build, train, and battle autonomous agents', long: '' }, 'release-notes': '', license: '', 'wrapper-repo': '', 'upstream-repo': '', 'support-site': '', 'marketing-site': '', 'donation-url': null },
|
|
||||||
'static-files': { license: '', instructions: '', icon: '/assets/img/app-icons/botfights.svg' },
|
|
||||||
},
|
|
||||||
'nwnn': {
|
'nwnn': {
|
||||||
state: 'running' as PackageState,
|
state: 'running' as PackageState,
|
||||||
manifest: { id: 'nwnn', title: 'Next Web News Network', version: '1.0.0', description: { short: 'Decentralized news aggregator, synced from Telegram', long: '' }, 'release-notes': '', license: '', 'wrapper-repo': '', 'upstream-repo': '', 'support-site': '', 'marketing-site': '', 'donation-url': null },
|
manifest: { id: 'nwnn', title: 'Next Web News Network', version: '1.0.0', description: { short: 'Decentralized news aggregator, synced from Telegram', long: '' }, 'release-notes': '', license: '', 'wrapper-repo': '', 'upstream-repo': '', 'support-site': '', 'marketing-site': '', 'donation-url': null },
|
||||||
|
|||||||
@ -33,7 +33,7 @@ export function getCuratedAppList(): MarketplaceApp[] {
|
|||||||
{ id: 'fips', title: 'FIPS', version: '0.1.0', category: 'networking', description: 'Free Internetworking Peering System. Self-organizing encrypted mesh network with Nostr identity.', icon: '/assets/img/app-icons/fips.svg', author: 'Jim Corgan', dockerImage: `${R}/fips:v0.1.0`, repoUrl: 'https://github.com/jmcorgan/fips' },
|
{ id: 'fips', title: 'FIPS', version: '0.1.0', category: 'networking', description: 'Free Internetworking Peering System. Self-organizing encrypted mesh network with Nostr identity.', icon: '/assets/img/app-icons/fips.svg', author: 'Jim Corgan', dockerImage: `${R}/fips:v0.1.0`, repoUrl: 'https://github.com/jmcorgan/fips' },
|
||||||
{ id: 'routstr', title: 'Routstr', version: '0.4.3', category: 'community', description: 'Decentralized AI inference proxy. Pay-per-request with Cashu ecash, provider discovery via Nostr.', icon: '/assets/img/app-icons/routstr.svg', author: 'Routstr', dockerImage: `${R}/routstr:v0.4.3`, repoUrl: 'https://github.com/routstr/routstr-core' },
|
{ id: 'routstr', title: 'Routstr', version: '0.4.3', category: 'community', description: 'Decentralized AI inference proxy. Pay-per-request with Cashu ecash, provider discovery via Nostr.', icon: '/assets/img/app-icons/routstr.svg', author: 'Routstr', dockerImage: `${R}/routstr:v0.4.3`, repoUrl: 'https://github.com/routstr/routstr-core' },
|
||||||
{ id: 'nostrudel', title: 'noStrudel', version: '0.40.0', category: 'nostr', description: 'Feature-rich Nostr web client. Browse feeds, post notes, manage relays with NIP-07.', icon: '/assets/img/app-icons/nostrudel.svg', author: 'hzrd149', dockerImage: '', repoUrl: 'https://github.com/hzrd149/nostrudel', webUrl: 'https://nostrudel.ninja' },
|
{ id: 'nostrudel', title: 'noStrudel', version: '0.40.0', category: 'nostr', description: 'Feature-rich Nostr web client. Browse feeds, post notes, manage relays with NIP-07.', icon: '/assets/img/app-icons/nostrudel.svg', author: 'hzrd149', dockerImage: '', repoUrl: 'https://github.com/hzrd149/nostrudel', webUrl: 'https://nostrudel.ninja' },
|
||||||
{ id: 'botfights', title: 'BotFights', version: '1.0.0', description: 'AI bot arena — build, train, and battle autonomous agents in strategy tournaments.', icon: '/assets/img/app-icons/botfights.svg', author: 'BotFights', dockerImage: '', repoUrl: 'https://botfights.net', webUrl: 'https://botfights.net' },
|
{ id: 'botfights', title: 'BotFights', version: '1.0.0', category: 'community', description: 'Bot arena + 2-player arcade fighter with controller support. AI bots battle in trivia, humans duke it out with controllers.', icon: '/assets/img/app-icons/botfights.svg', author: 'BotFights', dockerImage: `${R}/botfights:1.0.0`, repoUrl: 'https://botfights.net' },
|
||||||
{ id: 'nwnn', title: 'Next Web News Network', version: '1.0.0', category: 'l484', description: 'Decentralized news aggregator. Community-curated Bitcoin and sovereignty content.', icon: '/assets/img/app-icons/nwnn.png', author: 'L484', dockerImage: '', repoUrl: 'https://nwnn.l484.com', webUrl: 'https://nwnn.l484.com' },
|
{ id: 'nwnn', title: 'Next Web News Network', version: '1.0.0', category: 'l484', description: 'Decentralized news aggregator. Community-curated Bitcoin and sovereignty content.', icon: '/assets/img/app-icons/nwnn.png', author: 'L484', dockerImage: '', repoUrl: 'https://nwnn.l484.com', webUrl: 'https://nwnn.l484.com' },
|
||||||
{ id: '484-kitchen', title: '484 Kitchen', version: '1.0.0', category: 'l484', description: 'K484 application platform for the L484 network.', icon: '/assets/img/app-icons/484-kitchen.png', author: 'L484', dockerImage: '', repoUrl: 'https://484.kitchen', webUrl: 'https://484.kitchen' },
|
{ id: '484-kitchen', title: '484 Kitchen', version: '1.0.0', category: 'l484', description: 'K484 application platform for the L484 network.', icon: '/assets/img/app-icons/484-kitchen.png', author: 'L484', dockerImage: '', repoUrl: 'https://484.kitchen', webUrl: 'https://484.kitchen' },
|
||||||
{ id: 'call-the-operator', title: 'Call the Operator', version: '1.0.0', category: 'l484', description: 'Escape the Matrix — explore decentralized alternatives and reclaim sovereignty.', icon: '/assets/img/app-icons/call-the-operator.png', author: 'TX1138', dockerImage: '', repoUrl: 'https://cta.tx1138.com', webUrl: 'https://cta.tx1138.com' },
|
{ id: 'call-the-operator', title: 'Call the Operator', version: '1.0.0', category: 'l484', description: 'Escape the Matrix — explore decentralized alternatives and reclaim sovereignty.', icon: '/assets/img/app-icons/call-the-operator.png', author: 'TX1138', dockerImage: '', repoUrl: 'https://cta.tx1138.com', webUrl: 'https://cta.tx1138.com' },
|
||||||
|
|||||||
@ -470,13 +470,13 @@ export function getCuratedAppList(): MarketplaceApp[] {
|
|||||||
id: 'botfights',
|
id: 'botfights',
|
||||||
title: 'BotFights',
|
title: 'BotFights',
|
||||||
version: '1.0.0',
|
version: '1.0.0',
|
||||||
description: 'AI bot arena — build, train, and battle autonomous agents. Compete in strategy tournaments with your own coded bots.',
|
category: 'community',
|
||||||
|
description: 'Bot arena + 2-player arcade fighter with controller support. AI bots battle in trivia, humans duke it out with controllers.',
|
||||||
icon: '/assets/img/app-icons/botfights.svg',
|
icon: '/assets/img/app-icons/botfights.svg',
|
||||||
author: 'BotFights',
|
author: 'BotFights',
|
||||||
dockerImage: '',
|
dockerImage: `${REGISTRY}/botfights:1.0.0`,
|
||||||
manifestUrl: undefined,
|
manifestUrl: undefined,
|
||||||
repoUrl: 'https://botfights.net',
|
repoUrl: 'https://botfights.net',
|
||||||
webUrl: 'https://botfights.net'
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'nwnn',
|
id: 'nwnn',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user