Skip to content

Commit 49bbfcd

Browse files
docs: update README for static export FTP deployment
The site moved off Vercel to a static export deployed over FTP to OVH shared hosting. Update the intro and Deployment section accordingly, and bring the requirements (pnpm 11+) and scripts table (knip) up to date.
1 parent 96d3b53 commit 49bbfcd

1 file changed

Lines changed: 22 additions & 7 deletions

File tree

README.md

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
[![CI](https://github.com/Alexis-Gontier/algont-ier.com/actions/workflows/ci.yml/badge.svg)](https://github.com/Alexis-Gontier/algont-ier.com/actions/workflows/ci.yml)
44

5-
Personal portfolio built with **Next.js 16** (App Router) and **React 19**, deployed on **Vercel**.
5+
Personal portfolio built with **Next.js 16** (App Router) and **React 19**, deployed as a
6+
**static export** over **FTP** to OVH shared hosting.
67

78
## Stack
89

@@ -22,7 +23,7 @@ Personal portfolio built with **Next.js 16** (App Router) and **React 19**, depl
2223
## Requirements
2324

2425
- [Node.js](https://nodejs.org) 22+
25-
- [pnpm](https://pnpm.io) 10+
26+
- [pnpm](https://pnpm.io) 11+ (pinned via `packageManager` in [`package.json`](package.json))
2627

2728
## Getting started
2829

@@ -44,6 +45,7 @@ Open [http://localhost:3000](http://localhost:3000).
4445
| `pnpm lint` | Biome check (lint + format) |
4546
| `pnpm format` | Auto-format with Biome |
4647
| `pnpm typecheck` | Type-check with `tsc` |
48+
| `pnpm knip` | Find unused files, dependencies and exports |
4749
| `pnpm test` | Run unit tests (Vitest) |
4850
| `pnpm test:watch` | Vitest in watch mode |
4951
| `pnpm test:e2e` | Run E2E tests (Playwright) |
@@ -109,8 +111,21 @@ or default locale.
109111

110112
## Deployment
111113

112-
Deployed on Vercel — pushes to `main` deploy to production, pull requests get
113-
preview deployments automatically. CI ([`.github/workflows/ci.yml`](.github/workflows/ci.yml))
114-
runs lint, type-check, unit and E2E tests on every push and PR.
115-
116-
Remember to set `NEXT_PUBLIC_SITE_URL` to your production domain in the Vercel project settings.
114+
Production is a **static export** hosted on **OVH shared hosting**, served over FTP — there is
115+
no Node server in production. The build and upload live on the dedicated
116+
[`static-export-ftp`](https://github.com/Alexis-Gontier/algont-ier.com/tree/static-export-ftp)
117+
branch, which sets `output: "export"` in [`next.config.ts`](next.config.ts) so `pnpm build`
118+
emits a fully static `out/` directory. See [`DEPLOY-FTP.md`](DEPLOY-FTP.md) on that branch for
119+
the full procedure (WinSCP/FTP upload, `.htaccess` headers, root locale redirect).
120+
121+
- **CI** ([`.github/workflows/ci.yml`](.github/workflows/ci.yml)) runs lint, type-check, unit
122+
and E2E tests on every push and PR.
123+
- **Deploy** ([`.github/workflows/deploy-ftp.yml`](.github/workflows/deploy-ftp.yml) on the
124+
`static-export-ftp` branch) builds the static export and uploads `out/` to OVH via FTP on
125+
every push to that branch.
126+
127+
Because the export is static, the i18n middleware ([`src/proxy.ts`](src/proxy.ts)) is dropped
128+
in favour of static `[locale]` segments plus a root redirect, and security headers move from
129+
`next.config.ts` to `.htaccess`. Set `NEXT_PUBLIC_SITE_URL` (build-time) to your production
130+
domain so absolute URLs in the sitemap, robots and Open Graph tags are correct — it is read
131+
from the `SITE_URL` repository secret in the deploy workflow.

0 commit comments

Comments
 (0)