diff --git a/assets/icons/empty_barred_chart.svg b/assets/icons/empty_barred_chart.svg
new file mode 100644
index 00000000..723d5e14
--- /dev/null
+++ b/assets/icons/empty_barred_chart.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/empty_energy_management_chart.svg b/assets/icons/empty_energy_management_chart.svg
new file mode 100644
index 00000000..042b9990
--- /dev/null
+++ b/assets/icons/empty_energy_management_chart.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/icons/empty_energy_management_per_device.svg b/assets/icons/empty_energy_management_per_device.svg
new file mode 100644
index 00000000..0408cd3a
--- /dev/null
+++ b/assets/icons/empty_energy_management_per_device.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/icons/empty_heatmap.svg b/assets/icons/empty_heatmap.svg
new file mode 100644
index 00000000..bbb2cfed
--- /dev/null
+++ b/assets/icons/empty_heatmap.svg
@@ -0,0 +1,99 @@
+
diff --git a/assets/icons/empty_range_of_aqi.svg b/assets/icons/empty_range_of_aqi.svg
new file mode 100644
index 00000000..aa51a41c
--- /dev/null
+++ b/assets/icons/empty_range_of_aqi.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/icons/group_icon.svg b/assets/icons/group_icon.svg
new file mode 100644
index 00000000..efca14dd
--- /dev/null
+++ b/assets/icons/group_icon.svg
@@ -0,0 +1,15 @@
+
diff --git a/assets/icons/home_icon.svg b/assets/icons/home_icon.svg
new file mode 100644
index 00000000..35080c4e
--- /dev/null
+++ b/assets/icons/home_icon.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/images/completed_done.svg b/assets/images/completed_done.svg
new file mode 100644
index 00000000..759f0cba
--- /dev/null
+++ b/assets/images/completed_done.svg
@@ -0,0 +1,4 @@
+
diff --git a/lib/pages/access_management/bloc/access_bloc.dart b/lib/pages/access_management/bloc/access_bloc.dart
index dd82d739..11c42f3b 100644
--- a/lib/pages/access_management/bloc/access_bloc.dart
+++ b/lib/pages/access_management/bloc/access_bloc.dart
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/access_management/bloc/access_event.dart';
import 'package:syncrow_web/pages/access_management/bloc/access_state.dart';
-import 'package:syncrow_web/pages/access_management/model/password_model.dart';
+import 'package:syncrow_web/pages/access_management/booking_system/presentation/model/password_model.dart';
import 'package:syncrow_web/pages/common/bloc/project_manager.dart';
import 'package:syncrow_web/pages/common/hour_picker_dialog.dart';
import 'package:syncrow_web/services/access_mang_api.dart';
diff --git a/lib/pages/access_management/bloc/access_state.dart b/lib/pages/access_management/bloc/access_state.dart
index 0790a735..cdaf9aad 100644
--- a/lib/pages/access_management/bloc/access_state.dart
+++ b/lib/pages/access_management/bloc/access_state.dart
@@ -1,5 +1,5 @@
import 'package:equatable/equatable.dart';
-import 'package:syncrow_web/pages/access_management/model/password_model.dart';
+import 'package:syncrow_web/pages/access_management/booking_system/presentation/model/password_model.dart';
abstract class AccessState extends Equatable {
const AccessState();
diff --git a/lib/pages/access_management/booking_system/data/services/remote_bookable_spaces_service.dart b/lib/pages/access_management/booking_system/data/services/remote_bookable_spaces_service.dart
new file mode 100644
index 00000000..3c2610db
--- /dev/null
+++ b/lib/pages/access_management/booking_system/data/services/remote_bookable_spaces_service.dart
@@ -0,0 +1,52 @@
+import 'package:dio/dio.dart';
+import 'package:syncrow_web/pages/access_management/booking_system/domain/load_bookable_spaces_param.dart';
+import 'package:syncrow_web/pages/access_management/booking_system/domain/models/paginated_bookable_spaces.dart';
+import 'package:syncrow_web/pages/access_management/booking_system/domain/services/bookable_system_service.dart';
+import 'package:syncrow_web/services/api/api_exception.dart';
+import 'package:syncrow_web/services/api/http_service.dart';
+import 'package:syncrow_web/utils/constants/api_const.dart';
+
+class RemoteBookableSpacesService implements BookableSystemService {
+ const RemoteBookableSpacesService(this._httpService);
+
+ final HTTPService _httpService;
+ static const _defaultErrorMessage = 'Failed to load bookable spaces';
+
+ @override
+ Future getBookableSpaces({
+ required LoadBookableSpacesParam param,
+ }) async {
+ try {
+ final response = await _httpService.get(
+ path: ApiEndpoints.getBookableSpaces,
+ queryParameters: {
+ 'page': param.page,
+ 'size': param.size,
+ 'active': true,
+ 'configured': true,
+ if (param.search != null &&
+ param.search.isNotEmpty &&
+ param.search != 'null')
+ 'search': param.search,
+ },
+ expectedResponseModel: (json) {
+ return PaginatedBookableSpaces.fromJson(
+ json as Map,
+ );
+ },
+ );
+ return response;
+ } on DioException catch (e) {
+ final responseData = e.response?.data;
+ if (responseData is Map) {
+ final errorMessage = responseData['error']?['message'] as String? ??
+ responseData['message'] as String? ??
+ _defaultErrorMessage;
+ throw APIException(errorMessage);
+ }
+ throw APIException(_defaultErrorMessage);
+ } catch (e) {
+ throw APIException('$_defaultErrorMessage: ${e.toString()}');
+ }
+ }
+}
diff --git a/lib/pages/access_management/booking_system/domain/load_bookable_spaces_param.dart b/lib/pages/access_management/booking_system/domain/load_bookable_spaces_param.dart
new file mode 100644
index 00000000..f2b2e5fe
--- /dev/null
+++ b/lib/pages/access_management/booking_system/domain/load_bookable_spaces_param.dart
@@ -0,0 +1,36 @@
+import 'package:equatable/equatable.dart';
+
+class LoadBookableSpacesParam extends Equatable {
+ const LoadBookableSpacesParam({
+ this.page = 1,
+ this.size = 25,
+ this.search = '',
+ this.active = true,
+ this.configured = true,
+ });
+
+ final int page;
+ final int size;
+ final String search;
+ final bool active;
+ final bool configured;
+
+ LoadBookableSpacesParam copyWith({
+ int? page,
+ int? size,
+ String? search,
+ bool? active,
+ bool? configured,
+ }) {
+ return LoadBookableSpacesParam(
+ page: page ?? this.page,
+ size: size ?? this.size,
+ search: search ?? this.search,
+ active: active ?? this.active,
+ configured: configured ?? this.configured,
+ );
+ }
+
+ @override
+ List