Leadership

Red Sea Global is led by an experienced, multi-national team of real estate developers, engineering professionals, environmental specialists, experienced designers and project finance experts.

background background

Chairman

H.R.H. Crown Prince Mohammad bin Salman bin Abdulaziz Al Saud

Crown Prince of the Kingdom of Saudi Arabia, Prime Minister, President of the Council for Economic and Development Affairs and Chairman of the Public Investment Fund.
Chairman

Board Members

background background

Board Members

avatar

HH Prince Badr Al-Saud

Minister of Culture

avatar

H.E. Dr. Majid Al-Qassabi

Minister of Commerce

avatar

H.E. Mr. Ahmed Al-Khateeb

Minister of Tourism

avatar

H.E. Eng. Abdulrahman Al-Fadley

Minister of Environment, Water and Agriculture

avatar

H.E. Mr. Majed Al-Hogail

Minister of Municipalities and Housing

avatar

H.E. Mr. Yasir Al-Rumayyan

Governor of the Public Investment Fund

avatar

H.E. Dr. Fahad Toonsi

Secretary General of the Board, Adviser at Saudi Royal Court

avatar

Aiman M. Al-Mudaifer

NEOM CEO 

 

avatar

John Pagano  

Group Chief Executive Officer 

Advisory Board Members

An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy926.getLatestArticle(long)" threw an exception when invoked on com.sun.proxy.$Proxy926 object "hu.webtown.liferay.service.wrapper.redsea.journal.article.JournalArticleLocalServiceOverride@36be531a"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign journalArticle = journalArtic...  [in template "20097#20123#45335" in macro "getPersonCard" at line 93, column 9]
	- Reached through: @getPersonCard webContentData.classPK...  [in template "20097#20123#45335" at line 43, column 37]
