Skip to content

Repository files navigation

Personal Website

My personal portfolio website — a landing page with project and work-experience sections, theming (light/dark), and SEO.

Tech stack

Setup

Install dependencies:

pnpm install

Development

Start the dev server on http://localhost:3000:

pnpm dev

Production build

pnpm build           # build the Nitro server output into .output/
pnpm preview         # locally preview the production build

The server entry point is .output/server/index.mjs. It listens on HOST/PORT (defaults 0.0.0.0:3000, or whatever you set via env).

Docker

The included Dockerfile is a multi-stage build (Alpine):

docker build -t personal-website .
docker run -p 3002:3002 personal-website

The container serves on port 3002 (PORT/HOST are set as ENV; override at runtime if your platform injects its own $PORT).

Native dependency note (important)

@nuxt/content v3 uses better-sqlite3, a native C++ addon, to serve content from a SQLite database. This affects the Docker build in two ways:

  1. Build stage needs python3 make g++ to compile better-sqlite3 (no musl prebuilt binary ships for Alpine).
  2. Runtime stage needs libstdc++ installed — the compiled addon links against it at load time. The base node:alpine image does not include it, so without apk add libstdc++ the server crashes on startup with Error loading shared library libstdc++.so.6, and the container never comes up (a fronting proxy will show a generic 500 / "temporarily unavailable").

Both are already handled in the Dockerfile — keep them if you edit it.

Deploying to Vercel

This repo is linked to the murphy-site project (zenith-codes-projects team), framework preset Nuxt.js. Nitro auto-detects the vercel build preset from the VERCEL env var Vercel sets during builds — no nitro.preset override is needed in nuxt.config.ts (that would break the Docker build, which doesn't set that env var).

Set these in the project's Environment Variables (see .env.example for the full list):

  • NUXT_PUBLIC_POCKETBASE_URL — required; the app throws on boot without it.
  • REDIS_URL — provisioned automatically by the Vercel Marketplace Upstash integration (rediss://…, TLS implied by the scheme). The docker-compose Redis (dragonflydb) instead uses discrete REDIS_HOST/REDIS_PORT/ REDIS_PASSWORD (+ REDIS_TLS=true if the provider needs it) — see server/utils/redis.ts. Rate limiting is skipped (fails open) if neither is set.

Analytics is @vercel/analytics, enabled automatically via the @vercel/analytics/nuxt module — no env vars needed (zero-config on Vercel).

Deploy with vercel deploy (preview) or vercel deploy --prod.

Releases

This repo uses semantic-release with Conventional Commits. Versioning and CHANGELOG.md are generated automatically from commit messages in CI.

Learn more

About

My Personal Website built using NuxtJS

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages