Files
Plushealthtech/CLAUDE.md
T
Clive e5d1446791
Gitea CI/CD / build (push) Successful in 1m40s
Site pages and AI tasks.
2026-08-20 14:58:52 +10:00

4.3 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

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. The company is Plus Health Tech: interoperable Clinical Decision Support (CDS), Patient Management software, and Veterinary tech (see Design.MD for brand positioning).

Commands

Run from the repo root (the solution directory).

  • Build: dotnet build plushealthtech.sln
  • Run locally: dotnet run --project plushealthtech → https://localhost:7070 (http: 5047, per the https profile in Properties/launchSettings.json); use dotnet watch --project plushealthtech for hot reload
  • CSS: npm install once, then npm run build:css compiles the Tailwind v4 bundle into plushealthtech/wwwroot/css/tailwind.css (use npm run watch:css while editing pages). The layout links this local file — never load the Tailwind Play CDN from markup.
  • Docker image (build context is the repo root, not the project folder): docker build . -t plushealthtech:latest -f plushealthtech/Dockerfile — the Dockerfile's node stage builds the CSS itself, so no local npm run build:css is needed before a Docker build.
  • There is no test project and no linter/formatter configuration.

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 (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.

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: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 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.