8 Commits

Author SHA1 Message Date
metatroncubeswdev
7e780549ea Brand kit and caption checks per client
- Client page → Brand kit: hashtag sets, approved phrases/CTAs, words to avoid, voice notes
- New post: one-click insert of hashtag sets and phrases, live checks while typing
- Checks: agency named in a client post (refused when saving; the agency's own account is exempt),
  avoid list, generic AI-sounding phrases, too many hashtags or emoji, platform length limits
- Brand warnings also appear on drafts; MCP tools brand_kit and caption_check for the AI

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 10:19:04 -04:00
metatroncubeswdev
3f800d46ad Notifications: bell in the sidebar, email, morning summary, client approval emails
- In-app list with unread count; per-person email and 8:00 summary settings
- Team is told when a client approves or asks for changes, a post fails or only partly publishes,
  or a TikTok post is waiting in the TikTok app; new drafts appear in the bell and the summary
- Clients get one email (batched over 5 minutes) when posts are sent to them, in the agency's name
- SMTP settings in .env; nodemailer pinned; express advisories fixed (npm audit: 0)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 10:07:20 -04:00
metatroncubeswdev
92ee5c28b2 Client approval portal: a private link per client to approve posts or ask for changes
- Admin creates/replaces/turns off the link and sets the reviewer on the client page (Client approval tab)
- Drafts get 'Send to client'; the client's answer (approved / changes + note + name) shows on the draft
- Editing a reviewed draft asks the client again; the admin's approval is still required to publish
- Client page is mobile-first, no login, noindex, media served only for posts in review

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 10:03:23 -04:00
metatroncubeswdev
fd87ba08aa Retry failed platforms on a post; clearer platform error codes
- Publishing: admins can retry a failed or partly published post; parts that already posted are skipped
- API errors now include the platform's error code, with plain fixes for common TikTok ones

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:27:21 -04:00
metatroncubeswdev
fc2179b343 Track platform quotas; wait and retry instead of failing
- quota.js: per-platform limits (YouTube 10,000 units/day Pacific per project,
  Instagram 100 / Threads 250 / TikTok 15 posts per 24 h per account, ...),
  usage log, .env overrides (QUOTA_<PLATFORM>)
- Publishing checks the budget first and records usage; when a platform is
  out of quota (or answers quota exceeded / 429) the post stays approved and
  the queue retries after the reset, without re-posting finished platforms
- Drafts that exceed a day's limit get a warning
- Connections page shows used/limit and when it frees up
- Tests for windows (incl. DST), shared vs per-account limits and the
  wait-and-retry queue flow; docs for quotas and the Google app setup

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:56:54 -04:00
metatroncubeswdev
f24e6ada4b Add LinkedIn, Google Business Profile, YouTube, TikTok, Pinterest, Threads, Reddit
- Connections page: admins set up each platform's developer app (keys stored
  encrypted), connect a client's account via OAuth, choose company Page /
  business location, check or disconnect
- Adapters per platform with sign-in, identity, targets and publishing;
  token refresh with "reconnect needed" when a sign-in expires
- Publishing and Content library: "Post to" lists the client's connected
  platforms with their own fields and optional per-platform caption
- Queue validates drafts per platform and publishes through the adapters;
  Facebook/Instagram unchanged
- Signed, expiring media links (/m/...) for platforms that fetch media by URL
- Agent: list_connections tool; schedule tools accept all platforms + options
- Offline test suite with simulated platform APIs (15 tests)
- docs/platforms.md: setup, approvals per platform, what is and isn't tested

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 08:19:33 -04:00
metatroncubeswdev
3cbc76e7f1 Support Instagram-only clients (no Facebook Page)
- Connector lists Instagram accounts assigned to the system user without a
  Page; numbers, inbox, mentions and publishing work for them
- Clients link by Page or Instagram account ("Link an account"); Facebook
  features explain the client has no Page instead of failing
- Drafts for Instagram-only clients drop Facebook automatically
- Images for Instagram-only clients are hosted via the agency's own Page
  (META_MEDIA_PAGE_ID, unpublished); never falls back to a client's Page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 01:02:03 -04:00
metatroncubeswdev
c309581df0 Initial commit: Quorla social media manager
Dashboard (content library, publishing queue with approvals, inbox, team
management, AI runs), Meta connector, branded PDF reports, agent skills,
and Docker packaging (Dockerfile, docker-compose with Caddy HTTPS,
backup and path-relocation scripts).

Client data, live data and secrets are excluded via .gitignore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 13:02:29 -04:00