mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-06 03:03:39 +00:00
edrsc.com had no entry point — a visitor could not tell which of the two apps they wanted. This adds @edr/landing: one static page whose job is to make that choice obvious, with the two doors above the fold and the rest kept to supporting context. Fills in apps/edr-landing/, which until now held an orphaned next-env.d.ts from an abandoned Next 15 start and was built by nothing. - Next.js 14 static export. Versions mirror the passenger portal exactly, so they resolve to what the lockfile already had and add 6 packages. Depends on no workspace package — @edr/ui-common's Tailwind 4 tokens do not fit this Tailwind 3 setup. - Destinations come from NEXT_PUBLIC_PASSENGER_URL / NEXT_PUBLIC_FREIGHT_URL as origins, with the entry path appended in src/lib/apps.ts. Freight links to /portal rather than /, which is that app's own marketing landing. - Design lifted from EDRFreightLandingPage so the two public surfaces read as one railway. Figures (752 km, ~16 h) are the ones freight already asserts publicly. - Fonts load as a stylesheet, not next/font: next/font fetches from fonts.googleapis.com during `next build` and failed the build outright on a machine without network. Verified deterministic over repeated builds. - CountUp renders its final value server-side and the reveal animation's hidden state is scoped behind html.js, so the page is complete with JavaScript off instead of blank. turbo.json: a static export's artifact is out/, which the build task did not list — a cache hit would have restored a build with the artifact missing. Also gitignored. Dockerfile.web: passes the two NEXT_PUBLIC_* build args through (a static export inlines them at build time, so runtime env does nothing), and exempts this app from the VITE_* required-check that guards the freight Vite apps and would otherwise fail its build. Claude-Session: https://claude.ai/code/session_011ZMMHwK4Ham1Dt19FVZQj3
17 lines
841 B
TypeScript
17 lines
841 B
TypeScript
// The two destinations this page exists to route to. Set NEXT_PUBLIC_* to each
|
|
// app's origin; the entry path is appended here so no deploy has to remember
|
|
// it. Inlined at build time by `output: 'export'`, so these are passed as
|
|
// Docker build args (see infrastructure/docker/Dockerfile.web), not runtime env.
|
|
const origin = (url: string) => url.replace(/\/+$/, "");
|
|
|
|
// The passenger app serves its booking search at `/` — that is already the app.
|
|
export const PASSENGER_URL = origin(
|
|
process.env.NEXT_PUBLIC_PASSENGER_URL ?? "https://passenger.edrsc.com",
|
|
);
|
|
|
|
// The freight app serves its own marketing landing at `/`, so link past it:
|
|
// `/portal` is the app itself, and redirects to /login when signed out.
|
|
export const FREIGHT_URL = `${origin(
|
|
process.env.NEXT_PUBLIC_FREIGHT_URL ?? "https://freight.edrsc.com",
|
|
)}/portal`;
|