fix: ui + subscription

This commit is contained in:
Andras Bacsai 2023-08-14 14:00:10 +02:00
parent 619d395331
commit b941f35812
32 changed files with 185 additions and 114 deletions

View File

@ -14,6 +14,9 @@ public function __invoke()
$settings->update([
'is_resale_license_active' => false,
]);
if (is_dev()) {
return;
}
if (!$settings->resale_license) {
return;
}

View File

@ -14,8 +14,8 @@ class Backup extends Component
{
public InstanceSettings $settings;
public $s3s;
public StandalonePostgresql|null $database = null;
public ScheduledDatabaseBackup|null $backup = null;
public StandalonePostgresql|null|array $database = [];
public ScheduledDatabaseBackup|null|array $backup = [];
public $executions = [];
protected $rules = [
@ -36,8 +36,8 @@ class Backup extends Component
public function mount()
{
$this->backup = $this->database->scheduledBackups->first();
$this->executions = $this->backup->executions;
$this->backup = $this->database?->scheduledBackups->first() ?? [];
$this->executions = $this->backup?->executions ?? [];
}
public function add_coolify_database()
{

View File

@ -2,9 +2,9 @@
use Illuminate\Support\Carbon;
function getSubscriptionLink($id)
function getSubscriptionLink($type)
{
$checkout_id = config("coolify.lemon_squeezy_checkout_id_$id");
$checkout_id = config("coolify.lemon_squeezy_checkout_id_$type");
if (!$checkout_id) {
return null;
}

View File

@ -4,9 +4,8 @@
'self_hosted' => env('SELF_HOSTED', true),
'license_url' => 'https://license.coolify.io',
'lemon_squeezy_webhook_secret' => env('LEMON_SQUEEZY_WEBHOOK_SECRET'),
'lemon_squeezy_checkout_id_1' => env('LEMON_SQUEEZY_CHECKOUT_ID_1'),
'lemon_squeezy_checkout_id_2' => env('LEMON_SQUEEZY_CHECKOUT_ID_2'),
'lemon_squeezy_checkout_id_3' => env('LEMON_SQUEEZY_CHECKOUT_ID_3'),
'lemon_squeezy_checkout_id_monthly' => env('LEMON_SQUEEZY_CHECKOUT_ID_MONTHLY'),
'lemon_squeezy_checkout_id_yearly' => env('LEMON_SQUEEZY_CHECKOUT_ID_YEARLY'),
'mux_enabled' => env('MUX_ENABLED', true),
'dev_webhook' => env('SERVEO_URL'),
'base_config_path' => env('BASE_CONFIG_PATH', '/_data/coolify'),

View File

@ -34,9 +34,8 @@ services:
- PHP_PM_MAX_SPARE_SERVERS=10
- SELF_HOSTED
- LEMON_SQUEEZY_WEBHOOK_SECRET
- LEMON_SQUEEZY_CHECKOUT_ID_1
- LEMON_SQUEEZY_CHECKOUT_ID_2
- LEMON_SQUEEZY_CHECKOUT_ID_3
- LEMON_SQUEEZY_CHECKOUT_ID_MONTHLY
- LEMON_SQUEEZY_CHECKOUT_ID_YEARLY
ports:
- "${APP_PORT:-8000}:80"
expose:

View File

@ -111,5 +111,8 @@ tr td:first-child {
}
.buyme {
@apply block px-3 py-2 mt-10 text-sm font-semibold leading-6 text-center text-white rounded-md shadow-sm bg-coolgray-200 hover:bg-coolgray-300 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-coolgray-200;
@apply block px-3 py-2 mt-10 text-sm font-semibold leading-6 text-center text-white rounded-md shadow-sm bg-coolgray-200 hover:bg-coolgray-300 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-coolgray-200 hover:no-underline;
}
.subtitle {
@apply pt-2 pb-10;
}

View File

@ -1,12 +1,12 @@
<x-layout>
<h1>Command Center</h1>
<div class="pt-2 pb-10">Execute commands on your servers without leaving the browser.</div>
<div class="subtitle">Execute commands on your servers without leaving the browser.</div>
@if ($servers->count() > 0)
<livewire:run-command :servers="$servers" />
@else
<div>
<div>No validated servers found.</div>
<x-use-magic-bar />
<div>No servers found. Without a server, you won't be able to do much.</div>
<x-use-magic-bar link="/server/new" />
</div>
@endif
</x-layout>

View File

@ -38,9 +38,6 @@ class="{{ request()->is('project/*') || request()->is('projects') ? 'text-warnin
</svg>
</a>
</li>
@if (auth()->user()->isInstanceAdmin())
<li title="Command Center">
<a class="hover:bg-transparent" @if (!request()->is('command-center')) href="/command-center" @endif>
<svg xmlns="http://www.w3.org/2000/svg"
@ -53,7 +50,10 @@ class="{{ request()->is('command-center') ? 'text-warning icon' : 'icon' }}" vie
</svg>
</a>
</li>
<div class="flex-1"></div>
@if (auth()->user()->isInstanceAdmin())
<livewire:upgrade />
@endif
<li title="Profile">
<a class="hover:bg-transparent" @if (!request()->is('profile')) href="/profile" @endif>
<svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24" stroke-width="1.5"
@ -79,8 +79,7 @@ class="{{ request()->is('command-center') ? 'text-warning icon' : 'icon' }}" vie
</svg>
</a>
</li>
<livewire:upgrade />
<div class="flex-1"></div>
@if (auth()->user()->isInstanceAdmin())
<li title="Settings" class="mt-auto">
<a class="hover:bg-transparent" @if (!request()->is('settings')) href="/settings" @endif>
<svg xmlns="http://www.w3.org/2000/svg"
@ -95,7 +94,6 @@ class="{{ request()->is('settings*') ? 'text-warning icon' : 'icon' }}" viewBox=
</a>
</li>
@endif
<li class="pb-6" title="Logout">
<form action="/logout" method="POST" class=" hover:bg-transparent">
@csrf

View File

@ -19,8 +19,7 @@ class="sr-only">
</fieldset>
</div>
<div x-show="selected === 'monthly'" class="flex justify-center h-10 mt-3 text-sm leading-6 ">
<div>Save <span class="text-2xl font-bold text-warning">20%</span> with the
yearly plan
<div>Save <span class="font-bold text-warning">10% </span> annually with the yearly plan.
</div>
</div>
<div x-show="selected === 'yearly'" class="flex justify-center h-10 mt-3 text-sm leading-6 ">
@ -31,18 +30,20 @@ class="sr-only">
<div
class="grid max-w-sm grid-cols-1 -mt-16 divide-y divide-coolgray-500 isolate gap-y-16 sm:mx-auto lg:-mx-8 lg:mt-0 lg:max-w-none lg:grid-cols-4 lg:divide-x lg:divide-y-0 xl:-mx-4">
<div class="px-8 pt-16 lg:pt-0">
<h3 id="tier-basic" class="text-base font-semibold leading-7 text-white">Unlimited Trial</h3>
<h3 id="tier-trial" class="text-base font-semibold leading-7 text-white">Unlimited Trial</h3>
<p class="flex items-baseline mt-6 gap-x-1">
<span x-show="selected === 'monthly'" x-cloak>
<span class="text-5xl font-bold tracking-tight text-white">Free</span>
<span class="text-4xl font-bold tracking-tight text-white">Free</span>
</span>
<span x-show="selected === 'yearly'" x-cloak>
<span class="text-5xl font-bold tracking-tight text-white">Still Free </span>
<span class="text-4xl font-bold tracking-tight text-white">Still Free </span>
</span>
</p>
<a href="https://github.com/coollabsio/coolify" aria-describedby="tier-basic" class="buyme">Get
<span x-show="selected === 'yearly'" x-cloak class="text-warning">(save $?)</span>
<a href="https://github.com/coollabsio/coolify" aria-describedby="tier-trial" class="buyme">Get
Started</a>
<p class="pb-6 mt-10 text-sm leading-6 text-white">Start self-hosting without limits with our OSS
<p class="mt-10 text-sm leading-6 text-white h-[6.5rem]">Start self-hosting without limits with our
OSS
version.</p>
<ul role="list" class="space-y-3 text-sm leading-6 ">
<li class="flex gap-x-3">
@ -61,7 +62,7 @@ class="grid max-w-sm grid-cols-1 -mt-16 divide-y divide-coolgray-500 isolate gap
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd" />
</svg>
You need to take care of everything
Managed by you
</li>
<li class="flex gap-x-3">
<svg class="flex-none w-5 h-6 text-warning" viewBox="0 0 20 20" fill="currentColor"
@ -70,7 +71,7 @@ class="grid max-w-sm grid-cols-1 -mt-16 divide-y divide-coolgray-500 isolate gap
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd" />
</svg>
If you brave enough, you can do it!
If you brave enough
</li>
<li class="flex gap-x-3">
<svg class="flex-none w-5 h-6 text-warning" viewBox="0 0 20 20" fill="currentColor"
@ -81,22 +82,42 @@ class="grid max-w-sm grid-cols-1 -mt-16 divide-y divide-coolgray-500 isolate gap
</svg>
Community Support
</li>
<li class="flex font-bold text-white gap-x-3">
<svg width="512" height="512" class="flex-none w-5 h-6 text-green-600"
viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2">
<path
d="M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3-5a9 9 0 0 0 6-8a3 3 0 0 0-3-3a9 9 0 0 0-8 6a6 6 0 0 0-5 3" />
<path d="M7 14a6 6 0 0 0-3 6a6 6 0 0 0 6-3m4-8a1 1 0 1 0 2 0a1 1 0 1 0-2 0" />
</g>
</svg>
+ All upcoming features
</li>
</ul>
</div>
<div class="pt-16 lg:px-8 lg:pt-0 xl:px-14">
<h3 id="tier-basic" class="text-base font-semibold leading-7 text-white">Basic</h3>
<p class="flex items-baseline mt-6 gap-x-1">
<span x-show="selected === 'monthly'" x-cloak>
<span class="text-5xl font-bold tracking-tight text-white">$15</span>
<span class="text-4xl font-bold tracking-tight text-white">$5</span>
<span class="text-sm font-semibold leading-6 ">/monthly</span>
</span>
<span x-show="selected === 'yearly'" x-cloak>
<span class="text-5xl font-bold tracking-tight text-white">$144</span>
<span class="text-4xl font-bold tracking-tight text-white">$54</span>
<span class="text-sm font-semibold leading-6 ">/yearly</span>
</span>
</p>
<a href="{{ getSubscriptionLink(1) }}" aria-describedby="tier-basic" class="buyme">Subscribe</a>
<p class="pb-6 mt-10 text-sm leading-6 text-white">Start self-hosting in the cloud with a single
<span x-show="selected === 'yearly'" x-cloak class="text-warning">(save $6)</span>
<a x-show="selected === 'monthly'" x-cloak aria-describedby="tier-basic" class="buyme"
href="{{ getSubscriptionLink('monthly') }}">Subscribe</a>
<a x-show="selected === 'yearly'" x-cloak aria-describedby="tier-basic" class="buyme"
href="{{ getSubscriptionLink('yearly') }}">Subscribe</a>
<p class="mt-10 text-sm leading-6 text-white h-[6.5rem]">Start self-hosting in
the cloud
with a
single
server.
</p>
<ul role="list" class="space-y-3 text-sm leading-6 ">
@ -125,7 +146,7 @@ class="grid max-w-sm grid-cols-1 -mt-16 divide-y divide-coolgray-500 isolate gap
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd" />
</svg>
30 days of backups
Bring your own S3
</li>
<li class="flex gap-x-3">
<svg class="flex-none w-5 h-6 text-warning" viewBox="0 0 20 20" fill="currentColor"
@ -136,23 +157,39 @@ class="grid max-w-sm grid-cols-1 -mt-16 divide-y divide-coolgray-500 isolate gap
</svg>
Basic Support
</li>
<li class="flex font-bold text-white gap-x-3">
<svg width="512" height="512" class="flex-none w-5 h-6 text-green-600"
viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2">
<path
d="M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3-5a9 9 0 0 0 6-8a3 3 0 0 0-3-3a9 9 0 0 0-8 6a6 6 0 0 0-5 3" />
<path d="M7 14a6 6 0 0 0-3 6a6 6 0 0 0 6-3m4-8a1 1 0 1 0 2 0a1 1 0 1 0-2 0" />
</g>
</svg>
+ All upcoming features
</li>
</ul>
</div>
<div class="pt-16 lg:px-8 lg:pt-0 xl:px-14">
<h3 id="tier-essential" class="text-base font-semibold leading-7 text-white">Essential</h3>
<p class="flex items-baseline mt-6 gap-x-1">
<span x-show="selected === 'monthly'" x-cloak>
<span class="text-5xl font-bold tracking-tight text-white">$30</span>
<span class="text-4xl font-bold tracking-tight text-white">$29</span>
<span class="text-sm font-semibold leading-6 ">/monthly</span>
</span>
<span x-show="selected === 'yearly'" x-cloak>
<span class="text-5xl font-bold tracking-tight text-white">$288</span>
<span class="text-4xl font-bold tracking-tight text-white">$319</span>
<span class="text-sm font-semibold leading-6 ">/yearly</span>
</span>
</p>
<a href="{{ getSubscriptionLink(2) }}" aria-describedby="tier-essential"
class="buyme">Subscribe</a>
<p class="mt-10 text-sm leading-6 text-white">Scale your business or self-hosting environment.</p>
<span x-show="selected === 'yearly'" x-cloak class="text-warning">(save $29)</span>
<a x-show="selected === 'monthly'" x-cloak aria-describedby="tier-essential" class="buyme"
href="{{ getSubscriptionLink('monthly') }}">Subscribe</a>
<a x-show="selected === 'yearly'" x-cloak aria-describedby="tier-essential" class="buyme"
href="{{ getSubscriptionLink('yearly') }}">Subscribe</a>
<p class="h-20 mt-10 text-sm leading-6 text-white">Scale your business or self-hosting environment.
</p>
<ul role="list" class="mt-6 space-y-3 text-sm leading-6 ">
<li class="flex gap-x-3">
<svg class="flex-none w-5 h-6 text-warning" viewBox="0 0 20 20" fill="currentColor"
@ -179,7 +216,7 @@ class="buyme">Subscribe</a>
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd" />
</svg>
30 days of backups
Provided (optional) S3
</li>
<li class="flex gap-x-3">
<svg class="flex-none w-5 h-6 text-warning" viewBox="0 0 20 20" fill="currentColor"
@ -190,24 +227,38 @@ class="buyme">Subscribe</a>
</svg>
Basic Support
</li>
<li class="flex font-bold text-white gap-x-3">
<svg width="512" height="512" class="flex-none w-5 h-6 text-green-600"
viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2">
<path
d="M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3-5a9 9 0 0 0 6-8a3 3 0 0 0-3-3a9 9 0 0 0-8 6a6 6 0 0 0-5 3" />
<path d="M7 14a6 6 0 0 0-3 6a6 6 0 0 0 6-3m4-8a1 1 0 1 0 2 0a1 1 0 1 0-2 0" />
</g>
</svg>
+ All upcoming features
</li>
</ul>
</div>
<div class="pt-16 lg:px-8 lg:pt-0 xl:px-14">
<h3 id="tier-growth" class="text-base font-semibold leading-7 text-white">Growth</h3>
<p class="flex items-baseline mt-6 gap-x-1">
<span x-show="selected === 'monthly'" x-cloak>
<span class="text-5xl font-bold tracking-tight text-white">$60</span>
<span class="text-4xl font-bold tracking-tight text-white">$49</span>
<span class="text-sm font-semibold leading-6 ">/monthly</span>
</span>
<span x-show="selected === 'yearly'" x-cloak>
<span class="text-5xl font-bold tracking-tight text-white">$576</span>
<span class="text-4xl font-bold tracking-tight text-white">$539</span>
<span class="text-sm font-semibold leading-6 ">/yearly</span>
</span>
</p>
<a href="{{ getSubscriptionLink(3) }}" aria-describedby="tier-growth"
class="buyme">Subscribe</a>
<p class="mt-10 text-sm leading-6 text-white">Deploy complex infrastuctures and
<span x-show="selected === 'yearly'" x-cloak class="text-warning">(save $69)</span>
<a x-show="selected === 'monthly'" x-cloak aria-describedby="tier-growth" class="buyme"
href="{{ getSubscriptionLink('monthly') }}">Subscribe</a>
<a x-show="selected === 'yearly'" x-cloak aria-describedby="tier-growth" class="buyme"
href="{{ getSubscriptionLink('yearly') }}">Subscribe</a>
<p class="h-20 mt-10 text-sm leading-6 text-white">Deploy complex infrastuctures and
manage them easily in one place.</p>
<ul role="list" class="mt-6 space-y-3 text-sm leading-6 ">
<li class="flex gap-x-3">
@ -235,7 +286,7 @@ class="buyme">Subscribe</a>
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd" />
</svg>
30 days of backups
Provided (optional) S3
</li>
<li class="flex font-bold text-white gap-x-3">
<svg class="flex-none w-5 h-6 text-warning" viewBox="0 0 20 20" fill="currentColor"
@ -246,6 +297,18 @@ class="buyme">Subscribe</a>
</svg>
Priority Support
</li>
<li class="flex font-bold text-white gap-x-3">
<svg width="512" height="512" class="flex-none w-5 h-6 text-green-600"
viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2">
<path
d="M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3-5a9 9 0 0 0 6-8a3 3 0 0 0-3-3a9 9 0 0 0-8 6a6 6 0 0 0-5 3" />
<path d="M7 14a6 6 0 0 0-3 6a6 6 0 0 0 6-3m4-8a1 1 0 1 0 2 0a1 1 0 1 0-2 0" />
</g>
</svg>
+ All upcoming features
</li>
</ul>
</div>
</div>

View File

@ -3,7 +3,7 @@
<h1>Server</h1>
<livewire:server.proxy.status :server="$server" />
</div>
<div class="pt-2 pb-10 ">{{ data_get($server, 'name') }}</div>
<div class="subtitle ">{{ data_get($server, 'name') }}</div>
<nav class="navbar-main">
<a class="{{ request()->routeIs('server.show') ? 'text-white' : '' }}"
href="{{ route('server.show', [

View File

@ -1,6 +1,6 @@
<div class="pb-5">
<h1>Settings</h1>
<div class="pt-2 pb-10">Instance wide settings for Coolify.</div>
<div class="subtitle">Instance wide settings for Coolify.</div>
<nav class="navbar-main">
<a class="{{ request()->routeIs('settings.configuration') ? 'text-white' : '' }}"
href="{{ route('settings.configuration') }}">

View File

@ -3,8 +3,8 @@
Use the magic
bar (press <span class="kbd-custom">/</span>) to create a new one or
<a href="{{ $link }}" class="underline text-warning">
click here
</a>.
click here.
</a>
@else
Use the magic
bar (press <span class="kbd-custom">/</span>) to create a new one.

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Dashboard</h1>
<div class="pt-2 pb-10">Something <span class="text-warning">(more)</span> useful will be here.</div>
<div class="subtitle">Something <span class="text-warning">(more)</span> useful will be here.</div>
<div class="w-full rounded stats stats-vertical lg:stats-horizontal">
<div class="stat">
<div class="stat-title">Servers</div>

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Destinations</h1>
<div class="pt-2 pb-10 ">All Destinations</div>
<div class="subtitle ">All Destinations</div>
<div class="grid gap-2 lg:grid-cols-2">
@forelse ($destinations as $destination)
@if ($destination->getMorphClass() === 'App\Models\StandaloneDocker')

View File

@ -18,9 +18,9 @@
</div>
@if ($destination->getMorphClass() === 'App\Models\StandaloneDocker')
<div class="pt-2 pb-10 ">A Docker network in a non-swarm environment</div>
<div class="subtitle ">A Docker network in a non-swarm environment</div>
@else
<div class="pt-2 pb-10 ">Your swarm docker network. WIP</div>
<div class="subtitle ">Your swarm docker network. WIP</div>
@endif
<div class="flex gap-2">
<x-forms.input id="destination.name" label="Name" />

View File

@ -1,6 +1,6 @@
<div>
<h1>Create a new Destination</h1>
<div class="pt-2 pb-10 ">Destinations are used to segregate resources by network.</div>
<div class="subtitle ">Destinations are used to segregate resources by network.</div>
<form class="flex flex-col gap-4" wire:submit.prevent='submit'>
<div class="flex gap-2">
<x-forms.input id="name" label="Name" required />

View File

@ -1,6 +1,6 @@
<div>
<h1>Create a new Server</h1>
<div class="pt-2 pb-10 ">Servers are the main blocks of your infrastructure.</div>
<div class="subtitle ">Servers are the main blocks of your infrastructure.</div>
<form class="flex flex-col gap-2" wire:submit.prevent='submit'>
<div class="flex gap-2">
<x-forms.input id="name" label="Name" required />

View File

@ -44,7 +44,7 @@
@else
<div>
<h2>Proxy</h2>
<div class="pt-2 pb-10 ">Select a proxy you would like to use on this server.</div>
<div class="subtitle ">Select a proxy you would like to use on this server.</div>
<div class="flex gap-2">
<x-forms.button class="w-32 box" wire:click="select_proxy('{{ ProxyTypes::TRAEFIK_V2 }}')">
Traefik

View File

@ -30,7 +30,7 @@
</x-forms.button>
</div>
</div>
<div class="pt-2 pb-10 ">Your Private GitHub App for private repositories.</div>
<div class="subtitle ">Your Private GitHub App for private repositories.</div>
@if ($github_app->app_id)
<div class="w-48">
<x-forms.checkbox label="System Wide?"

View File

@ -1,6 +1,6 @@
<div>
<h1>Create a new S3 Storage</h1>
<div class="pt-2 pb-10 ">S3 Storage used to save backups / files</div>
<div class="subtitle ">S3 Storage used to save backups / files</div>
<form class="flex flex-col gap-2" wire:submit.prevent='submit'>
<div class="flex gap-2">
<x-forms.input label="Name" id="name" />

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Private Keys</h1>
<div class="pt-2 pb-10 ">All Private Keys</div>
<div class="subtitle ">All Private Keys</div>
<div class="grid gap-2 lg:grid-cols-2">
@forelse ($privateKeys as $key)
<a class="text-center hover:no-underline box group"

View File

@ -1,5 +1,5 @@
<x-layout>
<h1>Create a new Private Key</h1>
<div class="pt-2 pb-10 ">Private Keys are used for connection to servers.</div>
<div class="subtitle ">Private Keys are used for connection to servers.</div>
<livewire:private-key.create />
</x-layout>

View File

@ -1,8 +1,10 @@
<x-layout>
<h1>Profile</h1>
<div class="pt-2 pb-10 ">Your user profile settings.</div>
<div class="subtitle ">Your user profile settings.</div>
<livewire:profile.form :request="$request" />
<h3 class="py-4">Two-factor Authentication</h3>
<h2 class="py-4">Subscription</h2>
<a href="{{ route('team.show') }}">Check in Team Settings</a>
<h2 class="py-4">Two-factor Authentication</h2>
@if (session('status') == 'two-factor-authentication-enabled')
<div class="mb-4 font-medium">
Please finish configuring two factor authentication below. Read the QR code or enter the secret key
@ -17,7 +19,8 @@
<div>
<div>{!! $request->user()->twoFactorQrCodeSvg() !!}</div>
<div x-data="{ showCode: false }" class="py-2">
<x-forms.button x-on:click="showCode = !showCode">Show secret key to manually enter</x-forms.button>
<x-forms.button x-on:click="showCode = !showCode">Show secret key to manually
enter</x-forms.button>
<template x-if="showCode">
<div class="py-2 ">{!! decrypt($request->user()->two_factor_secret) !!}</div>
</template>

View File

@ -4,7 +4,7 @@
<x-forms.button class="btn" onclick="newEnvironment.showModal()">+ Add</x-forms.button>
<livewire:project.add-environment :project="$project" />
</div>
<div class="pt-2 pb-10 text-xs truncate lg:text-sm">{{ $project->name }}</div>
<div class="subtitle text-xs truncate lg:text-sm">{{ $project->name }}</div>
<div class="grid gap-2 lg:grid-cols-2">
@forelse ($project->environments as $environment)
<a class="box" href="{{ route('project.resources', [$project->uuid, $environment->name]) }}">

View File

@ -6,7 +6,7 @@
<livewire:project.add-empty />
@endif
</div>
<div class="pt-2 pb-10 ">All Projects</div>
<div class="subtitle ">All Projects</div>
<div class="grid gap-2 lg:grid-cols-2">
@if ($servers === 0)
<div>

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Servers</span></h1>
<div class="pt-2 pb-10 ">All Servers</div>
<div class="subtitle ">All Servers</div>
<div class="grid gap-2 lg:grid-cols-2">
@forelse ($servers as $server)
<div x-data x-on:click="goto('{{ $server->uuid }}')" @class([

View File

@ -1,7 +1,7 @@
<x-layout>
@if ($private_keys->count() === 0)
<h1>Create Private Key</h1>
<div class="pb-10">You need to create a private key before you can create a server.</div>
<div class="subtitle">You need to create a private key before you can create a server.</div>
<livewire:private-key.create from="server" />
@else
<livewire:server.new.by-ip :private_keys="$private_keys" />

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Sources</h1>
<div class="pt-2 pb-10 ">All Sources</div>
<div class="subtitle ">All Sources</div>
<div class="grid gap-2 lg:grid-cols-2">
@forelse ($sources as $source)
@if ($source->getMorphClass() === 'App\Models\GithubApp')

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>New Source</h1>
<div class="pt-2 pb-10 ">Add source providers for your applications.</div>
<div class="subtitle ">Add source providers for your applications.</div>
<div x-data="{ activeTab: window.location.hash ? window.location.hash.substring(1) : '' }">
<div class="flex justify-center h-full gap-2 pb-6">
<a class="flex items-center justify-center w-1/2 p-2 transition-colors rounded-none min-h-12 bg-coolgray-200 hover:bg-coollabs-100 hover:text-white hover:no-underline"

View File

@ -3,7 +3,7 @@
<div class="flex justify-center mx-10">
<div>
<div class="flex gap-2">
<h3>Subscription</h3>
<h2>Subscription</h2>
<livewire:switch-team />
</div>
<div class="flex items-center pb-8">

View File

@ -1,5 +1,5 @@
<x-layout>
<h1>New Team</h1>
<div class="pt-2 pb-10">Add a new team</div>
<div class="subtitle">Add a new team</div>
<livewire:team.create />
</x-layout>

View File

@ -18,13 +18,16 @@
@else
<div class="pb-4">Renews at: {{ getRenewDate() }}</div>
@endif
<x-forms.button><a class="text-white" href="{{ getPaymentLink() }}">Update Payment Details</a>
<x-forms.button><a class="text-white hover:no-underline" href="{{ getPaymentLink() }}">Update Payment
Details</a>
</x-forms.button>
@else
<x-forms.button class="mt-4"><a class="text-white" href="{{ route('subscription') }}">Subscribe Now</a>
<x-forms.button class="mt-4"><a class="text-white hover:no-underline"
href="{{ route('subscription') }}">Subscribe Now</a>
</x-forms.button>
@endif
<x-forms.button><a class="text-white" href="https://app.lemonsqueezy.com/my-orders">Manage My
<x-forms.button><a class="text-white hover:no-underline"
href="https://app.lemonsqueezy.com/my-orders">Manage My
Subscription</a>
</x-forms.button>
</div>