Initial commit: BlueCap Strategies Astro site

Static Astro 5 site for BlueCap Strategies with exact live-site content
parity, deployed to k3s via GitOps (ArgoCD).

- Page copy in Markdown content collections (services, focus-areas, pages,
  insights) with a Zod SEO schema enforced at build time
- Homepage + About restored to exact live copy; real live-site imagery
- Build-time SEO linter (scripts/seo-lint.mjs) and Playwright e2e suite
- Multi-stage Dockerfile (nginx serves dist/) and Kustomize manifests (k8s/)
- Per-agent robots.txt; config-driven PostHog + Umami analytics scaffold
- ADRs and engineering docs under docs/

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
gitea_adminandClaude Opus 4.8 committed 2026-07-15 17:40:46 -04:00
commit cd91c4b97c
92 files changed
+10246

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: bluecap-website-config
namespace: bluecap-strategies
data:
PUBLIC_SITE_URL: "https://www.bluecapstrategies.com"
# Set to a Formspree, webhook, ntfy, or self-hosted form endpoint before production cutover.
PUBLIC_CONTACT_FORM_ENDPOINT: ""
+41
View File
@@ -0,0 +1,41 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: bluecap-website
namespace: bluecap-strategies
spec:
replicas: 2
selector:
matchLabels:
app: bluecap-website
template:
metadata:
labels:
app: bluecap-website
spec:
containers:
- name: website
image: ghcr.io/your-org/bluecap-strategies-website:latest
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
readinessProbe:
httpGet:
path: /healthz
port: http
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /healthz
port: http
initialDelaySeconds: 15
periodSeconds: 20
resources:
requests:
cpu: 25m
memory: 64Mi
limits:
cpu: 250m
memory: 128Mi
+37
View File
@@ -0,0 +1,37 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: bluecap-website
namespace: bluecap-strategies
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
# If cert-manager is installed, uncomment and set your ClusterIssuer.
# cert-manager.io/cluster-issuer: letsencrypt-production
spec:
# If cert-manager is installed, uncomment tls and set the secret name.
# tls:
# - hosts:
# - www.bluecapstrategies.com
# - bluecapstrategies.com
# secretName: bluecap-website-tls
rules:
- host: www.bluecapstrategies.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bluecap-website
port:
name: http
- host: bluecapstrategies.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bluecap-website
port:
name: http
+8
View File
@@ -0,0 +1,8 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- configmap.yaml
- deployment.yaml
- service.yaml
- ingress.yaml
+4
View File
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: bluecap-strategies
+12
View File
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: bluecap-website
namespace: bluecap-strategies
spec:
selector:
app: bluecap-website
ports:
- name: http
port: 80
targetPort: http