diff --git a/data/launch-status.json b/data/launch-status.json new file mode 100644 index 0000000..cdf5cf8 --- /dev/null +++ b/data/launch-status.json @@ -0,0 +1,316 @@ +{ + "campaign": "derez.ai Prelaunch", + "day": 1, + "total_days": 14, + "status": "active", + "updated": "2026-06-09T17:00:10-04:00", + "kpis": [ + { + "id": "signups", + "current": 0, + "target": 20 + }, + { + "id": "visitors", + "current": 0, + "target": 500 + }, + { + "id": "emails", + "current": 0, + "target": 50 + }, + { + "id": "backlinks", + "current": 0, + "target": 10 + }, + { + "id": "influencers", + "current": 0, + "target": 5 + }, + { + "id": "testimonials", + "current": 0, + "target": 5 + }, + { + "id": "impressions", + "current": 0, + "target": 2000 + }, + { + "id": "directory", + "current": 0, + "target": 3 + } + ], + "actions": [ + { + "day": 1, + "action": "Set up friends & family invite list (20\u201330 contacts)", + "owner": "Oliver", + "status": "today" + }, + { + "day": 1, + "action": "Generate & configure referral coupon codes in Stripe", + "owner": "Mint", + "status": "today" + }, + { + "day": 1, + "action": "Create prelaunch landing page / launch-dashboard", + "owner": "Mint", + "status": "done" + }, + { + "day": 1, + "action": "Submit to Google Search Console + Bing Webmaster Tools", + "owner": "Mint", + "status": "today" + }, + { + "day": 1, + "action": "Set up UTM tracking for all campaign links", + "owner": "Mint", + "status": "today" + }, + { + "day": 2, + "action": "Send friends & family invitation emails", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 2, + "action": "Create F&F onboarding docs (1-pager + video)", + "owner": "Mint", + "status": "pending" + }, + { + "day": 2, + "action": "Set up dedicated F&F Telegram/Discord group", + "owner": "Mint", + "status": "pending" + }, + { + "day": 2, + "action": "Submit to Product Hunt \u2014 create draft listing", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 3, + "action": "Start influencer research: compile list of 30 targets", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 3, + "action": "Write influencer outreach email template", + "owner": "Mint", + "status": "pending" + }, + { + "day": 3, + "action": "Submit to BetaList, AlternativeTo, G2 directories", + "owner": "Mint", + "status": "pending" + }, + { + "day": 4, + "action": "Send first batch of influencer DMs/emails (top 10)", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 4, + "action": "Pitch guest post: 'Deploy AI agents in 5 min' to 5 blogs", + "owner": "Mint", + "status": "pending" + }, + { + "day": 4, + "action": "Set up HARO / Qwoted / Connectively alerts", + "owner": "Mint", + "status": "pending" + }, + { + "day": 4, + "action": "First friends & family onboardings go live", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 5, + "action": "Follow up on influencer DMs (non-responders)", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 5, + "action": "Create 3 social posts (X/LinkedIn) about launch", + "owner": "Mint", + "status": "pending" + }, + { + "day": 5, + "action": "Send F&F NPS survey #1", + "owner": "Mint", + "status": "pending" + }, + { + "day": 6, + "action": "Publish first social proof tweet: F&F testimonial", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 6, + "action": "Write blog post: 'Why I built Derez.ai'", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 6, + "action": "Check Google indexing status \u2014 escalate if not indexed", + "owner": "Mint", + "status": "pending" + }, + { + "day": 7, + "action": "Mid-campaign review: KPI check vs targets", + "owner": "Both", + "status": "pending" + }, + { + "day": 7, + "action": "Second batch influencer outreach (next 10 targets)", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 7, + "action": "Polish Product Hunt listing with F&F feedback quotes", + "owner": "Mint", + "status": "pending" + }, + { + "day": 8, + "action": "Guest post #1 published \u2014 monitor backlinks", + "owner": "Mint", + "status": "pending" + }, + { + "day": 8, + "action": "Send affiliate program details to confirmed influencers", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 8, + "action": "Content sprint: write 5 more social posts", + "owner": "Mint", + "status": "pending" + }, + { + "day": 9, + "action": "Follow up guest post pitches \u2014 pitch 5 more blogs", + "owner": "Mint", + "status": "pending" + }, + { + "day": 9, + "action": "Record demo video (screen recording 3 min)", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 9, + "action": "Email list: send first newsletter teaser", + "owner": "Mint", + "status": "pending" + }, + { + "day": 10, + "action": "Launch day prep: schedule Product Hunt live", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 10, + "action": "Coordinate influencer posts for launch day", + "owner": "Both", + "status": "pending" + }, + { + "day": 10, + "action": "Prepare launch day email blast", + "owner": "Mint", + "status": "pending" + }, + { + "day": 11, + "action": "\ud83d\ude80 LAUNCH DAY \u2014 Product Hunt go-live", + "owner": "Both", + "status": "pending" + }, + { + "day": 11, + "action": "Social storm: all platforms post simultaneously", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 11, + "action": "Influencers publish their content", + "owner": "Influencers", + "status": "pending" + }, + { + "day": 12, + "action": "Post-launch: reply to every Product Hunt comment", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 12, + "action": "Monitor signups & traffic spike \u2014 adjust messaging", + "owner": "Mint", + "status": "pending" + }, + { + "day": 13, + "action": "Follow up on all pending leads from launch", + "owner": "Oliver", + "status": "pending" + }, + { + "day": 13, + "action": "Send thank-you emails to F&F + influencers", + "owner": "Mint", + "status": "pending" + }, + { + "day": 14, + "action": "Final KPI review & retrospective", + "owner": "Both", + "status": "pending" + }, + { + "day": 14, + "action": "Compile lessons learned doc", + "owner": "Mint", + "status": "pending" + }, + { + "day": 14, + "action": "Decide: full public launch or iterate based on data", + "owner": "Oliver", + "status": "pending" + } + ], + "notes": "Day 1 auto-update at 17:00 UTC" +} \ No newline at end of file diff --git a/index.html b/index.html index f86d950..10d7da8 100644 --- a/index.html +++ b/index.html @@ -1466,6 +1466,7 @@
diff --git a/launch-dashboard.html b/launch-dashboard.html new file mode 100644 index 0000000..7f04152 --- /dev/null +++ b/launch-dashboard.html @@ -0,0 +1,977 @@ + + + + + + + Prelaunch Dashboard โ€” Derez.ai + + + + + + + +
+ + +
+
+

