Changes for page Public Web Site

Last modified by Agnease on 2026/05/30 16:24

From version 6.16
edited by Agnease
on 2026/05/02 10:03
Change comment: There is no comment for this version
To version 6.28
edited by Agnease
on 2026/05/12 12:00
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -2,175 +2,191 @@
2 2  #macro (displayPublicContent)
3 3   #set ($discard = $xwiki.ssx.use('PublicWebSite.WebHome'))
4 4   {{html clean="false"}}
5 - ## HERO
5 +
6 6   <section class="hero hero-centered" aria-labelledby="hero-title">
7 7   <div class="container hero-inner">
8 - <h1 id="hero-title">Keep Your XWiki Platform Secure, Stable and Up-to-Date</h1>
9 - <p class="lead">Helping organizations safely upgrade and maintain their XWiki environments.</p>
8 + <div class="hero-kicker">
9 + <i class="fa fa-shield" aria-hidden="true"></i>
10 + XWiki consulting, upgrades and long-term support
11 + </div>
12 +
13 + <h1 id="hero-title">Reliable XWiki engineering for organizations that depend on their knowledge platform</h1>
14 +
15 + <p class="lead">
16 + Agnease helps companies keep XWiki secure, stable, up-to-date and adapted to real business processes.
17 + </p>
18 +
19 + <p class="hero-support">
20 + From LTS upgrades and maintenance to custom applications, integrations, workflows and migrations,
21 + Agnease provides focused XWiki expertise with practical delivery and long-term care.
22 + </p>
23 +
10 10   <ul class="benefits">
11 - <li>Smooth upgrades</li>
12 - <li>Reliable support plans</li>
13 - <li>Custom integrations</li>
14 - <li>Secure, optimized platforms</li>
25 + <li>Safe LTS upgrades</li>
26 + <li>Support and recovery</li>
27 + <li>Custom XWiki applications</li>
28 + <li>Integrations and migrations</li>
15 15   </ul>
16 - <div class="hero-cta">
17 - <a class="btn btn-primary href="$xwiki.getURL('contact.WebHome')">Contact Agnease</a>
18 - #*<a class="btn btn-primary" href="#contact" aria-label="Request a consultation" data-toggle="modal" data-target="#requestConsultation">
19 - Request a consultation
20 - </a>
21 - #requestConsultationModal()*#
22 - ##data-toggle="modal" data-target="#requestConsultationModal"
30 +
31 + <div class="hero-actions">
32 + <a class="btn btn-primary" href="$xwiki.getURL('contact.WebHome')">Request a consultation</a>
33 + <a class="btn btn-secondary" href="$xwiki.getURL('services.WebHome')">View XWiki services</a>
23 23   </div>
24 24   </div>
25 25   </section>
26 - ## WHY CHOOSE
27 - #set ($whySectionData = [{
28 - 'title': 'Stability & security',
29 - 'icon': 'shield',
30 - 'content': 'Proven upgrade steps, rollback safety, and proactive hardening keep your wiki reliable.'
31 - },{
32 - 'title': 'Predictable delivery',
33 - 'icon': 'check-square-o',
34 - 'content': 'Clear scope, defined steps, and documented results to avoid surprises.'
35 - },{
36 - 'title': 'Clean integrations',
37 - 'icon': 'link',
38 - 'content': 'Maintainable SSO, API, and system connections tailored to your environment.'
39 - },{
40 - 'title': 'Long-term support',
41 - 'icon': 'life-ring',
42 - 'content': 'Guaranteed response times, regular checks, and fast assistance when needed.'
43 - }])
44 - <section aria-labelledby="why-title">
37 +
38 + <section class="trust-strip" aria-label="Agnease experience">
45 45   <div class="container">
46 - <h2 id="why-title">Why choose Agnease</h2>
47 - <p class="lead">10+ years of XWiki expertise with structured delivery and lasting collaboration</p>
48 - <div class="widgets">
49 - #foreach ($entry in $whySectionData)
50 - <article class="widget">
51 - <div class="icon" aria-hidden="true">
52 - <i class="fa fa-$entry.icon"></i>
53 - <h4>$entry.title</h4>
54 - </div>
55 - <p>$entry.content</p>
56 - </article>
57 - #end
58 - </div>
40 + <ul>
41 + <li><i class="fa fa-check-circle" aria-hidden="true"></i> 11+ years of XWiki experience</li>
42 + <li><i class="fa fa-check-circle" aria-hidden="true"></i> Upgrades, support and custom development</li>
43 + <li><i class="fa fa-check-circle" aria-hidden="true"></i> Security-aware maintenance</li>
44 + <li><i class="fa fa-check-circle" aria-hidden="true"></i> Practical long-term collaboration</li>
45 + </ul>
59 59   </div>
60 60   </section>
61 - ## SERVICES
62 - #set ($servicesSectionData = [{
63 - 'title': 'Upgrades',
64 - 'icon': 'refresh',
65 - 'content': 'Stay current with the latest XWiki LTS and keep your instance reliable.',
66 - 'items': [
67 - 'Audit setup, extensions, and configurations',
68 - 'Test upgrades with backups and validation',
69 - 'Safe production rollout with minimal downtime'
70 - ]
71 - },{
72 - 'title': 'Maintenance, Support & Recovery',
73 - 'icon': 'stethoscope',
74 - 'content': 'Ensure long-term stability and quick response when issues appear.',
75 - 'items': [
76 - 'Monitoring and performance checks',
77 - 'Security patching, log analysis, triage',
78 - 'Issue recovery, data repair, hardening'
79 - ]
80 - },{
81 - 'title': 'Development & Integrations',
82 - 'icon': 'cogs',
83 - 'content': 'Extend and connect XWiki to fit your workflow and systems.',
84 - 'items': [
85 - 'Custom apps, macros, automation',
86 - 'SSO, REST APIs, LDAP, CRM links',
87 - 'Maintainable extensions for long-term use'
88 - ]
89 - },{
90 - 'title': 'Hosting & Deployment',
91 - 'icon': 'cloud',
92 - 'content': 'Cloud-ready environments designed for reliability and performance.',
93 - 'items': [
94 - 'Containerized deployment and TLS',
95 - 'Backups, restore strategy, observability',
96 - 'Optimization and load tuning'
97 - ]
98 - },{
99 - 'title': 'Migrations to XWiki',
100 - 'icon': 'exchange',
101 - 'content': 'Move from Confluence, SharePoint, or MediaWiki to XWiki with full data integrity and structure.',
102 - 'items': [
103 - 'Preserve hierarchy, attachments, and permissions',
104 - 'Convert macros, categories, and metadata for XWiki',
105 - 'Redirect old URLs and maintain SEO consistency'
106 - ]
107 - }])
108 - <section class="services" aria-labelledby="services-title">
48 +
49 + <section aria-labelledby="platform-title">
109 109   <div class="container">
110 - <h2 id="services-title">Services</h2>
111 - <p class="lead">
112 - All the XWiki services you need, delivered with precision and care
51 + <h2 id="platform-title">When XWiki becomes business-critical, it needs professional care</h2>
52 + <p class="section-intro">
53 + Many organizations start with XWiki as a documentation platform. Over time, it becomes a knowledge base,
54 + intranet, SOP portal, workflow system, audit trail or integration hub. At that point, upgrades, security,
55 + performance, permissions and maintainability are no longer optional technical details.
113 113   </p>
114 114  
115 - #set ($servicesSize = $servicesSectionData.size())
116 - <div class="services-grid">
117 - #foreach ($entry in $servicesSectionData)
118 - #set ($classes = "service")
119 - ## If this is the last item AND the total number is odd, center it
120 - #if ($foreach.count == $servicesSize && ($servicesSize % 2) == 1)
121 - #set ($classes = "service service-center")
122 - #end
58 + <div class="pathways">
59 + <article class="pathway-card">
60 + <div class="pathway-icon">
61 + <i class="fa fa-refresh" aria-hidden="true"></i>
62 + </div>
63 + <h3>Keep XWiki current</h3>
64 + <p>
65 + Plan and execute safe upgrades to supported XWiki versions, with compatibility checks and rollback planning.
66 + </p>
67 + <ul>
68 + <li>LTS upgrade planning</li>
69 + <li>Extension and custom code review</li>
70 + <li>Production rollout validation</li>
71 + </ul>
72 + <p class="card-link">
73 + <a href="/services/xwiki-upgrades">View upgrade services</a>
74 + </p>
75 + </article>
123 123  
124 - <article class="$classes">
125 - <div class="service-icon">
126 - <i class="fa fa-$entry.icon" aria-hidden="true"></i>
127 - </div>
128 - <div class="service-body">
129 - <h4>$entry.title</h4>
130 - <p>$entry.content</p>
131 - <ul>
132 - #foreach ($item in $entry.items)
133 - <li>$item</li>
134 - #end
135 - </ul>
136 - </div>
137 - </article>
138 - #end
77 + <article class="pathway-card">
78 + <div class="pathway-icon">
79 + <i class="fa fa-life-ring" aria-hidden="true"></i>
80 + </div>
81 + <h3>Keep XWiki reliable</h3>
82 + <p>
83 + Get long-term technical care for instances that need to stay stable, secure and recoverable.
84 + </p>
85 + <ul>
86 + <li>Troubleshooting and recovery</li>
87 + <li>Performance and log analysis</li>
88 + <li>Security-aware maintenance</li>
89 + </ul>
90 + <p class="card-link">
91 + <a href="/services/xwiki-maintenance-support">View support services</a>
92 + </p>
93 + </article>
94 +
95 + <article class="pathway-card">
96 + <div class="pathway-icon">
97 + <i class="fa fa-cogs" aria-hidden="true"></i>
98 + </div>
99 + <h3>Adapt XWiki to your business</h3>
100 + <p>
101 + Build workflows, custom applications, dashboards, integrations and automation around your processes.
102 + </p>
103 + <ul>
104 + <li>Custom XWiki applications</li>
105 + <li>Workflows and approvals</li>
106 + <li>SSO, LDAP, APIs and integrations</li>
107 + </ul>
108 + <p class="card-link">
109 + <a href="/services/xwiki-development-integrations">View development services</a>
110 + </p>
111 + </article>
139 139   </div>
140 140   </div>
141 141   </section>
142 - ## CTA INLINE
143 - <section id="contact" class="cta-section">
115 +
116 + <section class="split-section" aria-labelledby="why-title">
144 144   <div class="container">
145 - <p class="text-center contact-inline">
146 - Need help with your XWiki? <a href="$xwiki.getURL('contact.WebHome')">Contact Agnease</a>.
118 + <div class="split-grid">
119 + <div class="split-copy">
120 + <h2 id="why-title">Why choose Agnease</h2>
121 + <p>
122 + Agnease brings more than 11 years of hands-on XWiki expertise to organizations that need reliable
123 + knowledge platforms, secure upgrades, custom applications, integrations, migrations and long-term support.
124 + </p>
125 + <p>
126 + The approach is practical and engineering-focused: understand the current system, reduce risk,
127 + document the work and leave your XWiki easier to maintain.
128 + </p>
129 + </div>
130 +
131 + <ol class="process-list">
132 + <li>
133 + <strong>Review the current situation</strong>
134 + Version, extensions, infrastructure, authentication, custom code and business-critical features.
135 + </li>
136 + <li>
137 + <strong>Define a safe path forward</strong>
138 + Clear scope, expected effort, risks, rollback options and recommended next steps.
139 + </li>
140 + <li>
141 + <strong>Deliver and document the work</strong>
142 + Practical implementation, validation and documentation for future maintenance.
143 + </li>
144 + </ol>
145 + </div>
146 + </div>
147 + </section>
148 +
149 + <section class="resource-strip" aria-labelledby="resources-title">
150 + <div class="container">
151 + <h2 id="resources-title">Useful XWiki resources</h2>
152 + <p class="section-intro">
153 + Practical guidance for organizations running XWiki in production.
147 147   </p>
155 +
156 + <div class="resource-grid">
157 + <article class="resource-card">
158 + <h4>Why upgrade your XWiki instance?</h4>
159 + <p>
160 + A business-focused explanation of why regular LTS upgrades reduce security, compatibility and maintenance risk.
161 + </p>
162 + <a href="/resources/why-upgrade-xwiki">Read the resource</a>
163 + </article>
164 +
165 + <article class="resource-card">
166 + <h4>XWiki upgrade services</h4>
167 + <p>
168 + How Agnease approaches safe XWiki upgrades for real production environments with customizations and integrations.
169 + </p>
170 + <a href="/services/xwiki-upgrades">View the service</a>
171 + </article>
172 + </div>
148 148   </div>
149 149   </section>
150 - {{/html}}
151 -#end
152 152  
153 -#macro(requestConsultationModal)
154 - <div class="modal fade" id="requestConsultation" tabindex="-1" role="dialog">
155 - <div class="modal-dialog">
156 - <div class="modal-content">
157 - <div class="modal-header">
158 - <button type="button" class="close" data-dismiss="modal">&times;</button>
159 - <h4 class="modal-title">Request a consultation</h4>
176 + <section class="cta-section" aria-labelledby="contact-title">
177 + <div class="container">
178 + <div class="cta-panel">
179 + <h2 id="contact-title">Need help with XWiki?</h2>
180 + <p>
181 + Send your current XWiki version, the problem you are facing, or the type of project you want to build.
182 + A short description is enough to start the conversation.
183 + </p>
184 + <a class="btn btn-primary" href="$xwiki.getURL('contact.WebHome')">Contact Agnease</a>
160 160   </div>
161 - <div class="modal-body">
162 - <div>
163 - ##Need help with your XWiki? <a href="mailto:alex@agnease.com">Contact Agnease</a>
164 - #displayFormFromSheetCode()
165 - </div>
166 - </div>
167 - <div class="modal-footer">
168 - ##<input id="continueCategorySelection" type="button" class="btn btn-default" data-dismiss="modal"
169 - ## value="$escapetool.xml($services.localization.render('yesno_1'))">
170 - </div>
171 171   </div>
172 - </div>
173 - </div>
187 + </section>
188 +
189 + {{/html}}
174 174  #end
175 175  
176 176  #macro (stripHTMLMacro $displayOutput)
... ... @@ -215,4 +215,5 @@
215 215   </dl>
216 216   </div>
217 217  #end
234 +#displayPublicContent
218 218  {{/velocity}}
XWiki.StyleSheetExtension[0]
code
... ... @@ -60,15 +60,12 @@
60 60   align-items: center;
61 61   }
62 62  
63 - .hero-cta {
63 + #hero-cta {
64 64   display: flex;
65 65   gap: 0.8rem;
66 66   flex-wrap: wrap;
67 67   justify-content: center;
68 68   margin-top: 1.3rem;
69 - a:hover {
70 - text-decoration: none;
71 - }
72 72   }
73 73  
74 74   .benefits {
... ... @@ -237,3 +237,304 @@
237 237   a { color: @brand; }
238 238   }
239 239  }
237 +/* ========== Agnease Revamp Additions ========== */
238 +
239 +@brand-soft: #E7FFF8;
240 +@brand-bg: #F4FCFA;
241 +
242 +.hero-kicker {
243 + display: inline-flex;
244 + align-items: center;
245 + gap: 8px;
246 + color: @brand;
247 + background: fade(@brand, 8%);
248 + border: 1px solid fade(@brand, 18%);
249 + border-radius: 999px;
250 + padding: 6px 12px;
251 + margin-bottom: 14px;
252 + font-size: 13px;
253 + font-weight: 700;
254 +}
255 +
256 +.hero h1 {
257 + max-width: 760px;
258 + margin-left: auto;
259 + margin-right: auto;
260 + line-height: 1.18;
261 +}
262 +
263 +.hero .lead {
264 + max-width: 760px;
265 + font-size: 19px;
266 + line-height: 1.55;
267 +}
268 +
269 +.hero-support {
270 + max-width: 760px;
271 + margin: 14px auto 0;
272 + color: @muted;
273 + line-height: 1.55;
274 +}
275 +
276 +.hero-actions {
277 + display: flex;
278 + gap: 12px;
279 + flex-wrap: wrap;
280 + justify-content: center;
281 + margin-top: 22px;
282 +
283 + .btn-secondary {
284 + color: @brand;
285 + background: #fff;
286 + border: 1px solid fade(@brand, 35%);
287 +
288 + &:hover,
289 + &:focus {
290 + color: @brand-strong;
291 + border-color: @brand;
292 + background: @brand-bg;
293 + }
294 + }
295 +}
296 +
297 +.trust-strip {
298 + padding: 18px 0;
299 + border-top: 1px solid @line;
300 + border-bottom: 1px solid @line;
301 + background: #fff;
302 +
303 + ul {
304 + max-width: 920px;
305 + margin: 0 auto;
306 + padding: 0;
307 + list-style: none;
308 + display: flex;
309 + justify-content: center;
310 + gap: 22px;
311 + flex-wrap: wrap;
312 + color: @muted;
313 + font-size: 13px;
314 + }
315 +
316 + li {
317 + display: flex;
318 + align-items: center;
319 + gap: 7px;
320 + }
321 +
322 + i {
323 + color: @brand;
324 + }
325 +}
326 +
327 +.section-intro {
328 + max-width: 760px;
329 + margin: 0 auto 18px;
330 + text-align: center;
331 + color: @muted;
332 + font-size: 16px;
333 + line-height: 1.55;
334 +}
335 +
336 +.pathways {
337 + display: grid;
338 + grid-template-columns: repeat(3, minmax(0, 1fr));
339 + grid-gap: 18px;
340 + max-width: 1040px;
341 + margin: 22px auto 0;
342 +}
343 +
344 +.pathway-card {
345 + background: #fff;
346 + border: 1px solid @line;
347 + border-radius: @radius;
348 + box-shadow: @shadow-sm;
349 + padding: 22px;
350 + display: flex;
351 + flex-direction: column;
352 + min-height: 100%;
353 +
354 + .pathway-icon {
355 + width: 46px;
356 + height: 46px;
357 + border-radius: 50%;
358 + display: flex;
359 + align-items: center;
360 + justify-content: center;
361 + color: @brand;
362 + background: fade(@brand, 10%);
363 + margin-bottom: 14px;
364 + font-size: 18px;
365 + }
366 +
367 + h3 {
368 + margin: 0 0 8px;
369 + color: @text;
370 + font-size: 20px;
371 + line-height: 1.25;
372 + }
373 +
374 + p {
375 + color: @muted;
376 + line-height: 1.55;
377 + margin: 0 0 14px;
378 + }
379 +
380 + ul {
381 + margin: 0 0 18px;
382 + padding-left: 18px;
383 + color: @muted;
384 + font-size: 13px;
385 + }
386 +
387 + li {
388 + margin: 5px 0;
389 + }
390 +
391 + .card-link {
392 + margin-top: auto;
393 +
394 + a {
395 + color: @brand;
396 + font-weight: 700;
397 + }
398 + }
399 +}
400 +
401 +.split-section {
402 + background:
403 + radial-gradient(42rem 16rem at 50% 0%, @brand-bg 0%, transparent 65%);
404 +}
405 +
406 +.split-grid {
407 + display: grid;
408 + grid-template-columns: 1.1fr .9fr;
409 + grid-gap: 36px;
410 + max-width: 1040px;
411 + margin: 0 auto;
412 + align-items: center;
413 +}
414 +
415 +.split-copy {
416 + h2 {
417 + text-align: left;
418 + margin-top: 0;
419 + }
420 +
421 + p {
422 + color: @muted;
423 + line-height: 1.6;
424 + }
425 +}
426 +
427 +.process-list {
428 + counter-reset: process;
429 + margin: 0;
430 + padding: 0;
431 + list-style: none;
432 +}
433 +
434 +.process-list li {
435 + counter-increment: process;
436 + position: relative;
437 + padding: 16px 16px 16px 58px;
438 + margin-bottom: 12px;
439 + background: #fff;
440 + border: 1px solid @line;
441 + border-radius: @radius;
442 + box-shadow: @shadow-sm;
443 + color: @muted;
444 + line-height: 1.5;
445 +
446 + &:before {
447 + content: counter(process);
448 + position: absolute;
449 + left: 16px;
450 + top: 16px;
451 + width: 28px;
452 + height: 28px;
453 + border-radius: 50%;
454 + background: fade(@brand, 10%);
455 + color: @brand;
456 + display: flex;
457 + align-items: center;
458 + justify-content: center;
459 + font-weight: 800;
460 + }
461 +
462 + strong {
463 + display: block;
464 + color: @text;
465 + margin-bottom: 3px;
466 + }
467 +}
468 +
469 +.resource-strip {
470 + background: @brand-bg;
471 +
472 + .resource-grid {
473 + max-width: 1040px;
474 + margin: 20px auto 0;
475 + display: grid;
476 + grid-template-columns: repeat(2, minmax(0, 1fr));
477 + grid-gap: 16px;
478 + }
479 +
480 + .resource-card {
481 + background: #fff;
482 + border: 1px solid @line;
483 + border-radius: @radius;
484 + padding: 18px;
485 + box-shadow: @shadow-sm;
486 +
487 + h4 {
488 + margin: 0 0 6px;
489 + color: @text;
490 + }
491 +
492 + p {
493 + color: @muted;
494 + margin: 0 0 10px;
495 + line-height: 1.5;
496 + }
497 +
498 + a {
499 + color: @brand;
500 + font-weight: 700;
501 + }
502 + }
503 +}
504 +
505 +.cta-panel {
506 + max-width: 860px;
507 + margin: 0 auto;
508 + padding: 30px;
509 + border-radius: @radius;
510 + border: 1px solid fade(@brand, 20%);
511 + background:
512 + radial-gradient(34rem 12rem at 50% 0%, @brand-soft 0%, #fff 70%);
513 + box-shadow: @shadow-sm;
514 + text-align: center;
515 +
516 + h2 {
517 + margin-top: 0;
518 + }
519 +
520 + p {
521 + color: @muted;
522 + line-height: 1.55;
523 + }
524 +}
525 +
526 +@media (max-width: 900px) {
527 + .pathways,
528 + .split-grid,
529 + .resource-strip .resource-grid {
530 + grid-template-columns: 1fr;
531 + }
532 +
533 + .split-copy h2 {
534 + text-align: center;
535 + }
536 +}
537 +