A modern, responsive portfolio website showcasing systems engineering projects, AI/ML implementations, and automation solutions. Built with Next.js 14, TypeScript, and Tailwind CSS.
- Modern Design: Clean, professional interface with dark/light mode support
- Responsive Layout: Optimized for all devices and screen sizes
- SEO Optimized: Complete meta tags, OpenGraph, and structured data
- Performance Focused: Lighthouse-optimized with fast loading times
- Accessibility: WCAG compliant with keyboard navigation and screen reader support
- Project Showcase: Interactive project cards with detailed modal views
- Blog System: Technical articles and case studies
- Contact Form: Functional contact form with validation
- Analytics Ready: Plausible Analytics integration
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS v4
- UI Components: Radix UI + shadcn/ui
- Icons: Lucide React
- Fonts: Inter + JetBrains Mono
- Theme: next-themes for dark/light mode
- Analytics: Plausible (privacy-focused)
``` βββ app/ # Next.js App Router β βββ api/ # API routes β βββ blog/ # Blog pages β βββ projects/ # Project detail pages β βββ layout.tsx # Root layout β βββ page.tsx # Homepage β βββ sitemap.ts # Dynamic sitemap β βββ robots.ts # Robots.txt βββ components/ # React components β βββ sections/ # Page sections β βββ ui/ # UI components (shadcn/ui) β βββ navigation.tsx # Navigation component βββ content/ # Content data β βββ projects.json # Project information βββ public/ # Static assets βββ styles/ # Global styles ```
- Node.js 18+
- npm 8+ or pnpm
-
Clone the repository ```bash git clone https://github.com/Repetto-A/portfolio-website.git cd portfolio-website ```
-
Install dependencies ```bash npm install
pnpm install ```
-
Start development server ```bash npm run dev
pnpm dev ```
-
Open in browser Navigate to http://localhost:3000
```bash npm run build npm start ```
Run the test suite:
```bash npm test
npm run test:watch ```
Edit content/projects.json to add, modify, or remove projects:
```json { "projects": [ { "id": "project-slug", "title": "Project Name", "description": "Project description...", "status": "production", // "in-progress", "production", "competition", "prototype" "techStack": ["React", "Node.js", "PostgreSQL"], "features": ["Feature 1", "Feature 2"], "githubUrl": "https://github.com/username/repo", "demoUrl": "https://demo.example.com", // optional "images": ["/projects/project-1.jpg"], "category": "Web Application" } ] } ```
- Add post metadata to
app/blog/[slug]/page.tsx - Create the post content in the same file
- Update the blog posts array in
components/sections/blog-section.tsx
- Hero Section: Edit
components/sections/hero-section.tsx - About Section: Edit
components/sections/about-section.tsx - Skills: Edit
components/sections/skills-section.tsx - Contact Info: Edit
components/sections/contact-section.tsx
-
Connect to Vercel ```bash npm i -g vercel vercel ```
-
Configure Environment Variables (if needed)
NEXT_PUBLIC_PLAUSIBLE_DOMAIN: Your domain for analyticsCONTACT_EMAIL: Email for contact form notifications
-
Deploy ```bash vercel --prod ```
- Build Command:
npm run build - Publish Directory:
out(if using static export) or.next - Environment Variables: Same as Vercel
The site works on any platform supporting Next.js:
- Railway
- Render
- DigitalOcean App Platform
- AWS Amplify
Replace the Plausible script in app/layout.tsx:
```tsx
<script defer data-domain="your-domain.com" src="https://plausible.io/js/script.js"></script>```
Update SEO settings in app/layout.tsx:
```tsx export const metadata: Metadata = { title: "Your Name - Your Title", description: "Your description...", // ... other metadata } ```
The contact form uses a Next.js API route (app/api/contact/route.ts). To enable email sending:
- Install email service (Resend, SendGrid, etc.)
- Add API keys to environment variables
- Update the API route to send emails
Edit the color scheme in app/globals.css:
```css :root { --primary: your-primary-color; --secondary: your-secondary-color; /* ... */ } ```
Update fonts in app/layout.tsx:
```tsx import { Cute_Font as YourFont } from 'next/font/google'
const yourFont = YourFont({ subsets: ['latin'] }) ```
- Lighthouse Score: 95+ across all metrics
- Core Web Vitals: Optimized for LCP, FID, and CLS
- Image Optimization: Next.js automatic image optimization
- Code Splitting: Automatic route-based code splitting
- Content Security Policy: Configured for production
- Form Validation: Client and server-side validation
- XSS Protection: React's built-in XSS protection
- HTTPS: Enforced in production
This project is licensed under the MIT License - see the LICENSE file for details.
For questions or support:
- Email: contact@repetto-a.com
- LinkedIn: linkedin.com/in/alejandro-repetto
- GitHub: github.com/Repetto-A
Built with β€οΈ by Alejandro Repetto