4.3 KiB
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 thehttpsprofile inProperties/launchSettings.json); usedotnet watch --project plushealthtechfor hot reload - CSS:
npm installonce, thennpm run build:csscompiles the Tailwind v4 bundle intoplushealthtech/wwwroot/css/tailwind.css(usenpm run watch:csswhile 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 localnpm run build:cssis needed before a Docker build. - There is no test project and no linter/formatter configuration.
Architecture
plushealthtech/is the only project.Program.csis 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,#solutionscards incl. a#veterinarycard,#interoperabilitysection),Privacy,Error, and the sharedShared/_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@themewith brand colors —brand#1c8098,brand-dark#145f72,brand-light#e6f2f5,brand-accent#0ea5e9,brand-vet#0d9488), built by the Tailwind CLI intowwwroot/css/tailwind.cssand linked in the layout<head>.wwwroot/css/site.css,wwwroot/js/site.js, and the vendored Bootstrap/jQuery inwwwroot/libare 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#1c8098as 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 into10.10.0.90and run the container with-p 7000:8080 --restart=always. The app listens on 8080 inside the container (the .NET aspnet image's defaultASPNETCORE_HTTP_PORTS); the Dockerfile'sEXPOSE 80/443is 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) andplushealthtech/.gitea/workflows/default.yml(referenced from the csproj as<None Include>). Keep them in sync when editing either. - The Dockerfile is multi-stage (node
frontendbuilds CSS →build→publishwithUseAppHost=false→finalruntime), entrypointdotnet plushealthtech.dll. Thefrontendstage runsnpm ci && npm run build:cssand feeds the generatedwwwroot/css/tailwind.cssinto the dotnet build, so the image always ships freshly compiled CSS.