self-host apps/status.network#1197
Conversation
🦋 Changeset detectedLatest commit: 3918dd7 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
7 Skipped Deployments
|
jinhojang6
left a comment
There was a problem hiding this comment.
pnpm build => pnpm start worked well.
We might need to set up .env values for Jenkins with the infra team: https://ci.infra.status.im/
- GHOST_API_KEY
- NEXT_PUBLIC_GHOST_API_KEY
|
We need to handle the merge conflict related to |
|
|
||
| const result = envSchema.safeParse({ | ||
| NEXT_PUBLIC_GHOST_API_URL: process.env.NEXT_PUBLIC_GHOST_API_URL, | ||
| NEXT_PUBLIC_GHOST_API_KEY: process.env.NEXT_PUBLIC_GHOST_API_KEY, |
There was a problem hiding this comment.
NEXT_PUBLIC_* variables are hardcoded in the files sent to the browser so is it expected to have an API key there?
4e44169 to
a0211d3
Compare
There was a problem hiding this comment.
Pull request overview
This PR updates the monorepo to support self-hosted/static-export builds for apps/status.network (including Jenkins deployment changes) and introduces a new scoped site apps/get.status.app that reuses status.app pages/components with a reduced feature set.
Changes:
- Enable static export–friendly behavior for
status.network(build outputs, locale routing tweaks, build-time env checks, and post-build locale prefix stripping). - Extend
Jenkinsfile.websiteto build/deploystatus.networkin addition tohub, including Ghost env parameterization. - Add new app
get.status.appwith its own Next.js config, i18n setup, and route stubs to reusestatus.appcode.
Reviewed changes
Copilot reviewed 41 out of 42 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| turbo.json | Adjust Turbo task settings for dev persistence and status.network build outputs/env passthrough. |
| README.md | Document the new apps/get.status.app package in the repo overview table. |
| pnpm-workspace.yaml | Add apps/get.status.app to workspace packages and remove duplicate entry. |
| package.json | Include apps/get.status.app in the workspace package list. |
| Jenkinsfile.website | Allow selecting/building/deploying status.network, plus Ghost env parameters and deploy branch/domain logic. |
| apps/status.network/src/i18n/routing.ts | Update locale routing settings/comments for static export constraints. |
| apps/status.network/src/app/robots.ts | Force static robots generation and adjust rules. |
| apps/status.network/src/app/not-found.tsx | Replace server translation lookup with static copy for non-locale routes. |
| apps/status.network/src/app/layout.tsx | Remove request-based locale resolution and hardcode lang. |
| apps/status.network/src/app/api/naver-image/route.ts | Remove Naver image proxy API route (static-export friendly). |
| apps/status.network/src/app/[locale]/layout.tsx | Add locale validation + setRequestLocale, force static. |
| apps/status.network/src/app/[locale]/brand/page.tsx | Move translations to server (getTranslations) and pass label down. |
| apps/status.network/src/app/[locale]/brand/_components/color-section.tsx | Plumb downloadButtonLabel through to section. |
| apps/status.network/src/app/[locale]/brand/_components/brand-section.tsx | Make section a client component and accept a passed-in label. |
| apps/status.network/src/app/[locale]/blog/page.tsx | Make blog list force-static and remove tag-based filtering. |
| apps/status.network/src/app/[locale]/blog/layout.tsx | Remove force-dynamic marker to align with static export. |
| apps/status.network/src/app/[locale]/blog/[slug]/page.tsx | Add static params generation + fallback slugs and move heavy UI to hydrated component. |
| apps/status.network/src/app/_lib/network-blog-slugs.ts | Add helper to read fallback blog slugs JSON for export builds. |
| apps/status.network/src/app/_lib/naver.ts | Refactor to use new RSS parsing module and remove image proxy logic. |
| apps/status.network/src/app/_lib/naver-rss.ts | Introduce RSS parsing and link/image extraction helpers. |
| apps/status.network/src/app/_lib/naver-image-url.ts | Simplify to URL extraction only (remove key/proxy helpers). |
| apps/status.network/src/app/_lib/naver-client.ts | Add client-side RSS fetcher for homepage hydration refresh. |
| apps/status.network/src/app/_lib/ghost.ts | Extract Ghost constants to a shared module. |
| apps/status.network/src/app/_lib/ghost-constants.ts | Centralize Ghost URLs/tags/filters/limits. |
| apps/status.network/src/app/_lib/ghost-client.ts | Add client-side Ghost fetchers for homepage cards + blog detail refresh. |
| apps/status.network/src/app/_lib/blog-post-detail.ts | Add shared blog detail types + helpers used by hydrated components. |
| apps/status.network/src/app/_constants/env.server.mjs | Add server env schema validation for status.network. |
| apps/status.network/src/app/_constants/env.client.mjs | Add client env schema validation for status.network Ghost refresh. |
| apps/status.network/src/app/_constants/env.base.mjs | Shared env error reporting helper. |
| apps/status.network/src/app/_components/language-selector.tsx | Adjust locale switching for default-locale prefix stripping behavior. |
| apps/status.network/src/app/_components/blog/blog-section.tsx | Move rendering into hydrated component + align card types/constants. |
| apps/status.network/src/app/_components/blog/blog-section-hydrated.tsx | New client hydration to refresh homepage blog cards post-deploy. |
| apps/status.network/src/app/_components/blog/blog-post-detail-hydrated.tsx | New client hydration to refresh /blog/[slug] post content post-deploy. |
| apps/status.network/serve.json | Add static server configuration (clean URLs). |
| apps/status.network/scripts/sync-blog-slugs.mjs | Add script to fetch and persist blog slugs for export fallback. |
| apps/status.network/scripts/strip-default-locale-prefix.sh | Add postbuild script to strip /en prefix in exported output. |
| apps/status.network/scripts/load-env-files.mjs | Add env loader for local scripts mirroring Next precedence. |
| apps/status.network/scripts/check-build-env.mjs | Add build-time env validation for static export requirements. |
| apps/status.network/README.md | Update app docs for static export workflow and required env/submodules. |
| apps/status.network/package.json | Update scripts for export/postbuild stripping and local static preview (serve). |
| apps/status.network/next.config.ts | Conditionally enable output: 'export', set unoptimized, and adjust transpilation. |
| apps/status.network/content/network-blog-slugs.json | Add committed fallback list of blog slugs for export builds. |
| apps/status.network/.gitignore | Ensure .env.example can be committed. |
| apps/status.network/.env.example | Add example Ghost env vars for build/export + client refresh. |
| apps/status.app/src/config/site-scope.ts | Introduce SITE_SCOPE / isGetSite flags for shared code reuse. |
| apps/status.app/src/app/layout.tsx | Add suppressHydrationWarning on <html>. |
| apps/status.app/src/app/(website)/page.tsx | Gate blog/prefooter content and adjust keycard link behavior for get-site scope. |
| apps/status.app/src/app/(website)/_components/promo-bar.tsx | Hide promo bar for get-site scope. |
| apps/get.status.app/vercel.json | Add Vercel build/ignore configuration for the new app. |
| apps/get.status.app/tsconfig.json | Add TS config with path aliases pointing at status.app sources. |
| apps/get.status.app/tailwind.config.ts | Reuse status.app Tailwind config and extend content globs. |
| apps/get.status.app/src/stubs/ghost.ts | Stub Ghost API helpers to avoid Ghost env requirements in get-site. |
| apps/get.status.app/src/middleware.ts | Add next-intl middleware for the get-site. |
| apps/get.status.app/src/i18n/routing.ts | Define get-site i18n routing (single locale). |
| apps/get.status.app/src/i18n/request.ts | Define next-intl request config loading messages. |
| apps/get.status.app/src/config/site-scope.ts | Set scope to get for the new app. |
| apps/get.status.app/src/config/routes.ts | Provide a reduced ROUTES plus re-export shared constants from status.app. |
| apps/get.status.app/src/config/env.server.mjs | Add server env schema validation for get-site. |
| apps/get.status.app/src/config/env.client.mjs | Add client env schema validation for get-site. |
| apps/get.status.app/src/config/env.base.mjs | Shared env error reporting helper for get-site. |
| apps/get.status.app/src/app/not-found.tsx | Re-export status.app not-found page. |
| apps/get.status.app/src/app/layout.tsx | New root layout wiring providers, analytics, and metadata for get-site. |
| apps/get.status.app/src/app/api/download/mobile/route.ts | New UA-based redirect route for mobile downloads. |
| apps/get.status.app/src/app/api/download/[platform]/route.ts | Re-export platform download route from status.app. |
| apps/get.status.app/src/app/[locale]/layout.tsx | Locale validation layout for get-site routes. |
| apps/get.status.app/src/app/[locale]/(website)/security/page.tsx | Re-export security page from status.app. |
| apps/get.status.app/src/app/[locale]/(website)/page.tsx | Re-export homepage from status.app. |
| apps/get.status.app/src/app/[locale]/(website)/legal/terms-of-use/page.tsx | Re-export terms page from status.app. |
| apps/get.status.app/src/app/[locale]/(website)/legal/privacy-policy/page.tsx | Re-export privacy page from status.app. |
| apps/get.status.app/src/app/[locale]/(website)/legal/layout.tsx | Re-export legal layout from status.app. |
| apps/get.status.app/src/app/[locale]/(website)/layout.tsx | Re-export website layout from status.app. |
| apps/get.status.app/src/app/[locale]/(website)/apps/page.tsx | Re-export apps page from status.app. |
| apps/get.status.app/README.md | Document purpose, pages, env expectations, and dev workflow for get-site. |
| apps/get.status.app/postcss.config.js | Add PostCSS config for Tailwind pipeline. |
| apps/get.status.app/package.json | Add new app package definition, scripts, and dependencies. |
| apps/get.status.app/next.config.mjs | Configure next-intl + aliases to reuse status.app with Turbopack/Webpack. |
| apps/get.status.app/next-env.d.ts | Add Next.js TS references for the new app. |
| apps/get.status.app/messages/en.json | Add message catalog for get-site (English). |
| apps/get.status.app/env.d.ts | Add ProcessEnv typing from validated env modules. |
| apps/get.status.app/.node-version | Pin Node version for the new app. |
| apps/get.status.app/.gitignore | Add app-local ignores for build artifacts. |
| apps/get.status.app/.env.example | Add example env file for get-site. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| export default function RootLayout({ children }: Props) { | ||
| return ( | ||
| <html lang={locale}> | ||
| <html lang="en"> |
| string( | ||
| name: 'GHOST_API_KEY', | ||
| description: 'Ghost Content API key (status.network).', | ||
| defaultValue: params.GHOST_API_KEY ?: '' | ||
| ) |
| def buildEnv = '' | ||
| if (params.APP_NAME == 'status.network') { | ||
| buildEnv = """ | ||
| GHOST_API_URL='${params.GHOST_API_URL}' \\ | ||
| GHOST_API_KEY='${params.GHOST_API_KEY}' \\ |
This reverts commit 649a3fb.



No description provided.