Creating Togethera Useful and Sustainable Digital World

Moving forward together. This is the same project that we have been proposing to our customers and employees for over 40 years.
A partnership that helps everybody achieve their goals, working together towards a shared success, at the service of our users  

An error occurred while processing the template.
The following has evaluated to null or missing:
==> serviceItem.image.getAttribute('alt')  [in template "20100#20127#SERVICES" at line 7, column 145]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${serviceItem.image.getAttribute("alt")}  [in template "20100#20127#SERVICES" at line 7, column 143]
----
1<#compress> 
2  <ul class="no-disc tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-16"> 
3    <#list fieldGroup.getSiblings() as serviceItem> 
4      <li> 
5        <a data-senna-off="true" href="${serviceItem.linkToPage.getFriendlyUrl()}" class="no-underline tw-flex tw-flex-col md:tw-flex-row tw-items-center md:tw-items-start tw-gap-6 md:tw-gap-8 tw-group"> 
6          <div class="tw-w-[304px] tw-min-w-[220px] md:tw-w-[260px]"> 
7            <img class="tw-scale-[0.96] group-hover:tw-scale-100 tw-transition-all tw-duration-300" src="${serviceItem.image.getData()}" alt="${serviceItem.image.getAttribute('alt')}"> 
8 
9          </div> 
10          <div class="tw-flex tw-flex-col tw-gap-4"> 
11            <h2 class="tw-text-sully-pink-500 group-hover:tw-underline">${serviceItem.title.getData()}</h2> 
12            <#if (serviceItem.content.getData())??> 
13              <div>${serviceItem.content.getData()}</div> 
14            </#if> 
15            <#if serviceItem.tag.getSiblings()?has_content> 
16              <div class="tw-flex tw-gap-2 tw-flex-wrap"> 
17                <#list serviceItem.tag.getSiblings() as cur_serviceItem_tag> 
18                    <#if (cur_serviceItem_tag.getData())??> 
19                        <div class="tw-text-xs tw-uppercase tw-font-bold tw-px-2 tw-py-1 tw-rounded-md tw-bg-sully-grey-150 tw-text-sully-grey-500" > 
20                            ${cur_serviceItem_tag.getData()} 
21                        </div> 
22                    </#if> 
23                </#list> 
24              </div> 
25            </#if> 
26          </div> 
27        </a> 
28      </li> 
29    </#list> 
30  </ul> 
31</#compress> 
800
Employees
93 M$ CA
of turnover in 2023
44
years of experience
12
OFFICES across 3 countries

Working at Sully...

DISCOVER OUR CAREER SPACE
…is to work towards one goal – together – striving for every individual’s personal growth. Is being entrusted with responsibilities with an emphasis on agility, accountability, and open communication. Is to have the chance of progressing in the direction of your choosing, supported by a closely-knit management and sustainable outlooks.
What our teammates have to say

"Join a local agency"

Maxime Java developer for technical support in Nantes

View all interviews

Our job offers

[47.707164, -0.962557] [45.50208952402982, -73.55866013438884] [43.834526, -29.267578]

Our Vision

People are at the heart of what we do:
we work for the satisfaction of our clients, our employees and our users.