961 Commits

Author SHA1 Message Date
gnezim 1e9523088b Add Phase 2G parity harness implementation plan
Defines tasks for URL parity harness (table-driven + fast-check fuzz),
SEO parity harness, and Online Board registration against both.
2026-04-15 08:40:59 +03:00
gnezim e20686b11f Wire SEO and JSON-LD into all 6 Online Board route pages
Each route page now renders <SeoHead> with title, description,
canonical, hreflang, OG, and Twitter card from the SEO builders.
Search pages render <JsonLdRenderer> with ItemList of Flight
schemas. Details page renders Flight JSON-LD. Barrel exports
updated with 2F SEO and JSON-LD functions.
2026-04-15 08:37:47 +03:00
gnezim 44ae7f1642 Add Phase 2F JSON-LD builders for Flight and ItemList schemas
TDD-driven schema.org JSON-LD builders using schema-dts types.
buildFlightJsonLd maps ISimpleFlight to Flight schema with
airports, times, and provider. buildFlightListJsonLd wraps
search results as an ItemList of ListItems.
2026-04-15 08:32:31 +03:00
gnezim c68d53dfa6 Add Phase 2F SEO builders with EN locale translations
SEO builder pure functions for all 6 Online Board route types,
each returning SeoHeadProps with title, description, canonical,
hreflang, OG, and Twitter card. Populated empty EN locale SEO
keys with English translations matching the Russian pattern.
2026-04-15 08:32:24 +03:00
gnezim 6788f609e6 Update barrel exports and MF expose for 2E route pages
- Feature barrel now exports OnlineBoardStartPage, OnlineBoardSearchPage,
  OnlineBoardDetailsPage
