Ultrawide tweaks
This commit is contained in:
@@ -32,6 +32,9 @@ containers untouched.
|
||||
- [deploy.ps1](deploy.ps1)
|
||||
- Windows entrypoint for packaging the repo, uploading it, and running the
|
||||
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)
|
||||
- Server-side helper that updates only the `goodwalk-svelte` compose project.
|
||||
- [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
|
||||
```
|
||||
|
||||
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:
|
||||
|
||||
```powershell
|
||||
|
||||
+12
-66
@@ -1,76 +1,22 @@
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string]$ComposeFile = 'docker-compose.yml',
|
||||
[string]$ProjectName = 'goodwalk',
|
||||
[switch]$RunMigration,
|
||||
[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'
|
||||
[switch]$Force,
|
||||
[switch]$SkipSiteCheck,
|
||||
[string]$Service
|
||||
)
|
||||
|
||||
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
. (Join-Path $scriptDir 'common.ps1')
|
||||
|
||||
$repoRoot = Split-Path -Parent $scriptDir
|
||||
$composeFilePath = Resolve-AbsolutePath -BasePath $repoRoot -Path $ComposeFile
|
||||
$rootDeployScript = Join-Path $repoRoot 'deploy.ps1'
|
||||
|
||||
Write-Step 'Validating deployment prerequisites'
|
||||
Assert-Command docker
|
||||
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 (-not (Test-Path -LiteralPath $rootDeployScript)) {
|
||||
throw "Root deploy script not found: $rootDeployScript"
|
||||
}
|
||||
|
||||
if ($LegacyComposeFile -and -not $SkipLegacyShutdown) {
|
||||
$legacyComposeFilePath = Resolve-AbsolutePath -BasePath $repoRoot -Path $LegacyComposeFile
|
||||
Write-Step 'Stopping the legacy WordPress stack'
|
||||
Invoke-DockerCompose -ComposeFile $legacyComposeFilePath -ProjectName $LegacyProjectName -WorkingDirectory $repoRoot -Arguments @('down')
|
||||
Write-Warning 'scripts/deploy.ps1 is deprecated. Use .\deploy.ps1 from the repo root instead.'
|
||||
|
||||
& $rootDeployScript @PSBoundParameters
|
||||
|
||||
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';
|
||||
|
||||
export let instagram: HomePageContent['instagram'];
|
||||
|
||||
const dogCutoutSrc = '/images/smiling-dog-cutout.webp';
|
||||
</script>
|
||||
|
||||
<section id="instagram">
|
||||
<h2>{instagram.title}</h2>
|
||||
<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">
|
||||
<Icon name="fab fa-instagram" />
|
||||
{instagram.label}
|
||||
</a>
|
||||
<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>
|
||||
<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 instagram-button">
|
||||
<Icon name="fab fa-instagram" />
|
||||
{instagram.label}
|
||||
</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>
|
||||
|
||||
<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. */
|
||||
--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