# Copilot Instructions ## Project Overview - **Fuchs Intranet** is an ASP.NET Core (.NET 10) web application — the intranet IS the entire website, served from `/`. - Routes: `/{fn?}/{id?}/{code?}` → `IntranetController.Index`; `/do/{fn?}/{id?}/{code?}` → `IntranetController.Do`. - Project structure (relative to `Fuchs/`): - `Controllers/` — `IntranetController` partials (no area) - `code/` — business logic, PDF, email, widgets, data models - `css/intranet/` — intranet SCSS source files - `js/intranet/` — intranet JS source files (modules in `js/intranet/modules/`) - `Data/` — static data assets (images for PDF, HTML files) - `Views/Intranet/` — Razor views; `Views/Shared/_Layout.cshtml`; `Views/Partials/` ## Coding Standards - All code must be written in C#. - Keep files to a limit of 400 (max 600) lines of code to ensure maintainability and readability. Proactively refactor larger files into smaller, focused classes or components as needed. - Follow standard C# naming conventions (PascalCase for classes and methods, camelCase for variables and parameters). - Use modern, performance-oriented C# .NET 10 features and best practices, such as async/await for asynchronous programming, LINQ for data manipulation, and dependency injection for better testability and maintainability. ## Configuration - All application settings live in `Fuchs/appsettings.json` — **do not use `Web.config` or `System.Configuration.ConfigurationManager`**. - App-specific settings are nested under the `"Fuchs"` key (e.g., `_config["Fuchs:SMS_APIKey"]`). - Connection strings are stored under the standard `"ConnectionStrings"` key and read via `IConfiguration.GetConnectionString(...)`. - `FuchsOcmsIntranet.Initialize(configuration)` must be called at app start (in `Program.cs`) before DI registration; `Fuchs_intranet` receives `IConfiguration` via its constructor. - `appsettings.Development.json` (git-ignored) can override secrets for local development. ## Libraries - Do not upgrade Spire.PDF beyond version 8.10.5. - Make use of OCORE libraries where possible, especially for common tasks such as logging, configuration management, and data access. - Whenever possible, prefer OCORE_web_pdf / OCORE PDF functions for PDF-related tasks over rewriting. - Do not use OCMS or OCMS_sharp; use only OCORE or OCORE_web.