Skip to content

[WIP] Init: README, CI, Docker, deploy & infra skeleton#7

Open
Copilot wants to merge 2 commits into
mainfrom
copilot/init-sprint0
Open

[WIP] Init: README, CI, Docker, deploy & infra skeleton#7
Copilot wants to merge 2 commits into
mainfrom
copilot/init-sprint0

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Nov 25, 2025

Sprint 0 bootstrap: adds foundational project structure, containerization, CI/CD workflows, and infrastructure skeleton for the GrAtech AI Dashboard.

Files Added

  • README.copilot.md — Project overview, local dev instructions, repo structure (suffix added since README.md exists)
  • .env.example — Environment template (Vite frontend, FastAPI backend, Azure services)
  • docker-compose.yml — Multi-service setup: frontend (nginx:80), backend (uvicorn:9000), vectorstore (redis:6379)

Dockerfiles

  • frontend/Dockerfile — Multi-stage Vite build → nginx
  • backend/Dockerfile — Python 3.11 + uvicorn

CI/CD Workflows

  • .github/workflows/ci.yml — Build/test on PR and push to main
  • .github/workflows/deploy-pages.yml — GitHub Pages deployment from frontend/dist

Infrastructure

  • infra/main.tf — Terraform skeleton (Azure provider, resource group)

Docs

  • pitch-deck.md — Pitch outline
Original prompt

Create a new branch copilot/init-sprint0 and open a DRAFT pull request against main that adds the following files to the Grar00t/gratech-ai-dashboard repository. If any file path already exists, add the file with suffix .copilot (e.g., README.copilot.md) instead and note this in the PR body.

Files to add (paths and exact contents):

  1. README.md
# GrAtech AI Dashboard

Elevator pitch (1 line)
A secure, enterprise-grade real-time infrastructure monitoring dashboard with RAG-powered insights and Azure-ready deployment automation.

Quick links
- Live demo: (after publishing, link will be added)
- PRs: (links will be added after PRs are created)

How to run locally (quick)
1. Copy .env.example → .env.local and fill variables
2. Build & run with Docker Compose:
   docker compose up --build
3. Frontend: http://localhost:3000
   Backend API: http://localhost:9000

Repository structure
- /frontend  — Vite / React (TypeScript)
- /backend   — FastAPI (Python)
- /infra     — Terraform skeleton
- /seed      — demo dataset + seed script
- .github/workflows — CI/CD

Demo dataset & seed
- run: node ./seed/seed.js  (or python ./seed/seed.py)

Contributing
- Open an issue or PR; tests run on each PR.

License
- MIT

(More details like screenshots, GIFs and link demo will be added after publishing.)
  1. .env.example
# Example environment variables
# Frontend
VITE_API_URL=http://localhost:9000

# Backend
PORT=9000
AZURE_SEARCH_SERVICE_NAME=
AZURE_SEARCH_ADMIN_KEY=
AZURE_APIM_SERVICE_NAME=
AZURE_OPENAI_ENDPOINT=
AZURE_OPENAI_KEY=

# Generic
NODE_ENV=development
  1. frontend/Dockerfile
# Frontend Dockerfile (Vite)
FROM node:18-alpine AS build
WORKDIR /app
COPY frontend/package*.json ./
RUN npm ci
COPY frontend/ .
RUN npm run build

FROM nginx:alpine AS runner
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
  1. backend/Dockerfile
# Backend Dockerfile (FastAPI + Uvicorn)
FROM python:3.11-slim
WORKDIR /app
COPY backend/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY backend/ .
ENV PORT=9000
EXPOSE 9000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "9000"]
  1. docker-compose.yml
version: "3.8"
services:
  backend:
    build:
      context: .
      dockerfile: backend/Dockerfile
    env_file:
      - .env.local
    ports:
      - "9000:9000"
    depends_on:
      - vectorstore

  frontend:
    build:
      context: .
      dockerfile: frontend/Dockerfile
    ports:
      - "3000:80"

  vectorstore:
    image: redis:6-alpine
    command: ["redis-server", "--save", "900", "1"]
    ports:
      - "6379:6379"
  1. .github/workflows/ci.yml
name: CI - build & test

on:
  pull_request:
    branches: [ "main" ]
  push:
    branches: [ "main" ]

jobs:
  build-frontend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: "18"
      - name: Install frontend deps
        working-directory: ./frontend
        run: npm ci
      - name: Build frontend
        working-directory: ./frontend
        run: npm run build

  build-backend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: 3.11
      - name: Install deps
        working-directory: ./backend
        run: pip install -r requirements.txt
      - name: Run backend tests (if any)
        working-directory: ./backend
        run: |
          echo "No tests configured yet"
  1. .github/workflows/deploy-pages.yml