----
1<#if serviceLocator??> 
2    <#assign journalArticleService=serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
3    <#assign cssClass = "peopleSlider" /> 
4    <#if (theme.getData())??> 
5        <#assign cssClass = cssClass + " peopleSlider--" + theme.getData() /> 
6    </#if> 
7    <#if getterUtil.getBoolean(decorativeBackground.getData())> 
8        <#assign cssClass = cssClass + " peopleSlider--bgOverflow peopleSlider--bgImage" /> 
9    </#if> 
10    <!-- begin sections/peopleSlider --> 
11    <section class="${cssClass}"> 
12        <#if getterUtil.getBoolean(decorativeBackground.getData())> 
13            <img 
14                    class="peopleSlider__bg peopleSlider__bg--1" 
15                    src="${themeDisplay.getPathThemeImages()}/../crafton-frontend/public/images/bg-01-l.svg" 
16                    alt="background" 
17                    loading="lazy" 
18                    role="none" /> 
19            <img 
20                    class="peopleSlider__bg peopleSlider__bg--2" 
21                    src="${themeDisplay.getPathThemeImages()}/../crafton-frontend/public/images/bg-01-r.svg" 
22                    alt="background" 
23                    loading="lazy" 
24                    role="none" /> 
25        </#if> 
26        <div class="peopleSlider__inner wrapper"> 
27            <!-- begin components/heading --> 
28            <div 
29                    class="heading heading--large <#if (theme.getData())?? && theme.getData() == 'navy'>heading--white</#if> peopleSlider__heading"> 
30                <h1 class="heading__subtitle">${title.getData()}</h1> 
31            </div> 
32            <!-- end components/heading --> 
33            <div class="peopleSlider__sliderWrapper" data-people-slider> 
34                <div class="peopleSlider__slider swiper" data-people-slider-slider> 
35                    <div class="peopleSlider__items swiper-wrapper" data-people-slider-item> 
36                        <#if person.getSiblings()?has_content> 
37                            <#list person.getSiblings() as cur_person> 
38                                <#assign 
39                                webContentData = jsonFactoryUtil.createJSONObject(cur_person.getData()) 
40                                /> 
41 
42                                <#if webContentData?? && webContentData.classPK??> 
43                                    <@getPersonCard webContentData.classPK?number cur_person?index/> 
44                                </#if> 
45                            </#list> 
46                        </#if> 
47                    </div> 
48                </div> 
49            </div> 
50        </div> 
51        <script type="text/template" data-popup-id="${randomNamespace}board-members" data-popup-theme="full" data-popup-props="{&quot;onMountEvents&quot;:[[&quot;PeoplePopupSliderCreateNew&quot;] 
52    ]}"> 
53            <!-- begin components/popup/peoplePopup --> 
54            <div class="peoplePopup"> 
55                <div class="peoplePopup__sliderWrapper" data-people-popup-slider="${randomNamespace}board-members"> 
56                    <div class="peoplePopup__slider swiper" data-people-popup-slider-slider> 
57                        <div class="peoplePopup__items swiper-wrapper"> 
58                            <#if person.getSiblings()?has_content> 
59                                <#list person.getSiblings() as cur_person> 
60                                    <#assign 
61                                    webContentData = jsonFactoryUtil.createJSONObject(cur_person.getData()) 
62                                    /> 
63 
64                                    <#if webContentData?? && webContentData.classPK??> 
65                                        <@getPopup webContentData.classPK?number /> 
66                                    </#if> 
67                                </#list> 
68                            </#if> 
69                        </div> 
70                    </div> 
71                    <!-- begin components/sliderNav --> 
72                    <div class="sliderNav peoplePopup__nav" data-people-popup-slider-nav data-slider-nav> 
73                        <!-- begin components/arrowButton --> 
74                        <button class="arrowButton arrowButton--prev arrowButton--default sliderNav__arrow sliderNav__arrow--prev" data-slider-nav-prev> 
75                            <span class="arrowButton__arrow"></span> 
76                        </button> 
77                        <!-- end components/arrowButton --> 
78                        <!-- begin components/arrowButton --> 
79                        <button class="arrowButton arrowButton--next arrowButton--default sliderNav__arrow sliderNav__arrow--next" data-slider-nav-next> 
80                            <span class="arrowButton__arrow"></span> 
81                        </button> 
82                        <!-- end components/arrowButton --> 
83                    </div> 
84                    <!-- end components/sliderNav --> 
85                </div> 
86            </div> 
87            <!-- end components/popup/peoplePopup --> 
88        </script> 
89    </section> 
90    <!-- end sections/peopleSlider --> 
91 
92    <#macro getPersonCard classPK index> 
93        <#assign journalArticle = journalArticleService.getLatestArticle(classPK) /> 
94        <#assign description = journalArticle.getDescription(themeDisplay.getLocale()) /> 
95        <#assign title = journalArticle.getTitle(themeDisplay.getLocale()) /> 
96 
97        <#assign document = saxReaderUtil.read(journalArticle.getContentByLocale(locale.toString())) /> 
98        <#assign rootElement = document.getRootElement()> 
99        <#assign contentXPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='content']")> 
100 
101        <#assign hasContent = false /> 
102 
103        <#if (contentXPathSelector.selectSingleNode(rootElement))?has_content> 
104            <#assign hasContent = (htmlUtil.stripHtml(contentXPathSelector.selectSingleNode(rootElement).getStringValue())?trim?length > 0) /> 
105        </#if> 
106 
107        <#attempt> 
108            <#assign imgUrl = journalArticle.getArticleImageURL(themeDisplay) /> 
109            <#recover> 
110                <#assign imgUrl = "" /> 
111        </#attempt> 
112 
113        <#assign buttonColorCss = "moreButton--gold" /> 
114        <#if (theme.getData())?? && theme.getData() == 'navy'> 
115            <#assign buttonColorCss = "moreButton--white" /> 
116        </#if> 
117 
118        <div class="peopleSlider__item swiper-slide" style="<#if (numberOfPersons.getData())?? && numberOfPersons.getData() == '4'> width:25%;</#if>"> 
119            <!-- begin components/personCard --> 
120            <div class="personCard <#if (theme.getData())?? && theme.getData() == 'navy'>personCard--white</#if> peopleSlider__card"> 
121                <div class="personCard__avatar"> 
122                    <img 
123                            class="personCard__avatarImg" 
124                            src="${imgUrl}" 
125                            loading="lazy" 
126                            alt="avatar" /> 
127                </div> 
128                <div class="personCard__info"> 
129                    <h4 class="personCard__name">${title}</h4> 
130                    <div class="personCard__role">${description}</div> 
131                    <#if hasContent?? && hasContent> 
132                        <!-- begin components/moreButton --> 
133                        <button class="moreButton ${buttonColorCss} personCard__more" target="_self" data-popup-target="${randomNamespace}board-members" data-popup-data="{&quot;onMountEvents&quot;:[[&quot;PeoplePopupSliderSetSlide&quot;,{&quot;id&quot;:&quot;${randomNamespace}board-members&quot;,&quot;index&quot;:${index}}]]}"> 
134                            <span class="moreButton__text"><@liferay.language key="buttons.read-more" /></span> 
135                        </button> 
136                        <!-- end components/moreButton --> 
137                    </#if> 
138                </div> 
139            </div> 
140            <!-- end components/personCard --> 
141        </div> 
142    </#macro> 
143 
144    <#macro getPopup classPK> 
145        <#assign journalArticle = journalArticleService.getLatestArticle(classPK) /> 
146        <#assign document = saxReaderUtil.read(journalArticle.getContentByLocale(locale.toString())) /> 
147        <#assign rootElement = document.getRootElement()> 
148 
149        <#assign contentXPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='content']")> 
150 
151        <#assign content = "" /> 
152        <#if (contentXPathSelector.selectSingleNode(rootElement))?has_content> 
153            <#assign content = contentXPathSelector.selectSingleNode(rootElement).getStringValue() /> 
154        </#if> 
155 
156        <#assign description = journalArticle.getDescription(themeDisplay.getLocale()) /> 
157        <#assign title = journalArticle.getTitle(themeDisplay.getLocale()) /> 
158 
159        <#attempt> 
160            <#assign imgUrl = journalArticle.getArticleImageURL(themeDisplay) /> 
161            <#recover> 
162                <#assign imgUrl = "" /> 
163        </#attempt> 
164 
165        <div class="peoplePopup__item swiper-slide"> 
166            <!-- begin components/customScroll --> 
167            <div 
168                    class="customScroll peoplePopup__scroll" 
169                    data-custom-scroll> 
170                <div class="customScroll__scroll"> 
171                    <div class="peoplePopup__person wrapper"> 
172                        <div class="peoplePopup__avatar"> 
173                            <img 
174                                    class="peoplePopup__avatarImg" 
175                                    src="${imgUrl}" 
176                                    loading="lazy" 
177                                    alt="avatar" /> 
178                        </div> 
179                        <div class="peoplePopup__info"> 
180                            <h4 class="peoplePopup__name">${title}</h4> 
181                            <div class="peoplePopup__role">${description}</div> 
182                            <div class="peoplePopup__description">${content}</div> 
183                        </div> 
184                    </div> 
185                </div> 
186            </div> 
187            <!-- end components/customScroll --> 
188        </div> 
189    </#macro> 
190</#if> 

Executive Management

Executive Management

background background
avatar

John Pagano  

Group Chief Executive Officer 

avatar

Eng. Ahmad G. Darwish 

Group Chief Administrative Officer

avatar

Dr. Maryam Ali Ficociello 

Group Chief Governance Officer

avatar

Raed Albasseet 

Group Chief Environment and Sustainability Officer

avatar

Tareq Musmali 

Group Chief Internal Audit Officer

avatar

Greg Djerejian 

Group Chief Legal Officer and Group Head of Investments

avatar

Martin Greenslade

Group Chief Financial Officer 

avatar

Benjamin Edwards

Group Head of Cost, Commercial, and Procurement

avatar

John Dunne

Group Head of Health & Safety

avatar

Sébastien Carre

Group Head of Hospitality

Get in touch


To learn more about Red Sea Global, please get in touch.
Contact us