{"id":51021817,"url":"https://github.com/yahyafakhroji/cv","last_synced_at":"2026-06-21T16:34:37.891Z","repository":{"id":218164830,"uuid":"745764946","full_name":"yahyafakhroji/cv","owner":"yahyafakhroji","description":"Modern CV/Portfolio with 80s synthwave aesthetic built with Next.js 16 and deployed on Cloudflare Workers","archived":false,"fork":false,"pushed_at":"2026-01-26T13:56:09.000Z","size":7634,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-26T21:38:33.523Z","etag":null,"topics":["bun","claude-code","cloudflare-workers","cv","nextjs","opennext","portofolio","react","synthwave","typescript"],"latest_commit_sha":null,"homepage":"https://hiyahya.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yahyafakhroji.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-01-20T04:26:08.000Z","updated_at":"2026-01-26T13:56:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"ea64bba3-1ca4-46e3-b7ad-1a236593293a","html_url":"https://github.com/yahyafakhroji/cv","commit_stats":null,"previous_names":["yahyafakhroji/cv"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yahyafakhroji/cv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahyafakhroji%2Fcv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahyafakhroji%2Fcv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahyafakhroji%2Fcv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahyafakhroji%2Fcv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yahyafakhroji","download_url":"https://codeload.github.com/yahyafakhroji/cv/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahyafakhroji%2Fcv/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34618479,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","claude-code","cloudflare-workers","cv","nextjs","opennext","portofolio","react","synthwave","typescript"],"created_at":"2026-06-21T16:34:37.342Z","updated_at":"2026-06-21T16:34:37.887Z","avatar_url":"https://github.com/yahyafakhroji.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Yahya Fakhroji - CV/Portfolio\n\n![Next.js](https://img.shields.io/badge/Next.js-16-black?logo=next.js)\n![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue?logo=typescript)\n![Bun](https://img.shields.io/badge/Bun-1.2-orange?logo=bun)\n![React](https://img.shields.io/badge/React-19-61dafb?logo=react)\n![Cloudflare](https://img.shields.io/badge/Cloudflare-Workers-F38020?logo=cloudflare)\n![License](https://img.shields.io/badge/license-MIT-green)\n\nA modern, high-performance CV/Portfolio website with a retro 80s synthwave aesthetic. Built with Next.js 16 and deployed on Cloudflare Workers for global edge performance.\n\n**Live Site:** [https://hiyahya.dev](https://hiyahya.dev)\n\n## ✨ Features\n\n### Design \u0026 UX\n\n- **Retro 80s Synthwave Theme** - Neon colors, gradient effects, and nostalgic vibes\n- **Smooth Animations** - Motion (Framer Motion v12) powered interactions\n- **Native Smooth Scrolling** - CSS-based smooth scroll (no JavaScript required)\n- **Parallax Effects** - Sunset sun with scroll-based animations\n- **Responsive Design** - Mobile-first, works perfectly on all devices\n- **Dark Mode** - Synthwave dark theme with neon accents\n\n### Performance\n\n- **Edge Deployment** - Cloudflare Workers with global CDN\n- **Static Generation** - Pre-rendered pages for instant loads\n- **Image Optimization** - Next.js Image component with Cloudflare Images support\n- **Lightweight** - Minimal dependencies, maximum performance\n\n### Developer Experience\n\n- **Single Config File** - Update everything in [`src/data/resume-data.tsx`](./src/data/resume-data.tsx)\n- **TypeScript** - Full type safety throughout\n- **Git Hooks** - Automated code quality checks with Lefthook\n- **Auto Deploy** - Push to `main` branch triggers automatic deployment\n- **Hot Reload** - Fast local development with Next.js Turbopack\n\n## 🚀 Tech Stack\n\n### Core\n\n- **[Next.js 16](https://nextjs.org/)** - React framework with App Router\n- **[React 19](https://react.dev/)** - UI library\n- **[TypeScript 5.9](https://www.typescriptlang.org/)** - Type safety\n\n### Styling\n\n- **[Tailwind CSS 3.4](https://tailwindcss.com/)** - Utility-first CSS\n- **[Radix UI](https://www.radix-ui.com/)** - Headless UI components\n- **Custom Synthwave Theme** - Neon colors, gradients, and animations\n\n### Animation \u0026 Interactions\n\n- **[Motion](https://motion.dev/)** (Framer Motion v12) - Declarative animations\n- **Native CSS** - Smooth scrolling and transitions\n- **Scroll-based animations** - Parallax effects with Motion hooks\n\n### Deployment\n\n- **[@opennextjs/cloudflare](https://opennext.js.org/cloudflare)** - OpenNext adapter for Cloudflare\n- **[Cloudflare Workers](https://workers.cloudflare.com/)** - Edge computing platform\n- **[Wrangler](https://developers.cloudflare.com/workers/wrangler/)** - Cloudflare CLI\n\n### Icons \u0026 UI\n\n- **[Lucide React](https://lucide.dev/)** - Minimal, tree-shakeable icon library\n- **[Radix UI Primitives](https://www.radix-ui.com/)** - Accessible UI components (Dialog, Slot)\n\n### Developer Tools\n\n- **[Lefthook](https://lefthook.dev/)** - Fast Git hooks manager\n- **[ESLint](https://eslint.org/)** - Code linting\n- **[Prettier](https://prettier.io/)** - Code formatting\n- **[TypeScript](https://www.typescriptlang.org/)** - Type checking\n\n## 📦 Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/yahyafakhroji/cv.git\ncd cv\n\n# Install dependencies\nbun install\n```\n\n## 🛠️ Development\n\n```bash\n# Start development server\nbun dev\n\n# Open http://localhost:3000\n```\n\n### Git Hooks\n\nThis project uses Lefthook for automated code quality checks. Hooks are automatically installed on `bun install`.\n\n**Pre-commit checks:**\n\n- ESLint with auto-fix\n- TypeScript type checking\n- No `console.log` in source files\n\n**Pre-push checks:**\n\n- Full build validation\n\n**Commit message validation:**\n\n- Enforces [Conventional Commits](https://www.conventionalcommits.org/) format\n\nSee [docs/LEFTHOOK.md](./docs/LEFTHOOK.md) for detailed documentation.\n\n## 🏗️ Build \u0026 Deploy\n\n### Local Build\n\n```bash\n# Build for production\nnpm run pages:build\n\n# Preview locally\nbun run pages:dev\n```\n\n### Deploy to Cloudflare Workers\n\n```bash\n# Deploy to production\nbun run pages:deploy\n```\n\n### Auto Deploy\n\nPush to `main` branch to automatically trigger deployment via Cloudflare Workers integration with GitHub.\n\n## ⚙️ Configuration\n\n### Update Your Information\n\nEdit [`src/data/resume-data.tsx`](./src/data/resume-data.tsx) to customize:\n\n- Personal information\n- Work experience\n- Projects\n- Skills\n- Education\n- Contact details\n\n### Custom Domain\n\nUpdate [`wrangler.toml`](./wrangler.toml) to add your custom domain:\n\n```toml\n[[routes]]\npattern = \"yourdomain.com\"\ncustom_domain = true\n```\n\n### Theme Customization\n\nModify colors and styles in:\n\n- [`src/app/globals.css`](./src/app/globals.css) - CSS variables and theme\n- [`tailwind.config.js`](./tailwind.config.js) - Tailwind configuration\n\n## 📁 Project Structure\n\n```\ncv/\n├── src/\n│   ├── app/                    # Next.js App Router\n│   │   ├── layout.tsx         # Root layout\n│   │   ├── page.tsx           # Home page\n│   │   └── globals.css        # Global styles \u0026 theme\n│   ├── components/\n│   │   ├── sections/          # Page sections\n│   │   │   ├── hero.tsx\n│   │   │   ├── about.tsx\n│   │   │   ├── experience.tsx\n│   │   │   ├── projects.tsx\n│   │   │   └── skills.tsx\n│   │   ├── ui/                # Reusable UI components\n│   │   ├── animations/        # Animation components\n│   │   └── providers/         # React context providers\n│   ├── data/\n│   │   └── resume-data.tsx    # 📝 Edit this file!\n│   ├── hooks/                 # Custom React hooks\n│   └── lib/                   # Utility functions\n├── open-next.config.ts        # OpenNext configuration\n├── wrangler.toml              # Cloudflare Workers config\n└── package.json               # Dependencies \u0026 scripts\n```\n\n## 🎨 Sections\n\nThe portfolio includes these sections:\n\n- **Hero** - Introduction with animated text\n- **About** - Personal summary\n- **Experience** - Work history timeline\n- **Projects** - Portfolio showcase\n- **Skills** - Technical skills grid\n- **Contact** - Get in touch section\n- **Footer** - Social links\n\n## 🔧 Scripts\n\n```bash\n# Development\nbun dev                  # Start dev server\nbun run build            # Build Next.js app\n\n# Cloudflare Deployment\nbun run pages:build      # Build with OpenNext\nbun run pages:dev        # Preview locally\nbun run pages:deploy     # Deploy to Cloudflare\n\n# Code Quality\nbun run lint             # Run ESLint\n```\n\n## 📝 License\n\n[MIT](https://choosealicense.com/licenses/mit/)\n\n## 🙏 Credits\n\n- Developed with: [Claude Code](https://claude.ai) - AI-powered coding assistant\n- Logo/Favicon: Generated with [Google Gemini Nano](https://deepmind.google/technologies/gemini/nano/)\n- Deployed with: [OpenNext Cloudflare](https://opennext.js.org/cloudflare)\n- Hosting: [Cloudflare Workers](https://workers.cloudflare.com/)\n\n## 📧 Contact\n\n**Yahya Fakhroji**\n\n- Website: [hiyahya.dev](https://hiyahya.dev)\n- GitHub: [@yahyafakhroji](https://github.com/yahyafakhroji)\n- LinkedIn: [yahya-fakhroji](https://www.linkedin.com/in/yahya-fakhroji/)\n\n---\n\nBuilt with ❤️ using Next.js and Claude Code\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyahyafakhroji%2Fcv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyahyafakhroji%2Fcv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyahyafakhroji%2Fcv/lists"}