Commit Graph
90 Commits
Author SHA1 Message Date
isaaccladandCursor 9e1d4d5c3d Hide header avatar on mobile and sync shared mobile nav partials.
Profile moves to the bottom nav sheet on small screens; optional search tab
support is synced from the Ladill platform template.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 12:04:09 +00:00
isaacclad d10b915059 Sync app launcher from registry — add Frontdesk.
Deploy Ladill Hosting / deploy (push) Successful in 27s
2026-06-28 01:45:57 +00:00
isaaccladandCursor 9fffe7802c Sync app launcher from registry
Deploy Ladill Hosting / deploy (push) Successful in 39s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-27 19:03:57 +00:00
isaaccladandCursor da6886e572 Sync app launcher from registry
Deploy Ladill Hosting / deploy (push) Successful in 47s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-27 18:28:03 +00:00
isaacclad 1e415a5906 Sync app launcher from registry
Deploy Ladill Hosting / deploy (push) Successful in 1m10s
2026-06-27 15:15:00 +00:00
isaaccladandClaude Opus 4.8 75ba450938 Terminal: show the live full working-directory path in the toolbar
Deploy Ladill Hosting / deploy (push) Successful in 45s
The toolbar showed a static ~/public_html. The jailed shell now reports its cwd
via OSC 7 each prompt (jail rcfile keeps the user's prompt + emits it); xterm
captures it and the toolbar shows the full path (/home/<user>/...), updating as
the user cd's. Launcher/rcfile committed in deployment/ for reproducibility.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 07:53:48 +00:00
isaaccladandClaude Opus 4.8 d7b47e67fb Terminal: fill the viewport (height below the panel header, edge-to-edge)
Deploy Ladill Hosting / deploy (push) Successful in 34s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 07:43:56 +00:00
isaaccladandClaude Opus 4.8 01ba91d5ca Terminal: drop the redundant toolbar 'Terminal' label (page header already shows it)
Deploy Ladill Hosting / deploy (push) Successful in 1m3s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 07:36:27 +00:00
isaaccladandClaude Opus 4.8 28b4430c58 Terminal: replace macOS traffic-light dots with a 'Terminal' label
Deploy Ladill Hosting / deploy (push) Successful in 1m42s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 07:32:49 +00:00
isaaccladandClaude Opus 4.8 d54ae879b6 Jailed terminal: per-session passwd so customers can't enumerate tenants
Deploy Ladill Hosting / deploy (push) Successful in 39s
The jail's /etc/passwd listed every hosting username (no passwords — shadow isn't
in the jail — but it enumerated tenants). The launcher now binds a per-session
/etc/passwd|group (root + the current user only) inside each session's mount
namespace, and the shared jail passwd no longer carries hosting users.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 07:22:47 +00:00
isaaccladandClaude Opus 4.8 f7bba4d453 Jailed terminal: per-session tmpfs /home so users see only their own folder
Deploy Ladill Hosting / deploy (push) Successful in 1m41s
Inside the jail, 'cd ..' from the home landed in a non-listable /home (Permission
denied). Mount a per-session tmpfs over the jail's /home containing only the
user's own directory, so 'ls /home' shows just their folder — no other tenants
leaked, confinement unchanged. (Live host launcher already updated.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 06:58:29 +00:00
isaaccladandClaude Opus 4.8 18d1e735d8 Jail the remote (SSH) terminal path too, not just local
Deploy Ladill Hosting / deploy (push) Successful in 33s
Accounts whose node has an ssh_private_key take the remote branch, which still
launched an unjailed 'runuser' shell — leaving the breach open. Route it through
the same jailkit launcher (no sudo; provider connects as root). Now every
terminal session is chrooted to the customer's own home.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 23:55:22 +00:00
isaaccladandClaude Opus 4.8 2a1228b40e Jail the control-panel terminal to the customer's home (chroot)
Deploy Ladill Hosting / deploy (push) Successful in 45s
SECURITY: the browser terminal ran an unconfined login shell as the account's
system user, so customers could browse the whole host (/var/www, other tenants,
/etc). Run it inside a jailkit chroot instead: a vetted, sudo-scoped launcher
(/usr/local/sbin/ladill-jailsh) enters a private mount namespace, bind-mounts
ONLY that user's home into /home/jail, and chroots as the user. They can no
longer see anything outside their own home. Provisioning committed in
deployment/ (setup-terminal-jail.sh + ladill-jailsh) so it is reproducible.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 23:41:18 +00:00
isaaccladandClaude Opus 4.8 e86f95ddc7 Commit the control-panel terminal frontend (xterm) so clean builds keep it
Deploy Ladill Hosting / deploy (push) Successful in 1m21s
The terminal Alpine component + xterm/xterm-addon-fit only ever existed in an
out-of-band build; committed source never had them, so clean CI rebuilds shipped
a bundle WITHOUT the terminal (blank panel). Add resources/js/hosting-terminal.js
(window.hostingInteractiveTerminal, recovered from the last working build), import
it from app.js, and add xterm deps to package.json/lock. Verified: a clean
'npm ci && vite build' now includes the component + xterm.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 23:00:02 +00:00
isaaccladandClaude Opus 4.8 ff3959b734 Fix browser terminal falsely reporting 'failed to start'
Deploy Ladill Hosting / deploy (push) Successful in 1m15s
createSession only waited 2.5s for the worker to flip starting->running, but
the worker cold-boots the framework (php artisan) + opens the shell, which under
load exceeds that. On timeout it also overwrote the (healthy) worker's metadata
to status=failed, so customers saw 'Terminal worker failed to start' even though
the shell was live. Wait up to 8s and return early once status is known; never
fabricate a failure — the worker records real boot errors itself.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 22:09:45 +00:00
isaaccladandClaude Opus 4.8 7e5ca3dce4 Surface connected domains in Ladill Domains' My Domains
Deploy Ladill Hosting / deploy (push) Successful in 58s
Push the customer's connected domain to the central connected-domains registry
so it appears under My Domains (with Transfer in if not registered with Ladill).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 20:17:17 +00:00
isaaccladandClaude Opus 4.8 091a8efd85 Register issued certs with Ladill Domains central SSL registry
Deploy Ladill Hosting / deploy (push) Successful in 51s
After provisioning a site cert on its node, report it to Domains' central SSL
registry (best-effort, non-blocking) so Domains tracks every platform cert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 18:47:33 +00:00
0961a00e1f Add Accounting to the app launcher
Deploy Ladill Hosting / deploy (push) Successful in 48s
Ladill Accounting is now live at accounting.ladill.com; add its row + icon to
the shared app launcher (byte-identical across all Ladill apps).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 13:48:36 +00:00
isaaccladandClaude Opus 4.8 77a048921c Add branded boot splash (Ladill Mail style) on app pages
Deploy Ladill Hosting / deploy (push) Successful in 31s
InjectBootSplash middleware shows a self-branded loading splash once per session
while the app boots, then fades out.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 22:11:39 +00:00
isaaccladandClaude Opus 4.8 98dfa56b22 Update POS launcher icon (app launcher + marketing)
Deploy Ladill Hosting / deploy (push) Successful in 31s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 07:45:23 +00:00
isaaccladandCursor 7574a035b6 Sync app launcher config and add POS icon.
Deploy Ladill Hosting / deploy (push) Successful in 26s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 22:53:37 +00:00
isaaccladandCursor 5a54477128 Deliver hosting resource limit alerts in-app only.
Deploy Ladill Hosting / deploy (push) Successful in 31s
Stop emailing users when their servers hit usage limits; keep database notifications for the in-app bell.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 19:28:59 +00:00
isaaccladandCursor 4ba2e86cf5 Standardize desktop topbar widgets to match CRM layout.
Deploy Ladill Hosting / deploy (push) Successful in 30s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 18:16:40 +00:00
isaaccladandClaude Opus 4.8 739043755f Add wallet balance widget to the profile menu (after Billing)
Deploy Ladill Hosting / deploy (push) Successful in 28s
Wallet balance peek rendered as a menu row directly under Billing, backed by
a /wallet/balance endpoint (BillingClient) and guarded by Route::has. Also
opens Afia via a direct window event for reliability.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 12:25:46 +00:00
isaaccladandClaude Opus 4.8 36f7acf1e1 Add CRM to the Ladill app launcher
Deploy Ladill Hosting / deploy (push) Successful in 21s
crm.ladill.com is now live in the suite; add its launcher row + icon
(byte-identical shared launcher config).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 22:41:28 +00:00
isaaccladandClaude Opus 4.8 8fdc63c65d Add Invoice to the app launcher
Deploy Ladill Hosting / deploy (push) Successful in 22s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:19:11 +00:00
isaaccladandCursor e6c2ebeee0 Bind app sessions to the platform auth session.
Deploy Ladill Hosting / deploy (push) Successful in 27s
Clear local sessions when auth.ladill.com signs out and ping the platform session from keepalive.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-20 08:26:30 +00:00
isaaccladandCursor ae1c93b017 Add Ladill SMS to shared app launcher.
Deploy Ladill Hosting / deploy (push) Successful in 33s
Include sms.ladill.com in the cross-app launcher and ship the SMS icon asset.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 23:12:36 +00:00
isaaccladandCursor 56c43a73af Fix domain purchase modal on user-layout order flows.
Deploy Ladill Hosting / deploy (push) Successful in 22s
Include the purchase modal in user-layout and stack it above the order dialog so Get a new domain opens correctly.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 19:29:02 +00:00
isaaccladandCursor c1658d9e7f Remove duplicate close button from domain purchase modal.
Deploy Ladill Hosting / deploy (push) Successful in 25s
Rely on the shared modal component's close control instead of rendering a second one in the embed header.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 19:17:29 +00:00
isaaccladandCursor 3ac89593fc Merge platform registry into owned-domain picker lookups.
Deploy Ladill Hosting / deploy (push) Successful in 29s
Fetch owned domains from both domains.ladill.com and the platform registry so legacy customer domains populate the Ladill picker.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 18:17:03 +00:00
isaaccladandCursor 537e34cbd7 Wire Ladill domain picker and purchase modal into hosting flows.
Deploy Ladill Hosting / deploy (push) Successful in 51s
Use the Domains API for owned domains across panel, account, and order forms, with an embedded iframe purchase modal instead of redirecting to domains.ladill.com.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 18:01:23 +00:00
isaaccladandCursor 44cfb1d9b9 Fix profile dropdown 500 by using the correct auth user variable.
Deploy Ladill Hosting / deploy (push) Successful in 55s
Topbar defines $u but the menu partial was passed undefined $user.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 10:48:59 +00:00
isaaccladandCursor e17cada9b6 Hide the current page link in the unified profile dropdown.
Deploy Ladill Hosting / deploy (push) Successful in 49s
Skip Home, account, and admin menu items when the user is already on that destination.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 10:16:08 +00:00
isaaccladandCursor bb421f3dbc Fix corrupted profileMenuItems in layouts after menu propagation.
Deploy Ladill Hosting / deploy (push) Successful in 1m27s
Remove orphaned array entries that caused Blade parse errors and 500 responses on authenticated pages.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 10:04:14 +00:00
isaaccladandCursor 53f38ba794 Unify logged-in profile dropdown with platform account menu.
Deploy Ladill Hosting / deploy (push) Successful in 46s
Wire UserProfileMenu and shared Blade partial into topbar, mobile nav, and layouts so menu items match the account portal (Ladill Mail excluded).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 09:33:27 +00:00
isaaccladandCursor d85a7db057 Remove centralized account nav from app sidebar; redirect legacy URLs.
Deploy Ladill Hosting / deploy (push) Successful in 29s
Wallet, Billing, Team, Developers, and Support live on account.ladill.com.
Siloed sidebars keep product nav and app Settings only.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 00:42:46 +00:00
isaaccladandClaude Opus 4.8 869a53d168 Sidebar: remove centralized account links; redirect Wallet/Billing to hub
Deploy Ladill Hosting / deploy (push) Successful in 44s
Remove the Wallet/Billing/Team links from the hosting sidebar (managed centrally
at account.ladill.com); keep Support (deep-links to hub) and Settings. Redirect
the now-orphaned account.wallet/account.billing routes to the central hub so
bookmarks still work.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 00:20:13 +00:00
isaaccladandClaude Opus 4.8 2ff74c45ac Remove orphaned account.team/developers routes + repoint sidebar Team
Deploy Ladill Hosting / deploy (push) Successful in 1m11s
Completes the strip: drop the local account.team* and account.developers* route
definitions (the DeveloperController + views were removed in the previous
commit) and point the sidebar Team link to the central account hub. account.switch
retained. (Previous commit landed only the deletions; this makes routes consistent.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 23:59:44 +00:00
isaaccladandClaude Opus 4.8 f206f9bef5 Strip hosting Team & Developers pages; point to central account hub
Deploy Ladill Hosting / deploy (push) Successful in 50s
Team and developer-token management now live on account.ladill.com. Remove the
local account.team* and account.developers* routes, the DeveloperController, and
the (empty) hosting Team/Developers pages; repoint the sidebar Team link to
ladill_account_url('/account/team'). The acting-account switcher (account.switch)
stays — it is load-bearing for multi-account access. Hosting developer-access
authz is already centralized via the identity API (shadow-verified + flipped).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 23:58:52 +00:00
isaaccladandClaude Opus 4.8 107013bd04 Hosting dev-access: resolve via central identity API (shadow mode)
Deploy Ladill Hosting / deploy (push) Successful in 23s
Consolidate the inline HostingAccountMember lookups (Overview/Search/Hosting
Product/Afia controllers) into HostingAccessResolver, which can source hosting
developer-access from the monolith's central /identity/hosting/developer-access
(correlating cPanel usernames to local account ids). Shadow mode by default
(HOSTING_CENTRAL_DEV_ACCESS=false): local hosting_account_members stays
authoritative and divergence from central is logged; flip the flag to cut over.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 23:42:08 +00:00
isaaccladandClaude Opus 4.8 174ead7d3e Ignore storage/framework build artifacts (compiled views/cache/sessions)
Deploy Ladill Hosting / deploy (push) Successful in 1m9s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 22:59:14 +00:00
isaaccladandCursor 5e4109384e Fix hosting profile dropdown and align menu with platform.
Deploy Ladill Hosting / deploy (push) Successful in 29s
Add home.ladill.com helper, repair click-outside handling on topbar menus, and expand profile links on desktop and mobile.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 20:40:43 +00:00
isaaccladandCursor 05466b6868 Fix SSO callback 500 on cross-app redirects.
Deploy Ladill Hosting / deploy (push) Successful in 1m21s
Use HostingTeamMember instead of the missing QrTeamMember class so the first login callback completes without error.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 14:33:44 +00:00
isaaccladandCursor 3c18d2f4b5 Use Ladill hosting icon in control panel sidebar.
Deploy Ladill Hosting / deploy (push) Successful in 43s
Replace the generic server glyph with hosting.svg inside the existing purple header badge.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 14:12:32 +00:00
isaaccladandCursor 01325d3edf Fix file manager select-all and delete actions.
Deploy Ladill Hosting / deploy (push) Successful in 27s
Correct a JavaScript syntax error that prevented the file manager Alpine component from loading, and include the confirm modal in the hosting panel layout so delete prompts render.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 13:54:18 +00:00
isaaccladandCursor 0bdc9513b0 Restore silent SSO on app entry for users switching between apps.
Deploy Ladill Hosting / deploy (push) Successful in 31s
Guests without a local session try prompt=none SSO first; marketing pages
are only for visitors with no platform session (localhost fix retained).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 13:47:30 +00:00
isaaccladandCursor ea7e46a260 Fix guest entry: correct marketing URL and stop auto silent SSO.
Deploy Ladill Hosting / deploy (push) Successful in 34s
Correct localhost marketing_url default and stop redirecting guests through
/sso/connect on visit; SSO starts only via explicit sign-in.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 13:09:24 +00:00
isaaccladandCursor 8d076d9fe0 Send SSO guests to ladill.com/products/hosting instead of subdomain landings.
Deploy Ladill Hosting / deploy (push) Successful in 36s
Remove interactive OAuth fallback on silent SSO failure and add ladill.marketing_url config so app subdomains open the dashboard when signed in locally.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 22:22:23 +00:00
isaaccladandClaude Opus 4.8 a47b469320 Afia: render markdown bold in chat instead of showing raw asterisks
Deploy Ladill Hosting / deploy (push) Successful in 1m27s
Replies came back with **bold** markup that displayed literally to users.
Render the bubble as HTML (escaped first for safety) and convert **text** to
<strong>; newlines already handled by whitespace-pre-line.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 08:41:01 +00:00