{
  "generated_at": "2026-04-23T15:06:29.953Z",
  "system": {
    "id": "topolo-device-platform",
    "name": "Topolo Device Platform",
    "slug": "topolo-device-platform",
    "kind": "application",
    "summary": "Topolo platform-owned TopoloFeed delivery, analytics, Android playback, and device-side app-catalog consumption surfaces.",
    "aliases": [],
    "lifecycle": "active",
    "last_verified": "2026-04-23",
    "owners": [
      "device-platform"
    ],
    "repo_paths": [
      "PlatformApplications/TopoloFeed",
      "PlatformApplications/TopoloMDM",
      "PlatformApplications/TopoloDevelopers"
    ],
    "service_ids": [],
    "visibility": "public",
    "api_contract": {
      "type": "curated",
      "source": "PlatformApplications/TopoloDocs/src/content/public/applications/device-platform.mdx",
      "notes": "Canonical device-platform coverage lives in the docs application; TopoloFeed contains the feed delivery API, feed asset host, feed operator UI, Android playback runtime, and feed analytics worker. Feed delivery is the callable platform service id `feed` at https://topolo-feed-api.topolo.app, feed media assets are served from the `topolo-feed-assets` R2 bucket at https://topolo-feed-assets.topolo.app, and feed analytics remains a deploy target for device telemetry at https://topolo-feed-analytics-api.topolo.app. TopoloMDM owns device management and Android provisioning. Mobile app catalog metadata belongs to Topolo Developers and is consumed through Developers-owned /api/apps routes. The retained Nodo-origin mobile surfaces are represented there as first-party Topolo Feed, Topolo Provision, and Topolo MDM Mobile records."
    },
    "primary_hosts": [
      "https://topolo-feed-api.topolo.app",
      "https://topolo-feed-assets.topolo.app",
      "https://topolo-feed-analytics-api.topolo.app"
    ],
    "doc_paths": [
      "applications/device-platform",
      "internal/apps/device-platform"
    ],
    "security_assurance": {
      "risk_tier": "high",
      "auth_boundary": "Device-platform service API authorization with Topolo Auth where integrated.",
      "tenant_isolation": "service_local",
      "external_inputs": [
        "api",
        "scheduled_task"
      ],
      "sensitive_data": [
        "customer_content",
        "telemetry"
      ],
      "last_security_review": "2026-04-16",
      "security_review_status": "not_started",
      "pentest_status": "not_started",
      "evidence_doc": "internal/apps/device-platform"
    },
    "dependencies": [
      "topolo-auth",
      "topolo-mdm",
      "topolo-developers"
    ],
    "public_hub_url": "/systems/topolo-device-platform",
    "internal_hub_url": null,
    "application_api_url": "/reference/apps/topolo-device-platform",
    "generated_openapi_url": null,
    "machine_urls": {
      "system": "/machine/systems/topolo-device-platform.json",
      "application": "/machine/applications/topolo-device-platform.json"
    }
  },
  "docs": {
    "public": [
      {
        "id": "applications/commerce.mdx",
        "title": "TopoloCommerce",
        "summary": "Public overview of the multi-vertical commerce platform for venue operations, guest runtimes, and staff execution.",
        "audience": "public",
        "tags": [
          "commerce",
          "venues",
          "kiosk"
        ],
        "url": "/applications/commerce.mdx",
        "last_verified": "2026-04-22"
      },
      {
        "id": "applications/device-platform.mdx",
        "title": "Topolo Device Platform",
        "summary": "Public overview of Topolo's device distribution, feed delivery, analytics, Android playback, and provisioning surfaces.",
        "audience": "public",
        "tags": [
          "device-platform",
          "devices",
          "feeds"
        ],
        "url": "/applications/device-platform.mdx",
        "last_verified": "2026-04-23"
      }
    ],
    "internal": [],
    "runbooks": []
  },
  "authority": {
    "owners": [
      "device-platform"
    ],
    "repo_paths": [
      "PlatformApplications/TopoloFeed",
      "PlatformApplications/TopoloMDM",
      "PlatformApplications/TopoloDevelopers"
    ],
    "service_ids": [],
    "dependencies": [
      "topolo-auth",
      "topolo-mdm",
      "topolo-developers"
    ],
    "aliases": []
  },
  "interfaces": {
    "contract_type": "curated",
    "contract_source": "PlatformApplications/TopoloDocs/src/content/public/applications/device-platform.mdx",
    "contract_source_exists": true,
    "openapi": null,
    "readme": {
      "path": "PlatformApplications/TopoloMDM/README.md",
      "intro": [
        "Canonical documentation for TopoloMDM lives in `PlatformApplications/TopoloDocs`.",
        "Use this repository for implementation only. Local product and operational docs have been retired in favor of the docs application."
      ],
      "headings": [
        "TopoloMDM"
      ],
      "routeHighlights": [],
      "commandHighlights": []
    }
  },
  "auth": {
    "depends_on_topolo_auth": true,
    "api_key_scopes": [],
    "service_permissions": []
  },
  "runtime": {
    "primary_hosts": [
      "https://topolo-feed-api.topolo.app",
      "https://topolo-feed-assets.topolo.app",
      "https://topolo-feed-analytics-api.topolo.app"
    ],
    "repo_entries": [
      "PlatformApplications/TopoloFeed/AnalyticsAPI/",
      "PlatformApplications/TopoloFeed/Android/",
      "PlatformApplications/TopoloFeed/api/",
      "PlatformApplications/TopoloFeed/topolo.cloudcontrol.json",
      "PlatformApplications/TopoloFeed/ui/",
      "PlatformApplications/TopoloMDM/README.md",
      "PlatformApplications/TopoloMDM/topolo-mdm-api/",
      "PlatformApplications/TopoloMDM/topolo-mdm-console/",
      "PlatformApplications/TopoloMDM/topolo-mdm-mobile/",
      "PlatformApplications/TopoloMDM/topolo-provision/",
      "PlatformApplications/TopoloMDM/topolo.cloudcontrol.json",
      "PlatformApplications/TopoloDevelopers/functions/",
      "PlatformApplications/TopoloDevelopers/index.html",
      "PlatformApplications/TopoloDevelopers/migrations/",
      "PlatformApplications/TopoloDevelopers/package-lock.json",
      "PlatformApplications/TopoloDevelopers/package.json",
      "PlatformApplications/TopoloDevelopers/postcss.config.cjs",
      "PlatformApplications/TopoloDevelopers/public/",
      "PlatformApplications/TopoloDevelopers/scripts/",
      "PlatformApplications/TopoloDevelopers/src/"
    ],
    "wrangler_surfaces": [
      {
        "path": "PlatformApplications/TopoloFeed/AnalyticsAPI/wrangler.toml",
        "observabilityEnabled": false,
        "environments": [
          "development",
          "production"
        ],
        "routes": [],
        "vars": [
          "ENVIRONMENT",
          "RATE_LIMIT_ENABLED",
          "RATE_LIMIT_PERIOD",
          "RATE_LIMIT_REQUESTS"
        ],
        "bindings": [
          {
            "kind": "d1",
            "binding": "DB",
            "sourcePath": "PlatformApplications/TopoloFeed/AnalyticsAPI/wrangler.toml",
            "target": "7e2729cc-1dbe-4f4f-bdbf-105d8c10cd66"
          },
          {
            "kind": "d1",
            "binding": "DB",
            "environment": "development",
            "sourcePath": "PlatformApplications/TopoloFeed/AnalyticsAPI/wrangler.toml",
            "target": "7e2729cc-1dbe-4f4f-bdbf-105d8c10cd66"
          },
          {
            "kind": "d1",
            "binding": "DB",
            "environment": "production",
            "sourcePath": "PlatformApplications/TopoloFeed/AnalyticsAPI/wrangler.toml",
            "target": "7e2729cc-1dbe-4f4f-bdbf-105d8c10cd66"
          }
        ],
        "cronTriggers": [],
        "workerName": "topolo-feed-analytics-api",
        "main": "src/index.ts",
        "compatibilityDate": "2025-05-01"
      },
      {
        "path": "PlatformApplications/TopoloFeed/api/wrangler.toml",
        "observabilityEnabled": false,
        "environments": [],
        "routes": [],
        "vars": [],
        "bindings": [
          {
            "kind": "kv",
            "binding": "TOPOLO_FEED_CONFIG",
            "sourcePath": "PlatformApplications/TopoloFeed/api/wrangler.toml",
            "target": "6a325c245ac0433696b3a127a8da3ee8"
          },
          {
            "kind": "kv",
            "binding": "TOPOLO_STATE",
            "sourcePath": "PlatformApplications/TopoloFeed/api/wrangler.toml",
            "target": "37a037b342994ab5b722b12746d7cbd7"
          }
        ],
        "cronTriggers": [],
        "workerName": "topolo-feed-api",
        "main": "src/index.ts",
        "compatibilityDate": "2025-01-05"
      },
      {
        "path": "PlatformApplications/TopoloMDM/topolo-mdm-api/wrangler.toml",
        "observabilityEnabled": true,
        "environments": [],
        "routes": [],
        "vars": [
          "APP_CATALOG_URL",
          "AUTH_BASE_URL",
          "BROWSER_SERVICE_ID",
          "DEFAULT_TENANT",
          "FEED_API_URL",
          "SERVICE_ID",
          "STATE_API_URL"
        ],
        "bindings": [],
        "cronTriggers": [],
        "workerName": "topolo-mdm-api",
        "compatibilityDate": "2026-04-10",
        "main": "index.js"
      },
      {
        "path": "PlatformApplications/TopoloMDM/topolo-mdm-console/wrangler.toml",
        "observabilityEnabled": true,
        "environments": [],
        "routes": [],
        "vars": [],
        "bindings": [],
        "cronTriggers": [],
        "workerName": "topolo-mdm-console",
        "compatibilityDate": "2026-04-10"
      },
      {
        "path": "PlatformApplications/TopoloMDM/topolo-provision/wrangler.toml",
        "observabilityEnabled": false,
        "environments": [],
        "routes": [],
        "vars": [],
        "bindings": [],
        "cronTriggers": [],
        "workerName": "topolo-provision"
      },
      {
        "path": "PlatformApplications/TopoloDevelopers/wrangler.toml",
        "observabilityEnabled": true,
        "environments": [],
        "routes": [],
        "vars": [
          "AUTH_API_URL"
        ],
        "bindings": [
          {
            "kind": "d1",
            "binding": "DEVELOPERS_DB",
            "sourcePath": "PlatformApplications/TopoloDevelopers/wrangler.toml",
            "target": "ab11dc42-6af0-4026-83ec-def345ca7bd3"
          },
          {
            "kind": "r2",
            "binding": "MOBILE_ARTIFACTS",
            "sourcePath": "PlatformApplications/TopoloDevelopers/wrangler.toml",
            "target": "topolo-apks"
          }
        ],
        "cronTriggers": [],
        "workerName": "topolo-developers",
        "compatibilityDate": "2026-04-10"
      }
    ],
    "packages": [
      {
        "path": "PlatformApplications/TopoloFeed/AnalyticsAPI/package.json",
        "name": "topolo-feed-analytics-api",
        "description": "Topolo Feed Analytics API - Analytics collection for digital signage",
        "scripts": [
          "dev",
          "deploy",
          "deploy:dry-run",
          "tail",
          "db:migrate",
          "lint",
          "typecheck",
          "build"
        ],
        "scriptCommands": [
          {
            "name": "dev",
            "command": "wrangler dev"
          },
          {
            "name": "deploy",
            "command": "wrangler deploy"
          },
          {
            "name": "deploy:dry-run",
            "command": "wrangler deploy --dry-run --config wrangler.toml"
          },
          {
            "name": "tail",
            "command": "wrangler tail"
          },
          {
            "name": "db:migrate",
            "command": "wrangler d1 execute cloudshop-db --remote --file=schema.sql"
          },
          {
            "name": "lint",
            "command": "tsc --noEmit"
          },
          {
            "name": "typecheck",
            "command": "tsc --noEmit"
          },
          {
            "name": "build",
            "command": "tsc --noEmit"
          }
        ]
      },
      {
        "path": "PlatformApplications/TopoloFeed/api/package.json",
        "name": "topolo-feed-api",
        "description": "Topolo Feed API - Media feed service for digital signage",
        "scripts": [
          "dev",
          "deploy",
          "deploy:dry-run",
          "tail",
          "lint",
          "typecheck",
          "build"
        ],
        "scriptCommands": [
          {
            "name": "dev",
            "command": "wrangler dev"
          },
          {
            "name": "deploy",
            "command": "wrangler deploy"
          },
          {
            "name": "deploy:dry-run",
            "command": "wrangler deploy --dry-run --config wrangler.toml"
          },
          {
            "name": "tail",
            "command": "wrangler tail"
          },
          {
            "name": "lint",
            "command": "tsc --noEmit"
          },
          {
            "name": "typecheck",
            "command": "tsc --noEmit"
          },
          {
            "name": "build",
            "command": "tsc --noEmit"
          }
        ]
      },
      {
        "path": "PlatformApplications/TopoloFeed/ui/package.json",
        "name": "topolo-feed-ui",
        "description": "UI for testing the Topolo Feed API",
        "scripts": [
          "build"
        ],
        "scriptCommands": [
          {
            "name": "build",
            "command": "mkdir -p dist && cp -r *.html *.css js dist/"
          }
        ]
      },
      {
        "path": "PlatformApplications/TopoloMDM/topolo-mdm-api/package.json",
        "name": "topolo-mdm-api",
        "description": "State management API for Topolo MDM multi-tenant system",
        "scripts": [
          "dev",
          "deploy",
          "deploy:dry-run",
          "lint",
          "build",
          "test",
          "local-dev",
          "remote-dev",
          "seed-test-data",
          "dev:with-test-data",
          "dev:with-remote"
        ],
        "scriptCommands": [
          {
            "name": "dev",
            "command": "wrangler dev"
          },
          {
            "name": "deploy",
            "command": "wrangler deploy"
          },
          {
            "name": "deploy:dry-run",
            "command": "npx --yes wrangler@4 deploy --dry-run --config wrangler.toml"
          },
          {
            "name": "lint",
            "command": "find handlers middleware -name '*.js' -print0 | xargs -0 -n1 node --check && node --check index.js && node --check deviceProfiles.js && node --check fcm.js && node --check runtime-config.js && node --check realtime.js && node --check utils.js"
          },
          {
            "name": "build",
            "command": "node --check index.js"
          },
          {
            "name": "test",
            "command": "node --test test/auth-contract.test.mjs"
          },
          {
            "name": "local-dev",
            "command": "node scripts/start-local-dev.js"
          },
          {
            "name": "remote-dev",
            "command": "node scripts/start-local-dev.js --remote"
          },
          {
            "name": "seed-test-data",
            "command": "node scripts/seed-test-data.js"
          },
          {
            "name": "dev:with-test-data",
            "command": "node scripts/start-local-dev.js"
          },
          {
            "name": "dev:with-remote",
            "command": "node scripts/start-local-dev.js --remote"
          }
        ]
      },
      {
        "path": "PlatformApplications/TopoloMDM/topolo-mdm-console/package.json",
        "name": "topolo-mdm-console",
        "description": "Topolo MDM Console - Enterprise Device Management",
        "scripts": [
          "dev",
          "build",
          "deploy",
          "lint",
          "preview",
          "astro",
          "typecheck"
        ],
        "scriptCommands": [
          {
            "name": "dev",
            "command": "astro dev"
          },
          {
            "name": "build",
            "command": "astro build"
          },
          {
            "name": "deploy",
            "command": "npm run build && npx wrangler pages deploy dist --project-name topolo-mdm-console"
          },
          {
            "name": "lint",
            "command": "npm run typecheck"
          },
          {
            "name": "preview",
            "command": "astro preview"
          },
          {
            "name": "astro",
            "command": "astro"
          },
          {
            "name": "typecheck",
            "command": "tsc --noEmit"
          }
        ]
      }
    ]
  },
  "data": {
    "env_vars": [
      "APP_CATALOG_URL",
      "AUTH_API_URL",
      "AUTH_BASE_URL",
      "BROWSER_SERVICE_ID",
      "DEFAULT_TENANT",
      "ENVIRONMENT",
      "FEED_API_URL",
      "RATE_LIMIT_ENABLED",
      "RATE_LIMIT_PERIOD",
      "RATE_LIMIT_REQUESTS",
      "SERVICE_ID",
      "STATE_API_URL"
    ],
    "bindings": [
      {
        "kind": "d1",
        "binding": "DB",
        "sourcePath": "PlatformApplications/TopoloFeed/AnalyticsAPI/wrangler.toml",
        "target": "7e2729cc-1dbe-4f4f-bdbf-105d8c10cd66"
      },
      {
        "kind": "d1",
        "binding": "DB",
        "environment": "development",
        "sourcePath": "PlatformApplications/TopoloFeed/AnalyticsAPI/wrangler.toml",
        "target": "7e2729cc-1dbe-4f4f-bdbf-105d8c10cd66"
      },
      {
        "kind": "d1",
        "binding": "DB",
        "environment": "production",
        "sourcePath": "PlatformApplications/TopoloFeed/AnalyticsAPI/wrangler.toml",
        "target": "7e2729cc-1dbe-4f4f-bdbf-105d8c10cd66"
      },
      {
        "kind": "kv",
        "binding": "TOPOLO_FEED_CONFIG",
        "sourcePath": "PlatformApplications/TopoloFeed/api/wrangler.toml",
        "target": "6a325c245ac0433696b3a127a8da3ee8"
      },
      {
        "kind": "kv",
        "binding": "TOPOLO_STATE",
        "sourcePath": "PlatformApplications/TopoloFeed/api/wrangler.toml",
        "target": "37a037b342994ab5b722b12746d7cbd7"
      },
      {
        "kind": "d1",
        "binding": "DEVELOPERS_DB",
        "sourcePath": "PlatformApplications/TopoloDevelopers/wrangler.toml",
        "target": "ab11dc42-6af0-4026-83ec-def345ca7bd3"
      },
      {
        "kind": "r2",
        "binding": "MOBILE_ARTIFACTS",
        "sourcePath": "PlatformApplications/TopoloDevelopers/wrangler.toml",
        "target": "topolo-apks"
      }
    ],
    "queue_bindings": [],
    "storage_kinds": [
      "d1",
      "kv",
      "r2"
    ],
    "workflow_signals": []
  },
  "deployment": {
    "commands": [
      {
        "name": "deploy",
        "command": "PlatformApplications/TopoloFeed/AnalyticsAPI/package.json :: wrangler deploy"
      },
      {
        "name": "deploy:dry-run",
        "command": "PlatformApplications/TopoloFeed/AnalyticsAPI/package.json :: wrangler deploy --dry-run --config wrangler.toml"
      },
      {
        "name": "build",
        "command": "PlatformApplications/TopoloFeed/AnalyticsAPI/package.json :: tsc --noEmit"
      },
      {
        "name": "deploy",
        "command": "PlatformApplications/TopoloFeed/api/package.json :: wrangler deploy"
      },
      {
        "name": "deploy:dry-run",
        "command": "PlatformApplications/TopoloFeed/api/package.json :: wrangler deploy --dry-run --config wrangler.toml"
      },
      {
        "name": "build",
        "command": "PlatformApplications/TopoloFeed/api/package.json :: tsc --noEmit"
      },
      {
        "name": "build",
        "command": "PlatformApplications/TopoloFeed/ui/package.json :: mkdir -p dist && cp -r *.html *.css js dist/"
      },
      {
        "name": "deploy",
        "command": "PlatformApplications/TopoloMDM/topolo-mdm-api/package.json :: wrangler deploy"
      },
      {
        "name": "deploy:dry-run",
        "command": "PlatformApplications/TopoloMDM/topolo-mdm-api/package.json :: npx --yes wrangler@4 deploy --dry-run --config wrangler.toml"
      },
      {
        "name": "build",
        "command": "PlatformApplications/TopoloMDM/topolo-mdm-api/package.json :: node --check index.js"
      },
      {
        "name": "build",
        "command": "PlatformApplications/TopoloMDM/topolo-mdm-console/package.json :: astro build"
      },
      {
        "name": "deploy",
        "command": "PlatformApplications/TopoloMDM/topolo-mdm-console/package.json :: npm run build && npx wrangler pages deploy dist --project-name topolo-mdm-console"
      },
      {
        "name": "preview",
        "command": "PlatformApplications/TopoloMDM/topolo-mdm-console/package.json :: astro preview"
      }
    ],
    "routes": [],
    "environments": [
      "development",
      "production"
    ],
    "assets_directories": [],
    "observability_enabled": true
  },
  "debugging": {
    "failure_modes": [
      "No Auth service ID is registered for this system."
    ],
    "entrypoints": [
      "PlatformApplications/TopoloFeed/AnalyticsAPI/wrangler.toml",
      "PlatformApplications/TopoloFeed/api/wrangler.toml",
      "PlatformApplications/TopoloMDM/topolo-mdm-api/wrangler.toml",
      "PlatformApplications/TopoloMDM/topolo-mdm-console/wrangler.toml",
      "PlatformApplications/TopoloMDM/topolo-provision/wrangler.toml",
      "PlatformApplications/TopoloDevelopers/wrangler.toml",
      "PlatformApplications/TopoloDocs/src/content/public/applications/device-platform.mdx",
      "PlatformApplications/TopoloMDM/README.md",
      "PlatformApplications/TopoloFeed/AnalyticsAPI/package.json",
      "PlatformApplications/TopoloFeed/api/package.json",
      "PlatformApplications/TopoloFeed/ui/package.json",
      "PlatformApplications/TopoloMDM/topolo-mdm-api/package.json",
      "PlatformApplications/TopoloMDM/topolo-mdm-console/package.json"
    ]
  }
}