You are an expert full-stack developer. Create a complete, functional MVP for a subscription management and unauthorized charge detection application named 'Subscription Shield' using Next.js 14 App Router, Drizzle ORM with PostgreSQL, and Tailwind CSS. The application should be multi-page and include full CRUD functionalities for key features.Database Schema (Drizzle ORM):1. `users` table: `id` (uuid, primary), `email` (string, unique), `password_hash` (string), `created_at` (timestamp, default now), `updated_at` (timestamp, default now, on update now).2. `bank_accounts` table: `id` (uuid, primary), `user_id` (uuid, foreign key to users.id), `bank_name` (string), `last_4_digits` (string), `access_token_encrypted` (string, for financial API access, e.g., Plaid - mock for MVP), `status` (enum: 'connected', 'disconnected'), `created_at` (timestamp, default now), `updated_at` (timestamp, default now, on update now).3. `transactions` table: `id` (uuid, primary), `user_id` (uuid, foreign key to users.id), `bank_account_id` (uuid, foreign key to bank_accounts.id), `description` (string), `amount` (numeric), `date` (date), `type` (enum: 'debit', 'credit'), `category` (string, nullable), `is_recurring` (boolean, default false), `linked_subscription_id` (uuid, nullable, foreign key to subscriptions.id), `created_at` (timestamp, default now).4. `subscriptions` table: `id` (uuid, primary), `user_id` (uuid, foreign key to users.id), `merchant_name` (string), `amount` (numeric), `frequency` (enum: 'monthly', 'annually', 'weekly', 'quarterly', 'one-time'), `last_charged_date` (date), `next_charge_date` (date, nullable), `status` (enum: 'active', 'cancelled', 'disputed', 'unknown'), `notes` (text, nullable), `identified_by` (enum: 'manual', 'api_detected'), `is_authorized` (boolean, default true), `created_at` (timestamp, default now), `updated_at` (timestamp, default now, on update now).5. `disputes` table: `id` (uuid, primary), `user_id` (uuid, foreign key to users.id), `subscription_id` (uuid, foreign key to subscriptions.id), `transaction_id` (uuid, foreign key to transactions.id), `reason` (text), `status` (enum: 'pending_review', 'submitted_to_bank', 'resolved_refunded', 'resolved_rejected', 'cancelled'), `evidence_details` (jsonb, nullable), `created_at` (timestamp, default now), `updated_at` (timestamp, default now, on update now).Application Features & Pages:1. **Authentication (`/auth/login`, `/auth/register`):** User registration and login using email/password. Implement secure password hashing (e.g., bcrypt). Session management (e.g., using NextAuth.js or custom JWT).2. **Dashboard (`/`):** Overview of total active subscriptions. Summary of recent transactions from linked accounts. Highlights of potentially unauthorized or unknown charges. Quick links to manage subscriptions and disputes.3. **Bank Account Integration (`/settings/bank-accounts`):** Allows users to link their bank accounts. For MVP, simulate a connection process (e.g., 'Connect with Plaid' button that confirms a mock connection and fetches mock transaction data). List connected bank accounts with their status. CRUD operations for bank accounts (Add, View, (Simulate) Disconnect).4. **Subscriptions Management (`/subscriptions`):** List all active, cancelled, and disputed subscriptions. Filters by status, merchant, and frequency. Ability to manually add a subscription (Create). Clicking a subscription navigates to `/subscriptions/[id]`.5. **Subscription Details (`/subscriptions/[id]`):** Display all details of a specific subscription. Allow editing subscription details (Update). Option to mark a subscription as cancelled or disputed (Update). Button to delete a subscription (Delete - soft delete by status update preferred).6. **Transactions Viewer (`/transactions`):** List all transactions fetched from linked bank accounts (mocked for MVP). Filter transactions by date, amount, description, and linked subscription. Allow users to manually link an unlinked transaction to an existing subscription. Flag transactions that appear to be recurring but are not linked to an identified subscription.7. **Dispute Management (`/disputes`, `/disputes/[id]`):** List all ongoing and past disputes. Ability to initiate a new dispute for a specific subscription/transaction (Create). This should include a form to select reason, add evidence details. Display details of a specific dispute, including its status (Read). Allow updating dispute status (e.g., 'Submitted to Bank') or adding more evidence (Update).Technical Requirements:1. **Next.js 14 App Router:** All pages and API routes must reside within the `app/` directory.2. **Drizzle ORM:** Use for all database interactions.3. **PostgreSQL:** Database for development (can use `docker-compose` or `neon.tech` for setup). Provide migration files.4. **API Routes:** Create dedicated `route.ts` files for each CRUD operation (e.g., `app/api/subscriptions/route.ts` for GET/POST and `app/api/subscriptions/[id]/route.ts` for GET/PUT/DELETE).5. **Full CRUD:** Implement Create, Read, Update, Delete for `subscriptions`, `disputes`, and `bank_accounts`. `transactions` will be primarily Read-only from the API, with an update to link to a subscription.6. **User Interface:** Use Tailwind CSS for all styling.7. **Error Handling:** Basic error handling for API routes and UI.8. **Security:** Basic security considerations for authentication (password hashing, session management).9. **State Management:** Use React Context API or Zustand/Jotai for client-side state, if necessary, otherwise rely on server components and server actions where appropriate.Development Steps for AI:1. Initialize a new Next.js project with TypeScript and Tailwind CSS.2. Set up Drizzle ORM with PostgreSQL, define the schema, and create initial migration files.3. Implement authentication (NextAuth.js recommended for ease).4. Develop API routes for all CRUD operations.5. Create server and client components for each page, i