# 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.