116 lines
5.2 KiB
TypeScript
116 lines
5.2 KiB
TypeScript
/**
|
|
* rSchedule landing page — persistent job scheduling for rSpace.
|
|
*/
|
|
export function renderLanding(): string {
|
|
return `
|
|
<!-- Hero -->
|
|
<div class="rl-hero">
|
|
<span class="rl-tagline" style="color:#f59e0b;background:rgba(245,158,11,0.1);border-color:rgba(245,158,11,0.2)">
|
|
Persistent Scheduling
|
|
</span>
|
|
<h1 class="rl-heading" style="background:linear-gradient(to right,#f59e0b,#f97316,#ef4444);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text">
|
|
Automate (you)rSpace,<br>on (you)rSchedule.
|
|
</h1>
|
|
<p class="rl-subtitle">
|
|
Cron-powered job scheduling with email, webhooks, calendar events, and backlog briefings — all managed from within rSpace.
|
|
</p>
|
|
<p class="rl-subtext">
|
|
rSchedule replaces system-level crontabs with an <span style="color:#f59e0b;font-weight:600">in-process, persistent scheduler</span>.
|
|
Jobs survive restarts, fire on a 60-second tick loop, and are fully configurable through the UI.
|
|
</p>
|
|
<div class="rl-cta-row">
|
|
<a href="#" class="rl-cta-primary" id="ml-primary"
|
|
style="background:linear-gradient(to right,#f59e0b,#f97316);color:#0b1120"
|
|
onclick="document.querySelector('.rl-hero').closest('[data-space]')?.getAttribute('data-space') ? window.location.href='/' + document.querySelector('.rl-hero').closest('[data-space]').getAttribute('data-space') + '/rschedule' : void 0; return false;">
|
|
Open Scheduler
|
|
</a>
|
|
<a href="#features" class="rl-cta-secondary">Learn More</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Features (4-card grid) -->
|
|
<section class="rl-section" id="features" style="border-top:none">
|
|
<div class="rl-container">
|
|
<div class="rl-grid-4">
|
|
<div class="rl-card rl-card--center" style="padding:2rem">
|
|
<div class="rl-icon-box" style="background:rgba(245,158,11,0.12);font-size:1.5rem">
|
|
<span style="font-size:1.5rem">⏰</span>
|
|
</div>
|
|
<h3>Cron Expressions</h3>
|
|
<p>Standard cron syntax with timezone support. Schedule anything from every minute to once a year.</p>
|
|
</div>
|
|
<div class="rl-card rl-card--center" style="padding:2rem">
|
|
<div class="rl-icon-box" style="background:rgba(249,115,22,0.12);font-size:1.5rem">
|
|
<span style="font-size:1.5rem">📧</span>
|
|
</div>
|
|
<h3>Email Actions</h3>
|
|
<p>Send scheduled emails via SMTP — morning briefings, weekly digests, monthly audits.</p>
|
|
</div>
|
|
<div class="rl-card rl-card--center" style="padding:2rem">
|
|
<div class="rl-icon-box" style="background:rgba(239,68,68,0.12);font-size:1.5rem">
|
|
<span style="font-size:1.5rem">🔗</span>
|
|
</div>
|
|
<h3>Webhook Actions</h3>
|
|
<p>Fire HTTP requests on schedule — trigger builds, sync data, or ping external services.</p>
|
|
</div>
|
|
<div class="rl-card rl-card--center" style="padding:2rem">
|
|
<div class="rl-icon-box" style="background:rgba(52,211,153,0.12);font-size:1.5rem">
|
|
<span style="font-size:1.5rem">📋</span>
|
|
</div>
|
|
<h3>Backlog Briefings</h3>
|
|
<p>Automated task digests from your Backlog — morning, weekly, and monthly summaries delivered by email.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- How it works -->
|
|
<section class="rl-section">
|
|
<div class="rl-container">
|
|
<h2 style="text-align:center;font-size:1.5rem;margin-bottom:2rem;color:#e2e8f0">How it works</h2>
|
|
<div class="rl-grid-2">
|
|
<div class="rl-card" style="padding:2rem">
|
|
<h3 style="color:#f59e0b">Persistent Jobs</h3>
|
|
<p>Jobs are stored in Automerge documents — they survive container restarts and server reboots. No more lost crontabs.</p>
|
|
</div>
|
|
<div class="rl-card" style="padding:2rem">
|
|
<h3 style="color:#f97316">60-Second Tick Loop</h3>
|
|
<p>A lightweight in-process loop checks every 60 seconds for due jobs. No external scheduler process needed.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Ecosystem integration -->
|
|
<section class="rl-section">
|
|
<div class="rl-container">
|
|
<h2 style="text-align:center;font-size:1.5rem;margin-bottom:2rem;color:#e2e8f0">Ecosystem Integration</h2>
|
|
<div class="rl-grid-3">
|
|
<div class="rl-card rl-card--center" style="padding:1.5rem">
|
|
<h3>rCal</h3>
|
|
<p>Create recurring calendar events automatically via the calendar-event action type.</p>
|
|
</div>
|
|
<div class="rl-card rl-card--center" style="padding:1.5rem">
|
|
<h3>rInbox</h3>
|
|
<p>Schedule email delivery through shared SMTP infrastructure.</p>
|
|
</div>
|
|
<div class="rl-card rl-card--center" style="padding:1.5rem">
|
|
<h3>Backlog</h3>
|
|
<p>Scan backlog tasks and generate automated priority briefings on any cadence.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- CTA -->
|
|
<section class="rl-section" style="text-align:center;padding:4rem 0">
|
|
<h2 class="rl-heading" style="font-size:1.75rem;background:linear-gradient(to right,#f59e0b,#f97316);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text">
|
|
Stop managing crontabs. Start scheduling from rSpace.
|
|
</h2>
|
|
<p style="color:rgba(148,163,184,0.8);margin-top:1rem">
|
|
<a href="/" style="color:#f59e0b;text-decoration:none">← Back to rSpace</a>
|
|
</p>
|
|
</section>
|
|
`;
|
|
}
|