mifi e712e73902
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
Aspect ratio and fetch priority fix
2026-02-14 20:24:26 -03:00
2026-02-10 21:09:01 -03:00
2026-02-10 20:15:31 -03:00
2026-02-14 19:15:58 -03:00
2026-02-14 20:24:26 -03:00
2026-02-10 20:59:06 -03:00
2026-02-10 20:15:31 -03:00
2026-02-10 20:58:16 -03:00
2026-02-14 19:45:11 -03:00
2026-02-14 19:45:11 -03:00
2026-02-10 20:58:16 -03:00

Armandine

Static gallery site served by Nginx. Runs as a repository-based container; image is built and pushed via Woodpecker CI/CD from this repo.

Stack

  • Site: Static HTML/CSS/JS in src/, copied into the image.
  • Runtime: nginx:alpine (see Dockerfile).
  • Registry: Gitea at git.mifi.dev → image git.mifi.dev/mifi-holdings/armandine.
  • Deploy: Portainer on Linode; stack uses this image (no volume for site content).

Local development

# Install dev dependencies (ESLint, Prettier, Stylelint)
pnpm install

# Lint JS and CSS
pnpm lint

# Check formatting (CI uses this)
pnpm format:check

# Fix formatting
pnpm format

# Preview site locally (serves src/ on http://localhost:3000)
pnpm serve

Dev container

Open the repo in a dev container (VS Code/Cursor: Dev Containers: Reopen in Container) for a consistent environment:

  • Node 22 (matches CI), with pnpm install run after create
  • Docker (outside of Docker) uses the host Docker socket so you can run pnpm build and test the image inside the dev container
  • ESLint, Prettier, Stylelint extensions plus format-on-save and fix-on-save

Port 3000 is forwarded for pnpm serve; port 80 is forwarded if you run the built Nginx container locally.

Manual build and push

When you want to build and push the image yourself (e.g. before CI was set up, or for a one-off deploy):

  1. Log in to the Gitea container registry:

    docker login git.mifi.dev
    

    Use your Gitea username and a token with package permissions.

  2. Build the image (tags as latest):

    pnpm build
    

    This runs: docker build -t git.mifi.dev/mifi-holdings/armandine:latest .

  3. Push to the registry:

    pnpm push
    

    Then on the server, redeploy the stack (e.g. Portainer “Pull and redeploy” or your webhook).

Woodpecker CI/CD

Three pipelines (see .woodpecker/):

Pipeline When What
ci Every push to main, every PR Lint (ESLint + Stylelint) and Prettier check
build Push/tag/manual on main only (after ci) Build Docker image, push to git.mifi.dev/mifi-holdings/armandine
deploy After build Trigger Portainer stack redeploy via webhook

Order: cibuilddeploy.

Secrets (Woodpecker)

Configure in the repos Woodpecker secrets:

  • gitea_registry_username Gitea user for registry login
  • gitea_package_token Gitea token with package read/write
  • portainer_webhook_url Portainer stack webhook URL for redeploy
  • discord_webhook_url (optional) Discord notifications for build/deploy status

Server / Portainer

  • Stack is defined by docker-compose.yml in this repo.
  • Compose uses the image from the registry (git.mifi.dev/mifi-holdings/armandine:latest); no volume for site content (its inside the image).
  • Ensure the server can pull from git.mifi.dev (login or registry access). After a push, either let the deploy pipeline trigger the Portainer webhook or manually “Pull and redeploy” the stack.

Project layout

├── src/                 # Static site (copied into image)
│   ├── index.html
│   └── assets/
│       ├── css/
│       ├── js/
│       └── media/
├── Dockerfile           # nginx:alpine + COPY src → /usr/share/nginx/html
├── docker-compose.yml   # Stack for Portainer (Traefik, healthcheck)
├── package.json         # Scripts: build, push, lint, format, serve (pnpm)
├── .devcontainer/       # Dev container (Node 22, Docker, lint/format tools)
├── .woodpecker/
│   ├── ci.yaml          # Lint + format check (PR + main)
│   ├── build.yaml       # Build image, push to registry
│   └── deploy.yaml      # Portainer webhook
└── README.md            # This file

Version

package.json version: 1.0.0 (bump when you want to track releases).

Description
A marketing site for the Armandine Street condo short term rental - featuring high quality images and video!
Readme 949 MiB
Languages
JavaScript 43.9%
Svelte 27.3%
TypeScript 20%
CSS 7.8%
HTML 0.7%
Other 0.3%