- MF expose renders start page via React.lazy + Suspense
- Fix exactOptionalPropertyTypes issues with suffix param
- Remove unused import
2026-04-15 08:24:41 +03:00
gnezim cd07542dc5 Add 6 online board route pages
Start page, flight/departure/arrival/route search pages,
and flight details page. Each route is thin: parses URL
params, lazy-loads the feature component with Suspense.
2026-04-15 08:22:26 +03:00
gnezim 80b9090ef9 Add feature components for online board pages
OnlineBoardSearchPage (shared by all 4 search routes),
OnlineBoardStartPage (search form landing), and
OnlineBoardDetailsPage (flight detail view with legs).
All wired to existing hooks from 2C/2D. 21 tests passing.
2026-04-15 08:21:32 +03:00
gnezim 98971cab26 Add Phase 2E routes implementation plan
Covers 6 route pages, 3 feature components, barrel updates, and MF expose.
2026-04-15 08:18:12 +03:00
gnezim c6c0ce2bfc Wire useLiveFlights to TrackerHub channels for Online Board (Phase 2D)
Two thin composition hooks that connect the generic SignalR hook (1E)
to board-specific channels: useLiveBoardSearch for search pages
(SubscribeDate channel) and useLiveFlightDetails for the details page
(Subscribe channel). Both are SSR-safe and client-only.
2026-04-15 08:15:09 +03:00
gnezim 3bed4f9173 Add Phase 2D SignalR wiring implementation plan 2026-04-15 08:12:08 +03:00
gnezim 8218dffcd9 Add Phase 2C: Online Board API functions and React hooks
Pure API functions (searchFlights, getFlightDetails, getCalendarDays)
with dependency-injected ApiClient, plus three thin React hooks
(useOnlineBoard, useFlightDetails, useCalendarDays) for search,
details, and calendar pages. 17 TDD tests for API layer covering
URL construction, response mapping, and error handling.
2026-04-15 08:09:53 +03:00
gnezim 9e08057704 Implement Phase 2B URL serializer with TDD (73 tests)
Pure TypeScript port of Angular OnlineBoardUrlBuilder/Parser covering
all 6 URL types (start, flight, departure, arrival, route, details).
Includes roundtrip parity tests and edge cases for suffixed flights,
variable-length flight numbers, time ranges, and 3-char carriers.
2026-04-15 08:05:40 +03:00
gnezim 73d724f76a Add Phase 2B URL serializer implementation plan
TDD plan for porting Angular OnlineBoardUrlBuilder/Parser to pure
TypeScript functions covering all 6 URL types (start, flight, departure,
arrival, route, details) with roundtrip and edge case tests.
2026-04-15 08:00:12 +03:00
gnezim 7d8cb63600 Add flight display components and barrel exports
StationDisplay, TimeGroup, FlightStatus, DurationDisplay compose into
FlightCard; FlightList renders a list of cards with skeleton loading.
All components are props-driven with no data fetching.
2026-04-15 07:57:02 +03:00
gnezim b3ab73253d Add data model types, datetime utils, and dictionary hook
Port Angular flight types (ISimpleFlight, IFlightLeg, ITimesSet, etc.)
to minimal React-friendly interfaces. Add formatDuration/formatTime/
formatDate/isDayChange as pure functions. Stub useCityName hook as
passthrough pending customer dictionary API endpoint.
2026-04-15 07:55:00 +03:00
gnezim fc03c08278 Add Phase 2A UI adapter implementation plan
Covers data model types, datetime utilities, dictionary hook,
and flight display components for the online board feature.
2026-04-15 07:52:23 +03:00
gnezim bd9cc92766 Add Phase 2 Online Board master plan with 8 sub-plans 2026-04-15 07:46:33 +03:00
gnezim 7db39cbeec Fix type errors and lint warnings in health and shutdown modules
Use proper type-safe interfaces instead of Node.js http types for the
health handler, and avoid vi.spyOn type issues in shutdown tests by
directly intercepting process.on.
2026-04-15 00:59:59 +03:00
gnezim 56cc9e1af2 Add operational runbook covering incident response and failure playbooks
Covers incident decision tree, canary rollout, rollback procedures,
health-check interpretation, log query cookbook, and 6 known-failure
playbooks per master plan requirements.
2026-04-15 00:56:24 +03:00
gnezim ca6ae0eea2 Add graceful shutdown handler with TDD
registerGracefulShutdown drains in-flight requests for 30s on SIGTERM,
flushes logs, then exits cleanly. Force-exits with code 1 on timeout.
2026-04-15 00:55:09 +03:00
gnezim f0e540aa3f Add health endpoint factory with TDD
healthMiddleware returns 200 if upstream was reachable within 60s, 503 otherwise.
Exports a factory function — registration in modern.config.ts is a future step.
2026-04-15 00:55:08 +03:00
gnezim 8c8b8b985e Add deploy workflow template for CI/CD pipeline
Stub workflow triggered on push to main: build, test, Docker image build.
Registry URLs and deployment targets are placeholders pending customer config.
2026-04-15 00:53:42 +03:00
gnezim 9b1fb7388f Add Dockerfile.react and Dockerfile.remote for React build targets
Standalone SSR image (Node 24 slim) and remote MF static image (nginx alpine),
coexisting with legacy ASP.NET Dockerfile.
2026-04-15 00:53:36 +03:00
gnezim 0f4180de14 Add Phase 1I (Deploy pipeline + runbook) implementation plan 2026-04-15 00:53:10 +03:00
gnezim 59d5a7314e Fix lint: exempt storage test from no-restricted-globals, remove non-null assertion 2026-04-15 00:50:46 +03:00
gnezim 5d041cc4c6 Implement security headers middleware for HSTS, COOP, CORP, and more 2026-04-15 00:49:07 +03:00
gnezim 4f93d0a9bf Implement SSR stream nonce injection as workaround for React #24883 2026-04-15 00:48:54 +03:00
gnezim 10b97339bf Implement CSP middleware with per-request nonce and React context 2026-04-15 00:48:02 +03:00
gnezim 2742568a85 Implement safe storage abstraction with Zod validation and namespace prefix 2026-04-15 00:47:22 +03:00
gnezim 726db20f89 Add Phase 1H security hardening implementation plan 2026-04-15 00:46:29 +03:00
gnezim ebe6c38713 Fix lint warnings in SignalR wrapper and hook tests
Remove unused imports, eliminate non-null assertions,
drop invalid eslint-disable comment for missing rule.
2026-04-15 00:44:31 +03:00
gnezim 4c52bb4032 Add useLiveFlights SSR-safe hook with tests
Generic hook wrapping SignalR subscription with SSR guard
(typeof window check). Includes tests for subscribe, data
updates, cleanup, and SSR path.
2026-04-15 00:42:51 +03:00
gnezim 7052052742 Add SignalRConnection ref-counted wrapper with tests
Reference-counted connection management with grace period,
dynamic import to keep @microsoft/signalr out of SSR bundle,
and singleton sharing via getSharedConnection.
2026-04-15 00:41:28 +03:00
gnezim b6a007d3b6 Add @microsoft/signalr dependency for live flight data 2026-04-15 00:39:31 +03:00
gnezim b431010241 Add Phase 1E SignalR wrapper implementation plan 2026-04-15 00:39:14 +03:00
gnezim b6da51fce5 Add smoke route exercising logger, i18n, and locale display 2026-04-15 00:36:54 +03:00
gnezim 6d3e3ae986 Add error pages for 404, 500, 503 codes 2026-04-15 00:35:05 +03:00
gnezim 858b8e1d1f Wire root layout provider stack and locale-scoped layout with i18n
Root layout wraps children with LoggerProvider, ApiClientProvider, and
ErrorBoundary. Locale layout validates lang param against 9 supported
languages and provides a request-scoped I18nProvider.
2026-04-15 00:34:16 +03:00
gnezim fc57556010 Add errorToResponse mapper with TDD tests covering all mapping rules 2026-04-15 00:31:37 +03:00
gnezim 2eb118cb8b Add ErrorBoundary class component with retry support 2026-04-15 00:30:34 +03:00
gnezim 1409df458b Add 1F-layout implementation plan for root layout, error routes, smoke route 2026-04-15 00:29:46 +03:00
gnezim bb50e63866 Add SeoHead component with canonical, hreflang, OG, Twitter, and JSON-LD 2026-04-15 00:20:40 +03:00
gnezim 599f35f14a Add JsonLdRenderer and serializeJsonLd with schema-dts typing 2026-04-15 00:20:07 +03:00
gnezim 8abe8acf70 Add buildHreflangSet for 9 languages + x-default 2026-04-15 00:18:35 +03:00
gnezim ad9b35f725 Add schema-dts dependency for typed JSON-LD generation 2026-04-15 00:17:29 +03:00
gnezim 6a4be07911 Add useAnalytics hook with server-safe NoopAnalytics fallback 2026-04-15 00:15:43 +03:00
gnezim 8878dcb6c8 Add AnalyticsLoader component with idle-callback initialization 2026-04-15 00:15:43 +03:00
gnezim 515151ed81 Add analytics facade with adapter fan-out and consent gating 2026-04-15 00:15:11 +03:00
gnezim fe31bbfb65 Add four stub analytics adapters (metrica, ctm, variocube, dynatrace) 2026-04-15 00:13:49 +03:00
gnezim e95781a069 Add test-observable analytics event sink 2026-04-15 00:13:13 +03:00