Production-ready portfolio showcasing senior full-stack development skills with advanced AI integration
- AI Chat System: Interactive assistant with 10 different AI models and 6 personality tones
- Modern Stack: Next.js 15, React 19, TypeScript, Tailwind CSS 4
- Production Ready: 100% TypeScript, comprehensive ESLint rules, optimized build
- High Performance: <300kB bundle, fast builds with Bun, optimized for production
- Advanced UI: Custom design system with rainbow gradients, dark/light themes, responsive design
- Clean Architecture: Well-documented, type-safe, modular component structure
- Customizable: Fork and adapt for your own portfolio
git clone https://github.com/techfreaque/my-next-js-page
cd my-next-js-page
bun install
bun dev
Note: This project uses Bun for optimal performance. You can also use
npm
,pnpm
,yarn
etc. if preferred.
To customize for your own portfolio:
- Fork this repository
- Edit files in
src/me/
with your information - Replace images in
public/
andsrc/
- Add your
OPENROUTER_API_KEY
to.env.local
- Customize AI models and tones in
src/utils/
- Deploy with Docker or Vercel
- Next.js 15 - Awesome DX, React SSR and client hydration for a fast site and built in api server
- React 19 - Latest features with concurrent rendering and compiler
- TypeScript 5.9 - Strict type safety throughout
- Tailwind CSS 4 - Modern utility-first styling with CSS variables
- Bun - Ultra-fast JavaScript runtime and package manager
- OpenRouter API - Access to 10 selected AI models from different providers
- AI SDK - Vercel AI SDK for the backend with custom React hooks for streaming
- Multiple Providers - OpenAI, Google, Mistral, DeepSeek, X-AI, Alibaba, MoonshotAI
- Tone System - 6 different AI personalities (Professional, Pirate, Enthusiastic, Zen, Detective, Shakespearean)
- Cost Optimization - Mix of cheap premium and free models, because why not
- Real-time Streaming - Live response streaming with abort controllers
- Local Storage as DB - Input and messages are always in sync with with local storage. For this purpose its perfectly fine, as I want to avoid a DB for this project.
- UI Components - Shared UI library with consistent styling, some based on shadcn
- Rainbow Gradients - Dynamic color system with CSS variables
- Dark/Light Themes - Complete theme system with next-themes
- Responsive Design - Optimal design for any screen size with tailwind breakpoints
- Animations - Smooth transitions and hover effects
- ESLint - Comprehensive linting rules
- TypeScript Strict Mode - Maximum type safety
- Bundle Size - <300kB optimized production build
- Build Performance - ~9 second builds with Bun
- Documentation - JSDoc comments throughout codebase
src/
βββ app/ # Next.js App Router
β βββ api/chat/ # AI chat API endpoint with streaming
β βββ globals.css # Global styles and CSS variables
β βββ layout.tsx # Root layout with theme provider
β βββ page.tsx # Main portfolio page
βββ components/ # React components
β βββ ai-chat-section/ # Complete AI chat system
β β βββ components/ # Chat UI components
β β βββ hooks/ # Custom React hooks
β β βββ AIChatContext.tsx # Chat state management
β βββ navbar/ # Navigation with responsive design
β βββ footer/ # Footer with social links
β βββ loading-cat/ # Animated loading component
β βββ ui/ # Shared UI component library
β βββ [section].tsx # other portfolio sections
βββ lib/ # Core utilities
β βββ constants.ts # App constants
β βββ rainbow-style.ts # Rainbow gradient system
β βββ api-validation.ts # Zod schemas
β βββ utils.ts # Helper functions
βββ me/ # Personal info (customize this!)
β βββ about-me.tsx # Personal details & story
β βββ projects.tsx # Portfolio projects
β βββ resume.tsx # Work experience & education
β βββ metadata.ts # SEO metadata
βββ utils/ # AI system configuration
βββ model-config.ts # AI model definitions
βββ tone-config.ts # Personality configurations
βββ system-prompt.ts # AI system prompts
All personal data is centralized in src/me/
:
about-me.tsx
- Contact details, personal story, social linksprojects.tsx
- Portfolio projects with descriptions and tech stacksresume.tsx
- Work experience, education, and skills organized by learning journeymetadata.ts
- SEO metadata and site configuration
Customize the AI chat system in src/utils/
:
Add new AI models in model-config.ts
:
{
id: ModelId.YOUR_MODEL,
name: "Your Model",
provider: "Provider",
description: "Model description",
parameterCount: 70,
contextWindow: 100000,
icon: "π€", // or React component
openRouterModel: "provider/model-name",
}
Add new personality tones in tone-config.ts
:
{
id: ToneId.YOUR_TONE,
name: "Your Tone",
description: "Tone description",
systemPromptModifier: "Instructions for AI behavior...",
emoji: "π",
}
- Colors: Modify CSS variables in
src/app/globals.css
- Components: Customize shared components in
src/components/ui/
- Themes: Extend the theme system in the globals.css file
- Animations: Adjust rainbow gradients in
src/lib/rainbow-style.ts
# Development with Turbo (recommended)
bun dev
# Production build
bun run build
# Start production server
bun start
# Lint and fix code issues
bun lint
# Type checking
bun typecheck
- Use
bun dev
for the fastest development experience with Turbo - Run
bun run build
before committing for typecheck and lint - The project uses strict TypeScript - all types must be properly defined
- Components are organized by feature with shared UI components in
src/components/ui/
- Push to GitHub
- Connect to Vercel
- Add
OPENROUTER_API_KEY
environment variable - Deploy!
docker build -t portfolio .
docker run -p 3000:3000 -e OPENROUTER_API_KEY=your_key portfolio
GPL-V3 License - see LICENSE for details.
Built with β€οΈ and lots of β by Max Brandstaetter
A production-ready portfolio template for the modern web
β Star this repo if it helped you! β