Project Structure & Organization โ
Comprehensive guide for organizing TachUI projects as they scale from small prototypes to large enterprise applications.
๐ฏ Organization Principles โ
Scalability First โ
Structure your project to grow gracefully from a few components to hundreds, supporting multiple developers and complex business domains.
Clear Boundaries โ
Establish clear separation between:
- Shared code vs feature-specific code
- Business logic vs presentation logic
- Configuration vs implementation
- Tests vs source code
Developer Experience โ
Optimize for:
- Easy navigation - find files quickly
- Consistent patterns - predictable locations
- Minimal cognitive load - clear naming and structure
- Team collaboration - avoid conflicts and confusion
๐ Project Structures by Size โ
Small Projects (1-10 Components) โ
When to use: MVPs, prototypes, personal projects, simple tools
my-small-app/
โโโ src/
โ โโโ components/ # All components in one place
โ โ โโโ TaskItem.js
โ โ โโโ TaskList.js
โ โ โโโ AddTaskForm.js
โ โ โโโ TaskStats.js
โ โโโ utils/ # Helper functions
โ โ โโโ storage.js
โ โ โโโ validation.js
โ โ โโโ api.js
โ โโโ styles/ # Global styles
โ โ โโโ main.css
โ โ โโโ components.css
โ โโโ libs/tachui/ # TachUI framework
โ โโโ main.js # App entry point
โโโ public/ # Static assets
โโโ vite.config.js # Build configuration
โโโ package.json # DependenciesKey characteristics:
- โ Flat structure - easy to navigate
- โ Single responsibility - one file per component
- โ Minimal overhead - no complex organization
- โ Quick setup - get started immediately
Medium Projects (10-50 Components) โ
When to use: Production apps, team projects, complex features
my-medium-app/
โโโ src/
โ โโโ components/
โ โ โโโ common/ # Reusable UI components
โ โ โ โโโ Button/
โ โ โ โ โโโ index.js
โ โ โ โ โโโ Button.css
โ โ โ โ โโโ Button.test.js
โ โ โ โโโ Modal/
โ โ โ โ โโโ index.js
โ โ โ โ โโโ Modal.css
โ โ โ โ โโโ ModalProvider.js
โ โ โ โโโ Form/
โ โ โ โ โโโ Input.js
โ โ โ โ โโโ TextArea.js
โ โ โ โ โโโ Select.js
โ โ โ โโโ index.js # Export all common components
โ โ โโโ layout/ # Layout components
โ โ โ โโโ Header/
โ โ โ โ โโโ index.js
โ โ โ โ โโโ Header.css
โ โ โ โ โโโ Navigation.js
โ โ โ โโโ Sidebar/
โ โ โ โโโ Footer/
โ โ โ โโโ AppLayout.js
โ โ โโโ feature/ # Feature-specific components
โ โ โโโ tasks/
โ โ โ โโโ TaskItem.js
โ โ โ โโโ TaskList.js
โ โ โ โโโ AddTaskForm.js
โ โ โ โโโ TaskFilters.js
โ โ โ โโโ TaskStats.js
โ โ โโโ user/
โ โ โ โโโ UserProfile.js
โ โ โ โโโ UserSettings.js
โ โ โ โโโ UserAvatar.js
โ โ โ โโโ UserCard.js
โ โ โโโ dashboard/
โ โ โโโ StatCards.js
โ โ โโโ ActivityFeed.js
โ โ โโโ QuickActions.js
โ โ โโโ RecentActivity.js
โ โโโ stores/ # State management
โ โ โโโ taskStore.js
โ โ โโโ userStore.js
โ โ โโโ appStore.js
โ โ โโโ index.js # Store composition
โ โโโ services/ # External integrations
โ โ โโโ api/
โ โ โ โโโ tasks.js
โ โ โ โโโ users.js
โ โ โ โโโ auth.js
โ โ โ โโโ index.js
โ โ โโโ storage.js
โ โ โโโ notifications.js
โ โ โโโ analytics.js
โ โโโ utils/ # Helper functions
โ โ โโโ formatters.js
โ โ โโโ validators.js
โ โ โโโ constants.js
โ โ โโโ helpers.js
โ โ โโโ dateUtils.js
โ โโโ hooks/ # Custom TachUI hooks
โ โ โโโ useLocalStorage.js
โ โ โโโ useDebounce.js
โ โ โโโ useApi.js
โ โ โโโ useMediaQuery.js
โ โโโ styles/ # Styling system
โ โ โโโ globals.css # Global styles
โ โ โโโ variables.css # CSS custom properties
โ โ โโโ components.css # Component styles
โ โ โโโ utilities.css # Utility classes
โ โ โโโ themes.css # Theme definitions
โ โโโ assets/ # Static assets
โ โ โโโ images/
โ โ โ โโโ logos/
โ โ โ โโโ icons/
โ โ โ โโโ backgrounds/
โ โ โโโ fonts/
โ โ โโโ data/ # Static data files
โ โโโ types/ # TypeScript definitions
โ โ โโโ api.ts
โ โ โโโ components.ts
โ โ โโโ store.ts
โ โ โโโ global.d.ts
โ โโโ libs/tachui/
โ โโโ main.js
โโโ public/
โโโ tests/
โ โโโ components/
โ โโโ stores/
โ โโโ utils/
โ โโโ integration/
โโโ docs/ # Project documentation
โ โโโ README.md
โ โโโ CONTRIBUTING.md
โ โโโ DEPLOYMENT.md
โโโ scripts/ # Build/deployment scripts
โโโ build.js
โโโ deploy.jsKey characteristics:
- โ Feature grouping - related code together
- โ Shared components - reusable UI library
- โ Clear separation - business vs presentation logic
- โ Testing structure - mirrors source organization
Large Projects (50+ Components) โ
When to use: Enterprise applications, multiple teams, complex business domains
my-large-app/
โโโ src/
โ โโโ app/ # Application core
โ โ โโโ App.js # Root component
โ โ โโโ router.js # Route configuration
โ โ โโโ providers.js # Context providers
โ โ โโโ constants.js # App-wide constants
โ โ โโโ config.js # Environment configuration
โ โ โโโ middleware.js # Global middleware
โ โโโ shared/ # Shared across all domains
โ โ โโโ components/
โ โ โ โโโ ui/ # Basic UI primitives
โ โ โ โ โโโ Button/
โ โ โ โ โ โโโ index.js
โ โ โ โ โ โโโ Button.css
โ โ โ โ โ โโโ Button.test.js
โ โ โ โ โ โโโ variants.js
โ โ โ โ โ โโโ README.md
โ โ โ โ โโโ Input/
โ โ โ โ โโโ Modal/
โ โ โ โ โโโ Card/
โ โ โ โ โโโ Table/
โ โ โ โ โโโ index.js
โ โ โ โโโ layout/ # Layout components
โ โ โ โ โโโ AppLayout/
โ โ โ โ โโโ PageLayout/
โ โ โ โ โโโ SectionLayout/
โ โ โ โ โโโ GridLayout/
โ โ โ โ โโโ FlexLayout/
โ โ โ โโโ navigation/ # Navigation components
โ โ โ โ โโโ Navbar/
โ โ โ โ โโโ Sidebar/
โ โ โ โ โโโ Breadcrumbs/
โ โ โ โ โโโ Pagination/
โ โ โ โ โโโ Tabs/
โ โ โ โโโ feedback/ # User feedback
โ โ โ โ โโโ Toast/
โ โ โ โ โโโ Loading/
โ โ โ โ โโโ ErrorBoundary/
โ โ โ โ โโโ ConfirmDialog/
โ โ โ โ โโโ ProgressBar/
โ โ โ โโโ forms/ # Form components
โ โ โ โโโ FormField/
โ โ โ โโโ FormGroup/
โ โ โ โโโ ValidationMessage/
โ โ โ โโโ FormProvider/
โ โ โโโ hooks/ # Reusable hooks
โ โ โ โโโ data/ # Data fetching hooks
โ โ โ โ โโโ useApi.js
โ โ โ โ โโโ useQuery.js
โ โ โ โ โโโ useMutation.js
โ โ โ โโโ ui/ # UI interaction hooks
โ โ โ โ โโโ useMediaQuery.js
โ โ โ โ โโโ useClickOutside.js
โ โ โ โ โโโ useKeyboard.js
โ โ โ โโโ state/ # State management hooks
โ โ โ โ โโโ useLocalStorage.js
โ โ โ โ โโโ useSessionStorage.js
โ โ โ โ โโโ useDebounce.js
โ โ โ โโโ utils/ # Utility hooks
โ โ โ โโโ useAsync.js
โ โ โ โโโ useToggle.js
โ โ โ โโโ useCounter.js
โ โ โโโ utils/ # Utility functions
โ โ โ โโโ api/
โ โ โ โ โโโ client.js
โ โ โ โ โโโ interceptors.js
โ โ โ โ โโโ endpoints.js
โ โ โ โโโ data/
โ โ โ โ โโโ formatters.js
โ โ โ โ โโโ validators.js
โ โ โ โ โโโ transformers.js
โ โ โ โ โโโ normalizers.js
โ โ โ โโโ dom/
โ โ โ โ โโโ events.js
โ โ โ โ โโโ scroll.js
โ โ โ โ โโโ focus.js
โ โ โ โโโ storage/
โ โ โ โ โโโ localStorage.js
โ โ โ โ โโโ sessionStorage.js
โ โ โ โ โโโ indexedDB.js
โ โ โ โโโ constants.js
โ โ โ โโโ helpers.js
โ โ โ โโโ math.js
โ โ โโโ types/ # Shared TypeScript types
โ โ โ โโโ api.ts
โ โ โ โโโ common.ts
โ โ โ โโโ components.ts
โ โ โ โโโ events.ts
โ โ โ โโโ utilities.ts
โ โ โโโ styles/ # Global design system
โ โ โ โโโ foundations/
โ โ โ โ โโโ colors.css
โ โ โ โ โโโ typography.css
โ โ โ โ โโโ spacing.css
โ โ โ โ โโโ shadows.css
โ โ โ โ โโโ breakpoints.css
โ โ โ โโโ components/
โ โ โ โ โโโ buttons.css
โ โ โ โ โโโ forms.css
โ โ โ โ โโโ navigation.css
โ โ โ โ โโโ feedback.css
โ โ โ โโโ utilities/
โ โ โ โ โโโ layout.css
โ โ โ โ โโโ text.css
โ โ โ โ โโโ spacing.css
โ โ โ โ โโโ visibility.css
โ โ โ โโโ themes/
โ โ โ โ โโโ light.css
โ โ โ โ โโโ dark.css
โ โ โ โ โโโ high-contrast.css
โ โ โ โโโ globals.css
โ โ โ โโโ index.css
โ โ โโโ assets/ # Shared static assets
โ โ โโโ images/
โ โ โโโ icons/
โ โ โโโ fonts/
โ โ โโโ data/
โ โโโ domains/ # Business domains
โ โ โโโ authentication/
โ โ โ โโโ components/
โ โ โ โ โโโ LoginForm/
โ โ โ โ โโโ SignupForm/
โ โ โ โ โโโ ForgotPassword/
โ โ โ โ โโโ ResetPassword/
โ โ โ โ โโโ AuthGuard/
โ โ โ โโโ stores/
โ โ โ โ โโโ authStore.js
โ โ โ โ โโโ userStore.js
โ โ โ โ โโโ sessionStore.js
โ โ โ โโโ services/
โ โ โ โ โโโ authApi.js
โ โ โ โ โโโ tokenService.js
โ โ โ โ โโโ oauth.js
โ โ โ โโโ utils/
โ โ โ โ โโโ validation.js
โ โ โ โ โโโ tokens.js
โ โ โ โ โโโ permissions.js
โ โ โ โโโ types/
โ โ โ โ โโโ auth.ts
โ โ โ โโโ constants.js
โ โ โ โโโ index.js
โ โ โโโ tasks/
โ โ โ โโโ components/
โ โ โ โ โโโ TaskList/
โ โ โ โ โโโ TaskItem/
โ โ โ โ โโโ TaskForm/
โ โ โ โ โโโ TaskFilters/
โ โ โ โ โโโ TaskStats/
โ โ โ โ โโโ TaskComments/
โ โ โ โ โโโ TaskHistory/
โ โ โ โโโ stores/
โ โ โ โ โโโ taskStore.js
โ โ โ โ โโโ taskFilters.js
โ โ โ โ โโโ taskCategories.js
โ โ โ โ โโโ taskSearch.js
โ โ โ โโโ services/
โ โ โ โ โโโ taskApi.js
โ โ โ โ โโโ taskSync.js
โ โ โ โ โโโ taskExport.js
โ โ โ โโโ utils/
โ โ โ โ โโโ taskHelpers.js
โ โ โ โ โโโ taskValidation.js
โ โ โ โ โโโ taskFormatters.js
โ โ โ โ โโโ taskSorting.js
โ โ โ โโโ types/
โ โ โ โ โโโ task.ts
โ โ โ โโโ constants.js
โ โ โ โโโ index.js
โ โ โโโ users/
โ โ โ โโโ components/
โ โ โ โ โโโ UserProfile/
โ โ โ โ โโโ UserSettings/
โ โ โ โ โโโ UserList/
โ โ โ โ โโโ UserCard/
โ โ โ โ โโโ UserAvatar/
โ โ โ โ โโโ UserSearch/
โ โ โ โโโ stores/
โ โ โ โ โโโ userStore.js
โ โ โ โ โโโ profileStore.js
โ โ โ โ โโโ preferencesStore.js
โ โ โ โโโ services/
โ โ โ โ โโโ userApi.js
โ โ โ โ โโโ profileApi.js
โ โ โ โ โโโ avatarUpload.js
โ โ โ โโโ utils/
โ โ โ โ โโโ userValidation.js
โ โ โ โ โโโ userFormatters.js
โ โ โ โ โโโ userHelpers.js
โ โ โ โโโ types/
โ โ โ โ โโโ user.ts
โ โ โ โโโ index.js
โ โ โโโ dashboard/
โ โ โ โโโ components/
โ โ โ โ โโโ DashboardLayout/
โ โ โ โ โโโ StatCard/
โ โ โ โ โโโ ChartWidget/
โ โ โ โ โโโ ActivityFeed/
โ โ โ โ โโโ QuickActions/
โ โ โ โ โโโ RecentItems/
โ โ โ โโโ stores/
โ โ โ โ โโโ dashboardStore.js
โ โ โ โ โโโ widgetStore.js
โ โ โ โ โโโ metricsStore.js
โ โ โ โโโ services/
โ โ โ โ โโโ analyticsApi.js
โ โ โ โ โโโ metricsApi.js
โ โ โ โ โโโ exportService.js
โ โ โ โโโ utils/
โ โ โ โโโ chartHelpers.js
โ โ โ โโโ dataProcessing.js
โ โ โ โโโ formatters.js
โ โ โโโ reports/
โ โ โโโ components/
โ โ โโโ stores/
โ โ โโโ services/
โ โ โโโ utils/
โ โโโ pages/ # Page-level route components
โ โ โโโ HomePage/
โ โ โ โโโ index.js
โ โ โ โโโ HomePage.css
โ โ โ โโโ sections/
โ โ โ โโโ Hero.js
โ โ โ โโโ Features.js
โ โ โ โโโ CTA.js
โ โ โโโ TasksPage/
โ โ โ โโโ index.js
โ โ โ โโโ TasksPage.css
โ โ โ โโโ sections/
โ โ โโโ ProfilePage/
โ โ โโโ SettingsPage/
โ โ โโโ DashboardPage/
โ โ โโโ NotFoundPage/
โ โโโ libs/tachui/
โ โโโ main.js
โโโ public/ # Static public assets
โโโ tests/ # Test suites
โ โโโ shared/
โ โ โโโ components/
โ โ โโโ hooks/
โ โ โโโ utils/
โ โโโ domains/
โ โ โโโ authentication/
โ โ โโโ tasks/
โ โ โโโ users/
โ โ โโโ dashboard/
โ โโโ pages/
โ โโโ integration/
โ โ โโโ api.test.js
โ โ โโโ auth.test.js
โ โ โโโ workflows.test.js
โ โโโ e2e/
โ โ โโโ user-flows/
โ โ โโโ critical-paths/
โ โ โโโ regression/
โ โโโ utils/
โ โโโ testHelpers.js
โ โโโ mockData.js
โ โโโ setupTests.js
โโโ docs/ # Documentation
โ โโโ README.md
โ โโโ CONTRIBUTING.md
โ โโโ DEPLOYMENT.md
โ โโโ ARCHITECTURE.md
โ โโโ api/
โ โโโ guides/
โโโ scripts/ # Automation scripts
โโโ build/
โโโ deploy/
โโโ test/
โโโ maintenance/Key characteristics:
- โ Domain separation - clear business boundaries
- โ Shared design system - consistent UI components
- โ Scalable architecture - supports multiple teams
- โ Comprehensive testing - unit, integration, e2e
๐๏ธ Architecture Patterns โ
Container/Presenter Pattern โ
Separate business logic from presentation logic:
// Container: Handles data and business logic
export function TaskListContainer() {
const tasks = taskStore.tasks
const loading = taskStore.loading
const handleAddTask = (task) => {
taskStore.addTask(task)
}
return TaskListPresenter({
tasks: tasks(),
loading: loading(),
onAddTask: handleAddTask
})
}
// Presenter: Pure presentation logic
export function TaskListPresenter({ tasks, loading, onAddTask }) {
if (loading) return '<div class="loading">Loading...</div>'
return `
<div class="task-list">
${tasks.map(task => TaskItem({ task })).join('')}
</div>
`
}Composition Pattern โ
Build complex components from smaller ones:
export function TaskCard({ task, onUpdate, onDelete }) {
return Card({
children: [
TaskHeader({ task }),
TaskContent({ task }),
TaskActions({ task, onUpdate, onDelete })
],
className: `task-card task-card--${task.priority}`
})
}Provider Pattern โ
Share state and logic across components:
// Store provider
export function TaskProvider({ children }) {
const taskStore = createTaskStore()
return ContextProvider({
context: TaskContext,
value: taskStore,
children
})
}
// Hook for consuming context
export function useTaskStore() {
return useContext(TaskContext)
}๐ Naming Conventions โ
Files and Directories โ
# Files: kebab-case
task-item.js
user-profile.js
api-client.js
# Component directories: PascalCase
TaskItem/
UserProfile/
ApiClient/
# Utility files: camelCase
taskHelpers.js
userValidation.js
apiUtils.js
# Constants: UPPER_SNAKE_CASE
API_ENDPOINTS.js
ERROR_MESSAGES.jsCode Elements โ
// Components: PascalCase
export function TaskItem({ task }) { ... }
export function UserProfile({ user }) { ... }
// Store creators: camelCase with 'create' prefix
export function createTaskStore() { ... }
export function createUserStore() { ... }
// Utility functions: camelCase
export function formatTaskDate(date) { ... }
export function validateUser(user) { ... }
// Constants: UPPER_SNAKE_CASE
export const API_BASE_URL = 'https://api.example.com'
export const MAX_RETRY_ATTEMPTS = 3๐ Import Organization โ
Path Mapping โ
// vite.config.js
export default defineConfig({
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
'@/shared': resolve(__dirname, 'src/shared'),
'@/domains': resolve(__dirname, 'src/domains'),
'@/pages': resolve(__dirname, 'src/pages'),
'@tachui/core': './src/libs/tachui/index.js'
}
}
})Import Order โ
// 1. External libraries
import { createSignal, createComputed } from '@tachui/core'
// 2. Shared utilities and components
import { Button, Card, Modal } from '@/shared/components/ui'
import { formatDate, validateEmail } from '@/shared/utils'
// 3. Domain-specific imports
import { taskStore } from '@/domains/tasks'
import { userStore } from '@/domains/users'
// 4. Relative imports (same feature/domain)
import { TaskItem } from './TaskItem'
import { TaskActions } from './TaskActions'
// 5. Styles (last)
import './TaskList.css'๐งช Testing Structure โ
Mirror your source code structure in tests:
tests/
โโโ shared/
โ โโโ components/
โ โ โโโ Button.test.js
โ โ โโโ Modal.test.js
โ โ โโโ Card.test.js
โ โโโ hooks/
โ โ โโโ useApi.test.js
โ โ โโโ useLocalStorage.test.js
โ โโโ utils/
โ โโโ formatters.test.js
โ โโโ validators.test.js
โโโ domains/
โ โโโ tasks/
โ โ โโโ components/
โ โ โ โโโ TaskItem.test.js
โ โ โ โโโ TaskList.test.js
โ โ โโโ stores/
โ โ โ โโโ taskStore.test.js
โ โ โโโ services/
โ โ โโโ taskApi.test.js
โ โโโ users/
โโโ pages/
โ โโโ HomePage.test.js
โ โโโ TasksPage.test.js
โโโ integration/
โ โโโ auth-flow.test.js
โ โโโ task-management.test.js
โโโ utils/
โโโ testHelpers.js
โโโ mockData.js
โโโ setupTests.jsโ๏ธ Configuration Management โ
Environment-Based Config โ
// src/app/config.js
const configs = {
development: {
apiUrl: 'http://localhost:3001',
debug: true,
logLevel: 'debug',
enableDevTools: true
},
staging: {
apiUrl: 'https://api-staging.myapp.com',
debug: true,
logLevel: 'info',
enableDevTools: false
},
production: {
apiUrl: 'https://api.myapp.com',
debug: false,
logLevel: 'error',
enableDevTools: false
}
}
const env = import.meta.env.MODE || 'development'
export const config = configs[env]
// Feature flags
export const features = {
newTaskUI: import.meta.env.VITE_FEATURE_NEW_TASK_UI === 'true',
advancedFilters: import.meta.env.VITE_FEATURE_ADVANCED_FILTERS === 'true'
}Domain Configuration โ
// src/domains/tasks/config.js
export const taskConfig = {
maxTasks: 1000,
defaultCategory: 'personal',
priorities: ['low', 'medium', 'high'],
statuses: ['pending', 'in-progress', 'completed'],
autoSaveDelay: 1000
}
// src/domains/tasks/constants.js
export const TASK_EVENTS = {
CREATED: 'task:created',
UPDATED: 'task:updated',
DELETED: 'task:deleted',
COMPLETED: 'task:completed'
}๐ฏ Best Practices โ
โ Do's โ
- Start simple - begin with flat structure, refactor as you grow
- Group by feature - keep related code together
- Use consistent naming - establish patterns and stick to them
- Separate concerns - business logic vs presentation
- Create reusable components - build your design system
- Mirror test structure - tests should follow source organization
- Document architecture decisions - help future developers
- Use absolute imports - cleaner, more maintainable code
โ Don'ts โ
- Don't over-organize early - avoid premature abstraction
- Don't nest too deeply - keep it under 4 levels when possible
- Don't mix concerns - separate data, logic, and presentation
- Don't duplicate code - extract to shared utilities
- Don't ignore naming consistency - establish conventions
- Don't skip documentation - explain complex decisions
- Don't forget about performance - lazy load large components
- Don't neglect testing - test structure should grow with code
๐ Migration Strategies โ
From Small to Medium โ
- Create feature directories - group related components
- Extract shared components - build reusable UI library
- Organize stores - separate by domain or feature
- Add testing structure - mirror source organization
- Introduce path mapping - cleaner imports
From Medium to Large โ
- Identify domains - group by business functionality
- Create shared design system - consistent UI components
- Implement provider patterns - better state management
- Add comprehensive testing - unit, integration, e2e
- Document architecture - help team understanding
๐ Measuring Success โ
Code Quality Metrics โ
- Low coupling - modules don't depend on each other's internals
- High cohesion - related functionality grouped together
- Clear interfaces - well-defined APIs between modules
- Consistent patterns - similar problems solved similarly
Developer Experience Metrics โ
- Time to find code - how quickly can developers locate files?
- Time to add features - how easy is it to extend functionality?
- Onboarding time - how quickly can new developers contribute?
- Code review efficiency - how easy is it to review changes?
Maintenance Metrics โ
- Refactoring ease - how hard is it to restructure code?
- Bug isolation - how quickly can issues be located?
- Testing coverage - how comprehensive are your tests?
- Documentation quality - how well is the codebase explained?
Good project organization is an investment in your application's future. Start simple, but be prepared to evolve your structure as your TachUI project grows and your team expands.