๐Ÿš€ Prelaunch Dashboard

+
Day 1 of 14 โ€” Counting down to launch
+
+
+ โ— Campaign Active + Updated: just now +
+
+ + +
+
+

๐Ÿ“Š Key Performance Indicators

+ โ–ผ +
+
+
+ +
+
+
+ + +
+
+

๐Ÿ“‹ 14-Day Action Plan

+ โ–ผ +
+
+ + + + + + + + + + + + +
DayActionOwnerStatus
+
+
+ + +
+
+

๐ŸŽฏ Strategy Overview

+ โ–ผ +
+
+ +
+ +
+
+

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Friends & Family Program

+

Invite 20โ€“30 trusted contacts to beta test at discounted rates. Each gets:

+
    +
  • 50% off first month ($4.75/mo instead of $9.50)
  • +
  • $5 OpenRouter credits with referral coupon code
  • +
  • Priority support via chat
  • +
  • Direct feedback channel (Telegram group)
  • +
  • NPS survey after 7 days
  • +
+

Goal: 20 signups, 5 detailed testimonials

+
+ +
+

๐Ÿ”— Backlinks & SEO

+

Three-pronged approach:

+
    +
  • Product Hunt / directories: List on Product Hunt, BetaList, AlternativeTo, G2
  • +
  • Guest posts: Pitch "How to deploy AI agents in 5 minutes" to AI/DevOps blogs
  • +
  • HARO / Qwoted: Respond to journalist queries about AI hosting
  • +
  • Open source: Link back from Hermes Agent docs / GitHub (if accepted)
  • +
+

Goal: 10 quality backlinks, rank in top 5 for "AI agent hosting"

