← All projects

Case · Site

Multi-page legal services website

A delivered website for a legal and expert-appraisal firm built with Nuxt 4: 65 server-rendered pages, JSON-LD markup and 301 redirects from the previous site. Lead requests go through a server endpoint that checks Origin, caps body size and rate-limits clients.

  • Nuxt 4
  • Vue 3
  • TypeScript
  • Bootstrap 5
  • Zod
  • Vitest
  • Playwright
  • Docker
  • GitHub Actions

01 · How it looks

Screenshots

Screenshot of the project "Multi-page legal services website" at 1280 pixels wide
Desktop, 1280 px
Screenshot of the project "Multi-page legal services website" on a phone screen, 390 pixels wide
Phone, 390 px

02 · About

What it is and why

A delivered website for a legal and expert-appraisal firm built with Nuxt 4: 65 server-rendered pages, JSON-LD markup and 301 redirects from the previous site. Lead requests go through a server endpoint that checks Origin, caps body size and rate-limits clients.

Limitations

This is a client site: the client name and contacts are not used in the card text; screenshots show the site itself.

Screenshots were taken from a local build with placeholder env values; no forms were submitted.

Figures and claims from the site content belong to the client and are not quoted in the card.

The local repository copy was shown, not the latest version.

What is inside

  • 65 SSR routes, generated sitemap.xml and robots.txt; indexing is switched on by an explicit env flag
  • Lead form: server endpoint with Origin check, 10 KB body cap, 3 requests per 10 minutes per IP, honeypot and optional captcha
  • JSON-LD: LegalService, WebSite, BreadcrumbList
  • Single-hop 301 redirects from legacy URLs and trailing slashes, security headers (CSP, HSTS)
  • CI/CD: lint, typecheck, Vitest, build, Playwright; then a Docker image and server deploy
  • 210 unit tests in 13 files and 4 e2e spec files

03 · How to run

Run it locally

npm install && npm run build && node .output/server/index.mjs
# placeholder env values: NITRO_PRESET=node-server PORT=3310 NUXT_ALLOWED_ORIGIN=http://localhost:3310 NUXT_BITRIX_WEBHOOK_URL=http://127.0.0.1:9/ ; for development: npm run dev

04 · Code

The repository is private

The source lives in a private repository. I will grant access on request: write to me and I will send an invitation.

Request the code