Commit Graph

28 Commits

Author SHA1 Message Date
Jeff Emmett 7ce078478e chore: mark TASK-6 complete — all plaintext .env files removed
All 3 Postiz spaces migrated to Infisical secret injection.
Old backup .env files deleted from server. All ACs checked.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 01:22:32 -08:00
Jeff Emmett 91b8957892 fix: remove sablier labels and enable direct Traefik routing
Sablier was removed from the stack — these compose files still had
traefik.enable=false + sablier group labels, causing 404s. Switched
to traefik.enable=true with explicit docker.network label.

All 3 Postiz spaces verified live with Infisical secret injection.
Old plaintext .env backups removed from server.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 01:22:04 -08:00
Jeff Emmett 6f020ddac9 Add internal provision endpoint for rSpace Registry
Simple acknowledge endpoint — feed created on first post.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:30:18 -08:00
Jeff Emmett ea5f546695 fix: update keywords and add rData analytics
Replace stale keywords with social-relevant terms, add rData tracking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 00:04:40 -08:00
Jeff Emmett ba855fdb40 fix: space links use subdomain URLs instead of rspace.online path
Space links now go to <space>.<app-domain> (e.g., myspace.rfunds.online)
instead of rspace.online/<space>. Domain derived from window.location
when not explicitly provided.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:18:50 -08:00
Jeff Emmett f35b518b04 fix: nest Sign Out under username dropdown in UserMenu
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:09:13 -08:00
Jeff Emmett eea080e1e9 feat: standardize header with AppSwitcher, SpaceSwitcher, and UserMenu
- Replace inline nav/Navbar with shared Header component
- Header pattern: AppSwitcher dropdown / SpaceSwitcher / actions / Sign In
- SpaceSwitcher and UserMenu work without SDK dependency
- Consistent across all r*Apps

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:03:06 -08:00
Jeff Emmett e79535283c feat: standardize AppSwitcher and EcosystemFooter across all rApps
- Update AppSwitcher with all 26 r*Apps in 8 categories
- Add EcosystemFooter component with consistent ecosystem links
- Categories: Creating, Planning, Communicating, Deciding,
  Funding & Commerce, Social & Media, Work & Productivity,
  Identity & Infrastructure

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:47:59 -08:00
Jeff Emmett 19d79b7eb6 chore: add Infisical migration deploy script and compose files
Three new Infisical-wired compose files (one per Postiz space) plus
a single migrate-to-infisical.sh script that handles the full
switchover: extract existing POSTGRES_PASSWORD, backup old files,
install new compose, create minimal .env, restart, verify health.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:54:59 -08:00
Jeff Emmett f6481d99e3 chore: mark TASK-2 multi-tenant provisioning as Done (all 5 phases)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:46:26 -08:00
Jeff Emmett a536a9bc0f feat: add Phase 4 x402 metering and Phase 5 hardening
Phase 4: Usage metrics service (container stats, post count, storage),
billing calculator with pro-rated monthly pricing, usage + payment
routes, x402 middleware wired to provisioning endpoint.

Phase 5: In-memory rate limiter (general 10/min + provision 2/hour),
admin routes (force teardown, suspend/resume), Dockerfile hardened
with non-root user and healthcheck. Suspended instance status added.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:45:55 -08:00
Jeff Emmett 908e2257e4 feat: add Phase 3 provision UI and dashboard pages
Wallet-connected provisioning wizard at /provision with SIWE auth,
subdomain picker, and multi-step deploy flow. Dashboard at /dashboard
shows instance list with status and management controls. Adds wagmi +
viem + react-query for wallet integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:42:16 -08:00
Jeff Emmett dca3140065 feat: remove Sablier + add Phase 2 SIWE auth and CRDT token gating
Sablier removal:
- Postiz needs Temporal running 24/7 for scheduled posts, so Sablier
  auto-sleep is incompatible. Default changed to sablier: false.
- Template engine and provisioning route updated accordingly.

Phase 2 - Authentication & Token Gating:
- SIWE (Sign-In with Ethereum) wallet auth via siwe + viem
- Nonce endpoint at GET /v1/auth/nonce
- Dual auth: API key (admin) or SIWE Bearer token (wallet users)
- CRDT token gate checks balance via rSpace internal API
- Token burn tracking in SQLite (token_burns table)
- x402 payment middleware ported from rspace-online (Phase 4 ready)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:30:28 -08:00
Jeff Emmett dc78c119b3 feat: add Phase 1 provisioning API (Hono/Bun)
Self-service API for provisioning Postiz instances at <slug>.rsocials.online.

- Hono server on port 3001 with API key auth
- SQLite instance registry with provision logging
- Template engine (TypeScript port of generate.sh)
- Docker compose deployer with health checks
- Sablier config auto-management (add/remove routing)
- Cloudflare tunnel hostname auto-management
- Resource monitor (/proc/meminfo, max 12 instances)
- Secret generation (JWT + Postgres password)

