Mirror — see github.com/blacksky-algorithms/blacksky.community
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add GrowthBook self-hosted build args and enable SSE streaming

- Add EXPO_PUBLIC_METRICS_API_HOST, EXPO_PUBLIC_GROWTHBOOK_API_HOST,
and EXPO_PUBLIC_GROWTHBOOK_CLIENT_KEY as Docker build args with
sensible defaults matching upstream Bluesky values
- Write these env vars to .env during build so they're baked in
- Enable streaming: true in GrowthBook SDK init for real-time
feature flag updates via SSE

+14 -1
+13
Dockerfile
··· 51 51 ENV EXPO_PUBLIC_SENTRY_DSN=$EXPO_PUBLIC_SENTRY_DSN 52 52 53 53 # 54 + # GrowthBook / Metrics 55 + # 56 + ARG EXPO_PUBLIC_METRICS_API_HOST 57 + ENV EXPO_PUBLIC_METRICS_API_HOST=${EXPO_PUBLIC_METRICS_API_HOST:-https://events.bsky.app} 58 + ARG EXPO_PUBLIC_GROWTHBOOK_API_HOST 59 + ENV EXPO_PUBLIC_GROWTHBOOK_API_HOST=${EXPO_PUBLIC_GROWTHBOOK_API_HOST:-${EXPO_PUBLIC_METRICS_API_HOST}/gb} 60 + ARG EXPO_PUBLIC_GROWTHBOOK_CLIENT_KEY 61 + ENV EXPO_PUBLIC_GROWTHBOOK_CLIENT_KEY=${EXPO_PUBLIC_GROWTHBOOK_CLIENT_KEY:-sdk-7gkUkGy9wguUjyFe} 62 + 63 + # 54 64 # Copy everything into the container 55 65 # 56 66 COPY . . ··· 75 85 echo "EXPO_PUBLIC_SENTRY_DSN=$EXPO_PUBLIC_SENTRY_DSN" >> .env && \ 76 86 echo "EXPO_PUBLIC_OAUTH_BASE_URL=$EXPO_PUBLIC_OAUTH_BASE_URL" >> .env && \ 77 87 echo "EXPO_PUBLIC_OAUTH_CLIENT_NAME=$EXPO_PUBLIC_OAUTH_CLIENT_NAME" >> .env && \ 88 + echo "EXPO_PUBLIC_METRICS_API_HOST=$EXPO_PUBLIC_METRICS_API_HOST" >> .env && \ 89 + echo "EXPO_PUBLIC_GROWTHBOOK_API_HOST=$EXPO_PUBLIC_GROWTHBOOK_API_HOST" >> .env && \ 90 + echo "EXPO_PUBLIC_GROWTHBOOK_CLIENT_KEY=$EXPO_PUBLIC_GROWTHBOOK_CLIENT_KEY" >> .env && \ 78 91 npm install --global yarn && \ 79 92 yarn && \ 80 93 yarn intl:build 2>&1 | tee i18n.log && \
+1 -1
src/analytics/features/index.ts
··· 43 43 * that case, we may see a flash of uncustomized content until the 44 44 * initialization completes. 45 45 */ 46 - export const init = features.init({timeout: TIMEOUT_INIT}).catch(() => { 46 + export const init = features.init({timeout: TIMEOUT_INIT, streaming: true}).catch(() => { 47 47 // Swallow errors from GrowthBook init (e.g. CORS failures, cache 48 48 // corruption). The app should still load without feature gates. 49 49 })