Project Structure Patterns

+15 Mana ✨

As projects grow, structure becomes crucial.

Feature-Based Structure

src/
ā”œā”€ā”€ features/
│   ā”œā”€ā”€ auth/
│   │   ā”œā”€ā”€ components/
│   │   │   ā”œā”€ā”€ LoginForm.svelte
│   │   │   └── SignupForm.svelte
│   │   ā”œā”€ā”€ stores/
│   │   │   └── auth.svelte.js
│   │   └── api/
│   │       └── auth.js
│   ā”œā”€ā”€ cart/
│   │   ā”œā”€ā”€ components/
│   │   ā”œā”€ā”€ stores/
│   │   └── api/
│   └── products/
ā”œā”€ā”€ lib/
│   ā”œā”€ā”€ components/         # Shared UI components
│   │   ā”œā”€ā”€ Button.svelte
│   │   └── Modal.svelte
│   ā”œā”€ā”€ utils/              # Utilities
│   │   └── format.js
│   └── stores/             # Global stores
│       └── theme.svelte.js
└── routes/
    └── +layout.svelte

SvelteKit Conventions

src/
ā”œā”€ā”€ lib/                    # $lib alias
│   ā”œā”€ā”€ components/
│   │   ā”œā”€ā”€ ui/             # Generic UI
│   │   └── domain/         # Business-specific
│   ā”œā”€ā”€ server/             # Server-only code
│   │   └── db.js
│   └── stores/
ā”œā”€ā”€ routes/
│   ā”œā”€ā”€ (marketing)/        # Layout group
│   │   ā”œā”€ā”€ +layout.svelte
│   │   └── pricing/
│   ā”œā”€ā”€ (app)/              # App layout group
│   │   ā”œā”€ā”€ +layout.svelte
│   │   └── dashboard/
│   └── api/                # API routes
│       └── users/
│           └── +server.js
ā”œā”€ā”€ hooks.server.js
└── app.html

Component Organization

lib/components/
ā”œā”€ā”€ ui/                     # Primitive UI components
│   ā”œā”€ā”€ Button/
│   │   ā”œā”€ā”€ Button.svelte
│   │   ā”œā”€ā”€ Button.test.js
│   │   └── index.js
│   ā”œā”€ā”€ Input/
│   └── Modal/
ā”œā”€ā”€ forms/                  # Form-related
│   ā”œā”€ā”€ TextField.svelte
│   └── Select.svelte
ā”œā”€ā”€ layout/                 # Layout components
│   ā”œā”€ā”€ Header.svelte
│   └── Sidebar.svelte
└── domain/                 # Business components
    ā”œā”€ā”€ ProductCard.svelte
    └── UserAvatar.svelte

Barrel Exports

javascript
// lib/components/ui/index.js
export { default as Button } from './Button/Button.svelte';
export { default as Input } from './Input/Input.svelte';
export { default as Modal } from './Modal/Modal.svelte';

// Usage
import { Button, Input, Modal } from '$lib/components/ui';

šŸ“– SvelteKit project structure

āœ“ Completed