@@ -36,7 +36,6 @@ import {
3636import Image from "next/image" ;
3737import Link from "next/link" ;
3838import { Suspense } from "react" ;
39- import AceEditor from "react-ace" ;
4039
4140export default async function HomePageRoute ( ) {
4241 return (
@@ -53,12 +52,12 @@ export default async function HomePageRoute() {
5352 </ Link >
5453 </ div >
5554
56- < h1 className = "text-3xl sm:text-5xl md:text-6xl lg:text-7xl font-bold text-center tracking-tight text-gray-900 font-poppins" >
57- Save Time & Money < br /> on{ " " }
58- < span className = "text-blue-600" > Scheduling</ span >
55+ < h1 className = "text-3xl sm:text-5xl md:text-6xl font-bold text-center tracking-tight text-gray-900 font-poppins" >
56+ < span className = "text-blue-600" > Developer-First</ span > Task Scheduling
5957 </ h1 >
6058 < p className = "text-sm md:text-base font-medium text-center text-gray-600 mb-6" >
61- The scheduling system your apps can depend on
59+ API-first scheduling for developers. Set up timed tasks, delays, and
60+ reminders—without managing servers or cron jobs
6261 </ p >
6362 < div className = "flex flex-row items-center" >
6463 < Link href = "/5-min-guide" >
@@ -99,17 +98,17 @@ export default async function HomePageRoute() {
9998 </ section >
10099 { /* <LandingAnimation /> */ }
101100
102- < section className = "container mt-20 " >
103- < h2 className = "my-10 text-5xl font-geist-mono text-center font-bold tracking-tight transition-colors first:mt-0" >
104- Features
101+ < section className = "container mt-20" >
102+ < h2 className = "my-10 text-5xl font-geist-mono text-center font-bold tracking-tight transition-colors first:mt-0 pb-10 " >
103+ Why Developers Love Schedify
105104 </ h2 >
106105
107106 < div className = "grid grid-cols-1 md:grid-cols-3 place-items-center gap-6" >
108107 { [
109108 {
110109 icon : < LucideClock className = "size-6 stroke-black" /> ,
111110 title : "Task Scheduling" ,
112- text : "Reliable task scheduling for your server " ,
111+ text : "Offload timed tasks with atomic reliability " ,
113112 } ,
114113 {
115114 icon : < LucideCable className = "size-6 stroke-black" /> ,
@@ -119,13 +118,12 @@ export default async function HomePageRoute() {
119118 {
120119 icon : < LucideLock className = "size-6 stroke-black" /> ,
121120 title : "Secure" ,
122- text : "Webhooks are secure with HMAC signature " ,
121+ text : "HMAC-signed payloads for peace of mind " ,
123122 } ,
124123 ] . map ( ( item , index ) => (
125124 < div
126125 key = { index }
127126 className = "flex flex-col items-center gap-5 text-center"
128- // className="flex flex-col items-center justify-center border border-dashed border-neutral-500 p-5 rounded-lg shadow-lg hover:shadow-xl transition-all duration-300 bg-secondary text-center"
129127 >
130128 < div className = "bg-blue-50 p-3 rounded-full" > { item . icon } </ div >
131129
@@ -141,85 +139,90 @@ export default async function HomePageRoute() {
141139 </ section >
142140
143141 < section className = "container mt-32" >
144- < h2 className = "my-10 text-5xl font-geist-mono text-center font-bold tracking-tight transition-colors first:mt-0" >
145- Use cases
142+ < h2 className = "my-10 text-5xl font-geist-mono text-center font-bold tracking-tight transition-colors first:mt-0 pb-10 " >
143+ Example use cases
146144 </ h2 >
147- < div className = "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8 mt-10" >
145+ < div className = "grid grid-cols-1 gap-5 mt-10" >
148146 { /* 1. Scheduled Notifications */ }
149- < div className = "flex flex-col items-center text-center p-6 border rounded-lg shadow-sm hover:shadow-md transition" >
150- < i className = "fas fa-bell text-4xl text-indigo-500 mb-4" > </ i >
151- < h3 className = "text-xl font-semibold mb-2" >
152- Scheduled Notifications
153- </ h3 >
154- < p className = "text-gray-600" >
155- Send reminders, alerts, or emails at a specific time. < br />
156- < span className = "text-sm text-gray-500 italic" >
157- e.g., Send appointment reminders 24 hours in advance.
158- </ span >
159- </ p >
160- </ div >
161-
162- { /* 2. Delayed Webhooks */ }
163- < div className = "flex flex-col items-center text-center p-6 border rounded-lg shadow-sm hover:shadow-md transition" >
164- < i className = "fas fa-clock text-4xl text-green-500 mb-4" > </ i >
165- < h3 className = "text-xl font-semibold mb-2" > Delayed Webhooks</ h3 >
166- < p className = "text-gray-600" >
167- Trigger webhooks after a delay. < br />
168- < span className = "text-sm text-gray-500 italic" >
169- e.g., Trigger a payment retry webhook 12 hours after failure.
170- </ span >
147+ < div className = "flex flex-col p-6 border rounded-lg shadow-sm hover:shadow-md transition" >
148+ < h3 className = "text-xl font-semibold mb-2" > 1. Abandoned Orders</ h3 >
149+ < p className = "text-gray-600 pb-5 text-sm" >
150+ Cancel unpaid orders < strong > 30 minutes after creation</ strong >
171151 </ p >
152+ < CodeBlock lang = "typescript" >
153+ { `// At 2:00PM order is placed
154+ schedify.schedule({
155+ event: "cancel_order",
156+ payload: { orderId: "ord_123" },
157+ after: "30m" // ← Will run at 2:30PM
158+ });` }
159+ </ CodeBlock >
172160 </ div >
173161
174- { /* 3. Subscription Expiry Reminders */ }
175- < div className = "flex flex-col items-center text-center p-6 border rounded-lg shadow-sm hover:shadow-md transition" >
176- < i className = "fas fa-hourglass-end text-4xl text-yellow-500 mb-4" > </ i >
162+ < div className = "flex flex-col p-6 border rounded-lg shadow-sm hover:shadow-md transition" >
177163 < h3 className = "text-xl font-semibold mb-2" >
178- Subscription Reminders
164+ 2. End-of-Day Reports
179165 </ h3 >
180- < p className = "text-gray-600" >
181- Notify users when subscriptions are about to expire. < br />
182- < span className = "text-sm text-gray-500 italic" >
183- e.g., Notify users 3 days before their subscription ends.
184- </ span >
166+ < p className = "text-gray-600 pb-5 text-sm" >
167+ Generate reports < strong > every day at 11:59PM</ strong >
185168 </ p >
186- </ div >
169+ < CodeBlock lang = "typescript" >
170+ { `// Runs nightly at midnight
171+ schedify.schedule({
172+ event: "generate_report",
173+ reportType: "daily",
174+ at: "0 23 * * *" // ← Cron syntax
175+ });` }
176+ </ CodeBlock >
187177
188- { /* 4. Drip Campaigns */ }
189- < div className = "flex flex-col items-center text-center p-6 border rounded-lg shadow-sm hover:shadow-md transition" >
190- < i className = "fas fa-envelope-open-text text-4xl text-pink-500 mb-4" > </ i >
191- < h3 className = "text-xl font-semibold mb-2" > Drip Campaigns</ h3 >
192- < p className = "text-gray-600" >
193- Automate onboarding or marketing emails in a sequence. < br />
194- < span className = "text-sm text-gray-500 italic" >
195- e.g., Send "Welcome", "Getting Started", and "Tips" emails over
196- 7 days.
197- </ span >
198- </ p >
178+ < i className = "mt-3 text-sm text-gray-600" >
179+ Note: Cron based scheduling is not live yet!
180+ </ i >
199181 </ div >
200182
201- { /* 5. Task Scheduling */ }
202- < div className = "flex flex-col items-center text-center p-6 border rounded-lg shadow-sm hover:shadow-md transition" >
203- < i className = "fas fa-tasks text-4xl text-blue-500 mb-4" > </ i >
204- < h3 className = "text-xl font-semibold mb-2" > Task Scheduling</ h3 >
205- < p className = "text-gray-600" >
206- Queue backend tasks for future execution. < br />
207- < span className = "text-sm text-gray-500 italic" >
208- e.g., Schedule a data cleanup job at midnight.
209- </ span >
183+ { /* Example 3 - Sequence */ }
184+ < div className = "flex flex-col p-6 border rounded-lg shadow-sm hover:shadow-md transition" >
185+ < h3 className = "text-xl font-semibold mb-2" >
186+ 3. Welcome Email Series
187+ </ h3 >
188+ < p className = "text-gray-600 pb-5 text-sm" >
189+ Send emails < strong > immediately, 1 day, and 7 days</ strong > after
190+ signup
210191 </ p >
192+ < CodeBlock lang = "typescript" >
193+ { `// User signs up at 4:00PM Jan 1
194+ schedify.scheduleMany([
195+ { event: "welcome_email", after: "0m" }, // 4:00PM Jan 1
196+ { event: "tips_email", after: "1d" }, // 4:00PM Jan 2
197+ { event: "offer_email", after: "7d" } // 4:00PM Jan 8
198+ ]);` }
199+ </ CodeBlock >
200+
201+ < i className = "mt-3 text-sm text-gray-600" >
202+ Note: Sequence scheduling is not live yet!
203+ </ i >
211204 </ div >
212205
213- { /* 6. Event Follow-Ups */ }
214- < div className = "flex flex-col items-center text-center p-6 border rounded-lg shadow-sm hover:shadow-md transition" >
215- < i className = "fas fa-clipboard-check text-4xl text-purple-500 mb-4" > </ i >
216- < h3 className = "text-xl font-semibold mb-2" > Event Follow-Ups</ h3 >
217- < p className = "text-gray-600" >
218- Send follow-up messages after a user action. < br />
219- < span className = "text-sm text-gray-500 italic" >
220- e.g., Send feedback form 2 hours after a webinar ends.
221- </ span >
206+ { /* Example 4 - Timezone-Aware */ }
207+ < div className = "flex flex-col p-6 border rounded-lg shadow-sm hover:shadow-md transition" >
208+ < h3 className = "text-xl font-semibold mb-2" >
209+ 4. Morning Notifications
210+ </ h3 >
211+ < p className = "text-gray-600 pb-5 text-sm" >
212+ Send alerts < strong > at 9:00AM in user's timezone</ strong >
222213 </ p >
214+ < CodeBlock lang = "typescript" >
215+ { `// For user in PST (UTC-8)
216+ schedify.schedule({
217+ event: "morning_alert",
218+ userId: "u_456",
219+ at: "2023-12-01T09:00:00-08:00" // ← 9AM PST
220+ });` }
221+ </ CodeBlock >
222+ < i className = "mt-3 text-sm text-gray-600" >
223+ Note: User based timezone scheduling is not live yet! We convert
224+ all time to UTC
225+ </ i >
223226 </ div >
224227 </ div >
225228 </ section >
@@ -284,20 +287,17 @@ export default async function HomePageRoute() {
284287 < div className = "col-span-3 space-y-4 flex flex-col" >
285288 < div >
286289 < CodeBlock lang = "typescript" >
287- { `const client = new Client("API_KEY");
288-
289- await client.createTask("WEBHOOK_ID", {
290- eventName: "user.created",
291- payload: {
292- username: "new_user",
293- email: "new_user@example.com",
294- },
295- scheduledFor: "ISO_STRING"
290+ { `const schedify = new SchedifyClient("API_KEY");
291+
292+ await schedify.schedule("WEBHOOK_ID", {
293+ event: "cancel_order",
294+ payload: { orderId: "ord_123" },
295+ after: "30m" // ← Will run at 2:30PM
296296});` }
297297 </ CodeBlock >
298298 </ div >
299299
300- < div className = "inline-flex items-center gap-5 justify-center" >
300+ { /* <div className="inline-flex items-center gap-5 justify-center">
301301 <div className="size-5 ring-4 ring-offset-4 rounded cursor-pointer">
302302 <svg
303303 role="img"
@@ -319,7 +319,7 @@ await client.createTask("WEBHOOK_ID", {
319319 <path d="M1.811 10.231c-.047 0-.058-.023-.035-.059l.246-.315c.023-.035.081-.058.128-.058h4.172c.046 0 .058.035.035.07l-.199.303c-.023.036-.082.07-.117.07zM.047 11.306c-.047 0-.059-.023-.035-.058l.245-.316c.023-.035.082-.058.129-.058h5.328c.047 0 .07.035.058.07l-.093.28c-.012.047-.058.07-.105.07zm2.828 1.075c-.047 0-.059-.035-.035-.07l.163-.292c.023-.035.07-.07.117-.07h2.337c.047 0 .07.035.07.082l-.023.28c0 .047-.047.082-.082.082zm12.129-2.36c-.736.187-1.239.327-1.963.514-.176.046-.187.058-.34-.117-.174-.199-.303-.327-.548-.444-.737-.362-1.45-.257-2.115.175-.795.514-1.204 1.274-1.192 2.22.011.935.654 1.706 1.577 1.835.795.105 1.46-.175 1.987-.77.105-.13.198-.27.315-.434H10.47c-.245 0-.304-.152-.222-.35.152-.362.432-.97.596-1.274a.315.315 0 01.292-.187h4.253c-.023.316-.023.631-.07.947a4.983 4.983 0 01-.958 2.29c-.841 1.11-1.94 1.8-3.33 1.986-1.145.152-2.209-.07-3.143-.77-.865-.655-1.356-1.52-1.484-2.595-.152-1.274.222-2.419.993-3.424.83-1.086 1.928-1.776 3.272-2.02 1.098-.2 2.15-.07 3.096.571.62.41 1.063.97 1.356 1.648.07.105.023.164-.117.2m3.868 6.461c-1.064-.024-2.034-.328-2.852-1.029a3.665 3.665 0 01-1.262-2.255c-.21-1.32.152-2.489.947-3.529.853-1.122 1.881-1.706 3.272-1.95 1.192-.21 2.314-.095 3.33.595.923.63 1.496 1.484 1.648 2.605.198 1.578-.257 2.863-1.344 3.962-.771.783-1.718 1.273-2.805 1.495-.315.06-.63.07-.934.106zm2.78-4.72c-.011-.153-.011-.27-.034-.387-.21-1.157-1.274-1.81-2.384-1.554-1.087.245-1.788.935-2.045 2.033-.21.912.234 1.835 1.075 2.21.643.28 1.285.244 1.905-.07.923-.48 1.425-1.228 1.484-2.233z" />
320320 </svg>
321321 </div>
322- </ div >
322+ </div> */ }
323323 </ div >
324324 </ div >
325325 </ div >
0 commit comments