+
+
+ +
+
+

๐Ÿ“ข Influencer Outreach

+

Target micro-influencers in AI/ML/DevOps spaces:

+
    +
  • Where to find them: YouTube (AI channels 5Kโ€“50K subs), X/Twitter (AI builders), LinkedIn (DevOps thought leaders), Discord communities (OpenRouter, Nous Research, local LLM)
  • +
  • Offer: Free 3-month agent instance + affiliate commission (10% recurring)
  • +
  • Pitch angle: "Your followers can deploy their own AI agent in 5 minutes โ€” no DevOps needed"
  • +
  • Toolkit: One-pager, demo video, coupon codes, pre-written tweets
  • +
+

Goal: 5 confirmed partnerships, 3 social mentions

+
+ +
+

๐Ÿ“ˆ Launch Strategy

+
    +
  • Week 1 (Days 1โ€“7): Friends & Family + SEO foundation + directory listings
  • +
  • Week 2 (Days 8โ€“14): Influencer push + guest posts + social content sprint
  • +
  • Launch day: Product Hunt + email blast + social storm + all influencers post
  • +
  • Tracking: UTM on every link, Google Search Console, weekly KPI review
  • +
+

Goal: 500 unique visitors, 50 email captures, 20 paid signups by launch

+
+
+ +
+
+
+ + +
+
+

โฐ Daily Routine & Cron Schedule

+ โ–ผ +
+
+
+ +
+

โฑ Our Daily 1-Hour Block

+

Every day at 09:00 PYST (America/Asuncion) โ€” 60 minutes.

+
+
+
09:00 โ€“ 09:05
+
Dashboard review
+
Read the 03:00 auto-update, review KPIs, see what changed overnight
+
+
+
09:05 โ€“ 09:15
+
Status sync
+
Reply to dashboard comments, update action statuses, unblock items
+
+
+
09:15 โ€“ 09:45
+
Deep work
+
Execute today's priority actions (outreach emails, content drafts, influencer DMs)
+
+
+
09:45 โ€“ 10:00
+
Wrap & queue
+
Set tomorrow's priorities, queue tasks for the cron, log progress
+
+
+
+ +
+

๐Ÿค– Automated Cron Jobs

+
+
+
03:00 PYST
+
๐Ÿ“Š Dashboard Update
+
Auto-generates KPI snapshot: signups, traffic, backlinks, influencer status. Writes to data/launch-status.json for Oliver to review at 09:00.
+
+
+
03:10 PYST
+
๐Ÿ“ˆ SEO & Rank Tracker
+
Check Google Search Console for new impressions/clicks. Log keyword positions for target terms. Alert on +50% change.
+
+
+
03:20 PYST
+
๐Ÿ”— Backlink Monitor
+
Check Ahrefs/Moz API for new backlinks. Update backlink KPI count. Flag new domains referring.
+
+
+
03:30 PYST
+
๐Ÿ’ฌ Social Monitor
+
Check X/Twitter for brand mentions, reply to inquiries, log sentiment.
+
+
+
+ +
+
+
+ + +
+
+

๐Ÿ“ฆ Items Needed From You

+ โ–ผ +
+
+
+

+ Check off items as you deliver them. This list is saved in your browser. +

+
    + +
+
+
+
+ + +
+
+

๐Ÿ† 14-Day Targets

+ โ–ผ +
+
+
+
+

๐Ÿ‘ฅ Friends & Family

+
    +
  • โ€ข 20 beta signups
  • +
  • โ€ข 5 video testimonials
  • +
  • โ€ข 8 NPS responses (target: 8+)
  • +
  • โ€ข 3 bug/UX improvement reports
  • +
+
+
+

๐Ÿ“ฃ Reach & Visibility

+
    +
  • โ€ข 5 influencer partnerships
  • +
  • โ€ข 10 quality backlinks
  • +
  • โ€ข 500 unique landing page visitors
  • +
  • โ€ข 50 email list signups
  • +
+
+
+

๐Ÿ“ˆ SEO & Rankings

