What's shipping on the desk.
Every meaningful update we've shipped, in reverse-chronological order. New entries land the moment we cut a release — no newsletter, no announcement post, just the record.
- ·Public updatePublic sample briefing page
A read-only /sample-briefing page that shows prospects exactly what lands in their inbox at 07:00 — built from realistic seeded data so the format speaks for itself, no login required.
- ·Public updateBrowser extension landing page + capture timeline
The /extension landing page now ships with the four-signal capture timeline (price, stock, ad creative, reviews) and a beta waitlist hooked to the existing /api/waitlist endpoint.
- ·Public updatePricing tiers + six-question FAQ block
Two paid tiers (Solo and Desk) and a six-question FAQ block built from objections we heard during the waitlist conversation — each answer links out to the team inbox for the long tail.
- ·Public updateBlog (index + slug detail + JSON-LD + OG)
Public /blog index with per-post /blog/[slug] detail, Article JSON-LD on each post, and a Blog JSON-LD block on the index — wired to the sitemap so posts are discoverable the day they publish.
- ·Public updateWelcome email template
Day-zero welcome email composed in @/lib/email/templates and dispatched through sendEmail() the moment a seller lands on the waitlist, framed so the first reply lands inside a working day.
- ·Public updateReviews + Ads surfaces inside the sellers console
Two new authed surfaces inside /app: /app/reviews for star-velocity and topic-mix monitoring, and /app/ads for sponsored-creative diffing — both gated by requireAuth() and scoped per user.
- ·Public updateSellers console MVP
The dashboard shell is live: competitors, alerts, briefings, rules, onboarding, and settings — all behind better-auth with per-user data scoping so two accounts see two separate desks.
- ·Public updateAuth (better-auth) wiring + per-user data scoping
better-auth is installed and wired through @/lib/auth-config; every /api route now calls requireAuth() and every Prisma query carries a userId where filter — zero cross-account reads survive a code review.
- ·Public updateWaitlist capture form + admin view
Public <WaitlistForm/> posts to /api/waitlist and the signed-in admin view at /app/waitlist renders the captured signups — both surfaces live, the form did not need a code change to be wired from the home.
- ·Public updateContact form + anonymous message capture
A anonymous-accessible /contact page with <ContactForm/> island that posts to /api/contact — messages land in the company inbox via the Polsia email proxy, so a real human sees them before any automation does.