Skip to content

Commit d704729

Browse files
committed
feat: add SEO content section with toggle functionality to enhance user engagement and improve visibility
1 parent d22eba5 commit d704729

File tree

2 files changed

+105
-1
lines changed

2 files changed

+105
-1
lines changed

apps/landing/src/components/FAQ.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import faqItems from "../data/faq";
66
---
77

88
<section class="">
9-
<div class="max-w-screen-lg mx-auto py-12 flex flex-col items-center">
9+
<div class="max-w-screen-lg mx-auto py-12 pb-6 flex flex-col items-center">
1010
<SectionName>FAQ</SectionName>
1111
<SectionTitle
1212
>Still <span class="text-gradient">Got Questions?</span></SectionTitle

apps/landing/src/pages/index.astro

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,61 @@ import faqItems from "../data/faq";
125125
<TechStack />
126126
<Testimonials />
127127
<FAQ />
128+
129+
<!-- SEO Content Section -->
130+
<section class="max-w-screen-lg mx-auto px-4 sm:px-8 py-4">
131+
<div class="flex justify-center mb-4">
132+
<button
133+
id="seo-toggle"
134+
class="text-zinc-600 hover:text-zinc-900 font-semibold px-4 py-2 rounded-full border border-zinc-300 hover:border-zinc-400 transition-colors"
135+
aria-expanded="false"
136+
aria-controls="seo-content"
137+
>
138+
<span id="seo-toggle-text">Show More</span>
139+
<span id="seo-toggle-icon" class="ml-2 inline-block">▼</span>
140+
</button>
141+
</div>
142+
<div
143+
id="seo-content"
144+
class="seo-content-hidden prose prose-zinc max-w-none text-zinc-600 text-sm sm:text-base leading-relaxed"
145+
>
146+
<h2 class="text-2xl font-bold text-zinc-900 mb-4">Self hosted uptime monitor for service availability control</h2>
147+
148+
<p class="mb-4">
149+
A self hosted uptime monitor is the foundation of a stable and predictable infrastructure. When websites, APIs, or internal services become unavailable, it is important to know about it immediately, not from users. Our service allows you to track the availability and operability of infrastructure in real time, fully within your environment and under your control.
150+
</p>
151+
152+
<p class="mb-4">
153+
The platform is deployed on your server or in your cloud and does not depend on external services. All monitoring data is stored with you, without being transferred to third parties. This approach is especially important for projects with increased requirements for security, privacy, and infrastructure management.
154+
</p>
155+
156+
<p class="mb-4">
157+
Our self hosted uptime monitor is suitable both for small teams and for growing projects with distributed architecture. The system scales easily, does not tie you to third-party providers, and provides a transparent understanding of the state of services at any moment in time.
158+
</p>
159+
160+
161+
162+
<h3 class="text-xl font-semibold text-zinc-900 mt-6 mb-3">Capabilities of the self hosted uptime monitor </h3>
163+
<p class="mb-4">
164+
The platform supports a wide range of checks required for modern availability monitoring. You can track HTTP and HTTPS websites, API endpoints, TCP ports, ICMP ping, DNS queries, Webhook checks in push mode, databases, and message brokers. Monitoring of Docker containers, gRPC services, and SNMP services is also supported, which allows you to control both the external perimeter and internal components of the infrastructure.
165+
</p>
166+
<p class="mb-4">
167+
When problems occur, the service instantly sends notifications through convenient channels: Telegram, Slack, Email, WhatsApp, Discord, Webhook, and others. Notifications can be flexibly configured, separated by severity levels, and adapted to team processes so that responses are fast and without unnecessary noise.
168+
169+
</p>
170+
<p class="mb-4">
171+
For availability transparency, status pages are provided. They can be public for customers or private for internal use and display the current state of services in a clear and visual format. This helps reduce the number of support requests and increase trust in the service.
172+
</p>
173+
174+
<p class="mb-4">
175+
The platform is fully self-hosted: you choose the database — SQLite for an easy start or PostgreSQL and MongoDB for production workloads. You control data storage, access, and security. Two-factor authentication, protection against brute-force attacks, and monitoring of SSL certificate expiration dates are supported.
176+
</p>
177+
178+
<p class="mb-4">
179+
Our service is focused on teams that need a reliable self hosted uptime monitor without vendor lock-in, with flexible configuration, a modern interface, and the ability to fully control infrastructure. It helps detect failures in a timely manner, maintain service stability, and ensure transparency of their operation.
180+
</p>
181+
</div>
182+
</section>
128183
</main>
129184
<Footer />
130185
<script>
@@ -152,10 +207,59 @@ import faqItems from "../data/faq";
152207
console.log(err);
153208
}
154209
})();
210+
211+
// SEO content toggle functionality
212+
(() => {
213+
const toggleButton = document.getElementById("seo-toggle");
214+
const seoContent = document.getElementById("seo-content");
215+
const toggleText = document.getElementById("seo-toggle-text");
216+
const toggleIcon = document.getElementById("seo-toggle-icon");
217+
218+
if (!toggleButton || !seoContent) return;
219+
220+
toggleButton.addEventListener("click", () => {
221+
const isExpanded = seoContent.classList.contains("seo-content-visible");
222+
223+
if (isExpanded) {
224+
seoContent.classList.remove("seo-content-visible");
225+
seoContent.classList.add("seo-content-hidden");
226+
toggleText.textContent = "Show More";
227+
toggleIcon.textContent = "▼";
228+
toggleButton.setAttribute("aria-expanded", "false");
229+
} else {
230+
seoContent.classList.remove("seo-content-hidden");
231+
seoContent.classList.add("seo-content-visible");
232+
toggleText.textContent = "Show Less";
233+
toggleIcon.textContent = "▲";
234+
toggleButton.setAttribute("aria-expanded", "true");
235+
}
236+
});
237+
})();
155238
</script>
156239
</body>
157240
</html>
158241

242+
<style>
243+
/* SEO content visibility - hidden by default but always in DOM for SEO */
244+
.seo-content-hidden {
245+
max-height: 0;
246+
overflow: hidden;
247+
transition: max-height 0.3s ease-out;
248+
}
249+
250+
.seo-content-visible {
251+
max-height: 5000px;
252+
overflow: visible;
253+
transition: max-height 0.5s ease-in;
254+
}
255+
256+
/* Ensure content is readable by search engines even when hidden */
257+
.seo-content-hidden * {
258+
position: relative;
259+
visibility: visible;
260+
}
261+
</style>
262+
159263
<svg
160264
xmlns="http://www.w3.org/2000/svg"
161265
width="0"

0 commit comments

Comments
 (0)