High-level architecture
Separate the Roblox client, browser frontend and account/live services.
Main responsibilities#
| Part | Role |
|---|---|
| Roblox client | Game-specific controls, eligible automation, runtime observations, authenticated telemetry and independent basic presence. |
| apps/dashboard | Static browser frontend. Client releases and the stable loader are included in the current source package. |
| workers/api | Discord sign-in, dashboard account/session/key operations, export/deletion and retention coordination. |
| workers/live | Runtime telemetry, live channels, presence and owner analytics. |
| D1 & R2 | Shared account/history database and runtime object storage. |
| Durable Objects | Live coordination, analytics and the documented account/object mutation and retention coordinators. |
Connection boundaries#
The browser signs in through the API. A dashboard key authorizes the Hub to associate its runtime with that account. The live service separates authenticated telemetry from basic presence. Browser CORS response access is not authentication or a restriction on non-browser clients.
Concurrency and persistence#
Runtime mutations are ordered per Aroyn account; object writes and retention checks use the same per-key coordinator. Different users remain independent. D1/R2 remain authoritative storage, and cross-service failure is handled with revoked access and pending cleanup rather than pretending that all actions are atomic.
Domain routing#
The documented aroyn.xyz domain points to the existing Pages frontend and the same API/live services. It did not create a new data store. Worker hostname strings retained from Veyra are compatibility details, not a different application or a requirement to move accounts.
Reusable UI boundary#
The new UI Library keeps controls and window lifecycle independent of game-specific controllers. The local Greedy Growers integration adapts existing functions to it; this has not replaced the public client. UI library development is documented under UI Library.