{
  "manifest_version": "1.0.0",
  "template": {
    "id": "78ea545b-5dce-402e-be7d-49bc7eb850cb",
    "slug": "linkpage",
    "name": "linkpage",
    "description": "FOSS self-hosted link-in-bio page — Linktree alternative with analytics",
    "url": "https://railway.com/deploy/linkpage",
    "upstream": {
      "image": "rhnvrm/linkpage:v0.5.0"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "linkpage",
      "source": {
        "image": "rhnvrm/linkpage:v0.5.0"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "PAGE_INTRO",
      "service": "linkpage",
      "description": "Provide a value for PAGE_INTRO.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "PAGE_TITLE",
      "service": "linkpage",
      "description": "Provide a value for PAGE_TITLE.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "SOCIAL_GITHUB",
      "service": "linkpage",
      "description": "Provide a value for SOCIAL_GITHUB.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "SOCIAL_TWITTER",
      "service": "linkpage",
      "description": "Provide a value for SOCIAL_TWITTER.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "SOCIAL_YOUTUBE",
      "service": "linkpage",
      "description": "Provide a value for SOCIAL_YOUTUBE.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "SOCIAL_FACEBOOK",
      "service": "linkpage",
      "description": "Provide a value for SOCIAL_FACEBOOK.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "SOCIAL_LINKEDIN",
      "service": "linkpage",
      "description": "Provide a value for SOCIAL_LINKEDIN.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "SOCIAL_INSTAGRAM",
      "service": "linkpage",
      "description": "Provide a value for SOCIAL_INSTAGRAM.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "LINKPAGE_ADMIN_PASSWORD",
      "service": "linkpage",
      "description": "Provide a value for LINKPAGE_ADMIN_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "LINKPAGE_ADMIN_USERNAME",
      "service": "linkpage",
      "description": "Provide a value for LINKPAGE_ADMIN_USERNAME.",
      "secret": false,
      "strategy": "ask_user"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "linkpage"
      }
    },
    "cli": "railway deploy --template linkpage",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "78ea545b-5dce-402e-be7d-49bc7eb850cb",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "a4a386ba-1244-4194-9776-6f3ac4e8f086": {
                  "icon": null,
                  "name": "linkpage",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'mkdir -p /data && cat > /data/config.toml <<EOF\nhttp_address=\"0.0.0.0:8000\"\nread_timeout=\"10s\"\nwrite_timeout=\"10s\"\ndbfile=\"/data/app.db\"\npage_logo_url=\"/static/app/img/logos/logo-icon-only.png\"\npage_title=\"${PAGE_TITLE}\"\npage_intro=\"${PAGE_INTRO}\"\nstatic_files=\"static/custom\"\n\n[auth]\nusername=\"${LINKPAGE_ADMIN_USERNAME}\"\npassword=\"${LINKPAGE_ADMIN_PASSWORD}\"\n\n[social]\ngithub = \"${SOCIAL_GITHUB}\"\ntwitter = \"${SOCIAL_TWITTER}\"\nlinkedin = \"${SOCIAL_LINKEDIN}\"\ninstagram = \"${SOCIAL_INSTAGRAM}\"\nyoutube = \"${SOCIAL_YOUTUBE}\"\nfacebook = \"${SOCIAL_FACEBOOK}\"\nEOF\nexec ./linkpage --config /data/config.toml' ",
                    "healthcheckPath": "",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "rhnvrm/linkpage:v0.5.0"
                  },
                  "variables": {
                    "PAGE_INTRO": {
                      "isOptional": false,
                      "defaultValue": "{{PAGE_INTRO}}"
                    },
                    "PAGE_TITLE": {
                      "isOptional": false,
                      "defaultValue": "{{PAGE_TITLE}}"
                    },
                    "SOCIAL_GITHUB": {
                      "isOptional": false,
                      "defaultValue": "{{SOCIAL_GITHUB}}"
                    },
                    "SOCIAL_TWITTER": {
                      "isOptional": false,
                      "defaultValue": "{{SOCIAL_TWITTER}}"
                    },
                    "SOCIAL_YOUTUBE": {
                      "isOptional": false,
                      "defaultValue": "{{SOCIAL_YOUTUBE}}"
                    },
                    "SOCIAL_FACEBOOK": {
                      "isOptional": false,
                      "defaultValue": "{{SOCIAL_FACEBOOK}}"
                    },
                    "SOCIAL_LINKEDIN": {
                      "isOptional": false,
                      "defaultValue": "{{SOCIAL_LINKEDIN}}"
                    },
                    "SOCIAL_INSTAGRAM": {
                      "isOptional": false,
                      "defaultValue": "{{SOCIAL_INSTAGRAM}}"
                    },
                    "LINKPAGE_ADMIN_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{LINKPAGE_ADMIN_PASSWORD}}"
                    },
                    "LINKPAGE_ADMIN_USERNAME": {
                      "isOptional": false,
                      "defaultValue": "{{LINKPAGE_ADMIN_USERNAME}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8000": {
                        "port": 8000
                      }
                    }
                  },
                  "volumeMounts": {
                    "a4a386ba-1244-4194-9776-6f3ac4e8f086": {
                      "mountPath": "/data"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 1,
    "needs_volume": true
  },
  "generated_at": "2026-09-11T22:14:37.124Z",
  "generator_version": "0.1.0"
}
