21c9a66cce
# Description This Pull Request integrates the premium mobile-first layout enhancements, a responsive, full-bleed Reader Toolbar, and critical authorization flow stabilizations for the NexusReader Blazor application (targeting .NET 10 with Native AOT compatibility). Resolves #62 Resolves #63 Resolves #15 ## Key Changes ### 📱 1. Mobile-First Reader Layout & Toolbar - **Full-Bleed Responsive Layout**: Redesigned `ReaderLayout` to feature a premium mobile-first three-tab bottom navigation system (Chapters, Graph, Assistant) and a glassmorphic floating action button (FAB) for the AI assistant. - **Header & Escaping Routes**: Built `MobileReaderToolbar` with seamless exit paths back to the "Pulpit" (dashboard) and smooth transitions. - **Custom Iconography**: Added the custom `NexusIcon` component supporting dynamic theme styling and responsive layouts without relying on external CSS frameworks. ### 🔐 2. Authentication Flow UX Stabilization - **WASM Transition Hydration**: Implemented `AuthenticationStatePersister` and loading preloaders to eliminate authorization race conditions during Blazor WASM interactive hydration. - **AOT-Compatible JWT Validation**: Integrated a robust, AOT-compatible `JwtTokenValidator` with unit tests (`JwtTokenValidatorTests.cs`) to cleanly parse claims without throwing performance-heavy runtime exceptions. - **Secure Header Propagation**: Standardized token transmission in WASM (`AuthenticationHeaderHandler.cs`) and MAUI Hybrid client layers (`MobileAuthenticationHeaderHandler.cs`), ensuring cookies are correctly propagated. ### 📊 3. D3.js Knowledge Graph & Interaction - **Dynamic Viewport Synchronization**: Refactored `knowledgeGraph.js` to ensure the SVG graph behaves correctly under flexbox containment, handles panel expansion/collapse gracefully, and avoids infinite loop redraws. - **Interaction Hook**: Connected graph node clicks directly to chapter jumps via a new `IReaderInteractionService` abstraction. ### 🏗️ 4. Infrastructure & Central Package Management (CPM) - **Beta Deployment Configuration**: Added `.env.test.template`, `docker-compose.test.yml`, and `appsettings.Test.json` with hardened environment security guards. - **Docker-Compose Cache Optimization**: Maintained CPM consistency during multi-stage Docker builds. ## Verification & Build Results - Run a successful local build check: ```bash dotnet build NexusReader.slnx --no-restore ``` **Status**: Successfully completed with `0` compilation errors. --------- Co-authored-by: Marek Jasiński <jasins.marek@gmail.com> Reviewed-on: #61 Co-authored-by: Antigravity <antigravity@google.com> Co-committed-by: Antigravity <antigravity@google.com>
42 lines
1.1 KiB
Bash
42 lines
1.1 KiB
Bash
# ===================================================================
|
|
# NexusReader — Test Environment Variables
|
|
# ===================================================================
|
|
# Copy this file to `.env` and fill in the values before deployment:
|
|
# cp .env.test.template .env
|
|
#
|
|
# Then deploy with:
|
|
# docker compose -f docker-compose.test.yml up -d --build
|
|
# ===================================================================
|
|
|
|
# === PostgreSQL ===
|
|
POSTGRES_USER=nexus_user
|
|
POSTGRES_PASSWORD=CHANGE_ME_TO_STRONG_PASSWORD
|
|
POSTGRES_DB=nexus_test_db
|
|
POSTGRES_PORT=5433
|
|
|
|
# === Neo4j ===
|
|
NEO4J_USERNAME=neo4j
|
|
NEO4J_PASSWORD=CHANGE_ME_TO_STRONG_PASSWORD
|
|
|
|
# === Qdrant (leave empty to disable API key auth) ===
|
|
QDRANT_API_KEY=
|
|
|
|
# === Web App ===
|
|
WEB_PORT=5050
|
|
|
|
# === Google OAuth (placeholder for test) ===
|
|
GOOGLE_CLIENT_ID=placeholder
|
|
GOOGLE_CLIENT_SECRET=placeholder
|
|
|
|
# === Gemini AI (placeholder for test) ===
|
|
GOOGLE_AI_API_KEY=placeholder
|
|
|
|
# === Admin Seed Password ===
|
|
NEXUS_ADMIN_PASSWORD=CHANGE_ME
|
|
|
|
# === Non-standard ports for auxiliary services ===
|
|
QDRANT_HTTP_PORT=6343
|
|
QDRANT_GRPC_PORT=6344
|
|
NEO4J_HTTP_PORT=7484
|
|
NEO4J_BOLT_PORT=7697
|