mcpField
P
project-structure

project-structure

github.com/elie222Development12.9k37 installsUpdated today
Repository

About project-structure

A project structure guide for contributors to a Next.js application using Turborepo and pnpm workspaces. It describes directory layout, naming conventions, page and component organization, and utility placement.

Key features

  1. 01Maps app and package directories
  2. 02Explains page and component placement
  3. 03Lists file naming conventions
  4. 04Guides utility organization and imports

Use cases

  1. 01Find main app or shared package code
  2. 02Create a page following project conventions
  3. 03Organize reusable utility functions

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/elie222/inbox-zero --skill project-structure

After installing, type/project-structurein Claude Code to confirm it loaded.

Details

From the project README

Project Structure

Main Structure

  • We use Turborepo with pnpm workspaces
  • Main app is in apps/web
  • Packages are in the packages folder
  • Server actions are in apps/web/utils/actions folder
.
├── apps
│   ├── web/             # Main Next.js application
│   │   ├── app/         # Next.js App Router
│   │   │   ├── (app)/   # Main application pages
│   │   │   │   ├── assistant/     # AI assistant feature
│   │   │   │   ├── reply-zero/     # Reply Zero feature
│   │   │   │   ├── settings/       # User settings
│   │   │   │   ├── setup/          # Main onboarding
│   │   │   │   ├── clean/          # Bulk email cleanup
│   │   │   │   ├── smart-categories/ # Smart sender categorization
│   │   │   │   ├── bulk-unsubscribe/ # Bulk unsubscribe
│   │   │   │   ├── stats/          # Email analytics
│   │   │   │   ├── mail/           # Email client (in beta)
│   │   │   │   └── ... (other app routes)
│   │   │   ├── api/    # API Routes
│   │   │   │   ├── knowledge/      # Knowledge base API
│   │   │   │   ├── reply-tracker/  # Reply tracking
│   │   │   │   ├── clean/          # Cleanup API
│   │   │   │   ├── ai/            # AI features API
│   │   │   │   ├── user/          # User management
│   │   │   │   ├── google/        # Google integration
│   │   │   │   ├── auth/          # Authentication
│   │   │   │   └── ... (other APIs)
│   │   │   ├── (landing)/  # Marketing/landing pages
│   │   │   ├── blog/       # Blog pages
│   │   │   ├── layout.tsx  # Root layout
│   │   │   └── ... (other app files)
│   │   ├── utils/       # Utility functions and helpers
│   │   │   ├── actions/    # Server actions
│   │   │   ├── ai/         # AI-related utilities
│   │   │   ├── llms/       # Language model utilities
│   │   │   ├── gmail/      # Gmail integration utilities
│   │   │   ├── redis/      # Redis utilities
│   │   │   ├── user/       # User-related utilities
│   │   │   ├── parse/      # Parsing utilities
│   │   │   ├── queue/      # Queue management
│   │   │   ├── error-messages/  # Error handling
│   │   │   └── *.ts        # Other utility files (auth, email, etc.)
│   │   ├── public/      # Static assets (images, fonts)
│   │   ├── prisma/      # Prisma schema and client
│   │   ├── styles/      # Global CSS styles
│   │   ├── providers/   # React Context providers
│   │   ├── hooks/       # Custom React hooks
│   │   ├── sanity/      # Sanity CMS integration
│   │   ├── __tests__/   # AI test files (Vitest)
│   │   ├── scripts/     # Utility scripts
│   │   ├── store/       # State management
│   │   ├── types/       # TypeScript type definitions
│   │   ├── next.config.mjs
│   │   ├── package.json
│   │   └── ... (config files)
├── packages
    ├── tinybird/
    ├── loops/
    ├── resend/
    ├── tinybird-ai-analytics/
    └── tsconfig/

File Naming and Organization

  • Use kebab case for route directories (e.g., api/hello-world/route)
  • Use PascalCase for components (e.g. components/Button.tsx)
  • Shadcn components are in components/ui
  • All other components are in components/
  • Colocate files in the folder where they're used unless they can be used across the app
  • If a component can be used in many places, place it in the components folder

New Pages

  • Create new pages at: apps/web/app/(app)/PAGE_NAME/page.tsx
  • Components for the page are either in page.tsx or in the apps/web/app/(app)/PAGE_NAME folder
  • Pages are Server components for direct data loading
  • Use swr for data fetching in deeply nested components
  • Components with onClick must be client components with use client directive
  • Server action files must start with use server

Utility Functions

  • Create utility functions in utils/ folder for reusable logic
  • Use lodash utilities for common operations (arrays, objects, strings)
  • Import specific lodash functions to minimize bundle size:
    import groupBy from "lodash/groupBy";
    

Comments

Markdown supported