- src/i18n/server.ts: createI18nConfig factory consolidating the locale
resolution chain (cookie → access_token preferred_language claim →
Accept-Language → default). Reusable across apps; previously each
frontend reimplemented it.
- AdminShell: thread signoutPath + myProfileUrl (default
https://my.gosec.internal/profile) into the navbar; render My Profile
link alongside logout.
- LogoutButton: replace two-step fetch+signOut+redirect with a plain
anchor pointing at signoutPath — the NextAuth POST-only signout
endpoint plus form-CSRF flow doesn't need client JS.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Curated re-exports from @limitless/ui through /forms, /data,
/feedback, /navigation, /utils sub-paths so apps stop importing
from the lower layer.
- /forms also re-exports the full @limitless/ui validation surface
(hooks, format/security/address validators, types).
- AppLayout is now a thin wrapper over @limitless/ui's <AppShell> —
same ShellConfig DTO, no duplicated chrome code.
- shell/types + shell/index re-export from @limitless/ui to keep one
canonical type and one shared context.
- auth middleware: loose NextRequestLike typing to avoid two-copies-
of-next conflict with the consumer's next.
- postbuild: rewrite ../images/ to ./images/ in copied CSS so refs
resolve in dist/styles/.
Widget family in /data is the intersection of limitless's two
Widget files (Widget.d.ts vs Widget/index.d.ts collision in dist);
upstream fix needed before exposing IconWidget/UserWidget/etc.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The kit. Drop into any GSC Next.js frontend; everything that's not
domain content lives here. Wraps @limitless/ui primitives with the
app-shaped patterns we keep reimplementing: layout, auth, data
display, forms, feedback, navigation.
Phase 1 ships the package skeleton:
- package.json with 14 sub-exports (./layout · ./auth · ./auth/server
· ./auth/middleware · ./shell · ./shell/server · ./data · ./forms ·
./feedback · ./navigation · ./api · ./utils + the root and ./css).
- Empty module stubs so the import map resolves while later phases
fill in real surface area.
- Canonical CSS bundle at @gsc/web-kit/css — all.min.css +
sidebar-overrides.css + the seven layout-3 background images,
copied from chronos and committed in one place so no app has to
ship the 1MB sidecar on its own anymore.
- tsc-based build + a postbuild script that mirrors @limitless/ui:
emits .js + .d.ts, copies styles/, rewrites bare ESM imports to
include .js extensions.
- Peer deps on next, react, react-dom, bootstrap.
- Hard deps on @limitless/ui (file: dep), next-auth, next-intl, zod.
Build verified: tsc emits, all 14 export paths resolve under dist/.
No functional code yet — Phase 2 lands AppLayout / createAuth /
fetchShellConfig and the gscCRM pilot cuts over.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>