diff --git a/.gitignore b/.gitignore
index b6e47617de1..9fe17bcebb3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -126,4 +126,4 @@ venv.bak/
dmypy.json
# Pyre type checker
-.pyre/
+.pyre/
\ No newline at end of file
diff --git a/estate/__init__.py b/estate/__init__.py
new file mode 100644
index 00000000000..0650744f6bc
--- /dev/null
+++ b/estate/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/estate/__manifest__.py b/estate/__manifest__.py
new file mode 100644
index 00000000000..f234e221e49
--- /dev/null
+++ b/estate/__manifest__.py
@@ -0,0 +1,11 @@
+{ # pyright: ignore[reportUnusedExpression]
+ "name": "estate",
+ "depends": ["base_setup"],
+ "author": "Havit",
+ "license": "LGPL-3",
+ "data": [
+ "security/ir.model.access.csv",
+ "views/estate_views.xml",
+ "views/estate_menus.xml",
+ ],
+}
diff --git a/estate/models/__init__.py b/estate/models/__init__.py
new file mode 100644
index 00000000000..e4f59229d23
--- /dev/null
+++ b/estate/models/__init__.py
@@ -0,0 +1 @@
+from . import estate
diff --git a/estate/models/estate.py b/estate/models/estate.py
new file mode 100644
index 00000000000..250435dc3ec
--- /dev/null
+++ b/estate/models/estate.py
@@ -0,0 +1,44 @@
+from dateutil.relativedelta import relativedelta
+from odoo import fields, models
+
+
+class Estate(models.Model):
+ _name = "estate"
+ _description = "Real Estate Module"
+
+ # fields
+ name = fields.Char(required=True)
+ description = fields.Text()
+ postcode = fields.Char()
+ date_availability = fields.Date(
+ default=lambda self: fields.Date.today() + relativedelta(months=3)
+ )
+ expected_price = fields.Float()
+ selling_price = fields.Float(readonly=True, copy=False)
+ bedrooms = fields.Integer(default=2)
+ living_area = fields.Integer()
+ facades = fields.Integer()
+ garage = fields.Boolean()
+ garden = fields.Boolean()
+ garden_area = fields.Integer()
+ garden_orientation = fields.Selection(
+ selection=[
+ ("north", "North"),
+ ("south", "South"),
+ ("east", "East"),
+ ("west", "West"),
+ ]
+ )
+ state = fields.Selection(
+ selection=[
+ ("new", "New"),
+ ("offer_received", "Offer Received"),
+ ("offer_accepted", "Offer Accepted"),
+ ("sold", "Sold"),
+ ("cancelled", "Cancelled"),
+ ],
+ required=True,
+ copy=False,
+ default="new",
+ )
+ active = fields.Boolean(default=True)
diff --git a/estate/odools.toml b/estate/odools.toml
new file mode 100644
index 00000000000..109333b8646
--- /dev/null
+++ b/estate/odools.toml
@@ -0,0 +1,9 @@
+[[config]]
+name = "default"
+odoo_path = "/home/odoo/odoo19/community"
+addons_paths = [
+ "/home/odoo/odoo19/community/addons",
+ "/home/odoo/odoo19/enterprise",
+ "/home/odoo/odoo19/tutorials"
+]
+python_path = "python3"
diff --git a/estate/pyrightconfig.json b/estate/pyrightconfig.json
new file mode 100644
index 00000000000..4cc4e0980d9
--- /dev/null
+++ b/estate/pyrightconfig.json
@@ -0,0 +1,7 @@
+{
+ "extraPaths": ["../../community"],
+ "typeCheckingMode": "basic",
+ "reportPrivateLocalImportUsage": "none",
+ "reportUnannotatedClassAttribute": "none",
+ "reportArgumentType": "none",
+}
diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv
new file mode 100644
index 00000000000..b3d4b09271f
--- /dev/null
+++ b/estate/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
+access_estate,access_estate,model_estate,base.group_user,1,1,1,1
\ No newline at end of file
diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml
new file mode 100644
index 00000000000..1231c054746
--- /dev/null
+++ b/estate/views/estate_menus.xml
@@ -0,0 +1,7 @@
+
+
+
diff --git a/estate/views/estate_views.xml b/estate/views/estate_views.xml
new file mode 100644
index 00000000000..e662889cce2
--- /dev/null
+++ b/estate/views/estate_views.xml
@@ -0,0 +1,88 @@
+
+
+ Estate
+ estate
+ list,form
+
+
+
+ Estate List
+ estate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Estate Form
+ estate
+
+
+
+
+
+
+ Estate Search
+ estate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+