Changes for page Public Web Site
Last modified by Agnease on 2026/05/30 16:24
Summary
-
Page properties (2 modified, 0 added, 0 removed)
-
Objects (0 modified, 2 added, 0 removed)
Details
- Page properties
-
- Title
-
... ... @@ -1,1 +1,1 @@ 1 -PublicWebSite 1 +Public Web Site - Content
-
... ... @@ -1,2 +1,235 @@ 1 +{{velocity}} 2 +#macro (displayPublicContent) 3 + #set ($discard = $xwiki.ssx.use('PublicWebSite.WebHome')) 4 + {{html clean="false"}} 1 1 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> 2 2 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,0 +1,1 @@ 1 +long - code
-
... ... @@ -1,0 +1,237 @@ 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,0 +1,1 @@ 1 +LESS - use
-
... ... @@ -1,0 +1,1 @@ 1 +onDemand
- XWiki.XWikiRights[0]
-
- allow
-
... ... @@ -1,0 +1,1 @@ 1 +Allow - groups
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.XWikiAllGroup - levels
-
... ... @@ -1,0 +1,1 @@ 1 +view - users
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.XWikiGuest