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

159 lines
9.4 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+="_🐾 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}\"
}"