220 lines
5.1 KiB
Markdown
220 lines
5.1 KiB
Markdown
# Leadership Counseling Portfolio
|
|
|
|
A nature-informed, serene digital portfolio for Peter-William L. Myers, a licensed professional counselor and certified nature-informed therapist.
|
|
|
|
**Live Site:** https://pwlmyers.org
|
|
|
|
## Overview
|
|
|
|
This React + TypeScript + Tailwind CSS application showcases:
|
|
- Professional introduction and headshot
|
|
- Theoretical orientation and counseling philosophy
|
|
- Skills demonstration (presentation gallery)
|
|
- Dynamic resume experience extraction
|
|
- Credentials, certifications, and publications
|
|
|
|
## Tech Stack
|
|
|
|
- **Frontend:** React 19, TypeScript, Tailwind CSS 4
|
|
- **Build Tool:** Vite 8
|
|
- **Resume Parsing:** Mammoth (DOCX → text extraction)
|
|
- **Icons:** Lucide React
|
|
- **Reverse Proxy:** Caddy (Docker)
|
|
- **Hosting:** Oracle Cloud VPS
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
- Node.js 20.19+ or 22.12+
|
|
- npm 10+
|
|
|
|
### Development
|
|
|
|
```bash
|
|
# Clone repository
|
|
git clone https://git.dustin.coffee/hobokenchicken/peters-portfolio-site.git
|
|
cd peters-portfolio-site
|
|
|
|
# Install dependencies
|
|
npm install
|
|
|
|
# Start development server
|
|
npm run dev
|
|
```
|
|
|
|
The dev server runs at `http://localhost:5173/` by default.
|
|
|
|
### Production Build (Recommended)
|
|
|
|
```bash
|
|
npm install
|
|
npm run build
|
|
# Serve dist/ folder with Apache, Nginx, lighttpd, or Caddy
|
|
```
|
|
|
|
See [DEPLOYMENT.md](DEPLOYMENT.md) for server configuration examples.
|
|
|
|
### Build for Production
|
|
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
Output goes to `dist/` directory.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
peters-portfolio-site/
|
|
├── docs/ # Source documents (PDFs, DOCX, PPTX)
|
|
│ ├── Peter's Resume.docx
|
|
│ ├── ActiveMDLCPC.pdf
|
|
│ ├── NIT for SUD.pptx
|
|
│ └── ...
|
|
├── public/ # Static assets
|
|
│ └── docs/ # Copied from docs/ for hosting
|
|
├── src/
|
|
│ ├── components/ # Reusable components
|
|
│ │ └── NavBar.tsx
|
|
│ ├── sections/ # Page sections
|
|
│ │ ├── Introduction.tsx
|
|
│ │ ├── Philosophy.tsx
|
|
│ │ ├── SkillsGallery.tsx
|
|
│ │ ├── Experience.tsx
|
|
│ │ └── Credentials.tsx
|
|
│ ├── theme/ # Theme configuration
|
|
│ │ ├── nature.ts # Nature-inspired color tokens
|
|
│ │ ├── theme.ts
|
|
│ │ └── tokens.css
|
|
│ ├── utils/ # Utilities
|
|
│ │ └── parseResume.ts # DOCX resume parser
|
|
│ ├── App.tsx
|
|
│ ├── main.tsx
|
|
│ └── styles.css
|
|
├── index.html
|
|
├── vite.config.ts
|
|
├── tailwind.config.js
|
|
├── postcss.config.js
|
|
└── package.json
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Vite (`vite.config.ts`)
|
|
|
|
```typescript
|
|
export default defineConfig({
|
|
plugins: [react()],
|
|
server: {
|
|
port: 5173,
|
|
strictPort: true,
|
|
host: true, # Required for LAN access
|
|
allowedHosts: ['pwlmyers.org'], # Add your domain here
|
|
},
|
|
})
|
|
```
|
|
|
|
### Tailwind Theme (`src/theme/nature.ts`)
|
|
|
|
Nature-inspired color palette:
|
|
- **Emerald Sage:** Primary greens (`#1f9a64` to `#073a27`)
|
|
- **Parchment:** Warm backgrounds (`#f6efd7` to `#3d321d`)
|
|
- **Slate Soft:** Text and UI (`#f6f7fb` to `#1f2a3a`)
|
|
|
|
## Document Management
|
|
|
|
Source documents live in `docs/` and are copied to `public/docs/` for hosting:
|
|
|
|
```bash
|
|
# Copy docs for deployment
|
|
cp -r docs/* public/docs/
|
|
```
|
|
|
|
**Included Documents:**
|
|
- `Peter's Resume.docx` - Parsed dynamically for Experience section
|
|
- `ActiveMDLCPC.pdf` - License certificate
|
|
- `PC014692 (1).pdf` - License document
|
|
- `NIT for SUD.pptx` - Nature-Informed Therapy presentation
|
|
- `Presentation1.pptx`, `Presentation2.pptx` - Skills demonstrations
|
|
- `Preview - Call for Proposals - 2026 ACA Annual Conference & Expo.pdf` - Conference proposal
|
|
|
|
## Deployment
|
|
|
|
See [DEPLOYMENT.md](DEPLOYMENT.md) for detailed server setup instructions.
|
|
|
|
### Quick Deploy (Docker + Caddy)
|
|
|
|
```bash
|
|
# On VPS
|
|
cd /opt/peters-portfolio-site
|
|
git pull
|
|
npm install
|
|
npm run build
|
|
|
|
# Start/restart Caddy
|
|
docker compose -f compose.caddy.yaml up -d
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### DNS Resolution Issues
|
|
|
|
If `pwlmyers.org` fails to resolve locally:
|
|
|
|
```bash
|
|
# Flush DNS cache
|
|
sudo systemd-resolve --flush-caches
|
|
sudo systemctl restart NetworkManager
|
|
|
|
# Or add to /etc/hosts temporarily
|
|
echo "150.136.209.11 pwlmyers.org" | sudo tee -a /etc/hosts
|
|
```
|
|
|
|
### Build Errors
|
|
|
|
**"Cannot find native binding" (rolldown):**
|
|
```bash
|
|
rm -rf node_modules package-lock.json
|
|
npm install
|
|
```
|
|
|
|
**Tailwind CSS not generating:**
|
|
- Ensure using Tailwind v4 syntax: `@import "tailwindcss";`
|
|
- Check `postcss.config.js` uses `@tailwindcss/postcss`
|
|
|
|
### Vite Host Blocking
|
|
|
|
If you see "Blocked request. This host is not allowed":
|
|
|
|
Add domain to `vite.config.ts`:
|
|
```typescript
|
|
server: {
|
|
allowedHosts: ['pwlmyers.org', 'your-domain.com'],
|
|
}
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
No environment variables required for basic operation.
|
|
|
|
For development with different ports:
|
|
```bash
|
|
PORT=3000 npm run dev
|
|
```
|
|
|
|
## Browser Support
|
|
|
|
- Chrome 90+
|
|
- Firefox 88+
|
|
- Safari 14+
|
|
- Edge 90+
|
|
|
|
## License
|
|
|
|
ISC
|
|
|
|
## Credits
|
|
|
|
Built for Peter-William L. Myers, Licensed Professional Counselor and Certified Nature-Informed Therapist.
|