Site pages and AI tasks.
Gitea CI/CD / build (push) Successful in 1m40s

This commit is contained in:
Clive
2026-08-20 14:58:52 +10:00
parent 152a998311
commit e5d1446791
51 changed files with 2876 additions and 30 deletions
+8 -6
View File
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## Overview
plushealthtech is a corporate landing site: a single-project ASP.NET Core Razor Pages app on .NET 10 (`net10.0`). There are no controllers, database, auth, or external APIs — all content lives in Razor Pages and static assets under `wwwroot`.
plushealthtech is a corporate landing site: a single-project ASP.NET Core Razor Pages app on .NET 10 (`net10.0`). There are no controllers, database, auth, or external APIs — all content lives in Razor Pages and static assets under `wwwroot`. The company is Plus Health Tech: interoperable Clinical Decision Support (CDS), Patient Management software, and Veterinary tech (see `Design.MD` for brand positioning).
## Commands
@@ -19,13 +19,15 @@ Run from the repo root (the solution directory).
## Architecture
- `plushealthtech/` is the only project. `Program.cs` is the entire pipeline: `AddRazorPages()`, HTTPS redirect, static files — new services would be registered there.
- Pages use the Razor Pages convention: `Pages/<Name>.cshtml` + `<Name>.cshtml.cs` (a PageModel). Existing: `Index` (logo hero), `Privacy`, `Error`, and the shared `Shared/_Layout.cshtml`. There are no areas or controllers.
- Shared chrome and branding: `Pages/Shared/_Layout.cshtml` (navbar with Home + external blog link, footer). Styling is a **Tailwind v4** bundle: source `wwwroot/css/tailwind.input.css` (CSS-first `@theme` with brand colors — `brand` `#1c8098`, `brand-dark` `#145f72`, `brand-light` `#e6f2f5`, `brand-accent` `#0ea5e9`, `brand-vet` `#0d9488`), built by the Tailwind CLI into `wwwroot/css/tailwind.css` and linked in the layout `<head>`. `wwwroot/css/site.css` holds legacy CSS custom properties (`.bg-blue` = `#1c8098`). The layout `<head>` also loads an external analytics script from analytics.rokoh.com.
- Pages use the Razor Pages convention: `Pages/<Name>.cshtml` + `<Name>.cshtml.cs` (a PageModel). Existing: `Index` (the full landing page: hero, `#solutions` cards incl. a `#veterinary` card, `#interoperability` section), `Privacy`, `Error`, and the shared `Shared/_Layout.cshtml`. There are no areas or controllers.
- Shared chrome: `Pages/Shared/_Layout.cshtml` — sticky glassmorphism navbar (anchor links `#solutions`/`#interoperability`/`#veterinary`/`#about`, external blog link to blog.plushealthtech.com, Sign In / Request Demo CTAs pointing at `#contact`, which is the footer's id), and a dark footer. Note the **header logo is hotlinked from the production domain** (`https://www.plushealthtech.com/img/plushealthtech-logo.png`) while the footer uses the local `~/img/` copy.
- Styling is a **Tailwind v4** bundle only: source `wwwroot/css/tailwind.input.css` (CSS-first `@theme` with brand colors — `brand` `#1c8098`, `brand-dark` `#145f72`, `brand-light` `#e6f2f5`, `brand-accent` `#0ea5e9`, `brand-vet` `#0d9488`), built by the Tailwind CLI into `wwwroot/css/tailwind.css` and linked in the layout `<head>`. `wwwroot/css/site.css`, `wwwroot/js/site.js`, and the vendored Bootstrap/jQuery in `wwwroot/lib` are **template leftovers linked from no page** — don't build on them.
- External runtime dependencies in the layout `<head>`: Font Awesome 6.4.0 from cdnjs (icons used throughout the markup) and an analytics script from analytics.rokoh.com.
- Brand and UI design guidelines live in `Design.MD` (color palette with `#1c8098` as brand core, typography, component/layout conventions) — follow it when adding or restyling pages.
- Client libraries (Bootstrap, jQuery, jquery-validation) are vendored in `wwwroot/lib`; logo and favicon are in `wwwroot/img/`.
## Deployment
- Pushes to Gitea (gitea.rokoh.com) run the Gitea Actions workflow: build the Docker image → push `registry.rokoh.com/plushealthtech:latest` → SSH into `10.10.0.90` and run the container with `-p 7000:80 --restart=always`. Registry and server credentials come from Gitea secrets, not the repo.
- Pushes to Gitea (gitea.rokoh.com) run the Gitea Actions workflow: build the Docker image → push `registry.rokoh.com/plushealthtech:latest` → SSH into `10.10.0.90` and run the container with `-p 7000:8080 --restart=always`. **The app listens on 8080 inside the container** (the .NET aspnet image's default `ASPNETCORE_HTTP_PORTS`); the Dockerfile's `EXPOSE 80/443` is stale and not the port the container serves. Don't "fix" the workflow to 80 to match the EXPOSE.
- Registry and server credentials come from Gitea secrets, not the repo.
- The workflow file exists in **two identical copies**: `.gitea/workflows/default.yml` (the one Gitea reads) and `plushealthtech/.gitea/workflows/default.yml` (referenced from the csproj as `<None Include>`). Keep them in sync when editing either.
- The Dockerfile is multi-stage (node frontend → restore → build → publish → aspnet runtime), exposes 80/443, entrypoint `dotnet plushealthtech.dll`. The `frontend` stage runs `npm ci && npm run build:css` and feeds the generated `wwwroot/css/tailwind.css` into the dotnet build, so the image always ships freshly compiled CSS.
- The Dockerfile is multi-stage (node `frontend` builds CSS → `build` → `publish` with `UseAppHost=false` → `final` runtime), entrypoint `dotnet plushealthtech.dll`. The `frontend` stage runs `npm ci && npm run build:css` and feeds the generated `wwwroot/css/tailwind.css` into the dotnet build, so the image always ships freshly compiled CSS.