new front end
@@ -0,0 +1,24 @@
|
||||
# Rsync Studio launch frontend
|
||||
|
||||
The public `/` page is now a product-launch landing page using the same shared Laravel layout as checkout, support, authentication and the licence portal.
|
||||
|
||||
## Favicon/device assets
|
||||
|
||||
The website uses the existing Rsync Studio app icon as the web brand source and includes:
|
||||
|
||||
- multi-resolution `public/favicon.ico`
|
||||
- 16x16, 32x32 and 48x48 browser favicons
|
||||
- 180x180 Apple touch icon
|
||||
- 192x192 and 512x512 Android/PWA icons
|
||||
- Windows 150x150 tile icon and `browserconfig.xml`
|
||||
- Safari pinned-tab mask icon
|
||||
- `site.webmanifest`
|
||||
- Open Graph/Twitter image metadata
|
||||
|
||||
The shared `resources/views/layouts/app.blade.php` loads these assets on every website page.
|
||||
|
||||
## Launch page
|
||||
|
||||
`resources/views/portal/welcome.blade.php` contains the public product page: hero, native app preview, features, workflow, security positioning, Personal/Professional plan summary and trial calls-to-action.
|
||||
|
||||
Non-production environments automatically emit `noindex,nofollow`; production emits normal index/follow metadata.
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/icons/mstile-150x150.png"/>
|
||||
<TileColor>#2563eb</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 669 B |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<path fill="#000" d="M256 89c85 0 154 60 167 139l-46 8c-9-56-60-100-121-100-45 0-85 24-106 60l41 15-83 36-33-85 31 12C135 123 191 89 256 89Zm0 334c-85 0-154-60-167-139l46-8c9 56 60 100 121 100 45 0 85-24 106-60l-41-15 83-36 33 85-31-12c-29 51-85 85-150 85Zm-69-192h138v25H187v-25Zm0 55h138v25H187v-25Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 377 B |
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "Rsync Studio",
|
||||
"short_name": "Rsync Studio",
|
||||
"description": "Native rsync job management for macOS.",
|
||||
"start_url": "/",
|
||||
"display": "standalone",
|
||||
"background_color": "#f7f9fc",
|
||||
"theme_color": "#0b1220",
|
||||
"icons": [
|
||||
{"src": "/icons/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png"},
|
||||
{"src": "/icons/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png"}
|
||||
]
|
||||
}
|
||||
@@ -1,6 +1,205 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="csrf-token" content="{{ csrf_token() }}"><title>{{ $title ?? 'Rsync Studio' }}</title><style>
|
||||
:root{color-scheme:light;--bg:#f6f7fb;--surface:#fff;--text:#18202a;--muted:#667085;--line:#e4e7ec;--blue:#2563eb;--blue-dark:#1d4ed8;--blue-soft:#eff6ff;--green:#067647;--green-soft:#ecfdf3;--red:#b42318;--red-soft:#fef3f2;--nav:#101828}
|
||||
*{box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;margin:0;background:var(--bg);color:var(--text);font-size:15px;line-height:1.45}nav{background:var(--nav);color:#fff;padding:0 28px;height:64px;display:flex;gap:22px;align-items:center}nav strong{font-size:16px;margin-right:4px}nav a{color:#e5e7eb;text-decoration:none;font-weight:600;font-size:14px}nav a:hover{color:#fff}.wrap{max-width:1120px;margin:0 auto;padding:42px 24px 64px}.hero-card{padding:28px 0 18px}.hero-card h1,.portal-header h1,.licence-detail-head h1{font-size:38px;line-height:1.08;margin:7px 0 10px;letter-spacing:-.025em}.eyebrow{text-transform:uppercase;letter-spacing:.12em;font-size:11px;font-weight:800;color:var(--blue)}.lead{font-size:17px;line-height:1.55;max-width:720px;color:#475467}.lead.compact{margin:0}.pricing-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin:20px 0 28px}.price-card,.card,.panel{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:24px;box-shadow:0 1px 3px rgba(16,24,40,.05)}.price-card{display:flex;flex-direction:column;justify-content:space-between;gap:24px}.price-card.featured{border-color:#9dbcf7}.plan-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.plan-heading h2{margin:0 0 5px}.price{font-size:28px;font-weight:800;margin:20px 0}.features{padding-left:20px;line-height:1.9}.pill,.sandbox-badge{display:inline-block;border-radius:999px;padding:5px 9px;font-size:12px;font-weight:700;background:var(--blue-soft);color:var(--blue-dark)}.sandbox-badge{margin-top:8px;background:#fff7ed;color:#9a3412}.checkout-button{width:100%;font-size:15px;font-weight:700;padding:12px 16px}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}.muted{color:var(--muted)}.ok{color:var(--green)}.bad{color:var(--red)}button,.btn{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:9px;padding:10px 15px;background:var(--blue);color:#fff;text-decoration:none;cursor:pointer;font:inherit;font-weight:700;line-height:1.2}button:hover,.btn:hover{background:var(--blue-dark)}.btn-secondary,button.btn-secondary{background:#fff;color:#344054;border:1px solid #d0d5dd}.btn-secondary:hover,button.btn-secondary:hover{background:#f9fafb}.danger{background:var(--red)}.danger:hover{background:#912018}.danger-outline{background:#fff;color:var(--red);border:1px solid #f3b7b2}.danger-outline:hover{background:var(--red-soft)}.full-width{width:100%}input{width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;margin:6px 0 14px}label{font-weight:600}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px;border-bottom:1px solid #e5e7eb}.alert,.error{padding:13px 15px;border-radius:10px;margin:0 0 20px;font-weight:600}.alert{background:var(--green-soft);color:var(--green);border:1px solid #abefc6}.error{background:var(--red-soft);color:var(--red);border:1px solid #fecdca}
|
||||
.portal-header{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:26px}.licence-list{display:grid;gap:16px}.licence-card{background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 1px 3px rgba(16,24,40,.05);overflow:hidden}.licence-card-featured{border-color:#c6d7fb}.licence-main{padding:24px 26px}.licence-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.licence-title-row h2{font-size:22px;margin:10px 0 2px;letter-spacing:-.015em}.licence-key{margin:0}.badge-row{display:flex;gap:7px;flex-wrap:wrap}.status-badge,.plan-badge,.billing-badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:800}.status-active{background:var(--green-soft);color:var(--green)}.status-inactive{background:var(--red-soft);color:var(--red)}.plan-badge{background:var(--blue-soft);color:var(--blue-dark)}.billing-badge{background:#f2f4f7;color:#475467}.licence-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:24px 0 12px;padding-top:20px;border-top:1px solid var(--line)}.licence-stats>div{display:flex;flex-direction:column;gap:3px}.stat-label{font-size:12px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.04em}.licence-stats strong{font-size:15px}.activation-meter{height:7px;background:#eef2f6;border-radius:99px;overflow:hidden}.activation-meter span{display:block;height:100%;background:var(--blue);border-radius:99px}.upgrade-strip,.subscription-warning{margin-top:20px;border-radius:12px;padding:15px 16px;display:flex;align-items:center;justify-content:space-between;gap:16px}.upgrade-strip{background:#f5f8ff;border:1px solid #dbe7ff}.upgrade-strip div{display:flex;flex-direction:column;gap:2px}.upgrade-strip span{color:#475467;font-size:14px}.subscription-warning{background:#fff7ed;border:1px solid #fed7aa}.subscription-warning p{margin:3px 0 0;color:#9a3412;font-size:13px;max-width:720px}.empty-state{background:#fff;border:1px dashed #cbd5e1;border-radius:16px;padding:44px;text-align:center}.empty-state h2{margin-top:0}.history-panel{margin-top:26px;background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden}.history-panel summary{cursor:pointer;padding:16px 20px;font-weight:800}.history-panel summary span{display:inline-flex;margin-left:6px;min-width:22px;height:22px;align-items:center;justify-content:center;border-radius:99px;background:#f2f4f7;color:#475467;font-size:12px}.history-list{border-top:1px solid var(--line)}.history-row{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:18px;padding:14px 20px;border-bottom:1px solid var(--line)}.history-row:last-child{border-bottom:0}.history-row>div:first-child{display:flex;flex-direction:column}.history-row span{font-size:13px;color:var(--muted)}.history-status{font-size:13px;color:var(--muted)}.history-row a{font-weight:700;color:var(--blue);text-decoration:none}.back-link{display:inline-block;margin-bottom:20px;color:#475467;text-decoration:none;font-weight:700}.licence-detail-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:24px}.licence-detail-head h1{font-size:32px}.detail-grid{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(280px,.7fr);gap:18px}.panel{margin:0}.panel h2{margin:0;font-size:20px}.panel-heading{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;padding-bottom:18px;border-bottom:1px solid var(--line)}.panel-heading p{margin:4px 0 0;color:var(--muted)}.activation-count{font-weight:800;background:var(--blue-soft);color:var(--blue-dark);padding:6px 10px;border-radius:999px}.device-row{display:grid;grid-template-columns:42px 1fr auto;gap:14px;align-items:center;padding:17px 0;border-bottom:1px solid var(--line)}.device-row:last-child{border-bottom:0}.device-icon{width:42px;height:42px;display:flex;align-items:center;justify-content:center;background:#f2f4f7;border-radius:10px;font-size:20px}.device-copy{display:flex;flex-direction:column;min-width:0}.device-copy span,.device-copy small{color:var(--muted)}.device-copy small{margin-top:2px}.empty-inline{padding:26px 0 4px;color:var(--muted)}.subscription-panel form+form{margin-top:10px}.subscription-facts{margin:18px 0 22px}.subscription-facts>div{display:flex;justify-content:space-between;gap:16px;padding:11px 0;border-bottom:1px solid var(--line)}.subscription-facts dt{color:var(--muted)}.subscription-facts dd{margin:0;font-weight:700;text-align:right}
|
||||
@media(max-width:760px){nav{padding:0 16px;gap:12px;overflow-x:auto}.wrap{padding:28px 16px 48px}.pricing-grid{grid-template-columns:1fr}.hero-card h1,.portal-header h1{font-size:32px}.portal-header,.licence-detail-head,.licence-title-row,.upgrade-strip,.subscription-warning{align-items:stretch;flex-direction:column}.portal-header .btn,.licence-title-row .btn{width:100%}.licence-stats{grid-template-columns:1fr}.detail-grid{grid-template-columns:1fr}.history-row{grid-template-columns:1fr auto}.history-row a{grid-column:1/-1}.device-row{grid-template-columns:38px 1fr}.device-row form{grid-column:1/-1}.device-row form button{width:100%}}
|
||||
</style></head><body><nav><strong>Rsync Studio</strong><a href="{{ route('home') }}">Home</a><a href="{{ route('buy') }}">Buy</a>@auth @if(auth()->user()->hasVerifiedEmail())<a href="{{ route('portal.index') }}">My licences</a>@endif @if(auth()->user()->is_admin)<a href="{{ route('admin.index') }}">Admin</a>@endif <span style="margin-left:auto">{{ auth()->user()->email }}</span><form method="post" action="{{ route('logout') }}">@csrf<button>Sign out</button></form>@else<span style="margin-left:auto"></span><a href="{{ route('login') }}">Sign in</a><a href="{{ route('register') }}">Create account</a>@endauth</nav><main class="wrap">@if(session('status'))<div class="alert">{{ session('status') }}</div>@endif @if($errors->any())<div class="error">{{ $errors->first() }}</div>@endif @yield('content')</main></body></html>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
@php
|
||||
$pageTitle = $title ?? 'Rsync Studio';
|
||||
$pageDescription = $description ?? 'Native rsync job management for macOS. Create, schedule, watch and review reliable local and SSH sync jobs.';
|
||||
$canonicalUrl = url()->current();
|
||||
$socialImage = url('/icons/og-rsync-studio.png');
|
||||
@endphp
|
||||
|
||||
<title>{{ $pageTitle }}</title>
|
||||
<meta name="description" content="{{ $pageDescription }}">
|
||||
<meta name="theme-color" content="#0b1220">
|
||||
<meta name="application-name" content="Rsync Studio">
|
||||
<meta name="apple-mobile-web-app-title" content="Rsync Studio">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||
<meta name="msapplication-TileColor" content="#2563eb">
|
||||
<meta name="msapplication-config" content="{{ asset('browserconfig.xml') }}">
|
||||
@if(app()->environment('production'))
|
||||
<meta name="robots" content="index,follow,max-image-preview:large">
|
||||
@else
|
||||
<meta name="robots" content="noindex,nofollow">
|
||||
@endif
|
||||
|
||||
<link rel="canonical" href="{{ $canonicalUrl }}">
|
||||
<link rel="icon" href="{{ asset('favicon.ico') }}" sizes="any">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ asset('icons/favicon-32x32.png') }}">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ asset('icons/favicon-16x16.png') }}">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ asset('icons/apple-touch-icon.png') }}">
|
||||
<link rel="mask-icon" href="{{ asset('icons/safari-pinned-tab.svg') }}" color="#2563eb">
|
||||
<link rel="manifest" href="{{ asset('site.webmanifest') }}">
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:site_name" content="Rsync Studio">
|
||||
<meta property="og:title" content="{{ $pageTitle }}">
|
||||
<meta property="og:description" content="{{ $pageDescription }}">
|
||||
<meta property="og:url" content="{{ $canonicalUrl }}">
|
||||
<meta property="og:image" content="{{ $socialImage }}">
|
||||
<meta property="og:image:width" content="512">
|
||||
<meta property="og:image:height" content="512">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="{{ $pageTitle }}">
|
||||
<meta name="twitter:description" content="{{ $pageDescription }}">
|
||||
<meta name="twitter:image" content="{{ $socialImage }}">
|
||||
|
||||
<style>
|
||||
:root{
|
||||
color-scheme:light;
|
||||
--bg:#f7f9fc;--surface:#fff;--surface-soft:#f8fafc;--text:#172033;--muted:#667085;
|
||||
--line:#e4e7ec;--line-strong:#d0d5dd;--blue:#2563eb;--blue-dark:#1d4ed8;--blue-soft:#eff6ff;
|
||||
--green:#067647;--green-soft:#ecfdf3;--red:#b42318;--red-soft:#fef3f2;--nav:#0b1220;
|
||||
--shadow-sm:0 1px 3px rgba(16,24,40,.06);--shadow-md:0 14px 36px rgba(15,23,42,.08);
|
||||
}
|
||||
*{box-sizing:border-box}
|
||||
html{scroll-behavior:smooth}
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",sans-serif;margin:0;background:var(--bg);color:var(--text);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}
|
||||
a{color:inherit}
|
||||
img{max-width:100%;display:block}
|
||||
button,input{font:inherit}
|
||||
:focus-visible{outline:3px solid rgba(37,99,235,.28);outline-offset:3px}
|
||||
|
||||
.site-header{position:sticky;top:0;z-index:50;background:rgba(11,18,32,.94);backdrop-filter:saturate(180%) blur(18px);border-bottom:1px solid rgba(255,255,255,.08)}
|
||||
.nav-shell{max-width:1220px;margin:0 auto;min-height:68px;padding:0 24px;display:flex;align-items:center;gap:28px}
|
||||
.brand{display:inline-flex;align-items:center;gap:10px;color:#fff;text-decoration:none;font-weight:800;letter-spacing:-.01em;white-space:nowrap}
|
||||
.brand img{width:34px;height:34px;border-radius:9px;box-shadow:0 5px 14px rgba(37,99,235,.25)}
|
||||
.nav-links{display:flex;align-items:center;gap:22px}
|
||||
.nav-links a{color:#cbd5e1;text-decoration:none;font-weight:650;font-size:14px;transition:color .16s ease}
|
||||
.nav-links a:hover{color:#fff}
|
||||
.nav-account{margin-left:auto;display:flex;align-items:center;gap:12px;min-width:0}
|
||||
.nav-email{color:#cbd5e1;font-size:13px;max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
.nav-auth-link{color:#e2e8f0;text-decoration:none;font-weight:650;font-size:14px}
|
||||
.nav-cta{display:inline-flex;align-items:center;justify-content:center;padding:9px 13px;border-radius:9px;background:#fff;color:#0f172a!important;text-decoration:none!important;font-weight:800!important}
|
||||
.nav-signout{background:transparent;border:1px solid rgba(255,255,255,.18);color:#e2e8f0;padding:8px 11px;border-radius:9px;font-weight:700;cursor:pointer}
|
||||
.nav-signout:hover{background:rgba(255,255,255,.08)}
|
||||
|
||||
.wrap{max-width:1120px;margin:0 auto;padding:42px 24px 72px;min-height:calc(100vh - 220px)}
|
||||
.wrap-wide{max-width:1220px}
|
||||
.hero-card{padding:28px 0 18px}
|
||||
.hero-card h1,.portal-header h1,.licence-detail-head h1{font-size:38px;line-height:1.08;margin:7px 0 10px;letter-spacing:-.035em}
|
||||
.eyebrow{text-transform:uppercase;letter-spacing:.12em;font-size:11px;font-weight:850;color:var(--blue)}
|
||||
.lead{font-size:17px;line-height:1.62;max-width:720px;color:#475467}.lead.compact{margin:0}
|
||||
|
||||
.btn,button{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:10px;padding:10px 15px;background:var(--blue);color:#fff;text-decoration:none;cursor:pointer;font:inherit;font-weight:750;line-height:1.2;transition:transform .15s ease,background .15s ease,box-shadow .15s ease}
|
||||
.btn:hover,button:hover{background:var(--blue-dark)}
|
||||
.btn-primary{box-shadow:0 7px 18px rgba(37,99,235,.22)}
|
||||
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 9px 22px rgba(37,99,235,.28)}
|
||||
.btn-secondary,button.btn-secondary{background:#fff;color:#344054;border:1px solid #d0d5dd;box-shadow:none}
|
||||
.btn-secondary:hover,button.btn-secondary:hover{background:#f9fafb}
|
||||
.btn-dark{background:#111827}.btn-dark:hover{background:#030712}
|
||||
.danger{background:var(--red)}.danger:hover{background:#912018}
|
||||
.danger-outline{background:#fff;color:var(--red);border:1px solid #f3b7b2}.danger-outline:hover{background:var(--red-soft)}
|
||||
.full-width{width:100%}
|
||||
|
||||
.pricing-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin:20px 0 28px}
|
||||
.price-card,.card,.panel{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:24px;box-shadow:var(--shadow-sm)}
|
||||
.price-card{display:flex;flex-direction:column;justify-content:space-between;gap:24px}.price-card.featured{border-color:#9dbcf7}
|
||||
.plan-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.plan-heading h2{margin:0 0 5px}.price{font-size:28px;font-weight:850;margin:20px 0}.features{padding-left:20px;line-height:1.9}
|
||||
.pill,.sandbox-badge{display:inline-block;border-radius:999px;padding:5px 9px;font-size:12px;font-weight:750;background:var(--blue-soft);color:var(--blue-dark)}
|
||||
.sandbox-badge{margin-top:8px;background:#fff7ed;color:#9a3412}.checkout-button{width:100%;font-size:15px;font-weight:750;padding:12px 16px}
|
||||
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}.muted{color:var(--muted)}.ok{color:var(--green)}.bad{color:var(--red)}
|
||||
input{width:100%;padding:11px 12px;border:1px solid #cbd5e1;border-radius:9px;margin:6px 0 14px;background:#fff;color:var(--text)}
|
||||
label{font-weight:650}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px;border-bottom:1px solid #e5e7eb}
|
||||
.alert,.error{padding:13px 15px;border-radius:10px;margin:0 0 20px;font-weight:650}.alert{background:var(--green-soft);color:var(--green);border:1px solid #abefc6}.error{background:var(--red-soft);color:var(--red);border:1px solid #fecdca}
|
||||
|
||||
/* Product launch page */
|
||||
.launch-main{overflow:hidden}
|
||||
.launch-hero{position:relative;background:linear-gradient(180deg,#0b1220 0,#101b31 78%,#f7f9fc 78%);padding:82px 24px 106px;color:#fff}
|
||||
.launch-hero:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 75% 12%,rgba(59,130,246,.26),transparent 34%),radial-gradient(circle at 18% 32%,rgba(14,165,233,.13),transparent 28%);pointer-events:none}
|
||||
.launch-shell{position:relative;max-width:1220px;margin:0 auto}
|
||||
.hero-grid{display:grid;grid-template-columns:minmax(0,.95fr) minmax(500px,1.05fr);gap:72px;align-items:center}
|
||||
.launch-kicker{display:inline-flex;align-items:center;gap:8px;background:rgba(59,130,246,.12);border:1px solid rgba(147,197,253,.22);color:#bfdbfe;padding:7px 11px;border-radius:999px;font-size:12px;font-weight:800;letter-spacing:.02em}
|
||||
.launch-kicker:before{content:"";width:7px;height:7px;border-radius:50%;background:#60a5fa;box-shadow:0 0 0 4px rgba(96,165,250,.12)}
|
||||
.launch-hero h1{font-size:clamp(46px,6vw,74px);line-height:.98;letter-spacing:-.055em;margin:20px 0 22px;max-width:760px}
|
||||
.hero-copy{font-size:19px;line-height:1.65;color:#cbd5e1;max-width:650px;margin:0}
|
||||
.hero-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}.hero-actions .btn{padding:13px 18px;border-radius:11px}
|
||||
.hero-actions .btn-secondary{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.18);color:#fff}.hero-actions .btn-secondary:hover{background:rgba(255,255,255,.12)}
|
||||
.hero-note{margin:16px 0 0;color:#94a3b8;font-size:13px}
|
||||
.trust-row{display:flex;gap:20px;flex-wrap:wrap;margin-top:34px;color:#cbd5e1;font-size:13px}.trust-item{display:flex;align-items:center;gap:7px}.trust-check{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;background:rgba(34,197,94,.12);color:#86efac;font-size:11px;font-weight:900}
|
||||
|
||||
.app-window{border:1px solid rgba(255,255,255,.15);border-radius:18px;background:#f8fafc;box-shadow:0 34px 70px rgba(0,0,0,.32);overflow:hidden;color:#111827;transform:perspective(1200px) rotateY(-2deg) rotateX(1deg);transform-origin:center}
|
||||
.window-bar{height:46px;background:#eef2f7;border-bottom:1px solid #dde3ec;display:flex;align-items:center;padding:0 14px;gap:8px}.dot{width:11px;height:11px;border-radius:50%}.dot.red{background:#ff5f57}.dot.amber{background:#febc2e}.dot.green{background:#28c840}.window-title{margin-left:8px;font-size:12px;font-weight:750;color:#667085}
|
||||
.app-body{display:grid;grid-template-columns:160px 1fr;min-height:390px}.app-sidebar{background:#111827;color:#cbd5e1;padding:18px 12px}.mini-brand{display:flex;align-items:center;gap:8px;color:#fff;font-weight:800;font-size:12px;margin:0 8px 18px}.mini-brand img{width:26px;height:26px;border-radius:7px}.side-item{padding:8px 10px;border-radius:8px;font-size:11px;margin:3px 0}.side-item.active{background:#263244;color:#fff}.app-content{padding:20px;background:#f8fafc}.app-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.app-toolbar strong{font-size:15px}.sync-all{font-size:10px;background:#2563eb;color:#fff;padding:7px 9px;border-radius:7px;font-weight:800}.mock-job{background:#fff;border:1px solid #e2e8f0;border-radius:11px;padding:13px 14px;margin-bottom:10px;box-shadow:0 1px 2px rgba(15,23,42,.04)}.mock-job-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.mock-job strong{font-size:12px}.job-state{font-size:9px;font-weight:850;padding:4px 7px;border-radius:999px}.state-ready{background:#ecfdf3;color:#047857}.state-scheduled{background:#eff6ff;color:#1d4ed8}.state-watching{background:#f5f3ff;color:#6d28d9}.mock-job p{font-size:9px;color:#64748b;margin:4px 0 9px}.mock-progress{height:5px;background:#eef2f7;border-radius:999px;overflow:hidden}.mock-progress span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#2563eb,#38bdf8)}.app-statusbar{display:flex;justify-content:space-between;color:#64748b;font-size:9px;margin-top:16px;padding-top:13px;border-top:1px solid #e2e8f0}
|
||||
|
||||
.launch-section{padding:92px 24px}.section-shell{max-width:1120px;margin:0 auto}.section-head{max-width:690px;margin-bottom:42px}.section-head.center{text-align:center;margin-left:auto;margin-right:auto}.section-head h2{font-size:clamp(32px,4vw,46px);line-height:1.08;letter-spacing:-.04em;margin:8px 0 14px}.section-head p{font-size:17px;color:#667085;margin:0;line-height:1.65}
|
||||
.feature-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.feature-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:26px;box-shadow:var(--shadow-sm)}.feature-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:11px;background:var(--blue-soft);color:var(--blue);font-weight:900;font-size:18px;margin-bottom:18px}.feature-card h3{font-size:18px;margin:0 0 8px;letter-spacing:-.015em}.feature-card p{color:#667085;margin:0;line-height:1.6}
|
||||
.workflow-section{background:#fff;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.workflow-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.workflow-step{position:relative;padding:4px 10px 4px 0}.step-number{display:grid;place-items:center;width:36px;height:36px;border-radius:10px;background:#101828;color:#fff;font-weight:850;margin-bottom:16px}.workflow-step h3{font-size:17px;margin:0 0 7px}.workflow-step p{color:#667085;margin:0;font-size:14px;line-height:1.6}
|
||||
.security-panel{background:#0f172a;color:#fff;border-radius:24px;padding:48px;display:grid;grid-template-columns:.9fr 1.1fr;gap:60px;align-items:center;box-shadow:var(--shadow-md)}.security-panel h2{font-size:38px;line-height:1.08;letter-spacing:-.04em;margin:8px 0 15px}.security-panel p{color:#cbd5e1;font-size:16px;line-height:1.65}.security-list{display:grid;gap:13px}.security-item{display:flex;gap:12px;align-items:flex-start;background:rgba(255,255,255,.055);border:1px solid rgba(255,255,255,.08);border-radius:13px;padding:14px}.security-icon{display:grid;place-items:center;width:30px;height:30px;flex:0 0 30px;border-radius:8px;background:rgba(59,130,246,.17);color:#93c5fd;font-weight:900}.security-item strong{display:block;font-size:14px;margin-bottom:2px}.security-item span{display:block;color:#94a3b8;font-size:12px;line-height:1.5}
|
||||
.plan-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;max-width:860px;margin:0 auto}.launch-plan{background:#fff;border:1px solid var(--line);border-radius:20px;padding:30px;box-shadow:var(--shadow-sm);position:relative}.launch-plan.featured{border-color:#9dbcf7;box-shadow:0 18px 44px rgba(37,99,235,.09)}.launch-plan h3{font-size:23px;margin:0}.launch-plan p{color:#667085}.plan-macs{font-size:34px;font-weight:850;letter-spacing:-.04em;margin:24px 0 3px}.plan-sub{font-size:13px;color:#667085}.plan-list{list-style:none;padding:0;margin:24px 0;display:grid;gap:11px}.plan-list li{display:flex;gap:9px;color:#475467}.plan-list li:before{content:"✓";color:#16a34a;font-weight:900}.launch-plan .btn{width:100%;padding:12px}.best-badge{position:absolute;right:18px;top:18px;background:var(--blue-soft);color:var(--blue-dark);border-radius:999px;padding:5px 9px;font-size:11px;font-weight:850}
|
||||
.launch-cta{padding:30px 24px 100px}.cta-box{max-width:1120px;margin:0 auto;background:linear-gradient(135deg,#2563eb,#1d4ed8 55%,#0f4fc9);color:#fff;border-radius:26px;padding:54px;display:flex;align-items:center;justify-content:space-between;gap:36px;box-shadow:0 24px 54px rgba(37,99,235,.2)}.cta-box h2{font-size:38px;line-height:1.08;letter-spacing:-.04em;margin:0 0 10px}.cta-box p{margin:0;color:#dbeafe;font-size:16px}.cta-box .btn{background:#fff;color:#1e3a8a;padding:13px 18px;white-space:nowrap}.cta-box .btn:hover{background:#eff6ff}
|
||||
|
||||
.portal-header{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:26px}.licence-list{display:grid;gap:16px}.licence-card{background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-sm);overflow:hidden}.licence-card-featured{border-color:#c6d7fb}.licence-main{padding:24px 26px}.licence-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.licence-title-row h2{font-size:22px;margin:10px 0 2px;letter-spacing:-.015em}.licence-key{margin:0}.badge-row{display:flex;gap:7px;flex-wrap:wrap}.status-badge,.plan-badge,.billing-badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:800}.status-active{background:var(--green-soft);color:var(--green)}.status-inactive{background:var(--red-soft);color:var(--red)}.plan-badge{background:var(--blue-soft);color:var(--blue-dark)}.billing-badge{background:#f2f4f7;color:#475467}.licence-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:24px 0 12px;padding-top:20px;border-top:1px solid var(--line)}.licence-stats>div{display:flex;flex-direction:column;gap:3px}.stat-label{font-size:12px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.04em}.licence-stats strong{font-size:15px}.activation-meter{height:7px;background:#eef2f6;border-radius:99px;overflow:hidden}.activation-meter span{display:block;height:100%;background:var(--blue);border-radius:99px}.upgrade-strip,.subscription-warning{margin-top:20px;border-radius:12px;padding:15px 16px;display:flex;align-items:center;justify-content:space-between;gap:16px}.upgrade-strip{background:#f5f8ff;border:1px solid #dbe7ff}.upgrade-strip div{display:flex;flex-direction:column;gap:2px}.upgrade-strip span{color:#475467;font-size:14px}.subscription-warning{background:#fff7ed;border:1px solid #fed7aa}.subscription-warning p{margin:3px 0 0;color:#9a3412;font-size:13px;max-width:720px}.empty-state{background:#fff;border:1px dashed #cbd5e1;border-radius:16px;padding:44px;text-align:center}.empty-state h2{margin-top:0}.history-panel{margin-top:26px;background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden}.history-panel summary{cursor:pointer;padding:16px 20px;font-weight:800}.history-panel summary span{display:inline-flex;margin-left:6px;min-width:22px;height:22px;align-items:center;justify-content:center;border-radius:99px;background:#f2f4f7;color:#475467;font-size:12px}.history-list{border-top:1px solid var(--line)}.history-row{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:18px;padding:14px 20px;border-bottom:1px solid var(--line)}.history-row:last-child{border-bottom:0}.history-row>div:first-child{display:flex;flex-direction:column}.history-row span{font-size:13px;color:var(--muted)}.history-status{font-size:13px;color:var(--muted)}.history-row a{font-weight:700;color:var(--blue);text-decoration:none}.back-link{display:inline-block;margin-bottom:20px;color:#475467;text-decoration:none;font-weight:700}.licence-detail-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:24px}.licence-detail-head h1{font-size:32px}.detail-grid{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(280px,.7fr);gap:18px}.panel{margin:0}.panel h2{margin:0;font-size:20px}.panel-heading{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;padding-bottom:18px;border-bottom:1px solid var(--line)}.panel-heading p{margin:4px 0 0;color:var(--muted)}.activation-count{font-weight:800;background:var(--blue-soft);color:var(--blue-dark);padding:6px 10px;border-radius:999px}.device-row{display:grid;grid-template-columns:42px 1fr auto;gap:14px;align-items:center;padding:17px 0;border-bottom:1px solid var(--line)}.device-row:last-child{border-bottom:0}.device-icon{width:42px;height:42px;display:flex;align-items:center;justify-content:center;background:#f2f4f7;border-radius:10px;font-size:20px}.device-copy{display:flex;flex-direction:column;min-width:0}.device-copy span,.device-copy small{color:var(--muted)}.device-copy small{margin-top:2px}.empty-inline{padding:26px 0 4px;color:var(--muted)}.subscription-panel form+form{margin-top:10px}.subscription-facts{margin:18px 0 22px}.subscription-facts>div{display:flex;justify-content:space-between;gap:16px;padding:11px 0;border-bottom:1px solid var(--line)}.subscription-facts dt{color:var(--muted)}.subscription-facts dd{margin:0;font-weight:700;text-align:right}
|
||||
|
||||
.site-footer{background:#0b1220;color:#94a3b8;border-top:1px solid rgba(255,255,255,.06)}.footer-shell{max-width:1220px;margin:0 auto;padding:34px 24px;display:flex;align-items:center;justify-content:space-between;gap:28px}.footer-brand{display:flex;align-items:center;gap:10px;color:#e2e8f0;font-weight:800}.footer-brand img{width:28px;height:28px;border-radius:7px}.footer-links{display:flex;gap:20px;flex-wrap:wrap}.footer-links a{color:#cbd5e1;text-decoration:none;font-size:13px;font-weight:650}.footer-links a:hover{color:#fff}.footer-copy{font-size:12px;margin-top:5px}
|
||||
|
||||
@media(max-width:980px){
|
||||
.hero-grid{grid-template-columns:1fr;gap:48px}.app-window{max-width:720px;transform:none}.feature-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.workflow-grid{grid-template-columns:repeat(2,1fr)}.security-panel{grid-template-columns:1fr;gap:28px}.nav-email{display:none}
|
||||
}
|
||||
@media(max-width:760px){
|
||||
.site-header{position:relative}.nav-shell{padding:10px 16px;min-height:64px;gap:12px;flex-wrap:wrap}.brand{margin-right:auto}.nav-links{order:3;width:100%;gap:18px;overflow-x:auto;padding:2px 0 4px}.nav-links::-webkit-scrollbar{display:none}.nav-account{margin-left:0}.nav-account .nav-auth-link{display:none}.wrap{padding:28px 16px 48px}.pricing-grid,.plan-grid{grid-template-columns:1fr}.hero-card h1,.portal-header h1{font-size:32px}.portal-header,.licence-detail-head,.licence-title-row,.upgrade-strip,.subscription-warning{align-items:stretch;flex-direction:column}.portal-header .btn,.licence-title-row .btn{width:100%}.licence-stats{grid-template-columns:1fr}.detail-grid{grid-template-columns:1fr}.history-row{grid-template-columns:1fr auto}.history-row a{grid-column:1/-1}.device-row{grid-template-columns:38px 1fr}.device-row form{grid-column:1/-1}.device-row form button{width:100%}
|
||||
.launch-hero{padding:58px 18px 88px;background:linear-gradient(180deg,#0b1220 0,#101b31 84%,#f7f9fc 84%)}.launch-hero h1{font-size:48px}.hero-copy{font-size:17px}.app-body{grid-template-columns:120px 1fr;min-height:330px}.app-sidebar{padding:12px 8px}.side-item{padding:7px 8px}.app-content{padding:14px}.launch-section{padding:68px 18px}.feature-grid,.workflow-grid{grid-template-columns:1fr}.security-panel{padding:30px 24px;border-radius:20px}.security-panel h2{font-size:32px}.cta-box{padding:36px 26px;align-items:flex-start;flex-direction:column}.cta-box h2{font-size:32px}.footer-shell{align-items:flex-start;flex-direction:column}.launch-cta{padding:16px 18px 72px}
|
||||
}
|
||||
@media(max-width:480px){.launch-hero h1{font-size:42px}.hero-actions{flex-direction:column}.hero-actions .btn{width:100%}.app-body{grid-template-columns:1fr}.app-sidebar{display:none}.window-title{display:none}.launch-kicker{font-size:11px}.feature-card{padding:22px}}
|
||||
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}
|
||||
</style>
|
||||
@stack('head')
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<nav class="nav-shell" aria-label="Primary navigation">
|
||||
<a class="brand" href="{{ route('home') }}">
|
||||
<img src="{{ asset('icons/rsync-studio-icon-64.png') }}" alt="" width="34" height="34">
|
||||
<span>Rsync Studio</span>
|
||||
</a>
|
||||
<div class="nav-links">
|
||||
<a href="{{ route('home') }}">Product</a>
|
||||
<a href="{{ route('buy') }}">Pricing</a>
|
||||
<a href="{{ route('support') }}">Support</a>
|
||||
@auth
|
||||
@if(auth()->user()->hasVerifiedEmail())<a href="{{ route('portal.index') }}">My licences</a>@endif
|
||||
@if(auth()->user()->is_admin)<a href="{{ route('admin.index') }}">Admin</a>@endif
|
||||
@endauth
|
||||
</div>
|
||||
<div class="nav-account">
|
||||
@auth
|
||||
<span class="nav-email">{{ auth()->user()->email }}</span>
|
||||
<form method="post" action="{{ route('logout') }}">@csrf<button type="submit" class="nav-signout">Sign out</button></form>
|
||||
@else
|
||||
<a class="nav-auth-link" href="{{ route('login') }}">Sign in</a>
|
||||
<a class="nav-cta" href="{{ route('buy') }}">Start free trial</a>
|
||||
@endauth
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
@hasSection('fullbleed')
|
||||
@yield('fullbleed')
|
||||
@else
|
||||
<main class="wrap">
|
||||
@if(session('status'))<div class="alert">{{ session('status') }}</div>@endif
|
||||
@if($errors->any())<div class="error">{{ $errors->first() }}</div>@endif
|
||||
@yield('content')
|
||||
</main>
|
||||
@endif
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="footer-shell">
|
||||
<div>
|
||||
<div class="footer-brand"><img src="{{ asset('icons/rsync-studio-icon-64.png') }}" alt="" width="28" height="28"><span>Rsync Studio</span></div>
|
||||
<div class="footer-copy">Native rsync job management for macOS.</div>
|
||||
</div>
|
||||
<div class="footer-links">
|
||||
<a href="{{ route('home') }}">Product</a>
|
||||
<a href="{{ route('buy') }}">Pricing</a>
|
||||
<a href="{{ route('support') }}">Support</a>
|
||||
@auth @if(auth()->user()->hasVerifiedEmail())<a href="{{ route('portal.index') }}">Licence portal</a>@endif @else<a href="{{ route('login') }}">Sign in</a>@endauth
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1 +1,147 @@
|
||||
@extends('layouts.app') @section('content')<div class="hero-card"><span class="eyebrow">Rsync Studio</span><h1>Professional rsync for macOS.</h1><p class="lead">Create, schedule and monitor secure rsync jobs with a native macOS interface.</p><p><a class="btn" href="{{ route('buy') }}">Start 7-day free trial</a> @guest<a class="btn" style="background:#475467" href="{{ route('login') }}">Sign in</a>@endguest</p></div><div class="card"><h2>Licensing</h2><p>Personal supports one active Mac. Professional supports up to three active Macs. Monthly and annual subscriptions include a 7-day free trial.</p></div>@endsection
|
||||
@extends('layouts.app', [
|
||||
'title' => 'Rsync Studio — Native rsync for macOS',
|
||||
'description' => 'Create, schedule, watch and review local and SSH rsync jobs with a native macOS interface. Start a 7-day free trial.'
|
||||
])
|
||||
|
||||
@section('fullbleed')
|
||||
<main class="launch-main">
|
||||
<section class="launch-hero">
|
||||
<div class="launch-shell hero-grid">
|
||||
<div>
|
||||
<span class="launch-kicker">Native macOS rsync management</span>
|
||||
<h1>Rsync without the command-line friction.</h1>
|
||||
<p class="hero-copy">Build reliable local and SSH sync jobs, test them safely with Dry Run, schedule recurring transfers, watch folders for changes and keep a complete run history — all from one native Mac app.</p>
|
||||
<div class="hero-actions">
|
||||
<a class="btn btn-primary" href="{{ route('buy') }}">Start 7-day free trial</a>
|
||||
@guest<a class="btn btn-secondary" href="{{ route('login') }}">Open licence portal</a>@else<a class="btn btn-secondary" href="{{ route('portal.index') }}">Open my licences</a>@endguest
|
||||
</div>
|
||||
<p class="hero-note">Personal for 1 Mac · Professional for up to 3 Macs · Monthly or annual</p>
|
||||
<div class="trust-row" aria-label="Product highlights">
|
||||
<span class="trust-item"><span class="trust-check">✓</span> Native macOS app</span>
|
||||
<span class="trust-item"><span class="trust-check">✓</span> Local & SSH jobs</span>
|
||||
<span class="trust-item"><span class="trust-check">✓</span> Dry Run safeguards</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="app-window" aria-label="Rsync Studio application preview">
|
||||
<div class="window-bar">
|
||||
<span class="dot red"></span><span class="dot amber"></span><span class="dot green"></span>
|
||||
<span class="window-title">Rsync Studio — Jobs</span>
|
||||
</div>
|
||||
<div class="app-body">
|
||||
<aside class="app-sidebar">
|
||||
<div class="mini-brand"><img src="{{ asset('icons/rsync-studio-icon-64.png') }}" alt=""><span>Rsync Studio</span></div>
|
||||
<div class="side-item active">Jobs</div>
|
||||
<div class="side-item">Calendar</div>
|
||||
<div class="side-item">History</div>
|
||||
<div class="side-item">Settings</div>
|
||||
</aside>
|
||||
<div class="app-content">
|
||||
<div class="app-toolbar"><strong>Sync jobs</strong><span class="sync-all">Sync All</span></div>
|
||||
<div class="mock-job">
|
||||
<div class="mock-job-top"><strong>Website Deploy</strong><span class="job-state state-ready">Ready</span></div>
|
||||
<p>MacBook → pegasus.local · SSH</p>
|
||||
<div class="mock-progress"><span style="width:100%"></span></div>
|
||||
</div>
|
||||
<div class="mock-job">
|
||||
<div class="mock-job-top"><strong>Documents Backup</strong><span class="job-state state-scheduled">22:00</span></div>
|
||||
<p>Documents → Backup SSD · Daily</p>
|
||||
<div class="mock-progress"><span style="width:72%"></span></div>
|
||||
</div>
|
||||
<div class="mock-job">
|
||||
<div class="mock-job-top"><strong>Projects to Server</strong><span class="job-state state-watching">Watching</span></div>
|
||||
<p>Developer → pegasus.local · File watch</p>
|
||||
<div class="mock-progress"><span style="width:44%"></span></div>
|
||||
</div>
|
||||
<div class="app-statusbar"><span>Last run: Success</span><span>rsync 3.4.1</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="launch-section">
|
||||
<div class="section-shell">
|
||||
<div class="section-head center">
|
||||
<span class="eyebrow">Everything in one place</span>
|
||||
<h2>Built for everyday rsync work.</h2>
|
||||
<p>Keep the power of rsync while replacing repetitive commands and scattered scripts with a clear, repeatable workflow.</p>
|
||||
</div>
|
||||
<div class="feature-grid">
|
||||
<article class="feature-card"><div class="feature-icon">↔</div><h3>Local & SSH sync</h3><p>Create local copies or securely sync to remote Macs and Linux servers over SSH.</p></article>
|
||||
<article class="feature-card"><div class="feature-icon">✓</div><h3>Dry Run first</h3><p>Preview changes before files are transferred or deleted, so risky jobs can be checked before they run.</p></article>
|
||||
<article class="feature-card"><div class="feature-icon">◷</div><h3>Flexible schedules</h3><p>Run jobs once, hourly, daily, weekly, monthly or on your own recurring interval.</p></article>
|
||||
<article class="feature-card"><div class="feature-icon">⌁</div><h3>Watch for changes</h3><p>Use macOS file events to trigger selected jobs when files or folders change.</p></article>
|
||||
<article class="feature-card"><div class="feature-icon">≡</div><h3>Complete run history</h3><p>Review commands, results, stdout, stderr and transfer statistics for previous runs.</p></article>
|
||||
<article class="feature-card"><div class="feature-icon">⌘</div><h3>Mac-first experience</h3><p>Manage jobs, defaults, background operation and connection settings from a native macOS interface.</p></article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="launch-section workflow-section">
|
||||
<div class="section-shell">
|
||||
<div class="section-head">
|
||||
<span class="eyebrow">A safer workflow</span>
|
||||
<h2>From setup to sync in four clear steps.</h2>
|
||||
</div>
|
||||
<div class="workflow-grid">
|
||||
<article class="workflow-step"><div class="step-number">1</div><h3>Create a job</h3><p>Choose your source, destination and rsync options once.</p></article>
|
||||
<article class="workflow-step"><div class="step-number">2</div><h3>Run a Dry Run</h3><p>Check the generated operation before changing any files.</p></article>
|
||||
<article class="workflow-step"><div class="step-number">3</div><h3>Run or automate</h3><p>Start it manually, schedule it or attach a file watcher.</p></article>
|
||||
<article class="workflow-step"><div class="step-number">4</div><h3>Review history</h3><p>See the result and retain the command and transfer output.</p></article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="launch-section">
|
||||
<div class="section-shell">
|
||||
<div class="security-panel">
|
||||
<div>
|
||||
<span class="eyebrow" style="color:#93c5fd">Designed around your Mac</span>
|
||||
<h2>Your sync workflow stays direct.</h2>
|
||||
<p>Rsync Studio runs rsync and SSH from your Mac. The licensing service is separate from your file-transfer path.</p>
|
||||
</div>
|
||||
<div class="security-list">
|
||||
<div class="security-item"><div class="security-icon">K</div><div><strong>Keychain-aware settings</strong><span>Stored passwords use macOS Keychain rather than application preferences.</span></div></div>
|
||||
<div class="security-item"><div class="security-icon">S</div><div><strong>SSH-native connections</strong><span>Use the standard macOS SSH client, keys and known-host verification for remote jobs.</span></div></div>
|
||||
<div class="security-item"><div class="security-icon">D</div><div><strong>Dry Run safeguards</strong><span>Test jobs before enabling destructive options such as destination deletion.</span></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="launch-section" id="pricing">
|
||||
<div class="section-shell">
|
||||
<div class="section-head center">
|
||||
<span class="eyebrow">Simple licensing</span>
|
||||
<h2>Choose the number of Macs you need.</h2>
|
||||
<p>Both plans include the full Rsync Studio workflow and a 7-day free trial. Checkout shows pricing in your supported local currency.</p>
|
||||
</div>
|
||||
<div class="plan-grid">
|
||||
<article class="launch-plan">
|
||||
<h3>Personal</h3>
|
||||
<p>For a single Mac and an individual sync workflow.</p>
|
||||
<div class="plan-macs">1 Mac</div><div class="plan-sub">Monthly or annual subscription</div>
|
||||
<ul class="plan-list"><li>Local and SSH jobs</li><li>Scheduling and file watch</li><li>Dry Run and history</li><li>7-day free trial</li></ul>
|
||||
<a class="btn btn-secondary" href="{{ route('buy') }}">Choose Personal</a>
|
||||
</article>
|
||||
<article class="launch-plan featured">
|
||||
<span class="best-badge">Most flexible</span>
|
||||
<h3>Professional</h3>
|
||||
<p>For multiple Macs or a broader development workflow.</p>
|
||||
<div class="plan-macs">Up to 3 Macs</div><div class="plan-sub">Monthly or annual subscription</div>
|
||||
<ul class="plan-list"><li>Everything in Personal</li><li>Three active Mac installations</li><li>Manage activations from the portal</li><li>7-day free trial</li></ul>
|
||||
<a class="btn btn-primary" href="{{ route('buy') }}">Choose Professional</a>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="launch-cta">
|
||||
<div class="cta-box">
|
||||
<div><h2>Make rsync easier to run every day.</h2><p>Start with a 7-day free trial and choose Personal or Professional at checkout.</p></div>
|
||||
<a class="btn" href="{{ route('buy') }}">Start free trial</a>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
@endsection
|
||||
|
||||