diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index d7a4d6e4b5..5401ae2fa6 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -471,6 +471,8 @@ var migrations = []Migration{
 	NewMigration("Rename Webhook org_id to owner_id", v1_20.RenameWebhookOrgToOwner),
 	// v246 -> v247
 	NewMigration("Add missed column owner_id for project table", v1_20.AddNewColumnForProject),
+	// v247 -> v248
+	NewMigration("Fix incorrect project type", v1_20.FixIncorrectProjectType),
 }
 
 // GetCurrentDBVersion returns the current db version
diff --git a/models/migrations/v1_20/v247.go b/models/migrations/v1_20/v247.go
new file mode 100644
index 0000000000..59fc5c46b5
--- /dev/null
+++ b/models/migrations/v1_20/v247.go
@@ -0,0 +1,50 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_20 //nolint
+
+import (
+	"code.gitea.io/gitea/modules/log"
+
+	"xorm.io/xorm"
+)
+
+// FixIncorrectProjectType: set individual project's type from 3(TypeOrganization) to 1(TypeIndividual)
+func FixIncorrectProjectType(x *xorm.Engine) error {
+	type User struct {
+		ID   int64 `xorm:"pk autoincr"`
+		Type int
+	}
+
+	const (
+		UserTypeIndividual int = 0
+
+		TypeIndividual   uint8 = 1
+		TypeOrganization uint8 = 3
+	)
+
+	type Project struct {
+		OwnerID int64 `xorm:"INDEX"`
+		Type    uint8
+		Owner   *User `xorm:"extends"`
+	}
+
+	sess := x.NewSession()
+	defer sess.Close()
+
+	if err := sess.Begin(); err != nil {
+		return err
+	}
+
+	count, err := sess.Table("project").
+		Where("type = ? AND owner_id IN (SELECT id FROM `user` WHERE type = ?)", TypeOrganization, UserTypeIndividual).
+		Update(&Project{
+			Type: TypeIndividual,
+		})
+	if err != nil {
+		return err
+	}
+	log.Debug("Updated %d projects to belong to a user instead of an organization", count)
+
+	return sess.Commit()
+}
diff --git a/models/project/project.go b/models/project/project.go
index f3ed723030..679d695881 100644
--- a/models/project/project.go
+++ b/models/project/project.go
@@ -172,7 +172,7 @@ func GetCardConfig() []CardConfig {
 // IsTypeValid checks if a project type is valid
 func IsTypeValid(p Type) bool {
 	switch p {
-	case TypeRepository, TypeOrganization:
+	case TypeIndividual, TypeRepository, TypeOrganization:
 		return true
 	default:
 		return false
diff --git a/models/project/project_test.go b/models/project/project_test.go
index 6caa244f54..71ceda7aa5 100644
--- a/models/project/project_test.go
+++ b/models/project/project_test.go
@@ -20,7 +20,7 @@ func TestIsProjectTypeValid(t *testing.T) {
 		typ   Type
 		valid bool
 	}{
-		{TypeIndividual, false},
+		{TypeIndividual, true},
 		{TypeRepository, true},
 		{TypeOrganization, true},
 		{UnknownType, false},
diff --git a/routers/web/org/projects.go b/routers/web/org/projects.go
index c9d63fec5d..df16d0a4c7 100644
--- a/routers/web/org/projects.go
+++ b/routers/web/org/projects.go
@@ -51,12 +51,18 @@ func Projects(ctx *context.Context) {
 		page = 1
 	}
 
+	var projectType project_model.Type
+	if ctx.ContextUser.IsOrganization() {
+		projectType = project_model.TypeOrganization
+	} else {
+		projectType = project_model.TypeIndividual
+	}
 	projects, total, err := project_model.FindProjects(ctx, project_model.SearchOptions{
 		OwnerID:  ctx.ContextUser.ID,
 		Page:     page,
 		IsClosed: util.OptionalBoolOf(isShowClosed),
 		SortType: sortType,
-		Type:     project_model.TypeOrganization,
+		Type:     projectType,
 	})
 	if err != nil {
 		ctx.ServerError("FindProjects", err)
@@ -66,7 +72,7 @@ func Projects(ctx *context.Context) {
 	opTotal, err := project_model.CountProjects(ctx, project_model.SearchOptions{
 		OwnerID:  ctx.ContextUser.ID,
 		IsClosed: util.OptionalBoolOf(!isShowClosed),
-		Type:     project_model.TypeOrganization,
+		Type:     projectType,
 	})
 	if err != nil {
 		ctx.ServerError("CountProjects", err)
@@ -143,14 +149,21 @@ func NewProjectPost(ctx *context.Context) {
 		return
 	}
 
-	if err := project_model.NewProject(&project_model.Project{
+	newProject := project_model.Project{
 		OwnerID:     ctx.ContextUser.ID,
 		Title:       form.Title,
 		Description: form.Content,
 		CreatorID:   ctx.Doer.ID,
 		BoardType:   form.BoardType,
-		Type:        project_model.TypeOrganization,
-	}); err != nil {
+	}
+
+	if ctx.ContextUser.IsOrganization() {
+		newProject.Type = project_model.TypeOrganization
+	} else {
+		newProject.Type = project_model.TypeIndividual
+	}
+
+	if err := project_model.NewProject(&newProject); err != nil {
 		ctx.ServerError("NewProject", err)
 		return
 	}