Find a file
2026-02-28 02:37:12 +01:00
admin/schemas Add admin panel with password protection and JSON editing 2026-02-19 15:56:20 +01:00
assets Initial commit: Nuxt portfolio with local data 2026-02-18 03:06:14 +01:00
components Use NuxtImg consistently for all images 2026-02-19 16:54:14 +01:00
layouts chore: Remove legacy link from header 2026-02-27 10:12:19 +01:00
pages CV: sort lectures by date, Events: show month/year for lectures 2026-02-28 02:37:12 +01:00
plugins Add admin panel with password protection and JSON editing 2026-02-19 15:56:20 +01:00
public Remove manual thumbnails, use NuxtImg for automatic resizing 2026-02-19 16:58:54 +01:00
server Update ID generation, CV formatting, and regenerate IDs 2026-02-27 22:15:47 +01:00
stores Add internal page iframe modal, fix video scaling, and update max-width 2026-02-19 03:51:50 +01:00
.env_template Add .env_template 2026-02-23 21:13:36 +01:00
.gitignore Major update: Add Nuxt 4 project with README, GPL LICENSE, .env_template; update .gitignore to exclude session files and .env 2026-02-23 19:57:24 +01:00
.npmrc Initial commit: Nuxt portfolio with local data 2026-02-18 03:06:14 +01:00
AGENTS.md Upgrade to Nuxt 4 and fix icon issues 2026-02-18 17:34:37 +01:00
app.vue Initial commit: Nuxt portfolio with local data 2026-02-18 03:06:14 +01:00
Dockerfile chore: Add hybrid rendering, CSP fixes, memory config 2026-02-27 09:15:37 +01:00
Dockerfile_upgrade Initial commit: Nuxt portfolio with local data 2026-02-18 03:06:14 +01:00
LICENSE Major update: Add Nuxt 4 project with README, GPL LICENSE, .env_template; update .gitignore to exclude session files and .env 2026-02-23 19:57:24 +01:00
nuxt.config.ts chore: Add hybrid rendering, CSP fixes, memory config 2026-02-27 09:15:37 +01:00
package-lock.json Add admin panel with password protection and JSON editing 2026-02-19 15:56:20 +01:00
package.json Clean up: remove unused scripts, debug files, and mongodb dependency 2026-02-19 16:49:47 +01:00
README.md Major update: Add Nuxt 4 project with README, GPL LICENSE, .env_template; update .gitignore to exclude session files and .env 2026-02-23 19:57:24 +01:00
tsconfig.json Initial commit: Nuxt portfolio with local data 2026-02-18 03:06:14 +01:00

Portfolio

Michael Winter's portfolio website - a Nuxt 3 application.

⚠️ Important

This portfolio contains the majority of my life's work - compositions, performances, publications, and research.

Before making any changes:

  • Ensure you have a backup
  • Test changes in development first
  • Be careful with data deletions

Overview

  • Framework: Nuxt 4 (Vue 3, TypeScript, Tailwind CSS)
  • Data: JSON files in server/data/
  • Admin: Password-protected admin panel at /admin

Prerequisites

  • Node.js 22+
  • npm

Quick Start

# 1. Install dependencies
npm install

# 2. Create .env file
cp .env_template .env
# Edit .env with your values

# 3. Start development server
npm run dev

Environment Variables (.env)

Variable Description Example
PASSWORD Admin password ************

Development

npm run dev          # Start development server
npm run build        # Build for production
npm run generate     # Generate static site
npm run preview      # Preview production build

Docker Deployment

The portfolio runs in Docker as part of the main unboundedpress stack.

Build & Start

cd ..
docker compose up -d portfolio

Updating Admin Password

  1. Edit .env in main repo:

    PASSWORD=your_new_password
    
  2. Rebuild and restart:

    docker compose up -d --build portfolio
    

Data Management

Data is stored in JSON files in server/data/:

  • works.json - Musical works
  • events.json - Events and performances
  • publications.json - Publications
  • resume.json - CV/resume
  • talks.json - Talks and lectures
  • releases.json - Album releases
  • album_art/ - Album cover images
  • scores/ - PDF scores
  • images/ - Gallery images

Editing Data

  1. Via Admin Panel: Visit /admin and login
  2. Direct JSON Edit: Edit files in server/data/ directly

Project Structure

portfolio/
├── server/
│   ├── api/           # Server API routes
│   └── data/          # JSON data files
├── pages/             # Vue pages (file-based routing)
├── components/        # Vue components
├── layouts/           # Layout components
├── public/            # Static assets (scores, images)
├── stores/           # Pinia stores
├── .env               # Environment variables (not in repo)
└── .env_template     # Template for .env

Tech Stack