{"id":51069490,"url":"https://github.com/raphaelchpprt/nextjs-saas-journey","last_synced_at":"2026-06-23T09:32:02.445Z","repository":{"id":317348581,"uuid":"1063139439","full_name":"raphaelchpprt/nextjs-saas-journey","owner":"raphaelchpprt","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-30T10:58:40.000Z","size":124,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-30T11:32:58.013Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raphaelchpprt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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":"2025-09-24T08:10:47.000Z","updated_at":"2025-09-30T10:58:44.000Z","dependencies_parsed_at":"2025-09-30T11:33:00.735Z","dependency_job_id":"449e3e79-e746-4f1b-850e-be405bd7d219","html_url":"https://github.com/raphaelchpprt/nextjs-saas-journey","commit_stats":null,"previous_names":["raphaelchpprt/nextjs-saas-journey"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/raphaelchpprt/nextjs-saas-journey","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelchpprt%2Fnextjs-saas-journey","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelchpprt%2Fnextjs-saas-journey/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelchpprt%2Fnextjs-saas-journey/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelchpprt%2Fnextjs-saas-journey/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raphaelchpprt","download_url":"https://codeload.github.com/raphaelchpprt/nextjs-saas-journey/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelchpprt%2Fnextjs-saas-journey/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34684673,"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-23T02:00:07.161Z","response_time":65,"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":[],"created_at":"2026-06-23T09:32:02.357Z","updated_at":"2026-06-23T09:32:02.438Z","avatar_url":"https://github.com/raphaelchpprt.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 Next.js SaaS Journey\n\n\u003c!-- Core Technologies --\u003e\n[![Next.js](https://img.shields.io/badge/Next.js-15.5.4-black?style=for-the-badge\u0026logo=next.js\u0026logoColor=white)](https://nextjs.org/)\n[![React](https://img.shields.io/badge/React-19.1.0-61DAFB?style=for-the-badge\u0026logo=react\u0026logoColor=black)](https://react.dev/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind-4.0-06B6D4?style=for-the-badge\u0026logo=tailwind-css\u0026logoColor=white)](https://tailwindcss.com/)\n\n\u003c!-- Modern Features --\u003e\n[![Server Components](https://img.shields.io/badge/Server%20Components-✓-success?style=flat-square)](https://nextjs.org/docs/app/building-your-application/rendering/server-components)\n[![Server Actions](https://img.shields.io/badge/Server%20Actions-✓-success?style=flat-square)](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations)\n[![App Router](https://img.shields.io/badge/App%20Router-✓-success?style=flat-square)](https://nextjs.org/docs/app)\n[![Zod](https://img.shields.io/badge/Zod-4.1.11-3E67B1?style=flat-square\u0026logo=zod\u0026logoColor=white)](https://zod.dev/)\n\n\u003c!-- Testing \u0026 Quality --\u003e\n[![Tests](https://img.shields.io/badge/tests-45%20passing-success?style=flat-square\u0026logo=jest)](https://github.com/raphaelchpprt/nextjs-saas-journey)\n[![Coverage](https://img.shields.io/badge/coverage-97.29%25-brightgreen?style=flat-square\u0026logo=codecov)](https://github.com/raphaelchpprt/nextjs-saas-journey)\n[![Jest](https://img.shields.io/badge/Jest-29.7-C21325?style=flat-square\u0026logo=jest\u0026logoColor=white)](https://jestjs.io/)\n[![Testing Library](https://img.shields.io/badge/Testing%20Library-16.1-E33332?style=flat-square\u0026logo=testing-library\u0026logoColor=white)](https://testing-library.com/)\n\n\u003c!-- AI \u0026 Developer Experience --\u003e\n[![GitHub Copilot](https://img.shields.io/badge/Built%20with-GitHub%20Copilot-purple?style=flat-square\u0026logo=github)](https://github.com/features/copilot)\n[![ADRs](https://img.shields.io/badge/ADRs-6%20documented-blue?style=flat-square)](./docs/adr/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-✓-FE5196?style=flat-square\u0026logo=conventionalcommits\u0026logoColor=white)](https://www.conventionalcommits.org/)\n\n\n\u003e A comprehensive Next.js 15 learning project built with GitHub Copilot, demonstrating modern patterns, testing strategies, and AI-assisted context engineering.\n\n## 🎯 Main Projects\n\n### 📝 Task Manager\nComplete CRUD application with task management.\n- Add, complete, and delete tasks\n- Filters (All/Active/Completed)\n- Optimistic UI with `useOptimistic`\n- Zod validation\n- 98%+ test coverage\n\n### 📊 Dashboard\nServer/Client architecture demonstration.\n- Async Server Components with data fetching\n- Interactive Client Components\n- Server Actions for mutations\n- Suspense and streaming\n\n### 🎨 Design System\nReusable component library.\n- Card components with CVA\n- React Context API\n- Compound component pattern\n- Variants: default, highlighted, danger\n\n## 🛠️ Tech Stack\n\n| Category | Technologies |\n|-----------|--------------|\n| **Framework** | Next.js 15.5.4 (App Router) |\n| **Language** | TypeScript (strict mode) |\n| **UI** | Tailwind CSS 4.0 + CVA |\n| **Validation** | Zod 4.1.11 |\n| **Testing** | Jest + React Testing Library |\n| **State** | React 19.1.0 (useOptimistic, useTransition) |\n\n## 📚 Demonstrated Concepts\n\n- ✅ **Server Components** vs **Client Components**\n- ✅ **Server Actions** for type-safe mutations\n- ✅ **Optimistic UI** with `useOptimistic`\n- ✅ **Zod Validation** with TypeScript\n- ✅ **Comprehensive Testing** (97%+ coverage)\n- ✅ **Design System** with CVA\n- ✅ **Architecture Decision Records** (ADRs)\n\n## 🤖 Context Engineering Focus\n\nThis project demonstrates **advanced AI collaboration techniques** using GitHub Copilot with structured context management.\n\n### How Context Was Engineered\n\n**Documentation as Persistent Memory**\n- **[6 ADRs](./docs/adr/)**: Technical decisions documented before implementation\n- **Conversation Summaries**: Context preserved across development sessions\n- **Structured Docs**: `DECISIONS.md`, `CHANGELOG.md`, `CONTRIBUTING.md`\n\n**Development Process**\n1. Write ADR with requirements → 2. Build with Copilot → 3. Test (97% coverage) → 4. Update context\n\n**Key Results**\n- 97% test coverage through context clarity\n- Zero breaking changes via full context awareness\n- Consistent architecture maintained by ADRs\n\n\u003e **Learn More**: Explore [ADRs](./docs/adr/) and [commit history](https://github.com/raphaelchpprt/nextjs-saas-journey/commits/main) to see context engineering in practice.\n\n## 🚀 Quick Start\n\n```bash\ngit clone https://github.com/raphaelchpprt/nextjs-saas-journey.git\ncd nextjs-saas-journey\nnpm install\nnpm run dev              # Start development server\nnpm test                 # Run tests (97% coverage)\n```\n\nOpen [http://localhost:3000](http://localhost:3000)\n\n## 📁 Project Structure\n\n```\nsrc/\n├── app/\n│   ├── page.tsx              # Home page\n│   ├── dashboard/            # Dashboard feature\n│   │   ├── page.tsx          # Server Component\n│   │   ├── action.ts         # Server Actions\n│   │   ├── db.ts             # Data layer\n│   │   └── components/       # Feature components\n│   └── tasks/                # Task Manager feature\n│       ├── page.tsx          # Server Component\n│       ├── actions.ts        # Server Actions\n│       ├── db.ts             # In-memory database\n│       ├── types.ts          # Zod schemas + types\n│       └── components/       # Feature components\n├── components/               # Shared components\n│   ├── Card.tsx             # Design system\n│   └── Header.tsx           # Navigation\n└── lib/\n  └── utils.ts             # Utility functions\n\ndocs/\n├── DECISIONS.md             # Quick overview\n└── adr/                     # Detailed ADRs\n  ├── 0001-*.md\n  ├── 0002-*.md\n  └── ...\n```\n\n## 🧪 Testing\n\nThis project maintains **97%+ code coverage**.\n\n```bash\n# Run all tests\nnpm test                 # Watch mode\nnpm test -- --coverage   # Coverage report\n```\n\n**97.29% coverage** • 45 passing tests\n\n📄 [ADR 0005 - Testing Strategy](./docs/adr/0005-testing-strategy.md)\n\n## 📖 Documentation\n\n- **📋 Overview**: [`docs/DECISIONS.md`](./docs/DECISIONS.md)\n- **🏗️ ADRs**: [`docs/adr/`](./docs/adr/) (6 architectural decisions)\n- **🤝 Contributing**: [`CONTRIBUTING.md`](./CONTRIBUTING.md)\n\n---\n\n**Built by [@raphaelchpprt](https://github.com/raphaelchpprt)** • 🔗 [raphaelch.me](https://raphaelch.me)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelchpprt%2Fnextjs-saas-journey","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraphaelchpprt%2Fnextjs-saas-journey","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelchpprt%2Fnextjs-saas-journey/lists"}