Project Structure
Overview
Complete Project Structure
my_app/
├── 📁 src/ # Application source code
│ ├── 📄 my_app.cr # Main application module
│ ├── 📄 server.cr # HTTP server configuration
│ ├── 📁 endpoints/ # HTTP endpoints (controllers)
│ │ └── 📁 welcome/
│ │ └── 📄 index_endpoint.cr
│ ├── 📁 models/ # Database models (CQL/Jennifer)
│ │ └── 📄 your_models_goes_here.txt
│ ├── 📁 contracts/ # Request/response contracts
│ │ └── 📁 welcome/
│ │ └── 📄 index_contract.cr
│ ├── 📁 pages/ # Page components (views)
│ │ └── 📁 welcome/
│ │ └── 📄 index_page.cr
│ ├── 📁 services/ # Business logic services
│ ├── 📁 middleware/ # HTTP middleware components
│ ├── 📁 components/ # Reusable live components
│ ├── 📁 validators/ # Custom validation logic
│ ├── 📁 initializers/ # Application startup configuration
│ │ ├── 📄 database.cr
│ │ └── 📄 logger.cr
│ └── 📁 db/ # Database-related files
│ ├── 📄 schema.cr # Database schema definition
│ ├── 📄 seed.cr # Sample data seeding
│ ├── 📁 migrations/ # Database migrations
│ └── 📄 README.md
├── 📁 spec/ # Test files
│ ├── 📄 my_app_spec.cr # Main application tests
│ ├── 📄 spec_helper.cr # Test configuration
│ ├── 📁 endpoints/ # Endpoint tests
│ ├── 📁 models/ # Model tests
│ ├── 📁 services/ # Service tests
│ └── 📁 support/ # Test support files
├── 📁 public/ # Static assets
│ ├── 📁 assets/ # CSS, JS, images
│ │ ├── 📁 css/
│ │ │ ├── 📄 bootstrap.min.css
│ │ │ └── 📄 cover.css
│ │ └── 📁 js/
│ │ └── 📄 bootstrap.min.js
│ └── 📁 templates/ # Jinja2 templates
│ ├── 📄 layout.jinja # Base layout template
│ ├── 📁 helpers/ # Partial templates
│ │ └── 📄 _nav.jinja
│ └── 📁 welcome/
│ └── 📄 index_page.jinja
├── 📁 tasks/ # Custom task definitions
│ └── 📄 taskfile.cr
├── 📁 config/ # Configuration files
├── 📄 shard.yml # Crystal dependencies
├── 📄 README.md # Project documentation
└── 📄 LICENSE # License fileDirectory Details
/src - Application Source Code
/src - Application Source CodeMain Files
/src/endpoints - HTTP Endpoints (Controllers)
/src/endpoints - HTTP Endpoints (Controllers)/src/models - Database Models
/src/models - Database Models/src/contracts - Request/Response Contracts
/src/contracts - Request/Response Contracts/src/pages - Page Components (Views)
/src/pages - Page Components (Views)/src/services - Business Logic Services
/src/services - Business Logic Services/src/middleware - HTTP Middleware
/src/middleware - HTTP Middleware/src/components - Live Components
/src/components - Live Components/src/validators - Custom Validators
/src/validators - Custom Validators/src/initializers - Application Initializers
/src/initializers - Application Initializers/src/db - Database Files
/src/db - Database Files/spec - Test Files
/spec - Test Files/public - Static Assets
/public - Static Assets/tasks - Custom Tasks
/tasks - Custom TasksFile Naming Conventions
General Rules
Specific Conventions
Endpoints
Models
Services
Contracts
Pages
Components
Middleware
Tests
Configuration Files
shard.yml - Dependencies
shard.yml - DependenciesEnvironment Configuration
Best Practices
Organization
Dependencies
Example Import Organization:
Testing
Working with the Structure
Adding New Features
Refactoring
Last updated