# PowerOn Nyla Frontend ## 🏗️ Project Architecture ```mermaid graph TB %% Environment Files ENV_DEV[".env.dev
Development"] ENV_PROD[".env.prod
Production"] ENV_INT[".env.int
Integration"] %% Configuration System CONFIG_TS["config.ts
TypeScript Config
(React Frontend)"] CONFIG_JS["serverConfig.js
JavaScript Config
(Node.js Servers)"] %% Source Code SRC["src/
React Components"] PUBLIC["public/
Static Assets"] HTML["index.html
Main Template"] %% Build Process VITE["vite.config.ts
Build Configuration"] PACKAGE["package.json
Dependencies & Scripts"] TSCONFIG["tsconfig.json
TypeScript Config"] %% Build Output DIST["dist/
Built Application"] %% Servers SERVER_DEV["server.js
Dev Server"] SERVER_DEPLOY["deploy-server.js
Deploy Server"] SERVER_LEGACY["server.js
Legacy Server"] %% Deployment GITHUB[".github/workflows/
GitHub Actions"] AZURE["Azure Static Web Apps"] STATIC_CONFIG["staticwebapp.config.json
Azure Config"] %% Environment Flow ENV_DEV --> CONFIG_TS ENV_PROD --> CONFIG_TS ENV_INT --> CONFIG_TS ENV_DEV --> CONFIG_JS ENV_PROD --> CONFIG_JS ENV_INT --> CONFIG_JS %% Configuration Usage CONFIG_TS --> SRC CONFIG_JS --> SERVER_DEV CONFIG_JS --> SERVER_DEPLOY CONFIG_JS --> SERVER_LEGACY %% Build Process SRC --> VITE PUBLIC --> VITE HTML --> VITE PACKAGE --> VITE TSCONFIG --> VITE CONFIG_TS --> VITE VITE --> DIST %% Server Usage DIST --> SERVER_DEV DIST --> SERVER_DEPLOY DIST --> SERVER_LEGACY %% Deployment Flow GITHUB --> ENV_PROD GITHUB --> ENV_INT GITHUB --> DIST GITHUB --> SERVER_DEPLOY GITHUB --> AZURE STATIC_CONFIG --> AZURE %% Styling classDef envFile fill:black,stroke:#01579b,stroke-width:2px classDef configFile fill:black,stroke:#4a148c,stroke-width:2px classDef sourceFile fill:black,stroke:#1b5e20,stroke-width:2px classDef buildFile fill:black,stroke:#e65100,stroke-width:2px classDef serverFile fill:black,stroke:#880e4f,stroke-width:2px classDef deployFile fill:black,stroke:#33691e,stroke-width:2px class ENV_DEV,ENV_PROD,ENV_INT envFile class CONFIG_TS,CONFIG_JS configFile class SRC,PUBLIC,HTML sourceFile class VITE,PACKAGE,TSCONFIG,DIST buildFile class SERVER_DEV,SERVER_DEPLOY,SERVER_LEGACY serverFile class GITHUB,AZURE,STATIC_CONFIG deployFile ``` ### Flow Overview: 1. **Environment files** → **Configuration system** → **Source code** 2. **Source code** → **Build process** → **Built application** 3. **Built application** → **Servers** → **Deployment** 4. **GitHub Actions** → **Azure Static Web Apps** ## 🔧 Configuration Setup The app uses a **dual configuration system** to handle environment variables across different contexts: ### Configuration Files - **`config/config.ts`** - TypeScript config for React frontend - **Why:** Provides type-safe access to environment variables in the browser - **How:** Uses `import.meta.env` (Vite's environment API) to access `VITE_*` variables - **Used by:** All React components, hooks, and frontend logic - **`config/serverConfig.js`** - JavaScript config for Node.js servers - **Why:** Node.js can't access `import.meta.env`, needs `process.env` - **How:** Uses `dotenv` to load `.env` files and `process.env` to access variables - **Used by:** Express servers and build scripts ### Environment Files - **`config/.env.dev`** - Development environment variables - **Why:** Separate config for local development with debug settings - **How:** Copied to root `.env` by `npm run dev` command - **Contains:** Local API URLs, debug flags, dev-specific settings - **`config/.env.prod`** - Production environment variables - **Why:** Production-specific settings (live API URLs, optimized settings) - **How:** Copied to root `.env` by GitHub Actions workflow - **Contains:** Production API URLs, security settings, performance configs - **`config/.env.int`** - Integration environment variables - **Why:** Testing environment that mirrors production but with test data - **How:** Copied to root `.env` by integration deployment workflow - **Contains:** Staging API URLs, test user credentials, integration settings ### Usage ```bash # Development (loads .env.dev) npm run dev # Production build (loads .env.prod) npm run build:prod # Integration build (loads .env.int) npm run build:int ``` ## 🖥️ Server Files - **`scripts/server.js`** - Express server for local development - **Why:** Serves the built React app locally for testing - **How:** Serves static files from `dist/` directory on port 3000 - **Used by:** Developers running `npm run dev` or manual testing - **`scripts/deploy-server.js`** - Express server for deployment - **Why:** Production server that serves the built app in cloud environments - **How:** Serves static files and handles routing for SPA (Single Page Application) - **Used by:** Azure Static Web Apps and other deployment platforms - **`server.js`** - Legacy server (kept for compatibility) - **Why:** Backup server file in case deployment scripts need it - **How:** Basic Express server setup - **Used by:** Fallback option for deployments Both servers use `config/serverConfig.js` for environment variables and logging. ## 📁 Root Directory Files ### Core Application Files - **`package.json`** - Node.js project configuration - **Why:** Defines dependencies, scripts, and project metadata - **How:** Used by npm/yarn to install packages and run scripts - **Contains:** Dependencies, build scripts, project info - **`vite.config.ts`** - Vite build tool configuration - **Why:** Configures how Vite builds and serves the React app - **How:** Defines plugins, build options, and environment variable handling - **Contains:** React plugin, HTML plugin, environment loading, build settings - **`tsconfig.json`** - TypeScript compiler configuration - **Why:** Defines TypeScript compilation rules and target settings - **How:** Used by TypeScript compiler and IDE for type checking - **Contains:** Compiler options, file includes/excludes, module resolution - **`index.html`** - Main HTML template - **Why:** Entry point for the React application - **How:** Vite injects the built JavaScript and CSS into this template - **Contains:** HTML structure, dynamic title injection, script tags ### Build and Deployment - **`staticwebapp.config.json`** - Azure Static Web Apps configuration - **Why:** Configures routing and MIME types for Azure deployment - **How:** Used by Azure Static Web Apps service - **Contains:** Navigation fallback rules, MIME type mappings ### Source Code and Assets - **`src/`** - Source code directory - **Why:** Contains all React components, hooks, and application logic - **How:** Vite processes these files during build - **Contains:** Components, pages, hooks, contexts, locales, assets - **`public/`** - Static assets - **Why:** Files that should be copied directly to build output - **How:** Vite copies these files to `dist/` during build - **Contains:** Images, logos, favicons, other static files ### Configuration and Scripts - **`config/`** - Configuration files directory - **Why:** Centralizes all configuration and environment files - **How:** Contains environment files and config modules - **Contains:** Environment files, config.ts, serverConfig.js - **`scripts/`** - Server scripts directory - **Why:** Separates server-related files from main application code - **How:** Contains Express server implementations - **Contains:** server.js, deploy-server.js ### CI/CD - **`.github/workflows/`** - GitHub Actions workflows - **Why:** Automates deployment to different environments - **How:** Triggers on git pushes and deploys to Azure - **Contains:** YAML files for dev, int, and prod deployments