From c11080628ad38c2ce5d2bc6e763efb53e8e7ec7c Mon Sep 17 00:00:00 2001 From: Stephen Tafoya Date: Wed, 10 Jun 2026 19:15:37 -0600 Subject: [PATCH] Initial commit: static Zeppo website with Dockerfile and Gitea CI --- .gitea/workflows/build.yml | 29 +++++ Dockerfile | 4 + index.html | 108 ++++++++++++++++++ style.css | 225 +++++++++++++++++++++++++++++++++++++ 4 files changed, 366 insertions(+) create mode 100644 .gitea/workflows/build.yml create mode 100644 Dockerfile create mode 100644 index.html create mode 100644 style.css diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..2ae966c --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,29 @@ +name: Build and Publish Docker Image + +on: + push: + branches: [main] + +jobs: + build-and-push: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Gitea Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ gitea.server_url }} + username: ${{ gitea.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ${{ gitea.server_url }}/${{ gitea.repository }}:latest diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..79ca04d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM nginx:alpine +COPY index.html style.css /usr/share/nginx/html/ +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/index.html b/index.html new file mode 100644 index 0000000..0b47a7d --- /dev/null +++ b/index.html @@ -0,0 +1,108 @@ + + + + + + Zeppo — The Greatest Yinglet Alive + + + +
+

Zeppo

+

The Greatest Yinglet to Ever Squeak

+
+ +
+
+
+

He's Just Him

+

Some yinglets are good. Some are great. And then there's Zeppo.

+
+
+ +
+

Why Zeppo is the Best

+
+
+ +

Unmatched Swagger

+

Zeppo doesn't walk into a room — he arrives. Whiskers perfectly groomed, tail held high. He knows he's him.

+
+
+ 🧠 +

Galaxy Brain

+

Wits sharper than a creystone blade. Zeppo could scheme his way out of any jam and still have time to steal your lunch.

+
+
+ ❤️ +

Big Heart (Literally)

+

Despite being a tiny rodent-person, his heart is the size of a melon. Loyal, fierce, and ride-or-die for his crew.

+
+
+ 🦷 +

Magnificent Teeth

+

Name a better dental situation. You can't. Those choppers have 10,000 PSI of pure charisma.

+
+
+ 🌪️ +

Chaos Magnet

+

Where Zeppo goes, adventure follows. Not always good adventure, but never boring. The universe literally cannot ignore him.

+
+
+ 👑 +

King Energy

+

No throne needed. Zeppo rules through sheer force of personality. Say his name three times and he appears to judge you.

+
+
+
+ +
+

What Others Are Saying

+
+

"I have never met a yinglet with such presence. Zeppo is a force of nature wrapped in fur."

+ — A Very Reliable Source +
+
+

"He once stared down a khert-hound and the hound blinked first. Legend."

+ — Witness +
+
+

"I asked him to tone it down and he toned it UP. Respect."

+ — Anonymous +
+
+ +
+

Zeppo by the Numbers

+
+
+ 100% + Pure Yinglet +
+
+ + Swagger Units +
+
+ 11/10 + Whisker Rating +
+
+ 0 + Enemies (They All Folded) +
+
+
+ +
+

The Verdict

+

Zeppo is the GOAT. Well, GY — Greatest Yinglet. In a world full of yinglets, he's the one you'd want on your side, in your corner, and absolutely never playing cards against.

+

Zeppo. Believe the hype.

+
+
+ + + + diff --git a/style.css b/style.css new file mode 100644 index 0000000..2c4a23a --- /dev/null +++ b/style.css @@ -0,0 +1,225 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;700;900&display=swap'); + +:root { + --bg: #0f0f14; + --card: #1a1a24; + --accent: #f5a623; + --accent-dim: #b87d1a; + --text: #e8e8ee; + --muted: #8888a0; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Inter', system-ui, sans-serif; + background: var(--bg); + color: var(--text); + line-height: 1.6; + overflow-x: hidden; +} + +header { + text-align: center; + padding: 4rem 1rem 2rem; + background: linear-gradient(180deg, #1c1c2e 0%, var(--bg) 100%); + border-bottom: 1px solid #2a2a3a; +} + +h1 { + font-size: 5rem; + font-weight: 900; + letter-spacing: -0.04em; + background: linear-gradient(135deg, var(--accent), #ff6b6b); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + line-height: 1.1; +} + +.subtitle { + font-size: 1.25rem; + color: var(--muted); + margin-top: 0.5rem; + font-weight: 400; +} + +.hero { + text-align: center; + padding: 5rem 1rem; + background: radial-gradient(ellipse at center, #1c1c2e 0%, transparent 70%); +} + +.hero h2 { + font-size: 3rem; + font-weight: 900; +} + +.glow { + background: linear-gradient(135deg, var(--accent), #ff6b6b); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + text-shadow: 0 0 40px rgba(245, 166, 35, 0.3); +} + +.hero p { + font-size: 1.2rem; + color: var(--muted); + margin-top: 1rem; + max-width: 36rem; + margin-inline: auto; +} + +section { + max-width: 72rem; + margin: 0 auto; + padding: 4rem 1.5rem; +} + +section h2 { + font-size: 2rem; + font-weight: 700; + text-align: center; + margin-bottom: 2.5rem; +} + +.card-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 1.5rem; +} + +.card { + background: var(--card); + border: 1px solid #2a2a3a; + border-radius: 1rem; + padding: 2rem; + transition: transform 0.2s, border-color 0.2s; +} + +.card:hover { + transform: translateY(-4px); + border-color: var(--accent-dim); +} + +.card .emoji { + font-size: 2.5rem; + display: block; + margin-bottom: 1rem; +} + +.card h3 { + font-size: 1.2rem; + font-weight: 700; + margin-bottom: 0.5rem; +} + +.card p { + color: var(--muted); + font-size: 0.95rem; +} + +.testimonials { + background: linear-gradient(135deg, #151520, #1a1a24); + border-radius: 1.5rem; + margin-block: 2rem; + max-width: 56rem; +} + +.testimonials h2 { + text-align: center; + margin-bottom: 2rem; +} + +.testimonial { + background: var(--card); + border: 1px solid #2a2a3a; + border-radius: 0.75rem; + padding: 1.5rem; + margin-bottom: 1rem; +} + +.testimonial p { + font-style: italic; + font-size: 1.05rem; +} + +.testimonial cite { + display: block; + margin-top: 0.5rem; + color: var(--muted); + font-size: 0.9rem; + font-style: normal; +} + +.stat-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 1.5rem; + text-align: center; +} + +.stat { + background: var(--card); + border: 1px solid #2a2a3a; + border-radius: 1rem; + padding: 2rem 1rem; +} + +.stat .number { + display: block; + font-size: 3rem; + font-weight: 900; + background: linear-gradient(135deg, var(--accent), #ff6b6b); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.stat .label { + display: block; + color: var(--muted); + font-size: 0.95rem; + margin-top: 0.25rem; +} + +.conclusion { + text-align: center; + max-width: 48rem; +} + +.conclusion p { + font-size: 1.15rem; + color: var(--muted); + margin-top: 1rem; +} + +.final { + font-size: 1.5rem !important; + font-weight: 900; + background: linear-gradient(135deg, var(--accent), #ff6b6b); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + margin-top: 1.5rem !important; +} + +footer { + text-align: center; + padding: 2rem; + color: var(--muted); + font-size: 0.85rem; + border-top: 1px solid #2a2a3a; + margin-top: 2rem; +} + +@media (max-width: 600px) { + h1 { font-size: 3rem; } + .hero h2 { font-size: 2rem; } + section { padding: 2.5rem 1rem; } +}