HermesV2
PricingBlogChangelogSign InGet Started

© 2026 HermesV2. All rights reserved.

TermsPrivacyCookiesContact

Changelog

What we shipped and when. Subscribe via RSS for updates.

  1. May 16, 2026newimproved

    Multi-tenant UI, pricing page, GDPR, and onboarding

    Phase 5 ships the public-facing surfaces that turn the boilerplate into a usable SaaS template.

  2. May 1, 2026new

    Audit log, AI rate limit, upload upgrade, cron digest

    Phase 4 adds the production-grade primitives that show up in every SaaS — audit trails, AI cost control, tenant-safe uploads, and a recurring digest job.

New

  • Public /pricing page with monthly/yearly toggle, free/basic/pro comparison, and a single shared plan config in @nextmonorepo/shared/plans.
  • Landing page: How It Works, Testimonials, Tech Stack, Pricing preview, FAQ (native <details>), and Newsletter sections.
  • Multi-tenant UI: org switcher in the topbar, /settings/team (members, invites, role changes), and /invite/[token] accept flow.
  • GDPR: dedicated /cookies policy page, GET /user/export for portability, consent versioning with auto-reprompt on bumps.
  • Onboarding wizard at /onboarding that walks new users through profile + workspace.
  • Contact form at /contact backed by a rate-limited POST /api/contact.
  • Email templates: invoice, security-alert, invitation (replacing inline HTML), digest.

Improved

  • <CookieConsent /> now stores { version, choice, acceptedAt } instead of a bare string, so consent migrations are explicit.
  • QueueDash admin route now uses a client loader so next build --webpack doesn't trip on dynamic({ ssr: false }) in a Server Component.

New

  • audit_log table (RLS-scoped, FORCE ROW LEVEL SECURITY) with an Elysia plugin that auto-records 2xx mutations and exposes auditLog.record() for nuanced cases.
  • ai_usage table and ai-rate-limit plugin enforcing a rolling 30-day token cap per organization (PLAN_LIMITS.aiTokens). Records usage from streamText's onFinish callback.
  • Upload upgrade: tenant-scoped paths ({orgId}/{uuid}.{ext}), plan-bounded size via assertUploadSize, streaming straight to Bunny via uploadStream, one audit row per successful upload.
  • Cron digest via BullMQ repeatable: scheduleDigest() registers a daily 9am UTC job with a stable jobId so restarts stay idempotent.
  • Default job options: attempts: 3, exponential backoff from 1s. Redis client enforces maxRetriesPerRequest: null (BullMQ requirement).