A minimal personal portfolio website built with Next.js and TypeScript, featuring project showcases, publications, talks, and a photography archive.
🌐 mmaz.co
- Split Layout: Fixed text panel on the left, scrollable project videos on the right
- Project Spotlight: Showcasing Aleph, Media Reaction Finder, World Vote, and Crowdmuse with demo videos
- Dark Mode: Toggle between light and dark themes with persistent preference
- Open Memos: Open proposals and concepts for review, hack, or grant funding
- Publications: Links to Crowdmuse Mirror and Autopsy publications
- Selected Talks: Conference talks from 2019-2024
- Bouncing 3D Characters: Playful animated characters floating across the page
- Responsive Design: Optimized layouts for desktop and mobile
- Daily Photo Rotation: Shows a different photo each day
- 10-Day Cycles: After 10 days, the cycle resets with a new random selection
- Date Log: Displays clickable dates showing which photos were shown on previous days
- Full Collection: Link to complete Tumblr archive
- Easter Egg: Hidden page with bouncing 3D characters
- Partial Functional Correspondence: Explanatory text about the mathematical visualization method
- Framework: Next.js 14
- Language: TypeScript
- Styling: CSS (no frameworks)
- Deployment: Vercel
- Node.js 18+
- npm or yarn
- Clone the repository:
git clone https://github.com/mmazco/website.git
cd website- Install dependencies:
npm install- Run the development server:
npm run dev- Open http://localhost:3000 in your browser
├── app/
│ ├── components/
│ │ └── BouncingCharacter.tsx # Animated bouncing character component
│ ├── globals.css # Global styles (light/dark mode, layouts)
│ ├── layout.tsx # Root layout with dark mode script
│ ├── page.tsx # Homepage with split layout
│ ├── photography/
│ │ └── page.tsx # Photography archive page
│ └── playground/
│ └── page.tsx # Hidden playground page
├── lib/
│ ├── photos.ts # Photo data for photography page
│ └── usePhotoRotation.ts # Photo rotation logic
├── types/
│ └── index.ts # TypeScript interfaces
├── public/
│ └── images/ # Photos, videos, and assets
└── README.md
- Push your code to GitHub
- Connect your repository to Vercel
- Deploy automatically on every push
npm run build
npm run start- Add your photos to the
public/images/directory - Update the
lib/photos.tsfile with the new photo information:
{
filename: "/images/your-photo.jpg",
title: "Photo Title",
details: "Camera and technical details"
}- Add video files to
public/images/ - Update
app/page.tsxto include new video in the right panel
- Photo Cycle Duration: Change the 10-day cycle in
lib/usePhotoRotation.ts - Styling: Update
app/globals.cssfor visual changes - Dark Mode Colors: Modify
.dark-modeclasses in CSS
Feel free to fork this repository and customize it for your own portfolio! The footer includes a "Fork website" link.
© Maryam Mazraei - All rights reserved