Add .gitea/workflows/build-new-site.yml
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
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 3–5 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}\"
|
||||
}"
|
||||
Reference in New Issue
Block a user