Ultrawide tweaks
This commit is contained in:
@@ -32,6 +32,9 @@ containers untouched.
|
|||||||
- [deploy.ps1](deploy.ps1)
|
- [deploy.ps1](deploy.ps1)
|
||||||
- Windows entrypoint for packaging the repo, uploading it, and running the
|
- Windows entrypoint for packaging the repo, uploading it, and running the
|
||||||
remote deployment helper over SSH.
|
remote deployment helper over SSH.
|
||||||
|
- [scripts/deploy.ps1](scripts/deploy.ps1)
|
||||||
|
- Deprecated compatibility wrapper that forwards to the repo-root
|
||||||
|
`deploy.ps1`. Keep using the root script directly.
|
||||||
- [scripts/deploy-remote.sh](scripts/deploy-remote.sh)
|
- [scripts/deploy-remote.sh](scripts/deploy-remote.sh)
|
||||||
- Server-side helper that updates only the `goodwalk-svelte` compose project.
|
- Server-side helper that updates only the `goodwalk-svelte` compose project.
|
||||||
- [docker-compose.prod.yml](docker-compose.prod.yml)
|
- [docker-compose.prod.yml](docker-compose.prod.yml)
|
||||||
@@ -109,6 +112,10 @@ From Windows PowerShell in the repo root:
|
|||||||
powershell -ExecutionPolicy Bypass -File .\deploy.ps1
|
powershell -ExecutionPolicy Bypass -File .\deploy.ps1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
This is the single supported deployment entrypoint. If you see
|
||||||
|
`scripts/deploy.ps1`, that file now just forwards to the root script so the
|
||||||
|
deployment logic only lives in one place.
|
||||||
|
|
||||||
Or skip the confirmation prompt:
|
Or skip the confirmation prompt:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
|
|||||||
+12
-66
@@ -1,76 +1,22 @@
|
|||||||
[CmdletBinding()]
|
[CmdletBinding()]
|
||||||
param(
|
param(
|
||||||
[string]$ComposeFile = 'docker-compose.yml',
|
[switch]$Force,
|
||||||
[string]$ProjectName = 'goodwalk',
|
[switch]$SkipSiteCheck,
|
||||||
[switch]$RunMigration,
|
[string]$Service
|
||||||
[string]$LegacyComposeFile,
|
|
||||||
[string]$LegacyProjectName = 'legacy-goodwalk',
|
|
||||||
[string]$LegacyWordPressContainer,
|
|
||||||
[string]$LegacyDatabaseContainer,
|
|
||||||
[string]$LegacyUploadsPath = '/var/www/html/wp-content/uploads',
|
|
||||||
[string]$MySqlDatabase,
|
|
||||||
[string]$MySqlUser,
|
|
||||||
[string]$MySqlPassword,
|
|
||||||
[switch]$SkipLegacyShutdown,
|
|
||||||
[switch]$SkipBuild,
|
|
||||||
[int]$HealthTimeoutSeconds = 120,
|
|
||||||
[string]$HealthUrl = 'http://localhost/api/health'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||||
. (Join-Path $scriptDir 'common.ps1')
|
|
||||||
|
|
||||||
$repoRoot = Split-Path -Parent $scriptDir
|
$repoRoot = Split-Path -Parent $scriptDir
|
||||||
$composeFilePath = Resolve-AbsolutePath -BasePath $repoRoot -Path $ComposeFile
|
$rootDeployScript = Join-Path $repoRoot 'deploy.ps1'
|
||||||
|
|
||||||
Write-Step 'Validating deployment prerequisites'
|
if (-not (Test-Path -LiteralPath $rootDeployScript)) {
|
||||||
Assert-Command docker
|
throw "Root deploy script not found: $rootDeployScript"
|
||||||
Invoke-DockerCompose -ComposeFile $composeFilePath -ProjectName $ProjectName -WorkingDirectory $repoRoot -Arguments @('config')
|
|
||||||
|
|
||||||
if ($RunMigration) {
|
|
||||||
Write-Step 'Running the WordPress migration step'
|
|
||||||
$migrationScript = Join-Path $scriptDir 'migrate-wordpress.ps1'
|
|
||||||
$migrationArgs = @(
|
|
||||||
'-LegacyWordPressContainer', $LegacyWordPressContainer,
|
|
||||||
'-LegacyUploadsPath', $LegacyUploadsPath
|
|
||||||
)
|
|
||||||
|
|
||||||
if ($LegacyDatabaseContainer) {
|
|
||||||
$migrationArgs += @('-LegacyDatabaseContainer', $LegacyDatabaseContainer)
|
|
||||||
} else {
|
|
||||||
$migrationArgs += '-SkipDatabaseDump'
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($MySqlDatabase) { $migrationArgs += @('-MySqlDatabase', $MySqlDatabase) }
|
|
||||||
if ($MySqlUser) { $migrationArgs += @('-MySqlUser', $MySqlUser) }
|
|
||||||
if ($MySqlPassword) { $migrationArgs += @('-MySqlPassword', $MySqlPassword) }
|
|
||||||
|
|
||||||
& $migrationScript @migrationArgs
|
|
||||||
|
|
||||||
if ($LASTEXITCODE -ne 0) {
|
|
||||||
throw 'The WordPress migration step failed.'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($LegacyComposeFile -and -not $SkipLegacyShutdown) {
|
Write-Warning 'scripts/deploy.ps1 is deprecated. Use .\deploy.ps1 from the repo root instead.'
|
||||||
$legacyComposeFilePath = Resolve-AbsolutePath -BasePath $repoRoot -Path $LegacyComposeFile
|
|
||||||
Write-Step 'Stopping the legacy WordPress stack'
|
& $rootDeployScript @PSBoundParameters
|
||||||
Invoke-DockerCompose -ComposeFile $legacyComposeFilePath -ProjectName $LegacyProjectName -WorkingDirectory $repoRoot -Arguments @('down')
|
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
exit $LASTEXITCODE
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Step 'Building and starting the new stack'
|
|
||||||
$upArgs = @('up', '-d', '--remove-orphans')
|
|
||||||
if (-not $SkipBuild) {
|
|
||||||
$upArgs += '--build'
|
|
||||||
}
|
|
||||||
|
|
||||||
Invoke-DockerCompose -ComposeFile $composeFilePath -ProjectName $ProjectName -WorkingDirectory $repoRoot -Arguments $upArgs
|
|
||||||
|
|
||||||
Write-Step 'Waiting for the new site to become healthy'
|
|
||||||
Wait-ForHttpOk -Url $HealthUrl -TimeoutSeconds $HealthTimeoutSeconds
|
|
||||||
|
|
||||||
Write-Step 'Current container status'
|
|
||||||
Invoke-DockerCompose -ComposeFile $composeFilePath -ProjectName $ProjectName -WorkingDirectory $repoRoot -Arguments @('ps')
|
|
||||||
|
|
||||||
Write-Step 'Deployment completed'
|
|
||||||
Write-Host "Health check passed at $HealthUrl"
|
|
||||||
|
|||||||
@@ -3,13 +3,147 @@
|
|||||||
import type { HomePageContent } from '$lib/types';
|
import type { HomePageContent } from '$lib/types';
|
||||||
|
|
||||||
export let instagram: HomePageContent['instagram'];
|
export let instagram: HomePageContent['instagram'];
|
||||||
|
|
||||||
|
const dogCutoutSrc = '/images/smiling-dog-cutout.webp';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<section id="instagram">
|
<section id="instagram">
|
||||||
|
<div class="instagram-stage">
|
||||||
|
<div class="instagram-panel">
|
||||||
|
<div class="instagram-copy">
|
||||||
|
<span class="instagram-kicker">Daily walks, happy dogs</span>
|
||||||
<h2>{instagram.title}</h2>
|
<h2>{instagram.title}</h2>
|
||||||
<p class="instagram-blurb">See our dogs in action — walks, play, and happy pups</p>
|
<p class="instagram-blurb">See our dogs in action — walks, play, and happy pups</p>
|
||||||
<a href={instagram.href} target="_blank" rel="noopener" class="btn btn-green">
|
<a href={instagram.href} target="_blank" rel="noopener" class="btn btn-green instagram-button">
|
||||||
<Icon name="fab fa-instagram" />
|
<Icon name="fab fa-instagram" />
|
||||||
{instagram.label}
|
{instagram.label}
|
||||||
</a>
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="instagram-dog-wrap" aria-hidden="true">
|
||||||
|
<img class="instagram-dog" src={dogCutoutSrc} alt="" loading="lazy" decoding="async" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#instagram {
|
||||||
|
overflow: visible;
|
||||||
|
padding-bottom: 102px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-stage {
|
||||||
|
position: relative;
|
||||||
|
max-width: 1040px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-panel {
|
||||||
|
padding: 34px 360px 44px 44px;
|
||||||
|
border-radius: 32px;
|
||||||
|
background:
|
||||||
|
radial-gradient(circle at top left, rgba(255, 255, 255, 0.52), transparent 42%),
|
||||||
|
linear-gradient(135deg, rgba(255, 250, 236, 0.96), rgba(255, 240, 188, 0.94));
|
||||||
|
box-shadow:
|
||||||
|
inset 0 0 0 1px rgba(17, 20, 24, 0.06),
|
||||||
|
0 26px 50px rgba(106, 80, 16, 0.14);
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-copy {
|
||||||
|
padding-top: 10px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-kicker {
|
||||||
|
display: inline-flex;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
padding: 8px 14px;
|
||||||
|
border-radius: 999px;
|
||||||
|
background: rgba(33, 48, 33, 0.08);
|
||||||
|
color: var(--green);
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-copy :global(h2) {
|
||||||
|
max-width: 11ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-blurb {
|
||||||
|
max-width: 420px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-button {
|
||||||
|
margin-top: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-dog-wrap {
|
||||||
|
position: absolute;
|
||||||
|
right: 24px;
|
||||||
|
bottom: -12px;
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-end;
|
||||||
|
justify-content: center;
|
||||||
|
width: clamp(240px, 30vw, 360px);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-dog {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
filter: drop-shadow(0 20px 28px rgba(33, 48, 33, 0.16));
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1800px) {
|
||||||
|
.instagram-stage {
|
||||||
|
max-width: 1144px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
#instagram {
|
||||||
|
padding-bottom: 76px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-panel {
|
||||||
|
padding: 30px 24px 120px;
|
||||||
|
border-radius: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-copy {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-copy :global(h2) {
|
||||||
|
max-width: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-blurb {
|
||||||
|
max-width: none;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-button {
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-dog-wrap {
|
||||||
|
left: 50%;
|
||||||
|
right: auto;
|
||||||
|
bottom: -10px;
|
||||||
|
width: min(260px, calc(100% - 40px));
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.instagram-dog {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -12,3 +12,9 @@
|
|||||||
/* Legacy "navy" tokens now intentionally render as Goodwalk green. */
|
/* Legacy "navy" tokens now intentionally render as Goodwalk green. */
|
||||||
--navy: var(--green);
|
--navy: var(--green);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1800px) {
|
||||||
|
:root {
|
||||||
|
--max-w: 1408px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
Reference in New Issue
Block a user