name: Build and Deploy (GitHub Pages)

on:
  push:
    branches: [ "main", "master" ]

permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "18"

      - name: Install frontend dependencies
        run: |
          cd frontend
          npm ci

      - name: Build frontend
        run: |
          cd frontend
          npm run build

      - name: Configure Pages
        uses: actions/configure-pages@v3

      - name: Upload artifact for Pages
        uses: actions/upload-pages-artifact@v1
        with:
          path: frontend/dist

      - name: Deploy to GitHub Pages
        uses: actions/deploy-pages@v1
  1. infra/main.tf
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
  }
}

provider "azurerm" {
  features = {}
}

resource "azurerm_resource_group" "rg" {
  name     = var.rg_name
  location = var.location
}

variable "rg_name" {
  type    = string
  default = "gratech-resource-group"
}

variable "location" {
  type    = string
  default = "eastus2"
}

# TODO: add azurerm_search_service, azur...

</details>

*This pull request was created as a result of the following prompt from Copilot chat.*
> Create a new branch copilot/init-sprint0 and open a DRAFT pull request against main that adds the following files to the Grar00t/gratech-ai-dashboard repository. If any file path already exists, add the file with suffix .copilot (e.g., README.copilot.md) instead and note this in the PR body.
> 
> Files to add (paths and exact contents):
> 
> 1) README.md
> ```markdown
> # GrAtech AI Dashboard
> 
> Elevator pitch (1 line)
> A secure, enterprise-grade real-time infrastructure monitoring dashboard with RAG-powered insights and Azure-ready deployment automation.
> 
> Quick links
> - Live demo: (after publishing, link will be added)
> - PRs: (links will be added after PRs are created)
> 
> How to run locally (quick)
> 1. Copy .env.example → .env.local and fill variables
> 2. Build & run with Docker Compose:
>    docker compose up --build
> 3. Frontend: http://localhost:3000
>    Backend API: http://localhost:9000
> 
> Repository structure
> - /frontend  — Vite / React (TypeScript)
> - /backend   — FastAPI (Python)
> - /infra     — Terraform skeleton
> - /seed      — demo dataset + seed script
> - .github/workflows — CI/CD
> 
> Demo dataset & seed
> - run: node ./seed/seed.js  (or python ./seed/seed.py)
> 
> Contributing
> - Open an issue or PR; tests run on each PR.
> 
> License
> - MIT
> 
> (More details like screenshots, GIFs and link demo will be added after publishing.)
> ```
> 
> 2) .env.example
> ```
> # Example environment variables
> # Frontend
> VITE_API_URL=http://localhost:9000
> 
> # Backend
> PORT=9000
> AZURE_SEARCH_SERVICE_NAME=
> AZURE_SEARCH_ADMIN_KEY=
> AZURE_APIM_SERVICE_NAME=
> AZURE_OPENAI_ENDPOINT=
> AZURE_OPENAI_KEY=
> 
> # Generic
> NODE_ENV=development
> ```
> 
> 3) frontend/Dockerfile
> ```
> # Frontend Dockerfile (Vite)
> FROM node:18-alpine AS build
> WORKDIR /app
> COPY frontend/package*.json ./
> RUN npm ci
> COPY frontend/ .
> RUN npm run build
> 
> FROM nginx:alpine AS runner
> COPY --from=build /app/dist /usr/share/nginx/html
> EXPOSE 80
> CMD ["nginx", "-g", "daemon off;"]
> ```
> 
> 4) backend/Dockerfile
> ```
> # Backend Dockerfile (FastAPI + Uvicorn)
> FROM python:3.11-slim
> WORKDIR /app
> COPY backend/requirements.txt .
> RUN pip install --no-cache-dir -r requirements.txt
> COPY backend/ .
> ENV PORT=9000
> EXPOSE 9000
> CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "9000"]
> ```
> 
> 5) docker-compose.yml
> ```
> version: "3.8"
> services:
>   backend:
>     build:
>       context: .
>       dockerfile: backend/Dockerfile
>     env_file:
>       - .env.local
>     ports:
>       - "9000:9000"
>     depends_on:
>       - vectorstore
> 
>   frontend:
>     build:
>       context: .
>       dockerfile: frontend/Dockerfile
>     ports:
>       - "3000:80"
> 
>   vectorstore:
>     image: redis:6-alpine
>     command: ["redis-server", "--save", "900", "1"]
>     ports:
>       - "6379:6379"
> ```
> 
> 6) .github/workflows/ci.yml
> ```
> name: CI - build & test
> 
> on:
>   pull_request:
>     branches: [ "main" ]
>   push:
>     branches: [ "main" ]
> 
> jobs:
>   build-frontend:
>     runs-on: ubuntu-latest
>     steps:
>       - uses: actions/checkout@v4
>       - name: Setup Node
>         uses: actions/setup-node@v4
>         with:
>           node-version: "18"
>       - name: Install frontend deps
>         working-directory: ./frontend
>         run: npm ci
>       - name: Build frontend
>         working-directory: ./frontend
>         run: npm run build
> 
>   build-backend:
>     runs-on: ubuntu-latest
>     steps:
>       - uses: actions/checkout@v4
>       - name: Setup Python
>         uses: actions/setup-python@v4
>         with:
>           python-version: 3.11
>       - name: Install deps
>         working-directory: ./backend
>         run: pip install -r requirements.txt
>       - name: Run backend tests (if any)
>         working-directory: ./backend
>         run: |
>           echo "No tests configured yet"
> ```
> 
> 7) .github/workflows/deploy-pages.yml
> ```
> name: Build and Deploy (GitHub Pages)
> 
> on:
>   push:
>     branches: [ "main", "master" ]
> 
> permissions:
>   contents: read
>   pages: write
>   id-token: write
> 
> jobs:
>   build-and-deploy:
>     runs-on: ubuntu-latest
> 
>     steps:
>       - name: Checkout
>         uses: actions/checkout@v4
> 
>       - name: Use Node.js
>         uses: actions/setup-node@v4
>         with:
>           node-version: "18"
> 
>       - name: Install frontend dependencies
>         run: |
>           cd frontend
>           npm ci
> 
>       - name: Build frontend
>         run: |
>           cd frontend
>           npm run build
> 
>       - name: Configure Pages
>         uses: actions/configure-pages@v3
> 
>       - name: Upload artifact for Pages
>         uses: actions/upload-pages-artifact@v1
>         with:
>           path: frontend/dist
> 
>       - name: Deploy to GitHub Pages
>         uses: actions/deploy-pages@v1
> ```
> 
> 8) infra/main.tf
> ```
> terraform {
>   required_providers {
>     azurerm = {
>       source  = "hashicorp/azurerm"
>       version = "~> 3.0"
>     }
>   }
> }
> 
> provider "azurerm" {
>   features = {}
> }
> 
> resource "azurerm_resource_group" "rg" {
>   name     = var.rg_name
>   location = var.location
> }
> 
> variable "rg_name" {
>   type    = string
>   default = "gratech-resource-group"
> }
> 
> variable "location" {
>   type    = string
>   default = "eastus2"
> }
> 
> # TODO: add azurerm_search_service, azurerm_api_management, app service or aks modules
> ```
> 
> 9) pitch-deck.md
> ```markdown
> # GrAtech — Pitch Deck (short)
> 
> 1. Cover: GrAtech — Enterprise AI Backbone
> 2. Problem: Companies lack secure, scalable, RAG-ready infra integrated with enterprise APIs & governance.
> 3. Solution: GrAtech — turnkey infra (Vector store, APIM, RAG) + dashboard & deployment automation.
> 4. Market: TAM for enterprise AI search/assist tools (brief numbers)
> 5. Business Model: SaaS tiers + Enterprise managed deployments
> 6. Traction: demo, pilot plan, timeline
> 7. Team & Ask: funding ask, milestones
> 
> (Visual version / PPT will be prepared after review)
> ```
> 
> Acceptance criteria:
> - Create branch copilot/init-sprint0 and add files at specified paths with exact contents.
> - Open a DRAFT pull request targeting main titled: "[WIP] Init: README, CI, Docker, deploy & infra skeleton".
> - If any file exists, create the same file path with suffix .copilot and note this in PR body.
> - Do NOT remove or overwrite existing files except to add the listed files.
> 
> Please return the PR URL when complete.
> 

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs.

Co-authored-by: Grar00t <239743497+Grar00t@users.noreply.github.com>
Copilot AI changed the title [WIP] Add initial README and setup instructions [WIP] Init: README, CI, Docker, deploy & infra skeleton Nov 25, 2025
@Grar00t SULIMAN ALSHAMMARI (Grar00t) marked this pull request as ready for review November 30, 2025 07:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants