portfolio/README.md

120 lines
2.6 KiB
Markdown
Raw Normal View History

# 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/)