184 lines
11 KiB
YAML
184 lines
11 KiB
YAML
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+="---\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}\"
|
||
}"
|