slice 1g: Next.js M1 overview panel + Primary-Rule lint (ADR-0007)

Symbol command bar (Zustand active-symbol) -> OverviewPanel (price + day-change
shape/color/label per P7 G3 + Recharts sparkline + sector) + signup/login + ADR-0007
footer. next.config rewrites proxy /api -> backend:3001 (same-origin cookies). Vanilla
fetch tRPC client (decoupled from server Node types). Primary-Rule lint 2/2 green.
Slice 1 tracer bullet COMPLETE: 38 tests green, live-verified end-to-end.
This commit is contained in:
Investor Flow Build
2026-06-29 17:51:54 -04:00
parent 82079b3e66
commit a8b95e36e3
10 changed files with 567 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
// Curated user-facing strings (P6 plain English; ADR-0007 Primary-Rule compliant).
// The Primary-Rule lint test (src/__tests__/primary-rule-lint.test.ts) scans these and the
// panel/page source for imperative trade verbs (a stoplist of directives). Approved noun
// phrases such as the buy-zone estimate are allowed.
export const UI_STRINGS = {
appTitle: "Investor Flow",
appSubtitle: "Educational investment research terminal",
symbolPlaceholder: "Enter a symbol (e.g. NVDA)",
loadingSnapshot: "Loading cached snapshot…",
noData: "No cached data yet — the backend is fetching this in the background.",
priceLabel: "Last price",
dayChangeLabel: "Day change",
sectorLabel: "Sector",
industryLabel: "Industry",
tickerKindLabel: "Type",
sparklineCaption: "Recent daily close — context for where price has been, not a signal to act on.",
cryptoNotice: "Crypto — limited research module (SEC-derived ownership and filings do not apply).",
staleBadge: "cached — refreshing",
primaryRuleFooter:
"Educational analysis, not investment advice. Verify the underlying data; you are responsible for your own decisions.",
authEmailLabel: "Email",
authPasswordLabel: "Password",
signupButton: "Create account",
loginButton: "Sign in",
logoutButton: "Sign out",
signupPrompt: "Create an account to track symbols and keep your research in one place.",
} as const;
export const UI_STRING_LIST: string[] = Object.values(UI_STRINGS);