+
    +
  • โ€ข Indexed in Google (<7 days)
  • +
  • โ€ข Top 5 for "AI agent hosting"
  • +
  • โ€ข 3 directory listings live
  • +
  • โ€ข 2 guest posts published
  • +
+
+
+
+
+ +
+ +

+ + + + + \ No newline at end of file diff --git a/scripts/update-dashboard.py b/scripts/update-dashboard.py new file mode 100755 index 0000000..6ea11d8 --- /dev/null +++ b/scripts/update-dashboard.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python3 +"""Daily launch dashboard updater โ€” runs at 03:00 PYST via cron. + +Reads data/launch-status.json, updates KPIs from live sources, +advances the day counter, sets today's actions to 'today' status, +and writes back. Designed to be quiet (stdout only on error) so cron +delivery stays clean. +""" + +import json +import os +import subprocess +import sys +from datetime import date, datetime, timezone, timedelta +from pathlib import Path + +HERE = Path(__file__).resolve().parent.parent # repo root (scripts/ is a subdir) +DATA_FILE = HERE / "data" / "launch-status.json" +TZ_OFFSET = timedelta(hours=-4) # PYST (America/Asuncion) + +# โ”€โ”€ Day calculation โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ +LAUNCH_START = date(2026, 6, 9) + +def current_day() -> int: + """Return 1โ€“14 based on days since launch start.""" + today = date.today() + diff = (today - LAUNCH_START).days + return max(1, min(14, diff + 1)) + + +# โ”€โ”€ KPI probes โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + +def probe_signups() -> int: + """Read signups from the payment webhook log or n8n status.""" + # TODO: wire up to n8n.derez.ai/webhook endpoint for count + return 0 + + +def probe_visitors() -> int: + """Estimate landing page visitors via log analysis or a placeholder.""" + # TODO: integrate with analytics or server log parsing + return 0 + + +def probe_emails() -> int: + """Email list signups.""" + return 0 + + +def probe_backlinks() -> int: + """Check for new referring domains.""" + return 0 + + +def probe_influencers() -> int: + """Count confirmed influencer partnerships.""" + return 0 + + +def probe_testimonials() -> int: + """Count collected F&F testimonials.""" + return 0 + + +def probe_impressions() -> int: + """Google Search Console impressions (last 7 days).""" + return 0 + + +def probe_directory_listings() -> int: + """Count live directory listings (Product Hunt, BetaList, etc.).""" + return 0 + + +# โ”€โ”€ Main update โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + +def main(): + if not DATA_FILE.exists(): + print(f"ERROR: data file not found at {DATA_FILE}", file=sys.stderr) + sys.exit(1) + + with open(DATA_FILE) as f: + data = json.load(f) + + day = current_day() + + # Update KPIs with real probes + kpi_map = { + "signups": probe_signups, + "visitors": probe_visitors, + "emails": probe_emails, + "backlinks": probe_backlinks, + "influencers": probe_influencers, + "testimonials": probe_testimonials, + "impressions": probe_impressions, + "directory": probe_directory_listings, + } + + for kpi in data.get("kpis", []): + probe_fn = kpi_map.get(kpi["id"]) + if probe_fn: + try: + kpi["current"] = probe_fn() + except Exception as e: + print(f"WARN: probe failed for {kpi['id']}: {e}", file=sys.stderr) + + # Update day number + data["day"] = day + + # Mark today's actions as "today" if they're still pending + yesterday_actions = set() + for action in data.get("actions", []): + if action["day"] == day and action["status"] == "pending": + action["status"] = "today" + if action["status"] == "today": + yesterday_actions.add(action["action"]) + + # Timestamp + now = datetime.now(timezone.utc) + data["updated"] = now.strftime("%Y-%m-%dT%H:%M:%S") + "-04:00" + data["notes"] = f"Day {day} auto-update at {now.strftime('%H:%M')} UTC / {day}/14 complete." + + with open(DATA_FILE, "w") as f: + json.dump(data, f, indent=2) + + # Quiet success โ€” no stdout so cron doesn't spam + sys.exit(0) + + +if __name__ == "__main__": + main() \ No newline at end of file