Removes local/prod cases — script now just does git pull, writes BUILD,
and runs migrate wherever it's executed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Apache SetEnv doesn't reach PHP-FPM processes via getenv(), but the
values are still available in \$_SERVER.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add empty UA early return and a comprehensive list of bot signals covering
HTTP libraries, SEO platforms, uptime monitors, security scanners, AI
crawlers, and generic scanner vocabulary.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
channel_id and role_id are 64-bit integers that exceed Number.MAX_SAFE_INTEGER,
causing silent rounding in the browser. Cast to string in the GET response;
PHP stores them back as integers on save (64-bit PHP handles them correctly).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Matches the pattern in botconfig.php — returns bool and reports
failure to the caller so the UI shows the real error instead of
false success.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- botcompose.php: new API endpoint for rss_repost, mastodon_post, linkedin_post
- _tab_botconfig.php: shared compose modal (textarea + post button)
- app.js: repost button on RSS cards (clears last_id, bot reposts on next poll),
compose button on Mastodon/LinkedIn cards (direct post via compose modal),
audit feed labels/icons for new compose actions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- linkedin_auth API: generates auth URL with CSRF state stored in session
- linkedin_callback: exchanges code for tokens, writes to project's config.json
- index.php: route /linkedin/callback before auth check
- Connect button wired up in JS; reads LINKEDIN_CLIENT_ID/SECRET from server env
Server setup required:
SetEnv LINKEDIN_CLIENT_ID ...
SetEnv LINKEDIN_CLIENT_SECRET ...
Redirect URI to register in LinkedIn app: https://<host>/linkedin/callback
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
is-active and show work without sudo as www-data; only
start/stop/restart need elevated privileges.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>