Changelog
What’s new in moonbase — version history and release notes.
Subscribe:RSS feed
v0.10.0
Added
- —Onboarding tour (N1) — 5-step floating card with space-themed copy, per-step icons, server-side dismiss persistence in `user.preferences.tourDismissed`. Appears for zero-mission users only; survives browser clears via DB.
- —Public status page (N21) — `/status` marketing page showing real-time service health from `/api/health`, 4-service grid, incident history stub.
- —Docs expansion (N11) — 5 new articles: Custom Domains 101, Env Vars Best Practices, GitHub Actions CI/CD, Deploy Troubleshooting deep-dive, Billing overview (14 total).
- —Content moderation queue v2 (N3) — `ModerationFlag` Prisma model + migration, DB persistence on every flagged upload, admin queue UI at `/admin/moderation` with approve/reject/note actions + email on reject.
- —PRICING-v2 scaffold (T41) — `weight-tracker`, `overage-calculator`, `site-freeze` modules + daily billing summary script (Stripe wiring in T55).
- —ClamAV moderation (T51) — ClamAV scan + phishing pattern check on every upload ZIP; log-only v1; moderation page.
- —Abuse detection (T52) — IP/domain-burst + disposable-email detection; audit log flagging; admin count.
- —Templates gallery (T12) — 6 seed templates, `Template` schema migration (create-only); framework-colored cards; "Coming soon" disable for empty `zipUrl`.
- —Preview screenshots scaffold (T19) — `previewImageUrl` on Project model; graceful puppeteer no-op; fire-and-forget capture after deploy success.
- —Certbot SSL automation (T46) — `x100-certbot-setup.sh` + `domain-ssl-ready` webhook endpoint.
- —Lighthouse CI (T33) — `.github/workflows/lighthouse.yml` (weekly + marketing-change trigger, staging URL, a11y/perf budgets).
- —Onboarding tour (T34) — 5-step floating card, `useOnboardingTour` hook.
- —Deploy retry logic (T49) — 3 retries / 10s backoff in deploy scripts; webhook history log; replay-last-failed-deploy.sh.
- —LearningEntry schema (T45) — auto-logs failed deploys; admin entry count badge.
- —ForbiddenPage (403) and MaintenancePage (503) reusable components (N22).
- —Rate limiting documentation (N20) — `docs/security/rate-limiting.md` with full endpoint audit; added IP gate to `forgot-password` (5/15 min).
- —Backup strategy (T30) — `backup-db.sh` nightly script + docs.
- —Monitoring strategy docs (T32) — Sentry + webhook coverage + UptimeRobot setup guide.
- —Phone verification test plan (T48) — test plan + vitest stubs for all edge cases.
Changed
- —Theme transitions (N2) — 0.15s ease on all color properties; `color-scheme` synced for browser-native UI elements.
- —Branded error pages (N22) — `global-error.tsx` and `error.tsx` rewritten in English with MoonBase space-themed design; `not-found.tsx` preserved.
- —Compatibility Engine (T43) — added `build_output_dir` and `esm_cjs_mismatch` Tier-2 repair action types.
- —Admin users page (T52) — shows count of abuse-flagged accounts at top.
- —Moderation admin page (N3) — upgraded from placeholder text to live queue with stats, approve/reject/email workflow.
Fixed
- —Onboarding tour Turbopack — `ssr: false` in Server Component rejected by Turbopack; switched to direct import.
- —Phone verification test (N19) — `vi.hoisted()` fix for vitest hoisting issue; 72/72 test files passing, 728 tests.
Security
- —Rate limiting added to `POST /api/auth/forgot-password` (5 requests/IP/15 min, in-memory, anti-enum: always 200).
- —`ModerationFlag` table for persisting flagged uploads; admin review flow.
Other
- —Updated 11 minor/patch packages: `@sentry/nextjs` 10.55, `lucide-react` 1.17, `zod` 4.4.3, `pg` 8.21, `next-intl` 4.13, `otplib` 13.4.1, `resend` 6.12.4, `tsx` 4.22.3, `yauzl` 3.3.1, `@types/react` 19.2.15, `@types/node` 20.19.41.
v0.9.0
Added
- —MoonBase R7–R8 rebrand — all `moonlink` strings replaced with `moonbase` across codebase; legacy symlinks for 30-day soak.
- —Phase 5 hardening — CSP report-only, HIBP password breach check, 2FA backup code count UI, watchdog PM2 process.
- —Phase 5 billing gates — 3 missions / 100MB / 10K visits plan limits enforced at upload boundary; 402 on exceed.
- —Circuit breaker — MoonServer calls wrapped in `moonserverBreaker`; ops alert on circuit open.
- —Audit log — search + CSV export at `/admin/audit-log`.
- —Mission archive — soft-archive missions without deleting; `?archived=1` toggle.
- —Mission Log soft-delete — `deletedAt` stamping instead of hard delete.
v0.8.0
Added
- —Daily analytics table populated from each site's Webalizer report (one row per site per day).
- —Nightly sync job at 02:00 UTC that reads Webalizer reports via cPanel and updates the dashboard.
- —On-demand refresh trigger so analytics can update outside the nightly window.
- —Backfill script to seed historical data for existing sites.
- —Cloudflare fallback for brand-new sites that don't have Webalizer data yet, with a "real visitor counts arrive within 24h" hint shown in the dashboard.
Changed
- —Dashboard "Visitors this month" KPI now shows unique visitors instead of page requests.
- —Traffic chart subtitle clarified to "unique visitors" so the metric is unambiguous.
v0.7.0
Added
- —Profile tab: edit display name, view profile picture (gradient avatar), change email with verification.
- —Security tab: change password, enroll or disable two-factor authentication, see recent sign-ins.
- —Two-factor authentication on login: codes from your authenticator app, plus one-time recovery codes.
- —Notifications tab: opt in or out of product-update emails.
- —Danger Zone: download all your data as a ZIP, delete your account.
v0.6.0
Added
- —/settings page for app-level preferences (language, theme).
- —/activity page showing your full account history — deploys, sign-ins, settings changes.
- —Activity recording: every meaningful action now leaves a timestamped audit entry.
Changed
- —Sign-in now redirects to /dashboard instead of /missions.
v0.5.0
Added
- —Placeholder pages for upcoming features (analytics, billing, domains, API keys, docs) with "notify me when ready" forms.
- —User menu in the sidebar (account, sign out).
- —Hebrew and English translations plus right-to-left support across all sidebar surfaces.
v0.4.0
Added
- —Persistent sidebar navigation with mobile slide-out menu and right-to-left support.
- —Shared "New Mission" button accessible from anywhere.
- —Dashboard page with: stats strip (active sites, storage used, visitors, sites needing your attention), recently launched thumbnails, traffic chart across all sites, recent activity feed.
Changed
- —Primary call-to-action buttons unified to a consistent emerald color across the app.
- —Site display names now link to their Mission Control page.
Fixed
- —Thumbnail iframe loading on the Dashboard.
- —Removed the legacy /dashboard → /missions redirect (Dashboard now lives at /dashboard).
v0.3.0
Added
- —Real-time publish progress: the publish modal now reflects each stage as it actually happens, not on a fixed timer.
- —Terminal-style progress console inside the publish modal.
- —"Post-launch" eyebrow that appears above the live site after a successful deploy.
- —Loading state for the live-preview iframe.
- —Script to reset a regular user's password from the command line.
Changed
- —Visitors empty state reverted to a clean placeholder.
v0.2.0
Added
- —Pause and resume for sites — paused sites show a clean maintenance page.
- —Password protection for sites (visitors are prompted before they can view).
- —Mission Control analytics card showing real visitor counts.
- —Full analytics page: daily breakdown, top pages, top countries, browser and OS, all written in plain English.
- —Daily analytics sync at 02:00 UTC, plus a manually-triggered endpoint for re-syncing on demand.
- —Per-month analytics snapshot storage so historical data is preserved without re-fetching.
- —Skeleton loaders and entrance animations across Mission Control.
- —Control Center (admin) foundation: operator login with two-factor authentication.
- —Operator account: command-line script to reset an admin's password.
Changed
- —Mission Control analytics replaced the Cloudflare-only data source with AWStats (which counts real visitors, not just raw requests).
- —Filtered out internal MoonLink traffic (login probes, automatic SSL checks) so they don't pollute the analytics totals.
- —Simplified the analytics card to two main numbers plus three session metrics.
- —Admin two-factor: extended the time window for code entry; login UX polish.
Fixed
- —Fixed the mini chart on the analytics card to render in the right direction in Hebrew.
- —Percentage-change badge on the analytics card.
Security
- —Excluded local Claude Code config from version control.
v0.1.0
Added
- —Next.js 14 application with Hebrew and English support, right-to-left rendering, RagSans custom font.
- —Marketing landing page: hero, language-switching navbar, trust bar, problem statement, how-it-works, features, AI assistant section.
- —User registration and sign-in (Auth.js v5, email and password).
- —Project upload flow: ZIP upload, smart ZIP normalizer (handles nested folders and missing index.html), file-size-based monthly pricing display.
- —Shared cPanel hosting architecture: subdomain creation, file upload, automatic SSL, space-themed default names like `ageless-surya15`.
- —Step-by-step publish progress UI with a terminal-style console, Hebrew error messages, retry button, and tracking IDs for support.
- —Live-site preview iframe on Mission Control.
- —Cleanup tooling for orphaned cPanel subdomains and post-extraction ZIP cleanup.
- —Launch quotes bank for visual flair during the publish flow.
- —Rebrand to MoonLink (the product was originally a different name).
Fixed
- —Iframe preview race condition.
- —Iframe disappearing on slow loads (eager loading plus 30-second timeout).
- —ZIP cleanup after extraction (works around an unsupported cPanel API method).
Security
- —Broadened .gitignore env-file pattern (catches `.env.local`, `.env.production`, etc.).
Full history at CHANGELOG.md