Creating Together a Useful and Sustainable Digital World
A partnership that helps everybody achieve their goals, working together towards a shared success, at the service of our users
-
Business Apps
Accelerate your digital transformation. Gain agility with our development services. Optimize the management of your application park.
Web AppsTPMTestingDevops -
Managed IT Services
Host your applications according to your needs. Make correct technological choices with guidance from our experts. Ensure flawless performance in all type of environments.
SupervisionOperationAdministrationExpertise -
Mobile Apps
Leverage the potential behind mobile functionalities. Make correct technological choices with guidance from our experts. Ensure flawless performance in all type of environments.
MultitechnologiesDedicated expertsIndustrialization -
Web Factory
Effortlessly have new content published on the web. Customize your features as you need them. Keep a zero-cost policy with an open source, reversible and interoperable base..
DXPCMSMultisiteWeb FactoryHeadlessDrupalLiferay -
Data Intelligence
Accelerate your decisions. Optimize your processes. Capitalize on your data.
ETLBIBIG DATADATA SCIENCEDATAVIZDATAOPS -
IA
Valorisez vos données métiers avec le Machine Learning. Augmentez l'efficacité de vos applications avec l'IA intégrée. Transformez durablement votre SI et vos métiers
Machine LearningDeep LearningIA générativeComputer VisionText MiningRAG -
Geo Data
Showcase your data through geolocation. Manage your assets, your resources, your employees, etc. Improve user experience.
GeodataSIGESRISpatial ETL -
Service Design
Help your users define their needs. Co-create user-friendly and visually appealing experiences and interfaces. Quickly test and review all your ideas.
Design thinkingUXUIGreen ITAccessibility
Our News
All our news-
An error occurred while processing the template.
The following has evaluated to null or missing: ==> image.getAttribute("alt") [in template "20100#20127#NEWS_THUMBNAIL" at line 15, column 50] ---- 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: ${image.getAttribute("alt")} [in template "20100#20127#NEWS_THUMBNAIL" at line 15, column 48] ----1<#setting locale = locale />2<#assign liferayUtils = serviceLocator.findService("com.sully.liferay.utils.LiferayUtils")/>3<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>4<#assign journalArticleResourceLocalServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")>56<#assign journalArticleId = .vars['reserved-article-id'].data>7<#assign articleResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId)/>8<#assign articleEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", articleResourcePK) />9<#assign typesActualite = liferayUtils.getEntryCategoriesForVocabulary(articleEntry,"type d'actualite") />1011<#compress>12 <a href="${friendlyURL}" class="tw-flex tw-gap-6 tw-overflow-hidden tw-group tw-flex-col" >1314 <div class="tw-aspect-[16/9] tw-w-full tw-overflow-hidden">15 <img src="${image.getData()}" alt="${image.getAttribute("alt")}"16 class="tw-w-full tw-object-cover group-hover:tw-scale-[1.04] tw-transition-all tw-duration-300"/>17 </div>1819 <div class="tw-flex-1 tw-flex tw-flex-col">20 <h3 class="tw-line-clamp-3 group-hover:tw-underline tw-mb-0">${title.getData()}</h3>21 <div class="tw-flex tw-items-center tw-gap-2 tw-order-first">22 <#if typesActualite?hasContent>23 <#list typesActualite as typeActualite>24 <#assign color = liferayUtils.getCategoryProperty(typeActualite.categoryId,"color") />25 <div class="tw-text-xs tw-uppercase tw-font-semibold tw-px-2 tw-py-1 tw-rounded-md26 tw-bg-sully-${color} tw-text-sully-${color}Dark">27 ${typeActualite.getTitle(locale)}28 </div>29 </#list>30 </#if>31 <#assign date_Data = getterUtil.getString(date.getData())>32 <#if validator.isNotNull(date_Data)>33 <#assign date_DateObj = dateUtil.parseDate("yyyy-MM-dd", date_Data, locale)>34 <p class="tw-text-sm tw-my-0"> ${dateUtil.getDate(date_DateObj, "dd MMM yyyy", locale)}</p>35 </#if>36 </div>37 </div>38 </a>39</#compress>
-
800+
Employees
-
83 M€
of turnover in 2025
-
46
years of experience
-
10
OFFICES
Working at Sully...
DISCOVER OUR CAREER SPACE
"Join a local agency"
Maxime Java developer for technical support in Nantes
Our job offers
Our Vision
People are at the heart of what we do:
we work for the satisfaction of our clients, our employees and our users.