120 lines
2.6 KiB
Markdown
120 lines
2.6 KiB
Markdown
# 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/)
|