Based on the provided documentation, I'll try to provide an answer.
According to the documentation, Cloudflare Workers can be used to host front-end applications at scale, and it's possible to combine static assets with dynamic logic in Cloudflare Workers, providing a full-stack experience for customers. (Source: https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/configuration/static-assets/)
However, when it comes to Durable Objects, they are built on top of Cloudflare Workers, and each Durable Object instance has its own durable storage, in-memory state, and single-threaded execution. (Source: https://developers.cloudflare.com/reference-architecture/diagrams/storage/durable-object-control-data-plane-pattern/)
Considering your question, hosting your whole app (static + API + DO) on one worker is possible, but it might not be the most optimal approach. Cloudflare Workers are designed to handle dynamic logic, and Durable Objects are built on top of them. However, hosting static assets on a worker might not be the most efficient way to serve them, as Cloudflare Pages is specifically designed for hosting static sites and provides features like global caching and scalability. (Source: https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/configuration/static-assets/)
Having the API on a separate worker on a different sub-domain is also a viable option. This approach would allow you to take advantage of Cloudflare Pages for hosting your static assets and use a separate worker for handling dynamic logic and Durable Objects.
In terms of hosting quality, both options should provide good performance, but it ultimately depends on your specific use case and requirements. If you're already using a meta-framework like Tanstack, it might be more convenient to host your whole app on one worker. However, if you want to take advantage of Cloudflare Pages' features for hosting static assets, using a separate worker for the API and Durable Objects might be a better approach.
I'm unable to provide a definitive answer, as it ultimately depends on your specific requirements and use case. You may want to experiment with both options and see which one works best for your application.
Feedback has been submitted! Thank you :)