Your task is to develop a full-stack, multi-page web application MVP named 'Content Idea Generator' using Next.js 14 App Router, Drizzle ORM for database interactions, and Clerk for authentication. The application should allow users to generate unique content ideas and detailed outlines based on their input, save them, view them, edit them, and delete them. Application Structure: Use Next.js 14 with the App Router (all pages and API routes within the `app/` directory). Employ a multi-page structure, not a single-page application. Implement Tailwind CSS for styling. Database Schema (using Drizzle ORM): Create a PostgreSQL database schema using Drizzle ORM for the following entities: 1. `users` table: `id` (String, primary key, Clerk user ID), `email` (String, unique), `name` (String, nullable), `createdAt` (Timestamp, default `now()`), `updatedAt` (Timestamp). 2. `contentIdeas` table: `id` (Serial, primary key), `userId` (String, foreign key referencing `users.id`), `title` (String, not null), `keywords` (String, not null, can store comma-separated keywords), `topic` (String, not null), `contentType` (Enum ['blog', 'social_post', 'video_script'], not null, default 'blog'), `generatedOutline` (Text, not null, can store JSON string or rich text), `createdAt` (Timestamp, default `now()`), `updatedAt` (Timestamp). Authentication: Integrate Clerk for user authentication (sign-up, sign-in, manage user profile). Protect routes that require authentication (e.g., Dashboard, Generate Idea, My Ideas). Pages (React Server Components where appropriate, Client Components for interactivity): 1. `/` (Home Page): Public landing page describing the app, features, pricing (placeholder), and call-to-action for sign-up/sign-in. 2. `/dashboard`: Protected route. Displays a welcome message and quick links to 'Generate New Idea' and 'View My Ideas'. 3. `/generate` (Generate Idea Page): Protected route. Form with input fields: `topic` (text), `keywords` (text), `contentType` (dropdown: Blog, Social Post, Video Script). 'Generate Idea' button that submits data to an API route. Display generated idea and outline after submission. For MVP, the generation logic in the API can be a simple placeholder or a basic string manipulation. 4. `/my-ideas` (My Ideas Page): Protected route. Lists all content ideas generated by the current user. Each item should show `title`, `topic`, `contentType`. Action buttons for each idea: 'View Details', 'Edit', 'Delete'. 5. `/my-ideas/[id]` (Idea Detail Page): Protected route. Displays full details of a specific content idea, including the generated outline. 'Edit' button and 'Delete' button. 6. `/my-ideas/[id]/edit` (Edit Idea Page): Protected route. Form pre-filled with the existing idea details. Allow editing of `title`, `keywords`, `topic`, `contentType`, and `generatedOutline`. 'Save Changes' button. 7. `/sign-in` and `/sign-up`: Clerk's authentication components. API Routes (Next.js API Routes): Implement full CRUD operations for `contentIdeas` using Drizzle ORM. 1. `POST /api/ideas`: Create a new content idea. Input: `topic`, `keywords`, `contentType`. Output: Newly created idea object. Include a placeholder for the AI generation logic here (e.g., a function `generateAiContentOutline(topic, keywords, contentType)` that returns a string). 2. `GET /api/ideas`: Retrieve all content ideas for the authenticated user. Output: Array of idea objects. 3. `GET /api/ideas/[id]`: Retrieve a single content idea by ID for the authenticated user. Output: Single idea object. 4. `PUT /api/ideas/[id]`: Update an existing content idea. Input: `title`, `keywords`, `topic`, `contentType`, `generatedOutline`. Output: Updated idea object. 5. `DELETE /api/ideas/[id]`: Delete a content idea. Output: Success message. Environment Variables: Setup necessary environment variables for Clerk and Drizzle (database connection string). Implementation Details: Ensure proper error handling and loading states. Use `use server` and `use client` directives appropriately. Prioritize a clean, functional MVP over extensive styling, but ensure basic responsiveness. Your goal is to provide a complete, runnable codebase that adheres to these specifications, demonstrating a robust, full-stack application.