We run Maple fully self-hosted (no Cloudflare, no Tinybird): vanilla ClickHouse per docs/self-hosted-clickhouse.md with the prebuilt collector, plus the three workers (api, alerting, electric-sync) running under Miniflare in a single container, Hyperdrive bound to a local Postgres 17, Electric fronted by the electric-sync worker, drizzle migrations on boot, chat/AI-triage on the OpenRouter fallback. It's validated end-to-end (auth → Electric shapes → ClickHouse queries) and lives at tlvenn/maple (deploy/workerd/).
Along the way we found the in-repo Docker path has drifted: apps/api/Dockerfile runs bun run start which no longer exists, docker-compose.yml references apps/alerting/apps/electric-sync Dockerfiles that aren't in the tree, and apps/web/Dockerfile can't build because .dockerignore excludes packages/browser/packages/effect-sdk and @maple-dev/clickhouse-builder's dist is never built (also @maple-dev/browser is imported by the web app but not declared, so it only resolves via hoisting).
If there's interest, I'd like to upstream this in pieces:
- the web Dockerfile/.dockerignore fixes — happy to open that PR immediately;
- cleaning up or fixing the stale api/compose Docker references — your call whether those should be fixed or removed;
- the Miniflare runtime as an official self-host deployment path, with docs.
No hard feelings if (3) isn't the direction you want — even just (1)+(2) would help other self-hosters.
We run Maple fully self-hosted (no Cloudflare, no Tinybird): vanilla ClickHouse per
docs/self-hosted-clickhouse.mdwith the prebuilt collector, plus the three workers (api,alerting,electric-sync) running under Miniflare in a single container, Hyperdrive bound to a local Postgres 17, Electric fronted by the electric-sync worker, drizzle migrations on boot, chat/AI-triage on the OpenRouter fallback. It's validated end-to-end (auth → Electric shapes → ClickHouse queries) and lives at tlvenn/maple (deploy/workerd/).Along the way we found the in-repo Docker path has drifted:
apps/api/Dockerfilerunsbun run startwhich no longer exists,docker-compose.ymlreferencesapps/alerting/apps/electric-syncDockerfiles that aren't in the tree, andapps/web/Dockerfilecan't build because.dockerignoreexcludespackages/browser/packages/effect-sdkand@maple-dev/clickhouse-builder's dist is never built (also@maple-dev/browseris imported by the web app but not declared, so it only resolves via hoisting).If there's interest, I'd like to upstream this in pieces:
No hard feelings if (3) isn't the direction you want — even just (1)+(2) would help other self-hosters.