192 lines
5.0 KiB
Markdown
192 lines
5.0 KiB
Markdown
---
|
|
description: Initialize a new Next.js + DynamoDB project with Robin's opinionated stack
|
|
---
|
|
|
|
# Robin Project Initialization
|
|
|
|
Initialize a complete, production-ready Next.js 15 application with DynamoDB, following Robin's hyper-opinionated philosophy.
|
|
|
|
## What This Command Does
|
|
|
|
Creates a fully-configured Next.js application with:
|
|
- **Next.js 15** App Router (strict, no Pages Router)
|
|
- **TypeScript** strict mode configured
|
|
- **Tailwind CSS** pre-configured
|
|
- **DynamoDB** single-table schema starter
|
|
- **NextAuth.js v5** authentication setup
|
|
- **Testing** infrastructure (Vitest + Playwright)
|
|
- **SST** deployment configuration
|
|
- **ESLint + Prettier** enforced code style
|
|
- All Robin standards and best practices
|
|
|
|
## Interactive Setup
|
|
|
|
Ask the user for these details:
|
|
|
|
1. **Project Name**
|
|
- Validate: lowercase, alphanumeric with hyphens
|
|
- Example: `my-saas-app`
|
|
|
|
2. **Deployment Target**
|
|
- Options: `aws` (SST) or `vercel`
|
|
- Default: `aws`
|
|
|
|
3. **Include Authentication?**
|
|
- Options: `yes` or `no`
|
|
- Default: `yes`
|
|
- If yes: includes NextAuth.js with Google + GitHub OAuth providers
|
|
|
|
4. **Application Type**
|
|
- Options: `basic` (todo-style app), `saas` (multi-tenant), or `blog` (content platform)
|
|
- Default: `basic`
|
|
- Determines DynamoDB schema template
|
|
|
|
## Implementation Steps
|
|
|
|
1. **Create Project Directory**
|
|
```bash
|
|
mkdir <project-name>
|
|
cd <project-name>
|
|
```
|
|
|
|
2. **Copy Template Files**
|
|
- Use `fullstack-package.json` template
|
|
- Copy `tsconfig.json`, `tailwind.config.ts`, `.gitignore`, `.env.example`
|
|
- Adjust project name in package.json
|
|
|
|
3. **Create Next.js App Structure**
|
|
```
|
|
app/
|
|
├── (auth)/
|
|
│ ├── login/page.tsx
|
|
│ └── register/page.tsx
|
|
├── (dashboard)/
|
|
│ ├── layout.tsx
|
|
│ └── page.tsx
|
|
├── api/
|
|
│ └── health/route.ts
|
|
├── actions.ts
|
|
├── layout.tsx
|
|
└── page.tsx
|
|
```
|
|
|
|
4. **Set Up DynamoDB Configuration**
|
|
- Copy appropriate template from `templates/dynamodb/`
|
|
- Create `lib/db/client.ts` with DynamoDB client
|
|
- Create `lib/db/types.ts` with TypeScript types
|
|
- Create `lib/db/repository.ts` with query methods
|
|
|
|
5. **Configure Authentication** (if selected)
|
|
- Create `lib/auth/config.ts` with NextAuth configuration
|
|
- Create `app/api/auth/[...nextauth]/route.ts`
|
|
- Create `middleware.ts` for route protection
|
|
- Add OAuth provider environment variables to `.env.example`
|
|
|
|
6. **Set Up SST** (if AWS deployment selected)
|
|
- Create `sst.config.ts`
|
|
- Create `stacks/Database.ts` with DynamoDB table
|
|
- Create `stacks/Web.ts` with Next.js site
|
|
- Add SST scripts to package.json
|
|
|
|
7. **Create Component Library**
|
|
```
|
|
components/
|
|
├── ui/
|
|
│ ├── button.tsx
|
|
│ ├── card.tsx
|
|
│ └── input.tsx
|
|
└── features/
|
|
└── (feature-specific components)
|
|
```
|
|
|
|
8. **Set Up Testing**
|
|
- Create `vitest.config.ts`
|
|
- Create `playwright.config.ts`
|
|
- Create `tests/unit/` and `tests/e2e/` directories
|
|
- Add sample tests
|
|
|
|
9. **Initialize Git**
|
|
```bash
|
|
git init
|
|
git add .
|
|
git commit -m "Initial commit: Robin-generated Next.js + DynamoDB app"
|
|
```
|
|
|
|
10. **Install Dependencies**
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
11. **Generate README**
|
|
- Project-specific README with:
|
|
- Setup instructions
|
|
- Environment variable configuration
|
|
- Development commands
|
|
- Deployment instructions
|
|
- Architecture overview
|
|
|
|
## Post-Setup Instructions
|
|
|
|
After scaffolding, provide the user with:
|
|
|
|
```markdown
|
|
✅ Robin has created your Next.js + DynamoDB application!
|
|
|
|
## Next Steps
|
|
|
|
1. Copy `.env.example` to `.env.local` and fill in values:
|
|
```bash
|
|
cp .env.example .env.local
|
|
```
|
|
|
|
2. Configure your AWS credentials (for SST):
|
|
```bash
|
|
aws configure
|
|
```
|
|
|
|
3. Start development server:
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
4. Run tests:
|
|
```bash
|
|
npm test
|
|
```
|
|
|
|
5. Deploy to AWS:
|
|
```bash
|
|
npm run deploy
|
|
```
|
|
|
|
## What Robin Created
|
|
|
|
- ✅ Next.js 15 App Router with TypeScript
|
|
- ✅ DynamoDB single-table schema
|
|
- ✅ NextAuth.js authentication (if selected)
|
|
- ✅ Tailwind CSS styling
|
|
- ✅ SST deployment config (if selected)
|
|
- ✅ Testing infrastructure
|
|
- ✅ Production-ready structure
|
|
|
|
## Robin's Philosophy
|
|
|
|
This project follows Robin's hyper-opinionated approach:
|
|
- Server Components by default
|
|
- Single-table DynamoDB design
|
|
- Test-driven development
|
|
- No technology debates
|
|
- Focus on shipping
|
|
|
|
Start building! Robin has eliminated all the setup decisions for you.
|
|
```
|
|
|
|
## Important Notes
|
|
|
|
- **No Choices During Setup**: Don't ask about styling libraries, state management, or other tech stack decisions. Robin is opinionated.
|
|
- **Enforce Standards**: All generated code must follow Robin's strict TypeScript, ESLint, and Prettier rules.
|
|
- **Complete Setup**: Don't generate partial projects. Everything should be ready to run after `npm install`.
|
|
- **Production-Ready**: Include error handling, loading states, and proper TypeScript types from the start.
|
|
|
|
You ship functional, complete applications. Period.
|