Modern personal portfolio with AI-powered chat assistant and cloud-hosted content management.
- 🎨 Responsive design with dark/light theme support
- 🤖 AI chat assistant powered by GitHub Models
- 📄 Secure PDF resume viewer with proxy protection
- ☁️ Cloud CMS integration via Strapi Cloud
- Frontend: Next.js 15 with TypeScript and Tailwind CSS
- CMS: Strapi Cloud hosted at
https://your-instance.strapiapp.com - AI: GitHub Models integration for chat assistant
Next.js 15 · React · TypeScript · Tailwind CSS · shadcn/ui · Strapi Cloud
- Node.js 18+
- GitHub Models API access
- Environment variables configured
git clone https://github.com/martin-nolan/martinnolan-dev.git
cd martinnolan-dev
npm install
cp .env.example .env.localAdd your API keys to .env.local:
# Required for AI chat functionality
GITHUB_TOKEN=your_github_models_token
# Required for CMS content (uses cloud instance)
NEXT_PUBLIC_STRAPI_API_URL=https://your-strapi-instance.strapiapp.com/api
# Optional: Enhanced CMS features
STRAPI_API_TOKEN=your_strapi_token
# Optional: Contact form integration
NEXT_PUBLIC_EMAILJS_SERVICE_ID=your_service_id
NEXT_PUBLIC_EMAILJS_TEMPLATE_ID=your_template_id
NEXT_PUBLIC_EMAILJS_PUBLIC_KEY=your_public_keynpm run devVisit http://localhost:3000 to see your portfolio.
# Development
npm run dev
# Production build
npm run build
# Type checking and linting
npm run test:buildContent is managed through Strapi Cloud:
- Admin Panel:
https://your-strapi-instance-url/admin - API Endpoint:
https://your-instance.strapiapp.com/api - Media CDN:
https://your-instance.media.strapiapp.com
The portfolio automatically syncs with cloud content updates.
MIT — Fork/adapt for your own use.