Initialize project from astro-landing template
All checks were successful
ci/woodpecker/manual/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
jordan 2026-01-30 00:04:59 +00:00
commit 16691d74fe
10 changed files with 251 additions and 0 deletions

49
.claude/CLAUDE.md Normal file
View File

@ -0,0 +1,49 @@
# e2e-final-1498
Astro landing page deployed to 5zukvg9r.threesix.ai.
## Development
```bash
npm install
npm run dev
```
Visit http://localhost:4321 to see the site.
## Build
```bash
npm run build
```
Output in `dist/` - static HTML/CSS/JS.
## Deployment
Pushes to `main` auto-deploy via Woodpecker CI:
1. Install dependencies
2. Build static site
3. Build Docker image (nginx serving dist/)
4. Push to registry
5. Update K8s deployment
Live at: https://5zukvg9r.threesix.ai
## Constraints
- Use Astro components, minimize client JS
- Optimize images (use Astro Image)
- Keep Lighthouse score > 90
- Tailwind for styling
## File Structure
```
src/
pages/
index.astro # Main landing page
components/ # Reusable Astro components
layouts/ # Page layouts
public/ # Static assets
```

36
.woodpecker.yml Normal file
View File

@ -0,0 +1,36 @@
steps:
install:
image: node:20-alpine
commands:
- npm install
when:
- event: [push, pull_request]
build:
image: node:20-alpine
commands:
- npm run build
when:
- event: [push, pull_request]
docker:
image: woodpeckerci/plugin-kaniko
settings:
registry: registry.threesix.ai
repo: "e2e-final-1498"
tags:
- latest
- ${CI_COMMIT_SHA:0:8}
cache: true
skip-tls-verify: true
when:
- event: push
branch: main
deploy:
image: bitnami/kubectl:latest
commands:
- kubectl set image deployment/e2e-final-1498 e2e-final-1498=registry.threesix.ai/e2e-final-1498:${CI_COMMIT_SHA:0:8} -n projects
when:
- event: push
branch: main

20
Dockerfile Normal file
View File

@ -0,0 +1,20 @@
# Build stage
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Production stage
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

32
README.md Normal file
View File

@ -0,0 +1,32 @@
# e2e-final-1498
Astro landing page deployed at: https://5zukvg9r.threesix.ai
## Getting Started
```bash
npm install
npm run dev
```
## Commands
| Command | Action |
|---------|--------|
| `npm run dev` | Start dev server at localhost:4321 |
| `npm run build` | Build for production |
| `npm run preview` | Preview production build |
## Structure
```
src/
pages/ # File-based routing
components/ # Astro/React components
layouts/ # Page layouts
public/ # Static assets
```
## CI/CD
Pushes to `main` trigger automatic deployment via Woodpecker CI.

7
astro.config.mjs Normal file
View File

@ -0,0 +1,7 @@
import { defineConfig } from 'astro/config';
import tailwind from '@astrojs/tailwind';
export default defineConfig({
integrations: [tailwind()],
output: 'static',
});

27
nginx.conf Normal file
View File

@ -0,0 +1,27 @@
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
# Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
# Cache static assets
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# SPA fallback
location / {
try_files $uri $uri/ /index.html;
}
# Health check
location /health {
return 200 'ok';
add_header Content-Type text/plain;
}
}

18
package.json Normal file
View File

@ -0,0 +1,18 @@
{
"name": "e2e-final-1498",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro build",
"preview": "astro preview"
},
"dependencies": {
"astro": "^4.0.0"
},
"devDependencies": {
"@astrojs/tailwind": "^5.0.0",
"tailwindcss": "^3.4.0"
}
}

21
src/layouts/Layout.astro Normal file
View File

@ -0,0 +1,21 @@
---
interface Props {
title: string;
}
const { title } = Astro.props;
---
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="e2e-final-1498 - Built with Astro" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>{title}</title>
</head>
<body>
<slot />
</body>
</html>

33
src/pages/index.astro Normal file
View File

@ -0,0 +1,33 @@
---
import Layout from '../layouts/Layout.astro';
---
<Layout title="e2e-final-1498">
<main class="min-h-screen bg-gradient-to-br from-slate-900 to-slate-800">
<div class="container mx-auto px-4 py-16">
<div class="text-center">
<h1 class="text-5xl font-bold text-white mb-6">
e2e-final-1498
</h1>
<p class="text-xl text-slate-300 mb-8 max-w-2xl mx-auto">
Welcome to your new Astro landing page. Edit this file at
<code class="bg-slate-700 px-2 py-1 rounded">src/pages/index.astro</code>
</p>
<div class="flex gap-4 justify-center">
<a
href="https://docs.astro.build"
class="px-6 py-3 bg-purple-600 text-white rounded-lg hover:bg-purple-700 transition"
>
Read the Docs
</a>
<a
href="https://git.threesix.ai/jordan/e2e-final-1498.git"
class="px-6 py-3 bg-slate-700 text-white rounded-lg hover:bg-slate-600 transition"
>
View Source
</a>
</div>
</div>
</div>
</main>
</Layout>

8
tailwind.config.mjs Normal file
View File

@ -0,0 +1,8 @@
/** @type {import('tailwindcss').Config} */
export default {
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
theme: {
extend: {},
},
plugins: [],
};