diff --git a/src/Project/model.go b/src/Project/model.go
new file mode 100644
index 0000000000000000000000000000000000000000..858689c14a6849b76340919bea2bed9176832551
--- /dev/null
+++ b/src/Project/model.go
@@ -0,0 +1,168 @@
+package project
+
+import (
+	"time"
+
+	"github.com/google/uuid"
+	"go.mongodb.org/mongo-driver/bson/primitive"
+)
+
+// Project represents the main project entity stored in MongoDB
+// This struct defines the complete data structure for a project including
+// metadata fields for tracking creation and modification times
+type Project struct {
+	// ID is the unique MongoDB ObjectID that serves as the primary key
+	// The omitempty tag excludes this field if it's empty during insertion
+	ID primitive.ObjectID bson:"_id,omitempty" json:"id"
+
+	// ProjectID is a human-readable unique identifier (e.g., "PRJ-2025-001")
+	// This allows users to reference projects with meaningful IDs
+	ProjectID string bson:"project_id" json:"projectId"
+
+	// Name is the display name of the project (e.g., "HARMONY Mobile")
+	// This is what users see in the interface as the project title
+	Name string bson:"name" json:"name"
+
+	// Description provides detailed information about the project's purpose
+	// This field is optional and can be empty for simple projects
+	Description string bson:"description" json:"description"
+
+	// StartDate defines when the project begins
+	// Used for project timeline calculations and reporting
+	StartDate time.Time bson:"start_date" json:"startDate"
+
+	// EndDate defines when the project is scheduled to complete
+	// Must be after StartDate as enforced by business logic
+	EndDate time.Time bson:"end_date" json:"endDate"
+
+	// CreatedBy stores the UUID of the user who created this project
+	// This establishes ownership and is used for access control
+	CreatedBy uuid.UUID bson:"created_by" json:"createdBy"
+
+	// CreatedAt records when this project was first created
+	// Automatically set during project creation for audit trails
+	CreatedAt time.Time bson:"created_at" json:"createdAt"
+
+	// UpdatedAt tracks the last modification time
+	// Uses pointer to allow nil values when no updates have occurred
+	// The omitempty tag excludes this field if it's nil
+	UpdatedAt *time.Time bson:"updated_at,omitempty" json:"updatedAt,omitempty"
+}
+
+// ProjectToCreate represents the data structure used when creating new projects
+// This struct contains only the fields that users can specify during creation
+// System-generated fields like ID and timestamps are handled separately
+type ProjectToCreate struct {
+	// ProjectID must be provided by the user and must be unique
+	// Validation ensures this field is not empty
+	ProjectID string json:"projectId" hvalidate:"required"
+
+	// Name is required and serves as the display title
+	// Validation ensures this field is not empty
+	Name string json:"name" hvalidate:"required"
+
+	// Description is optional and can be left empty
+	// No validation constraints are applied to this field
+	Description string json:"description"
+
+	// StartDate is required and must be a valid date
+	// Validation ensures this field is provided
+	StartDate time.Time json:"startDate" hvalidate:"required"
+
+	// EndDate is required and must be after StartDate
+	// Basic validation ensures this field is provided
+	// Business logic validation ensures it's after StartDate
+	EndDate time.Time json:"endDate" hvalidate:"required"
+
+	// CreatedBy is set by the system based on the current user
+	// The - tag excludes this from JSON serialization as it's not user input
+	CreatedBy uuid.UUID json:"-"
+}
+
+// ProjectToUpdate represents the data structure used when updating existing projects
+// This struct includes the project ID to identify which project to update
+// Note: ProjectID is not included as it cannot be changed after creation
+type ProjectToUpdate struct {
+	// ID identifies which project to update using the MongoDB ObjectID
+	// This field is populated from the URL parameter
+	ID primitive.ObjectID bson:"_id" json:"id"
+
+	// Name can be updated and is required to be non-empty
+	// Users can change the display name of their projects
+	Name string json:"name" hvalidate:"required"
+
+	// Description can be updated and can be empty
+	// Users can modify or clear the project description
+	Description string json:"description"
+
+	// StartDate can be updated but must remain valid
+	// Users can adjust project timelines as needed
+	StartDate time.Time json:"startDate" hvalidate:"required"
+
+	// EndDate can be updated but must remain after StartDate
+	// Business logic validation ensures timeline consistency
+	EndDate time.Time json:"endDate" hvalidate:"required"
+}
+
+// ToUpdate converts a Project instance to a ProjectToUpdate structure
+// This method is useful when pre-filling edit forms with existing project data
+// It extracts only the fields that can be modified during updates
+func (p *Project) ToUpdate() *ProjectToUpdate {
+	return &ProjectToUpdate{
+		ID:          p.ID,          // Preserve the project identifier
+		Name:        p.Name,        // Current name as default
+		Description: p.Description, // Current description as default
+		StartDate:   p.StartDate,   // Current start date as default
+		EndDate:     p.EndDate,     // Current end date as default
+	}
+}
+
+// ProjectWithRequirements represents a project along with its associated requirements
+// This structure is used for project detail views where both project information
+// and requirement summaries need to be displayed together
+type ProjectWithRequirements struct {
+	// Embed the base Project struct to inherit all project fields
+	// This allows access to all project properties directly
+	*Project
+
+	// Requirements contains summary information for all requirements in this project
+	// This is optimized for display purposes rather than full requirement details
+	Requirements []*RequirementSummary json:"requirements"
+
+	// RequirementCount provides a quick count of total requirements
+	// This avoids the need to calculate len(Requirements) in templates
+	RequirementCount int json:"requirementCount"
+}
+
+// RequirementSummary provides essential requirement information for project views
+// This structure contains only the fields needed for requirement lists and summaries
+// Full requirement details would be loaded separately when viewing individual requirements
+type RequirementSummary struct {
+	// ID is the unique MongoDB ObjectID for this requirement
+	// Used for linking to detailed requirement views
+	ID primitive.ObjectID bson:"_id" json:"id"
+
+	// RequirementID is a human-readable identifier for this requirement
+	// Generated automatically if not provided (e.g., "REQ-abc123")
+	RequirementID string bson:"requirement_id" json:"requirementId"
+
+	// Condition describes the circumstances under which this requirement applies
+	// This field comes from the requirement parsing and validation process
+	Condition string bson:"condition" json:"condition"
+
+	// System identifies which system or component this requirement affects
+	// This helps organize requirements by their target systems
+	System string bson:"system" json:"system"
+
+	// Requirement contains the actual requirement text
+	// This is the main content that describes what must be implemented
+	Requirement string bson:"requirement" json:"requirement"
+
+	// Status tracks the current state of this requirement
+	// Possible values include "Entwurf", "In Prüfung", "Genehmigt", "Abgelehnt"
+	Status string bson:"status" json:"status"
+
+	// CreatedAt records when this requirement was first created
+	// Used for sorting and audit purposes
+	CreatedAt time.Time bson:"created_at" json:"createdAt"
+}
\ No newline at end of file