A modern personal portfolio website with an interactive "bento grid" layout showcasing music, skills, GitHub activity, and real-time Discord status.
- Interactive Bento Layout: Responsive grid of interactive components
- Real-time Integrations:
- Discord presence via Lanyard API
- GitHub contribution visualization
- Music playback and status
- Audio Playback: Custom audio player with music samples
- Visual Effects: Interactive shader gradients and animations
- Dark/Light Mode: Theme switching with persisted preference
- Responsive Design: Optimized for mobile, tablet, and desktop
- MDX Content: Rich content with syntax highlighting and math
This project leverages modern web technologies:
- Framework: Next.js 15
- Language: TypeScript
- Styling: Tailwind CSS with typography plugin
- Components:
- Radix UI primitives
- Custom UI components
- React Grid Layout
- Animations & Effects:
- Framer Motion
- GSAP
- Three.js / React Three Fiber
- ShaderGradient
- Lottie animations
- Content: MDX with remark/rehype plugins
- APIs & Integrations:
- Lanyard API (Discord)
- Last.fm API (Music)
- GitHub Contributions
- Data Storage:
- Upstash Redis
- Vercel Blob
- Deployment: Vercel
/
├── content/ # MDX content files
│ └── projects/ # Project content
├── public/ # Static assets
│ ├── audio/ # Music files
│ ├── data/ # Site metadata
│ ├── images/ # Images and artwork
│ └── svg/ # SVG assets
├── src/
│ ├── components/ # UI Components
│ │ ├── assets/ # Asset components
│ │ ├── common/ # Common UI elements
│ │ ├── features/ # Feature components
│ │ │ ├── about/ # About page components
│ │ │ ├── bento/ # Bento grid components
│ │ │ └── projects/ # Project components
│ │ ├── layout/ # Layout components
│ │ ├── mdx/ # MDX rendering components
│ │ ├── shared/ # Shared components
│ │ └── ui/ # Base UI components
│ ├── contexts/ # React context providers
│ ├── hooks/ # Custom React hooks
│ ├── pages/ # Next.js pages
│ ├── styles/ # CSS styles
│ ├── types/ # TypeScript type definitions
│ └── utils/ # Utility functions
└── ... # Config files
- Node.js (v18+ recommended)
- npm or yarn
-
Clone the repository:
git clone https://github.com/lewisgoing/lewisgo.ing.git cd lewisgo.ing
-
Install dependencies:
npm install # or yarn install
-
Set up environment variables: Create a
.env.local
file with the required variables. -
Run the development server:
npm run dev # or yarn dev
-
Open http://localhost:3000 in your browser.
npm run dev
- Start development servernpm run build
- Build for productionnpm run start
- Start production servernpm run lint
- Run ESLintnpm run format
- Format with Prettiernpm run format:check
- Check formatting
- Theme: Edit theme configuration in ThemeProviders.tsx
- Layout: Modify bento grid layouts in
src/utils/bento-layouts.tsx
- Content: Update site metadata in
public/data/siteMetaData.js
This project is optimized for deployment on Vercel.
- Push your code to GitHub
- Import the project in Vercel
- Configure your environment variables
- Deploy!
This project uses the Lanyard API to display real-time Discord status.
Music integration to display currently playing or recently played tracks.
GitHub contribution graph visualization of activity history.
MIT © lewisgoing
Made with ❤️ using Next.js, TypeScript and Tailwind CSS