Files
llm-tools/.gitea/workflows/build-new-site.yml
T

184 lines
11 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Build New Site
on:
workflow_dispatch:
inputs:
project_name:
description: 'Project / site name (used in the issue title)'
required: false
default: 'New Site'
doc_url:
description: 'URL or path to the project brief document (optional but recommended)'
required: false
default: ''
jobs:
create-build-new-site-issue:
name: Create Build New Site Issue
runs-on: ubuntu-latest
steps:
- name: Create issue
run: |
TODAY=$(date +%Y-%m-%d)
PROJECT="${{ inputs.project_name }}"
DOC_URL="${{ inputs.doc_url }}"
# Build optional doc reference
if [ -n "$DOC_URL" ]; then
DOC_LINE="\n> 📄 **Project Brief:** $DOC_URL\n"
else
DOC_LINE=""
fi
BODY="## 🌐 Build New Site — ${PROJECT}\n\n"
BODY+="Generated: ${TODAY}\n"
BODY+="${DOC_LINE}\n"
BODY+="---\n\n"
BODY+="> ⚠️ **Agent Instructions — READ BEFORE PROCEEDING**\n>\n"
BODY+="> A project brief document will be provided alongside this issue — read it fully before starting any work.\n"
BODY+="> Work through each section **in order**. Post a **separate comment** on this issue after completing each section.\n"
BODY+="> Do NOT wait until everything is done — post findings/decisions as you go.\n"
BODY+="> Every decision you make must be documented in your comment so there is a clear record.\n"
BODY+="> If a section is unclear or requires stakeholder input, post a blocking comment and tag the relevant person before proceeding.\n\n"
BODY+="---\n\n"
BODY+="### ☁️ AWS Amplify Instance\n\n"
BODY+="Spin up and configure the hosting infrastructure for this project.\n\n"
BODY+="- [ ] Create new Amplify app and connect to the correct repository\n"
BODY+="- [ ] Configure build settings (build command, output directory, environment variables)\n"
BODY+="- [ ] Set up branch-based deployment (main → prod, dev → staging)\n"
BODY+="- [ ] Confirm deployment pipeline runs successfully end-to-end\n"
BODY+="- [ ] Document the Amplify app ID and console URL in a comment\n\n"
BODY+="---\n\n"
BODY+="### 🔍 Research\n\n"
BODY+="Gather and document the foundational context for this project.\n\n"
BODY+="- [ ] Identify the target audience and primary user persona\n"
BODY+="- [ ] Define the primary goals and measurable success metrics\n"
BODY+="- [ ] Extract and document key requirements from the project brief\n"
BODY+="- [ ] Note any constraints: timeline, budget, integrations, regulatory\n\n"
BODY+="---\n\n"
BODY+="### 🏆 Competitor Research\n\n"
BODY+="Understand the landscape before making design and strategy decisions.\n\n"
BODY+="- [ ] Identify top 35 competitors or comparable sites\n"
BODY+="- [ ] Document what they do well (features, UX, content, SEO)\n"
BODY+="- [ ] Document their weaknesses and gaps this project can exploit\n"
BODY+="- [ ] List 3+ clear differentiators for this project\n\n"
BODY+="---\n\n"
BODY+="### 📛 Website Name\n\n"
BODY+="Confirm and lock in the brand name before proceeding.\n\n"
BODY+="- [ ] Confirm the final website / brand name from the project brief\n"
BODY+="- [ ] Verify domain availability for the chosen name\n"
BODY+="- [ ] Check key social handle availability (Twitter/X, LinkedIn, Instagram)\n"
BODY+="- [ ] Document any naming alternatives that were considered and rejected\n\n"
BODY+="---\n\n"
BODY+="### 🔗 URL\n\n"
BODY+="Register the domain and wire up DNS to the hosting provider.\n\n"
BODY+="- [ ] Confirm primary domain / URL (from brief or stakeholder)\n"
BODY+="- [ ] Register the domain if not already owned\n"
BODY+="- [ ] Configure DNS records pointing to Amplify (CNAME / A record)\n"
BODY+="- [ ] Set up www → apex (or apex → www) redirect\n"
BODY+="- [ ] Confirm SSL certificate provisioned and active\n\n"
BODY+="---\n\n"
BODY+="### 📧 Email\n\n"
BODY+="Set up professional email for the site.\n\n"
BODY+="- [ ] Determine required inboxes (contact@, hello@, support@, etc.)\n"
BODY+="- [ ] Set up / configure email provider (SES, Google Workspace, Postmark, etc.)\n"
BODY+="- [ ] Configure contact form routing / forwarding if applicable\n"
BODY+="- [ ] Verify SPF, DKIM, and DMARC DNS records\n"
BODY+="- [ ] Send a test email to confirm delivery\n\n"
BODY+="---\n\n"
BODY+="### 🎯 Purpose of Site\n\n"
BODY+="Nail down the mission before any design or build work begins.\n\n"
BODY+="- [ ] Write a clear one-paragraph mission statement for the site\n"
BODY+="- [ ] Define the single primary CTA every visitor should take\n"
BODY+="- [ ] List secondary goals (newsletter sign-up, lead gen, sales, portfolio, etc.)\n"
BODY+="- [ ] Define how success will be measured (KPIs, conversion targets)\n\n"
BODY+="---\n\n"
BODY+="### 🛠️ Technology Stack\n\n"
BODY+="Decide on the tech before any code is written.\n\n"
BODY+="- [ ] Frontend framework (Next.js, Astro, Vue, Nuxt, plain HTML, etc.)\n"
BODY+="- [ ] Styling solution (Tailwind, MUI, CSS Modules, Styled Components, etc.)\n"
BODY+="- [ ] CMS / content layer if needed (Contentful, Sanity, MDX, Strapi, etc.)\n"
BODY+="- [ ] Backend / API layer (serverless functions, REST, GraphQL, none)\n"
BODY+="- [ ] Database if applicable\n"
BODY+="- [ ] Third-party integrations (payments, auth, CRM, etc.)\n"
BODY+="- [ ] Document final stack decision with rationale in a comment\n\n"
BODY+="---\n\n"
BODY+="### 🎨 Site Theme\n\n"
BODY+="Establish the visual identity before any UI is built.\n\n"
BODY+="- [ ] Define color palette: primary, secondary, accent, background, text\n"
BODY+="- [ ] Choose typography: heading font, body font, optional monospace\n"
BODY+="- [ ] Establish visual tone: minimal, bold, editorial, corporate, playful, etc.\n"
BODY+="- [ ] Collect 3+ reference sites or a mood board link\n"
BODY+="- [ ] Logo / brand mark — existing asset or needs to be created?\n"
BODY+="- [ ] Document final theme decisions with hex codes and font names\n\n"
BODY+="---\n\n"
BODY+="### 👥 Roles\n\n"
BODY+="Define who has access to what before any accounts are provisioned.\n\n"
BODY+="- [ ] List all team members who need access to this project\n"
BODY+="- [ ] Assign roles: owner, developer, designer, content editor, stakeholder\n"
BODY+="- [ ] Set up repository permissions accordingly\n"
BODY+="- [ ] Set up Amplify / hosting console access\n"
BODY+="- [ ] Document who has authority to approve and trigger production deployments\n\n"
BODY+="---\n\n"
BODY+="### 📄 Website Pages\n\n"
BODY+="Plan the full site map before any page is built.\n\n"
BODY+="- [ ] List every planned page with a one-line description of its purpose\n"
BODY+="- [ ] Define the primary navigation structure\n"
BODY+="- [ ] Label each page: MVP (must ship) or post-launch (nice to have)\n"
BODY+="- [ ] Flag which pages require dynamic / CMS-driven content\n"
BODY+="- [ ] Confirm 404 page and error state strategy\n\n"
BODY+="---\n\n"
BODY+="### 📊 Analytics\n\n"
BODY+="Set up measurement before launch — not after.\n\n"
BODY+="- [ ] Choose analytics provider (GA4, Plausible, Fathom, PostHog, etc.)\n"
BODY+="- [ ] Create account / property and document tracking ID\n"
BODY+="- [ ] Install tracking snippet or integration in the codebase\n"
BODY+="- [ ] Define key events to track (page views, CTA clicks, form submissions, conversions)\n"
BODY+="- [ ] Verify data flows correctly in both dev and production environments\n\n"
BODY+="---\n\n"
BODY+="### ⚖️ Legal / Privacy / Cookies\n\n"
BODY+="Handle legal compliance before any public traffic hits the site.\n\n"
BODY+="- [ ] Privacy Policy — draft or generate; confirm it covers all data collected\n"
BODY+="- [ ] Terms of Service — draft if the site collects data, sells, or has user accounts\n"
BODY+="- [ ] Cookie consent banner — required if using analytics or targeting EU visitors\n"
BODY+="- [ ] GDPR / CCPA compliance review\n"
BODY+="- [ ] Legal entity name and contact information on the site (footer at minimum)\n"
BODY+="- [ ] DMCA / copyright notices if applicable\n\n"
BODY+="---\n\n"
BODY+="---\n\n"
BODY+="### 🗂️ Gitea / GitHub Repos\n\n"
BODY+="Set up version control for the project before any code is written.\n\n"
BODY+="- [ ] Create the primary repository (Gitea for internal, GitHub for public/client-facing)\n"
BODY+="- [ ] Set default branch, branch protection rules, and merge strategy\n"
BODY+="- [ ] Add README, .gitignore, and LICENSE appropriate to the project\n"
BODY+="- [ ] Configure repository access / collaborators per the Roles section above\n"
BODY+="- [ ] Set up any required webhooks (CI/CD, Discord notifications, issue trackers)\n"
BODY+="- [ ] Mirror to secondary host if applicable (e.g. push Gitea → GitHub)\n"
BODY+="- [ ] Document the repo URL(s) in a comment on this issue\n\n"
BODY+="---\n\n"
BODY+="### ✅ QA / Visual Check\n\n"
BODY+="Final pass before launch — no exceptions.\n\n"
BODY+="- [ ] Cross-browser test: Chrome, Firefox, Safari (and Edge if client requires)\n"
BODY+="- [ ] Mobile responsiveness: test at 375px, 768px, 1280px, 1440px breakpoints\n"
BODY+="- [ ] All links verified — no broken internal or external links\n"
BODY+="- [ ] All forms tested end-to-end: submission, validation, success/error states\n"
BODY+="- [ ] Images: optimized, correct alt text, no layout shift on load\n"
BODY+="- [ ] Typography and spacing: consistent across all pages, no orphans\n"
BODY+="- [ ] Accessibility: keyboard navigation works, ARIA labels present, contrast passes WCAG AA\n"
BODY+="- [ ] Page speed: run Lighthouse — target 90+ performance score\n"
BODY+="- [ ] SEO basics: meta titles, descriptions, og:image on all key pages\n"
BODY+="- [ ] Analytics confirmed firing on production\n"
BODY+="- [ ] Cookie banner and legal pages live and linked in footer\n"
BODY+="- [ ] Stakeholder sign-off obtained before go-live\n\n"
BODY+="_🐾 Silma — Build New Site · auto-generated ${TODAY}_"
curl -f -s -X POST \
"http://100.79.253.19:3000/api/v1/repos/${{ gitea.repository }}/issues" \
-H "Authorization: token ${{ gitea.token }}" \
-H "Content-Type: application/json" \
-d "{
\"title\": \"Build New Site \u2014 ${PROJECT}\",
\"body\": \"${BODY}\"
}"