Routes: POST/GET/DELETE /v1/spaces, GET /health

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:16:40 -08:00
Jeff Emmett 8ef5c678c2 feat: wire Postiz spaces to pull secrets from Infisical at runtime
- Template uses entrypoint-wrapper.sh to inject secrets at container start
- Only INFISICAL_* credentials + POSTGRES_PASSWORD in .env (3 values)
- All other secrets (JWT, EMAIL_PASS, OAuth, social API keys) from Infisical
- Generator produces minimal .env templates per space
- Added infisical_slug to spaces.yml for each Postiz project
- Added missing EMAIL_PASS + POSTGRES_PASSWORD to Infisical projects

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:10:59 -08:00
Jeff Emmett dc95494ab8 chore: backlog update - close completed tasks, add cleanup items
- TASK-4: Infisical secret migration (Done)
- TASK-5: Centralized spaces config with Sablier + OAuth (Done)
- TASK-6: Remove plaintext .env files from server (To Do)
- TASK-7: Clean up duplicate rsocials-online Infisical project (To Do)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:03:09 -08:00
Jeff Emmett 0c5b36854c feat: add rStack AppSwitcher dropdown to header
Adds the unified rStack app switcher with pastel badges, emoji icons,
and categorized navigation across all 17 rStack apps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 19:16:08 -08:00
Jeff Emmett 0d265ddf03 feat: update spaces config to match all deployed Postiz instances
- Add all 3 active spaces: crypto-commons (cc), p2pfoundation (p2pf),
  bondingcurve (bcrg) with correct slugs matching container names
- Add Sablier auto-sleep labels for resource conservation
- Add Pocket ID OAuth config with per-space client credentials
- Use multi-host routing (Host || Host) instead of redirect middleware
- Switch to restart: unless-stopped matching server deployments
- Generator now handles dynamic blocks (OAuth, Sablier, Traefik labels)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:21:18 -08:00
Jeff Emmett 2bff030a92 chore: backlog cleanup of votc-socials and cc.rsocials.online
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 20:45:00 -08:00
Jeff Emmett d3dccda86c chore: initialize backlog with domain routing and platform tasks
TASK-1 (Done): Route socials.valleyofthecommons.com to crypto-commons Postiz
TASK-2 (To Do): Multi-tenant provisioning platform (backlogged)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 19:56:10 -08:00
Jeff Emmett ce8463951c feat: wire rSocials to pull secrets from Infisical at startup
Add entrypoint.sh that authenticates with Infisical Machine Identity
and injects secrets as env vars before starting the Node.js app.
Replaces individual secret env vars in docker-compose.yml with
Infisical client credentials. Falls back gracefully if Infisical
is unavailable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 19:25:47 -08:00
Jeff Emmett 44357ba0a7 fix: add SMTP_TLS_REJECT_UNAUTHORIZED for Mailcow self-signed cert
Infisical's SMTP client has its own TLS validation separate from
NODE_TLS_REJECT_UNAUTHORIZED. Mailcow uses a self-signed cert
which caused signup to fail with "self-signed certificate" error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 18:06:24 -08:00
Jeff Emmett ced6b1f49f feat: add centralized spaces config + Infisical secret management
Single spaces.yml defines all community Postiz instances. generate.sh
reads it and produces per-space docker-compose files with correct
Traefik labels, redirect middleware, and networking. Infisical
deployment config added for secrets.jeffemmett.com.

Adding a new space is now a single block in spaces.yml + ./generate.sh.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 17:35:15 -08:00
Jeff Emmett f767975986 feat: add rZine - AI-powered community zine creator
Port mycro-zine (zine.mycofi.earth) to rsocials.online/zine as a community
content generation tool. Full 8-page zine creation pipeline with Gemini AI
for outlines and image generation, Sharp for print layout composition.

- 7 API routes under /api/zine/ (outline, generate-page, regenerate-page,
  print-layout, save, generate-image, [id])
- 4-step creation wizard: topic → outline → page generation → print layout
- 5 visual styles, 4 tones, voice input, page refinement
- 300 DPI print-ready output (3300x2550px)
- Shareable zine viewer at /zine/z/[id] with OG metadata
- Docker: added zine-data volume, Sharp deps, env vars for API keys
- Also includes pre-existing Postiz URL updates (crypto-commons.org)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:21:27 -08:00
Jeff Emmett eca456deab fix: add public dir placeholder for Docker build 2026-02-23 09:52:57 -08:00
Jeff Emmett fb5e2d1329 Add Docker healthcheck to docker-compose.yml
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 17:49:14 -07:00
Jeff Emmett 88bcbc376e Add .dockerignore for optimized Docker builds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 17:48:59 -07:00
Jeff Emmett fb3d93be95 feat: scaffold rSocials-online with landing page and Postiz deployment
Next.js 16 landing page with r* ecosystem treatment:
- Hero, features, platform grid, self-hosted advantages, deploy CTA
- OKLCH coral/violet theme, Shadcn/ui components, Geist fonts
- Dockerized with multi-stage build and Traefik labels (rsocials.online)

Postiz community deployment stack:
- Postiz app + PostgreSQL + Redis + Temporal workflow engine
- 20+ social platforms (X, Bluesky, Mastodon, LinkedIn, Discord, etc.)
- SMTP email via Mailcow (mailcow-network integration)
- Security hardened (cap_drop ALL, no-new-privileges, network segmentation)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 17:07:58 -07:00