Admin dashboard polish and then some

Heavy infrastructure day. Mostly admin dashboard improvements and setting up Alimenta for early access.

Subscriber Management

The subscriber admin page needed more than a list. Added colored status badges—green for active, yellow for pending, red for unsubscribed. Visual scanning is faster than reading status text.

Built a delete flow with a confirmation modal requiring "DELETE!" to be typed. Destructive actions should have friction. Also added the ability to resend confirmation emails to pending subscribers with optional custom notes. Useful when someone says they never got the first email.

Email Tracking

Created an email_logs table to track every email sent. Each subscriber row now expands to show their email history. Click any logged email to see the rendered HTML in a modal.

This is debugging infrastructure. When someone claims they didn't get an email, I can check if it was sent, when, and what it contained. The resubscribe flow for previously unsubscribed users was broken—fixed that while building the logging system.

Growth Visualization

Added a subscriber growth chart using Recharts. Time range filters: day, week, month, 12 months, year-to-date. A time series API endpoint aggregates subscriber counts over time.

I don't have enough subscribers for this to matter yet. But it'll be useful later, and building it now was cheap.

Alimenta Early Access

Restructured the project for early access:

  • Created a /projects page with card layout
  • Moved the Alimenta app to /projects/alimenta/app with password protection
  • Built an early access landing page at /projects/alimenta with waitlist signup
  • Added a waitlist admin interface to view signups and feedback

The waitlist captures email and optional feedback. Password protection is simple—check against an env var, set a cookie. Nothing fancy.

Hooks Bug

Fixed a React hooks order violation. Had useMemo and useCallback calls after early returns, which violates the Rules of Hooks. Moved them to the top of the component. The kind of bug that works in development but could break in production.