Personal portfolio website for Ian Alloway - Data Scientist and AI Specialist.
Live Site: https://ianalloway.xyz
- Vite - Build tool
- TypeScript - Type safety
- React - UI framework
- shadcn-ui - Component library
- Tailwind CSS - Styling
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run buildTo add new academic papers to the portfolio:
-
Add the PDF file to
/public/papers/directory with a clean filename (e.g.,my-paper-title.pdf) -
Update the papers array in
src/pages/Index.tsxby adding a new entry to theacademicPapersarray:
const academicPapers = [
// ... existing papers ...
{
title: 'Your Paper Title',
description: 'Brief description of the paper',
file: '/papers/your-paper-filename.pdf',
category: 'Capstone',
},
];- Commit and push your changes - the site will automatically deploy.
The live site is connected to https://ianalloway.xyz, and the repo now also includes vercel.json so preview deployments on Vercel can serve SPA routes like /now, /hireme, and /toolkit without a 404 while still routing /api/* to serverless functions.
The contact-area subscribe form now posts to /api/newsletter-subscribe. On each signup it:
- creates a child page in Notion with the subscriber details
- sends you a notification email
- redirects the visitor into the official Substack subscribe page
Set these env vars before turning the form on in production:
NOTION_API_KEY=secret_your_notion_integration_token
NOTION_PARENT_PAGE_ID=your_notion_parent_page_id
RESEND_API_KEY=re_your_resend_api_key
RESEND_FROM_EMAIL="Ian Alloway <onboarding@yourdomain.com>"
NOTIFY_EMAIL=ian@allowayllc.com
SUBSTACK_PUBLICATION_URL=https://allowayai.substack.comNOTION_PARENT_PAGE_ID should be the page where you want each new subscriber page to appear. Share that Notion page with your Notion integration before testing.
Built with ❤️ by Ian Alloway