Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@
!assets/
!assets/geist.ttf
!assets/Geist-OFL.txt
!assets/grip-sharing-v1.png
2 changes: 1 addition & 1 deletion .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
if curl -fsS http://localhost:8080/healthz; then break; fi
sleep 1
done
for path in / /index.html /styles.css /app.js /settings.js /data.js /favicon.svg /assets/geist.ttf /assets/Geist-OFL.txt; do
for path in / /index.html /styles.css /app.js /settings.js /data.js /favicon.svg /assets/geist.ttf /assets/Geist-OFL.txt /assets/grip-sharing-v1.png; do
curl -fsS -o /dev/null "http://localhost:8080$path"
done
for path in /.env /.git/config /README.md /context.md /design-options/ /missing; do
Expand Down
4 changes: 4 additions & 0 deletions DEPLOYMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,7 @@ docker run --rm -p 8080:8080 grip-reference
## Rollback

For a regression, revert through the same staging → main release path and let Dokploy rebuild. For urgent recovery, select the preceding retained image in Dokploy and verify its commit and health. For the first release, withdrawing only this application's route/service returns to the previous state. Do not change shared proxy, registry, or other applications.

## Sharing preview

`index.html` includes server-rendered Open Graph and large-image card tags. `assets/grip-sharing-v1.png` must stay in the Docker copy list, build-context allowlist, Nginx path allowlist, and CI asset checks. Verify its public HTTPS response is `image/png`, dimensions match the tags, and a crawler can read the tags without executing JavaScript. Social platforms may cache prior previews; use their refresh tool or share again after their cache expires.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ LABEL org.opencontainers.image.source="https://github.com/stephenjoly/grip-refer
org.opencontainers.image.revision="${SOURCE_REVISION}"
COPY deploy/nginx.conf /etc/nginx/conf.d/default.conf
COPY index.html styles.css app.js settings.js data.js favicon.svg /usr/share/nginx/html/
COPY assets/geist.ttf assets/Geist-OFL.txt /usr/share/nginx/html/assets/
COPY assets/geist.ttf assets/Geist-OFL.txt assets/grip-sharing-v1.png /usr/share/nginx/html/assets/
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 CMD wget -q -O /dev/null http://127.0.0.1:8080/healthz || exit 1
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,7 @@ Browser checks in `.impeccable/verify-lilac.js` cover 81 exact ages, invalid inp
## Deployment

Live: https://ogs.stephenjoly.net. See [DEPLOYMENT.md](DEPLOYMENT.md) for the staging-to-production release process.

## Sharing

Open Graph and large-image social cards use the approved purple preview at `assets/grip-sharing-v1.png` (1733 × 907). The canonical URL is https://ogs.stephenjoly.net/. Update the image filename and metadata together when replacing the card so sharing caches can discover the new asset.
Binary file added assets/grip-sharing-v1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions context.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,7 @@ Verified 81 exact ages20–100, invalid/under-20 handling, actual rich HTML/text
## Hosting

Public GitHub repository: `stephenjoly/grip-reference`. Production hostname: `ogs.stephenjoly.net`. Root Dockerfile serves only app assets with unprivileged Nginx on 8080; deployment procedure is in `DEPLOYMENT.md`.

## Sharing preview

Approved purple card is `assets/grip-sharing-v1.png` (1733 × 907). Open Graph and large-image card metadata point to the canonical public hostname; container and CI asset allowlists include the image.
2 changes: 1 addition & 1 deletion deploy/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ server {
add_header Cache-Control "no-cache" always;
location = /healthz { access_log off; default_type text/plain; return 200 "ok\n"; }
location = / { try_files /index.html =404; }
location ~ ^/(index\.html|styles\.css|app\.js|settings\.js|data\.js|favicon\.svg|assets/(geist\.ttf|Geist-OFL\.txt))$ { try_files $uri =404; }
location ~ ^/(index\.html|styles\.css|app\.js|settings\.js|data\.js|favicon\.svg|assets/(geist\.ttf|Geist-OFL\.txt|grip-sharing-v1\.png))$ { try_files $uri =404; }
location / { return 404; }
}
16 changes: 16 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,22 @@
<meta name="theme-color" content="#7052d6">
<meta name="description" content="Adult grip strength norms from Mathiowetz et al. (1985). Filter by age and sex, then copy reference values into your notes.">
<title>Grip reference — Adult strength norms</title>
<link rel="canonical" href="https://ogs.stephenjoly.net/">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Grip reference">
<meta property="og:url" content="https://ogs.stephenjoly.net/">
<meta property="og:title" content="Grip strength norms | Grip reference">
<meta property="og:description" content="Adult grip strength norms from Mathiowetz et al. (1985). Filter by age and sex, then copy reference values into your notes.">
<meta property="og:image" content="https://ogs.stephenjoly.net/assets/grip-sharing-v1.png">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1733">
<meta property="og:image:height" content="907">
<meta property="og:image:alt" content="Grip strength norms. Find the reference. Get back to care. A sample table shows mean grip strength for women aged 55–59: right 57.3 lb, left 47.3 lb. Mathiowetz et al., 1985.">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Grip strength norms | Grip reference">
<meta name="twitter:description" content="Adult grip strength norms from Mathiowetz et al. (1985). Filter by age and sex, then copy reference values into your notes.">
<meta name="twitter:image" content="https://ogs.stephenjoly.net/assets/grip-sharing-v1.png">
<meta name="twitter:image:alt" content="Grip strength norms reference with a sample table from Mathiowetz et al. (1985).">
<link rel="icon" href="favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="styles.css">
<script src="data.js" defer></script>
Expand Down
Loading