perf: optimize portfolio runtime delivery
Replace the blocking asset loader with progressive rendering, defer expensive media and Three.js work, and reduce hydration and animation costs. Move deployment from a static Nginx export to the standalone Next.js runtime with optimized dynamic images.
This commit is contained in:
@@ -49,9 +49,27 @@ Replace `deploy:deploy` and `/srv/portfolio` with the values used for
|
||||
`DEPLOY_USER` and `DEPLOY_PATH`. Add the public half of `DEPLOY_SSH_KEY` to the
|
||||
deployment user's `~/.ssh/authorized_keys`.
|
||||
|
||||
The container joins `caddy_proxy` under the `static-site` service name. Caddy
|
||||
must also join that network and proxy to `static-site:80`. No host port is
|
||||
published by this project.
|
||||
The standalone Next.js container joins `caddy_proxy` under the `portfolio-app`
|
||||
service name. Caddy must also join that network and proxy to
|
||||
`portfolio-app:3000`. No host port is published by this project.
|
||||
|
||||
A minimal Caddy route is:
|
||||
|
||||
```caddyfile
|
||||
portfolio.example.com {
|
||||
reverse_proxy portfolio-app:3000
|
||||
}
|
||||
```
|
||||
|
||||
Caddy forwards the browser's `Accept` header by default; keep that behavior so
|
||||
Next.js can negotiate WebP responses. Do not replace the cache headers emitted
|
||||
for `/_next/image`. The named `next-image-cache` volume persists `.next/cache`
|
||||
between container replacements so optimized variants can be reused.
|
||||
|
||||
The application expects immutable media URLs. When an admin or future upload
|
||||
workflow replaces an image, write it to a UUID or content-versioned URL instead
|
||||
of overwriting the previous object at the same URL. Next.js has no per-image
|
||||
optimizer-cache invalidation API.
|
||||
|
||||
## Manual deployment
|
||||
|
||||
@@ -64,3 +82,10 @@ docker compose --project-name portfolio up --detach --build --remove-orphans
|
||||
Old versioned release directories are deliberately retained for rollback. They
|
||||
can be removed manually after a newer release has been proven stable; keep the
|
||||
directory referenced by the `current` symlink.
|
||||
|
||||
## Runtime verification
|
||||
|
||||
The production image contains `.next/standalone`, `.next/static`, and `public`,
|
||||
and runs the generated `server.js` with Node.js 22 on port 3000. CI smoke-tests
|
||||
the English and Persian routes, a built static asset, and `/_next/image` with
|
||||
WebP negotiation before deployment.
|
||||
|
||||
Reference in New Issue
Block a user