Changes for page Public Web Site

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

From version 6.27
edited by Agnease
on 2026/05/12 11:59
Change comment: There is no comment for this version
To version 1.1
edited by Agnease
on 2025/11/24 07:16
Change comment: There is no comment for this version

Summary

Details

Page properties
Title
... ... @@ -1,1 +1,1 @@
1 -Public Web Site
1 +PublicWebSite
Content
... ... @@ -1,235 +5,2 @@
1 -{{velocity}}
2 -#macro (displayPublicContent)
3 - #set ($discard = $xwiki.ssx.use('PublicWebSite.WebHome'))
4 - {{html clean="false"}}
5 5  
6 - <section class="hero hero-centered" aria-labelledby="hero-title">
7 - <div class="container hero-inner">
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 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 -
24 - <ul class="benefits">
25 - <li>Safe LTS upgrades</li>
26 - <li>Support and recovery</li>
27 - <li>Custom XWiki applications</li>
28 - <li>Integrations and migrations</li>
29 - </ul>
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>
34 - </div>
35 - </div>
36 - </section>
37 -
38 - <section class="trust-strip" aria-label="Agnease experience">
39 - <div class="container">
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>
46 - </div>
47 - </section>
48 -
49 - <section aria-labelledby="platform-title">
50 - <div class="container">
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.
56 - </p>
57 -
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>
76 -
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>
112 - </div>
113 - </div>
114 - </section>
115 -
116 - <section class="split-section" aria-labelledby="why-title">
117 - <div class="container">
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.
154 - </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>
173 - </div>
174 - </section>
175 -
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>
185 - </div>
186 - </div>
187 - </section>
188 -
189 - {{/html}}
190 -#end
191 -
192 -#macro (stripHTMLMacro $displayOutput)
193 - $stringtool.removeEnd($stringtool.removeStart($displayOutput, '{{html clean="false" wiki="false"}}'), '{{/html}}').replace('Agnease.Code.Lead.LeadClass_0_', 'acl-')
194 -#end
195 -
196 -#macro (displayFormFromSheetCode)
197 - #set ($editing = true)
198 - ## The object to display.
199 - #set ($xobject = $doc.newObject('Agnease.Code.Lead.LeadClass'))
200 - ## The class that describes the object properties.
201 - #set ($xclass = $xwiki.getClass('Agnease.Code.Lead.LeadClass'))
202 - ## Make sure the following display* method calls use the right object.
203 - #set ($discard = $doc.use($xobject))
204 - ## Using the xform vertical form layout.
205 - <div class="xform">
206 - <dl>
207 - #foreach ($property in $xclass.properties)
208 - #if ($property.name != 'status')
209 - <dt #if (!$editing)
210 - class="editableProperty"
211 - #set ($xobjectPropertyReference = $xobject.getPropertyReference($property.name))
212 - data-property="$escapetool.xml($services.model.serialize($xobjectPropertyReference))"
213 - data-property-type="object"#end>
214 - ## This must match the id generated by the $doc.display() method below.
215 - #set ($propertyId = "acl-$property.name")
216 - <label#if ($editing) for="$escapetool.xml($propertyId)"#end>
217 - $escapetool.xml($property.translatedPrettyName)
218 - </label>
219 - ## Support for specifying a translation key as hint in the property definition.
220 - <span class="xHint">$!escapetool.xml($services.localization.render($property.hint))</span>
221 - </dt>
222 - #set ($displayOutput = $doc.display($property.name, 'edit'))
223 - <dd>#stripHTMLMacro($displayOutput)</dd>
224 - #end
225 - #end
226 - #if (!$xclass.properties || $xclass.properties.size() == 0)
227 - ## Keep the empty definition term in order to have valid HTML.
228 - <dt></dt>
229 - <dd>$escapetool.xml($services.localization.render('xclass.defaultObjectSheet.noProperties'))</dd>
230 - #end
231 - </dl>
232 - </div>
233 -#end
234 -#displayPublicContent
235 -{{/velocity}}
XWiki.StyleSheetExtension[0]
cache
... ... @@ -1,1 +1,0 @@
1 -long
code
... ... @@ -1,237 +1,0 @@
1 -/* ========== Agnease Landing (no Bootstrap grid) ========== */
2 -@brand: #00937D;
3 -@brand-strong: #007B6A;
4 -@text: #2D3A34;
5 -@muted: #5B6B64;
6 -@line: #E4ECE9;
7 -@radius: 16px;
8 -@shadow-sm: 0 6px 20px rgba(0,0,0,.06);
9 -@shadow: 0 12px 36px rgba(0,0,0,.08);
10 -@maxw: 1140px;
11 -
12 -#mainContentArea {
13 - padding: 0;
14 -}
15 -
16 -.container {
17 - max-width: @maxw;
18 -}
19 -
20 -.lead {
21 - color: @muted;
22 - text-align: center;
23 - margin-bottom: 0;
24 -}
25 -h2 {
26 - text-align: center;
27 -}
28 -
29 -section {
30 - padding: 32px 0;
31 - border-top: 1px solid @line;
32 -
33 - &:first-of-type {
34 - border-top: none;
35 - }
36 -}
37 -
38 -/* ===== HERO ===== */
39 -.hero {
40 - overflow: hidden;
41 - background-repeat: no-repeat;
42 - background-attachment: scroll;
43 -
44 - &.hero-centered {
45 - text-align: center;
46 - background:
47 - radial-gradient(50rem 18rem at 50% -10%, #E7FFF8 0%, transparent 60%),
48 - radial-gradient(50rem 18rem at 50% 0%, #E8F6F3 0%, transparent 60%);
49 - display: flex;
50 - align-items: center;
51 - justify-content: center;
52 - min-height: 300px;
53 - }
54 -
55 - .hero-inner {
56 - max-width: 850px;
57 - margin: 0 auto;
58 - display: flex;
59 - flex-direction: column;
60 - align-items: center;
61 - }
62 -
63 - #hero-cta {
64 - display: flex;
65 - gap: 0.8rem;
66 - flex-wrap: wrap;
67 - justify-content: center;
68 - margin-top: 1.3rem;
69 - }
70 -
71 - .benefits {
72 - display: flex;
73 - flex-wrap: wrap;
74 - justify-content: center;
75 - list-style: none;
76 - padding: 0;
77 - margin: 0.8rem 0 0;
78 - color: @muted;
79 - font-size: 14px;
80 -
81 - li + li::before {
82 - content: "•";
83 - margin: 0 5px;
84 - }
85 -
86 - @media (max-width: 640px) {
87 - li + li::before {
88 - content: none;
89 - }
90 - li:nth-child(1)::after,
91 - li:nth-child(3)::after {
92 - content: "•";
93 - margin: 0 5px;
94 - }
95 - }
96 - }
97 -}
98 -
99 -/* ===== WHY CHOOSE (cards) ===== */
100 -.widgets {
101 - margin-top: 12px;
102 - display: grid;
103 - grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
104 - grid-gap: 16px;
105 -}
106 -
107 -.widget {
108 - padding: 18px;
109 - background: #fff;
110 - border: 1px solid @line;
111 - border-radius: @radius;
112 - box-shadow: @shadow-sm;
113 - transition: transform .18s ease, box-shadow .18s ease;
114 - display: flex;
115 - flex-direction: column;
116 - height: 100%;
117 -
118 - &:hover {
119 - transform: translateY(-2px);
120 - box-shadow: @shadow;
121 - }
122 -
123 - .icon {
124 - display: flex;
125 - align-items: center;
126 - gap: 10px;
127 - padding-bottom: 6px;
128 - margin-bottom: 8px;
129 - border-bottom: 1px solid fade(@line, 60%);
130 - i { color: @brand; }
131 - h4 { margin: 0; line-height: 1.2; color: @text; }
132 - }
133 -
134 - p {
135 - margin: 0;
136 - color: @muted;
137 - line-height: 1.45;
138 - }
139 -}
140 -
141 -/* ===== SERVICES ===== */
142 -.services {
143 - .services-grid {
144 - margin-top: 20px;
145 - display: flex;
146 - flex-wrap: wrap;
147 - gap: 24px;
148 -
149 - /* center the whole block under the heading */
150 - max-width: 960px;
151 - margin-left: auto;
152 - margin-right: auto;
153 - justify-content: center;
154 - }
155 -
156 - .service {
157 - flex: 0 1 calc(50% - 12px);
158 - display: flex;
159 - align-items: flex-start;
160 - gap: 16px;
161 - margin-bottom: 8px;
162 -
163 - .service-icon {
164 - width: 42px;
165 - height: 42px;
166 - border-radius: 50%;
167 - display: flex;
168 - align-items: center;
169 - justify-content: center;
170 - font-size: 18px;
171 - color: @brand;
172 - background: fade(@brand, 10%);
173 - flex-shrink: 0;
174 - margin-top: 3px;
175 - }
176 -
177 - .service-body {
178 - h4 {
179 - margin: 0 0 4px;
180 - font-size: 1.125rem;
181 - font-weight: 800;
182 - }
183 - p {
184 - margin: 0 0 6px;
185 - color: @text;
186 - line-height: 1.5;
187 - }
188 - ul {
189 - margin: .45rem 0 0;
190 - padding-left: 1.1rem;
191 - color: @muted;
192 - font-size: 13px;
193 - }
194 - li {
195 - margin: .25rem 0;
196 - line-height: 1.45;
197 - }
198 - }
199 - }
200 -
201 - /* ==== Center last item on its own row while keeping 50% width ==== */
202 - .service-center {
203 - /* same width as siblings */
204 - flex: 0 1 calc(55% - 12px);
205 -
206 - /* push to center */
207 - margin-left: auto;
208 - margin-right: auto;
209 - }
210 -
211 - /* Mobile: 1 per row */
212 - @media (max-width: 767px) {
213 - .services-grid {
214 - gap: 16px;
215 - max-width: 100%;
216 - }
217 -
218 - .service,
219 - .service-center {
220 - flex: 0 1 100%;
221 - margin-left: 0;
222 - margin-right: 0;
223 - }
224 - }
225 -}
226 -
227 -/* ===== CTA ===== */
228 -.cta-section {
229 - padding: 24px 0 16px;
230 -
231 - .contact-inline {
232 - margin: 0;
233 - color: @muted;
234 - a { color: @brand; }
235 - }
236 -}
237 -
contentType
... ... @@ -1,1 +1,0 @@
1 -LESS
use
... ... @@ -1,1 +1,0 @@
1 -onDemand
XWiki.XWikiRights[0]
allow
... ... @@ -1,1 +1,0 @@
1 -Allow
groups
... ... @@ -1,1 +1,0 @@
1 -XWiki.XWikiAllGroup
levels
... ... @@ -1,1 +1,0 @@
1 -view
users
... ... @@ -1,1 +1,0 @@
1 -XWiki.XWikiGuest