Modern, high-performance portfolio website built with Next.js 16, React 19, and TypeScript. Features a creative design with Forest Code color palette, multilingual support (English/Spanish), and full integration with Dev.to blog.
- Forest Code Color Palette: Emerald green, violet, and amber gradients
- Responsive Design: Mobile-first approach (320px β 4K)
- Dark/Light Mode: System preference detection with smooth transitions
- Smooth Animations: Framer Motion with performance optimization
- Gradient Text Effects: Custom gradients without clipping issues
- Languages: English (en) & Spanish (es)
- Library: next-intl 4.12.0 for Server Components
- Auto-detection: Browser language, cookies, URL path
- SEO-friendly:
hreflangtags and locale-specific sitemaps
- Dev.to Integration: Automatic blog post fetching via API
- ISR Caching: 1-hour revalidation for optimal performance
- Local MDX Support: Ready for custom content
- Dynamic Metadata: SEO optimized for each page
- Rate Limiting: In-memory limiter (production-ready)
- Security Headers: CSP, XSS protection, CSRF prevention
- Edge Middleware: Bot protection and DDoS mitigation
- Core Web Vitals: Optimized for 90+ Lighthouse scores
- Hero: Profile photo, typewriter animation (5 roles), social links
- About: Professional stats (15+ years, 500K+ users, Architect, Scalable)
- Experience: Timeline of professional journey
- Projects: Featured work with case studies
- Blog: Dev.to articles integration
- Contact: Secure contact form
- 404 Page: Creative tech-themed animated error page
- Framework: Next.js 16.2.6 (App Router, Turbopack)
- React: React 19.2.4 (Server Components, Suspense)
- Language: TypeScript 5+ (strict mode)
- Runtime: Node.js 20+
- CSS Framework: Tailwind CSS 4 (JIT mode, modern syntax)
- Animations: Framer Motion 12.40.0
- Icons: Lucide React (Terminal, Code, Server, Database, Cpu, etc.)
- Fonts: Geist Sans & Geist Mono (Google Fonts)
- i18n: next-intl 4.12.0
- Timezone: America/Managua
- Locales: en (default), es
- Blog: Dev.to Public API (username: jgomezdev)
- MDX: next-mdx-remote (ready for local content)
- Analytics: Vercel Analytics (privacy-focused)
- Package Manager: pnpm (fast, efficient)
- Linting: ESLint with Next.js config
- Testing: Playwright (E2E, ready for CI/CD)
- Git Remote: origin-ssh (SSH authentication)
juangomezb/
βββ src/
β βββ app/
β β βββ [locale]/ # Localized routes (en, es)
β β β βββ layout.tsx # Root layout with i18n
β β β βββ page.tsx # Home page (all sections)
β β β βββ not-found.tsx # Localized 404 page
β β βββ layout.tsx # Root layout (non-locale routes)
β β βββ not-found.tsx # Root 404 page
β β βββ globals.css # Global styles + Forest Code palette
β β βββ sitemap.ts # Dynamic sitemap generation
β β βββ robots.ts # Dynamic robots.txt
β βββ components/
β β βββ layouts/
β β β βββ Header.tsx # Navigation with locale switcher
β β β βββ Footer.tsx # Footer with social links
β β βββ sections/
β β β βββ HeroSection.tsx # Landing with typewriter
β β β βββ AboutSection.tsx # Stats, skills, expertise
β β β βββ ExperienceSection.tsx # Career timeline
β β β βββ ProjectsSection.tsx # Featured projects
β β β βββ BlogSection.tsx # Dev.to integration
β β β βββ BlogCard.tsx # Blog post card
β β β βββ ContactSection.tsx # Contact form
β β βββ providers/
β β β βββ Providers.tsx # Theme, i18n providers
β β βββ ui/ # Reusable UI components
β βββ lib/
β β βββ api/
β β β βββ devto.ts # Dev.to API client
β β βββ utils/
β β β βββ cn.ts # className utility (clsx + twMerge)
β β β βββ seo.ts # SEO metadata generation
β β βββ security/
β β βββ rate-limiter.ts # In-memory rate limiting
β βββ types/ # TypeScript definitions
βββ messages/
β βββ en.json # English translations
β βββ es.json # Spanish translations
βββ public/
β βββ images/
β β βββ profile_photo.png # Hero profile photo
β βββ resume/
β β βββ juan-gomez-cv-en.pdf
β β βββ juan-gomez-cv-es.pdf
β βββ favicon.svg # Forest Code gradient favicon
βββ middleware.ts # Edge middleware (security, rate limiting)
βββ i18n.ts # next-intl configuration
βββ routing.ts # Locale routing config
βββ next.config.ts # Next.js configuration
βββ tailwind.config.ts # Tailwind CSS configuration
βββ tsconfig.json # TypeScript configuration
βββ package.json # Dependencies
- Node.js 20+ (Download)
- pnpm 8+ (Installation)
# Clone the repository
git clone git@github.com:Juxn89/juangomezb.git
cd juangomezb
# Install dependencies
pnpm install# Start dev server (localhost:3000)
pnpm dev
# Start dev server with Turbopack (faster)
pnpm dev --turboOpen http://localhost:3000 in your browser.
# Create optimized production build
pnpm build
# Preview production build locally
pnpm start# Run Playwright E2E tests
pnpm test
# Run tests in UI mode (visual debugging)
pnpm test:ui
# Run tests in headed mode (browser visible)
pnpm test:headedCreate a .env.local file in the root directory:
# Public
NEXT_PUBLIC_SITE_URL=https://juangomezb.com
# Optional (for production scaling)
UPSTASH_REDIS_REST_URL=your_redis_url
UPSTASH_REDIS_REST_TOKEN=your_redis_tokenConfigure locales in i18n.ts:
export default getRequestConfig(async ({locale}) => ({
messages: (await import(`./messages/${locale}.json`)).default,
timeZone: 'America/Managua',
}));Update username in src/lib/api/devto.ts:
const DEVTO_USERNAME = 'jgomezdev'; // Change to your usernameEdit src/app/globals.css:
:root {
--color-accent-primary: 4 120 87; /* Emerald green */
--color-accent-secondary: 124 58 237; /* Violet */
--color-accent-tertiary: 251 191 36; /* Amber */
}
.dark {
--color-accent-primary: 16 185 129; /* Bright green */
--color-accent-secondary: 167 139 250;/* Soft violet */
--color-accent-tertiary: 252 211 77; /* Golden yellow */
}Edit src/components/sections/AboutSection.tsx:
const skills = [
{name: '.NET', category: 'backend', icon: Code},
{name: 'React', category: 'frontend', icon: Code},
// Add your skills...
];Edit src/components/sections/AboutSection.tsx:
const stats = [
{label: t('stats.experience'), value: '15+'},
{label: t('stats.users'), value: '500K+'},
// Customize your stats...
];-
Push to GitHub:
git push origin-ssh main
-
Import project in Vercel Dashboard
-
Configure:
- Framework: Next.js
- Root Directory:
./ - Build Command:
pnpm build - Output Directory:
.next
-
Add environment variables in Vercel dashboard
-
Deploy! π
# Build
pnpm build
# Deploy .next folder to your hosting provider| Command | Description |
|---|---|
pnpm dev |
Start development server |
pnpm build |
Create production build |
pnpm start |
Start production server |
pnpm lint |
Run ESLint |
pnpm test |
Run Playwright tests |
pnpm test:ui |
Run tests in UI mode |
This project includes comprehensive documentation to preserve all development context:
| Document | Purpose |
|---|---|
| README.md (this file) | Project overview, features, getting started |
| SETUP.md | Step-by-step setup guide after cloning |
| DEVELOPMENT.md | Complete development context, decisions, problems & solutions |
| CONVERSATION_HISTORY.md | Full chronological history of AI-assisted development |
| CHANGELOG.md | Version history and changes |
| AGENTS.md | AI agent guidelines for code generation |
| docs/transcripts/ | Raw conversation transcripts (JSONL format) |
After formatting your laptop or switching machines, you can:
- β Quickly set up the project (SETUP.md)
- β Understand all architectural decisions (DEVELOPMENT.md)
- β See the complete development journey (CONVERSATION_HISTORY.md)
- β Review specific problems and solutions
- β Maintain consistent code quality with AI assistance
- Clone repository:
git clone git@github.com:juxn89/juangomezb.git - Follow SETUP.md checklist
- Run
pnpm install && pnpm dev - Review DEVELOPMENT.md for context
This is a personal portfolio project, but suggestions and bug reports are welcome!
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Juan Gomez
- Portfolio: juangomezb.com
- GitHub: @Juxn89
- LinkedIn: jcgomez89
- Email: gb.jc@outlook.com
- Dev.to: @jgomezdev
- Next.js - The React Framework
- Vercel - Deployment platform
- Tailwind CSS - Utility-first CSS
- Framer Motion - Animation library
- next-intl - Internationalization
- Dev.to - Blogging platform API
- Lucide - Icon library
Built with β€οΈ using Next.js 16 and React 19