Commit Graph

50 Commits

Author SHA1 Message Date
Anso 7eee15d925 docs: refresh screenshots (#192) 2026-03-27 05:21:18 +00:00
Anso 39fdbda009 chore: remove tracked files and align docs theme (#191)
* chore: remove CLAUDE.md and MANUAL_STEPS.md from git tracking

These files contain internal project instructions that should not be
public. Both are now in .gitignore to prevent re-tracking.

* chore: remove build output and generated files from git tracking

Remove backend/public/ (frontend build artifacts) and backend/cookies.txt
from tracking. Add demo-video/ and website/ to .gitignore.

* docs: align mintlify theme with website and app branding

Update colors to brand cyan, add Geist font, dark mode default,
gradient background, navbar with GitHub link and CTA, and footer
matching the website structure.
2026-03-27 01:16:33 -04:00
Anso 2c1fa69ee8 docs: refresh screenshots (#190) 2026-03-27 02:26:26 +00:00
Anso 1243158e8a docs: refresh screenshots (#188) 2026-03-27 02:08:31 +00:00
Anso 2f2ba19a7a docs: refresh screenshots (#187) 2026-03-27 02:03:01 +00:00
Anso 32a7d53b2b feat: RBAC, atomic deployments, fleet backups, and licensing (Pro) (#185)
* feat: add RBAC viewer accounts, atomic deployments, and fleet-wide backups (Pro)

Introduces three Pro-tier features:

- RBAC: Multi-user system with admin/viewer roles, user management UI,
  automatic migration from single-admin credentials, viewer restrictions
  across the entire UI (read-only editor, hidden action buttons)

- Atomic Deployments: Pre-deploy file backup to .sencho-backup/, automatic
  rollback on health probe failure, manual rollback button, health probes
  added to stack updates, webhook-triggered deploys use atomic rollback

- Fleet-Wide Backups: Point-in-time snapshots of compose files across all
  nodes (local + remote), stored centrally in SQLite, per-stack restore
  with optional redeploy, graceful handling of offline nodes

* fix(settings): use correct ProGate prop name in UsersSection

* fix(settings): remove unused isPro prop from UsersSection

* fix(auth): fetch user info after login and setup so isAdmin is set correctly

* feat(pricing): revise pricing strategy and enforce variant-based seat limits

Raise Personal Pro from $49/yr to $69/yr with 3 viewer seats (up from 1).
Add $15/mo billing option for Team Pro. Mark lifetime pricing as a
90-day early-adopter offer. Store Lemon Squeezy variant_name on
activation/validation and enforce seat limits server-side per variant.

* feat(licensing): add Lemon Squeezy checkout, webhook, and billing portal integration

Server-side checkout URL generation (POST /api/checkout) with admin email
pre-fill and instance_id custom data. HMAC-SHA256 verified webhook endpoint
(POST /api/webhooks/lemonsqueezy) handling order, subscription, and payment
lifecycle events for automatic license activation. Customer billing portal
link stored from webhook events and exposed via GET /api/billing/portal.
In-app checkout buttons in Settings with manual license key fallback.

* fix(licensing): exempt Lemon Squeezy webhook from auth middleware

The catch-all auth middleware on /api/* was blocking the public webhook
endpoint. Added /webhooks/lemonsqueezy to the exemption list alongside
/auth/* and /webhooks/:id/trigger.

* feat(pricing): update pricing to final live rates

Personal Pro: $7.99/month, $69.99/year, $249 lifetime.
Team Pro: $49.99/month, $499.99/year, $1,499 lifetime.
Added personal_monthly checkout variant across backend, frontend, and website.

* refactor(licensing): remove server-side checkout/webhook for self-hosted model

Sencho is self-hosted — each user runs their own instance, so there is
no central server to receive webhooks or hold the store API key. Replaced
in-app checkout buttons with a "View Pricing" redirect to sencho.io and
kept manual license key activation as the primary flow.

- Delete LemonSqueezyService (checkout, webhook, HMAC verification)
- Remove POST /api/checkout, GET /api/billing/portal, POST /api/webhooks/lemonsqueezy
- Remove raw body parser and auth exemption for webhook route
- Remove all LEMONSQUEEZY_* env vars from .env.example
- Replace checkout buttons in SettingsModal with single "View Pricing" button
- Simplify LicenseContext checkout to open sencho.io pricing page
- Update licensing docs to reflect website-based purchase flow

* chore: normalize em-dashes to hyphens across codebase (linter)

* chore: remove accidentally tracked directories from index
2026-03-26 21:58:24 -04:00
Anso 269ea6fe53 docs: refresh screenshots (#184) 2026-03-26 17:19:35 +00:00
Anso 8ad9981dc2 docs: refresh screenshots (#183) 2026-03-26 16:56:06 +00:00
Anso db73d7671a feat: RBAC, atomic deployments, and fleet-wide backups (Pro) (#181)
* feat: add RBAC viewer accounts, atomic deployments, and fleet-wide backups (Pro)

Introduces three Pro-tier features:

- RBAC: Multi-user system with admin/viewer roles, user management UI,
  automatic migration from single-admin credentials, viewer restrictions
  across the entire UI (read-only editor, hidden action buttons)

- Atomic Deployments: Pre-deploy file backup to .sencho-backup/, automatic
  rollback on health probe failure, manual rollback button, health probes
  added to stack updates, webhook-triggered deploys use atomic rollback

- Fleet-Wide Backups: Point-in-time snapshots of compose files across all
  nodes (local + remote), stored centrally in SQLite, per-stack restore
  with optional redeploy, graceful handling of offline nodes

* fix(settings): use correct ProGate prop name in UsersSection

* fix(settings): remove unused isPro prop from UsersSection

* fix(auth): fetch user info after login and setup so isAdmin is set correctly
2026-03-26 12:51:30 -04:00
Anso 72670ffb42 docs: refresh screenshots (#180) 2026-03-26 13:37:16 +00:00
Anso dab7403d99 docs: refresh screenshots (#178) 2026-03-26 13:30:13 +00:00
Anso 4fc363301a feat(webhooks): add CI/CD webhook integration for triggering stack actions (Pro) (#177)
Add custom webhooks allowing external CI/CD systems (GitHub Actions, GitLab CI, etc.)
to trigger stack actions via HTTP POST with HMAC-SHA256 signature authentication.
Includes webhook CRUD management UI in Settings, execution history tracking,
one-time secret reveal, enable/disable toggle, and comprehensive documentation.
2026-03-26 09:23:23 -04:00
Anso a1450eefb8 docs: refresh screenshots (#176) 2026-03-26 03:14:32 +00:00
Anso 0630f57ca8 feat(fleet): add Pro fleet management features and container drill-down (#174)
Add fleet health summary cards, container-level drill-down, node sorting
and filtering, fleet-wide search, and critical node detection to the
Fleet View. Fix ProGate to wrap placeholder content and add error toasts.
2026-03-25 23:09:53 -04:00
Anso 6e2a6cf0c0 docs: refresh screenshots (#173) 2026-03-26 02:18:31 +00:00
Anso c625814e13 docs: refresh screenshots (#172) 2026-03-26 01:57:16 +00:00
Anso ee6c98bf74 docs: refresh screenshots (#171) 2026-03-25 23:52:38 +00:00
Anso f80190d926 feat(auth): redesign Login and Setup pages with split-panel branding layout (#168)
* feat(auth): redesign Login and Setup pages with split-panel branding layout

Replace plain Card-based Login and Setup forms with a professional
split-panel layout: always-dark branding panel (dot grid texture, logo,
tagline, cyan accent line) on the left, theme-aware form on the right.
Mobile collapses to single column with compact logo header.

- Add optional admin email field on Setup for license recovery
- Backend accepts and stores admin_email in setup endpoint
- Fix data-stacks-loaded attribute forwarding (wrap in div, use string values)

* docs: add license-settings and profile-dropdown screenshots

* fix(docs): correct logo paths from .svg to .png

* fix(deps): resolve picomatch high-severity vulnerability
2026-03-25 19:47:48 -04:00
Anso beabcb49b5 docs: refresh screenshots (#156) 2026-03-25 15:01:46 +00:00
Anso 44fd374dc2 docs: refresh screenshots (#155) 2026-03-25 14:32:16 +00:00
Anso a5d66f6c43 docs: refresh screenshots (#152) 2026-03-25 13:15:34 +00:00
Anso 4b1812af1d docs: refresh screenshots (#151) 2026-03-25 13:08:23 +00:00
Anso a5bc161c68 docs: refresh screenshots (#148) 2026-03-25 12:44:49 +00:00
Anso 8c9635322a docs: refresh screenshots (#147) 2026-03-25 12:36:51 +00:00
Anso 19d8daf0f1 docs: refresh screenshots (#144) 2026-03-25 06:40:47 +00:00
Anso 4b48473a4f docs: refresh screenshots (#143) 2026-03-25 06:35:00 +00:00
Anso 21350945ff docs: refresh screenshots (#140) 2026-03-25 05:52:33 +00:00
Anso ac48bab9bf docs: refresh screenshots (#137) 2026-03-25 05:19:37 +00:00
Anso 60032564b3 docs: refresh screenshots (#136) 2026-03-25 05:07:57 +00:00
Anso cb5b25de8d docs: refresh screenshots (#133) 2026-03-25 04:44:41 +00:00
Anso c867d71139 docs: refresh screenshots (#131) 2026-03-25 04:07:54 +00:00
Anso 68a1dbe671 chore(deps): upgrade major dependencies (ESLint 10, recharts 3, TS 6, Vite 8) (#130)
* chore(deps): upgrade ESLint 9 → 10 with plugin compatibility fixes

- eslint: ^9 → ^10.0.0 (backend + frontend)
- @eslint/js: ^9 → ^10.0.0 (backend + frontend)
- eslint-plugin-react-refresh: ^0.4.24 → ^0.5.2 (ESM, config factory API)
- Update frontend eslint.config.js: destructured import for react-refresh,
  call configs.vite() as factory function (0.5 API change)
- Downgrade new ESLint 10 rules (no-useless-assignment, preserve-caught-error)
  to warnings for existing code patterns
- eslint-plugin-react-hooks stays at 7.0.1 (stable) with --legacy-peer-deps
  until a stable release adds ESLint 10 peer support

* chore(deps): upgrade recharts 2.x to 3.8 with chart.tsx type fixes

recharts 3.x moved Tooltip/Legend props to context-based API.
Updated chart.tsx to use explicit prop interfaces with internal
recharts type imports (LegendPayload, TooltipPayload, TooltipFormatter).

* chore(deps): upgrade TypeScript 5.9 to 6.0

- Remove deprecated baseUrl from frontend tsconfig (paths works standalone in TS 6)
- Add react-is dependency required by recharts 3.x at build time
- Backend and frontend both compile and lint cleanly

* chore(deps): upgrade Vite 7.3 to 8.0 and @vitejs/plugin-react to 6.0

Vite 8 replaces Rollup+esbuild with Rolldown, significantly improving
build speed (~2s vs ~18s). No config changes required.

* fix(ci): add .npmrc with legacy-peer-deps for CI and Docker builds

typescript-eslint@8.x requires typescript <6.0.0 and
eslint-plugin-react-hooks@7.0.1 requires eslint <=9. Until upstream
packages release compatible versions, legacy-peer-deps is needed.

* docs: add logo assets and re-ignore CLAUDE.md

* fix(ci): copy .npmrc into prod-deps Docker stage

The prod-deps stage also runs npm ci with backend/package.json but was
missing the .npmrc needed to bypass peer dep conflicts.
2026-03-25 00:03:08 -04:00
Anso e39cd386b2 docs: refresh screenshots (#129) 2026-03-25 03:13:15 +00:00
Anso 29c32e5ffb docs: refresh screenshots (#128) 2026-03-25 03:04:05 +00:00
Anso d8d7d31241 docs: refresh screenshots (#125) 2026-03-25 02:39:28 +00:00
AnsoCode c56b244f58 docs: refresh screenshots 2026-03-24 23:08:45 +00:00
AnsoCode 2c13d7c37d docs: refresh screenshots 2026-03-24 22:02:46 +00:00
Anso 83dd6541cb docs: refresh screenshots (#81) 2026-03-24 11:34:41 -04:00
Anso 6338122253 docs: refresh screenshots (#79) 2026-03-24 09:19:21 -04:00
Anso aecb311cbb docs: refresh screenshots (#77) 2026-03-24 08:07:37 -04:00
Anso b7a39ce597 docs: refresh screenshots (#75) 2026-03-24 07:27:28 -04:00
AnsoCode 5825c0686c docs: refresh screenshots 2026-03-23 15:54:48 +00:00
Anso 119336b582 Merge pull request #72 from AnsoCode/chore/migrate-to-docs-json
chore(docs): migrate from mint.json to docs.json (Mintlify v2)
2026-03-23 11:52:38 -04:00
SaelixCode 2e69c8ec75 chore(docs): migrate from mint.json to docs.json
Mintlify v2 requires docs.json; mint.json is deprecated and causes
"docs.json not found" errors in the Mintlify dashboard editor.

Changes:
- Add docs/docs.json with v2 schema: navigation wrapped in { groups: [] },
  theme field, logo/favicon placeholder paths at /images/logo/
- Delete docs/mint.json
2026-03-23 08:36:15 -04:00
AnsoCode 719b7d73a9 docs: refresh screenshots 2026-03-23 12:12:10 +00:00
AnsoCode 70e08f2763 docs: refresh screenshots 2026-03-23 04:36:17 +00:00
SaelixCode 932e7780ea docs: add Tier 3 reference and operations pages
- reference/settings: complete settings hub reference (all 7 tabs —
  Account, System Limits, Notifications, Appearance, Developer, Nodes,
  App Store)
- operations/troubleshooting: 1:1 path rule failures, Docker socket
  permissions, login errors, WebSocket proxy config, offline remote
  nodes, password reset, health endpoint, container logs
- operations/backup: what to back up (DATA_DIR SQLite + COMPOSE_DIR),
  hot backup via sqlite3, cron example, restore steps, host migration
  walkthrough
- mint.json: populate Reference and Operations nav groups
2026-03-22 23:25:15 -04:00
SaelixCode 7c120c671c docs: add Tier 2 feature pages
- dashboard: container stats, system stats, historical charts, docker run converter
- resources: disk footprint widget, images/volumes/networks/unmanaged tabs, prune scopes
- app-store: template grid, category filter, deploy sheet (env vars/volumes/ports), custom registry
- global-observability: unified log stream, standard vs SSE mode, filters, capacity limits
- host-console: PTY terminal, shell type, security model, common uses
- mint.json: add all 5 new pages to Features nav group
2026-03-22 22:43:53 -04:00
SaelixCode 98910c4117 docs: bootstrap user-facing documentation from codebase audit
- Add 5 new Tier 1 doc pages: configuration, stack-management, editor,
  multi-node, and alerts-notifications
- Update introduction, quickstart, and features/overview to reflect
  current feature set and link to new pages
- Restructure mint.json with Getting Started / Features / Reference /
  Operations navigation groups
- Add Playwright-captured screenshots for all major UI screens
2026-03-22 22:39:06 -04:00
SaelixCode 9496b14f72 feat: add automated docs pipeline and scaffold /docs folder
- Add sync-docs CI job: runs on push to main, copies /docs into sencho-docs repo via DOCS_REPO_TOKEN
- Scaffold /docs with mint.json, getting-started/introduction.mdx, getting-started/quickstart.mdx, features/overview.mdx
- Update CHANGELOG
2026-03-22 21:08:16 -04:00