# 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 ```bash # 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 ```bash 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 ```bash cd .. docker compose up -d portfolio ``` ### Updating Admin Password 1. Edit `.env` in main repo: ``` PASSWORD=your_new_password ``` 2. Rebuild and restart: ```bash 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 - [Nuxt](https://nuxt.com/) - [Vue 3](https://vuejs.org/) - [Tailwind CSS](https://tailwindcss.com/) - [Pinia](https://pinia.vuejs.org/) - [Nuxt Image](https://image.nuxt.com/) - [Headless UI](https://headlessui.com/)