Skip to content

jersal-projects-core

This repository is the foundation of the Jersal organization. It wears three hats: shared infrastructure, portfolio website, and documentation hub.

Repository layout

jersal-projects-core/
├── .github/workflows/       # CI/CD pipelines
│   ├── terraform-plan.yml   # Terraform plan on PRs to release
│   ├── terraform-apply.yml  # Terraform apply on push to release
│   ├── site-deploy.yml      # Portfolio site deployment
│   └── hub-deploy.yml       # Documentation hub deployment
├── hub/                     # This documentation hub (Material for MkDocs)
│   ├── mkdocs.yml
│   └── docs/
├── site/app/                # Portfolio website (Vite + TypeScript + Tailwind)
│   ├── src/
│   ├── index.html
│   └── vite.config.ts
├── terraform/
│   ├── backend/             # State backend bootstrapping
│   │   ├── shared/          # Shared state storage
│   │   └── site/            # Site state storage
│   ├── envs/                # Environment root modules
│   │   ├── shared/          # PostgreSQL, RBAC
│   │   └── site/            # Static Web App, RBAC
│   └── modules/             # Reusable Terraform modules
│       ├── postgres-flex/   # Azure PostgreSQL Flexible Server
│       ├── rbac/            # Role assignments
│       ├── resource-group/  # Azure Resource Groups
│       └── swa/             # Azure Static Web Apps
└── README.md

What it provides

Shared infrastructure

Resource Purpose Details
PostgreSQL Flexible Server Shared database server Standard_B1ms, swedencentral, version 15
Resource groups Azure resource organization rg-jersal-projects-shared, rg-jersal-site-sc
State backends Terraform remote state storage 2 storage accounts with blob containers
RBAC assignments CI/CD access control Contributor + Storage Blob Data Contributor

Portfolio site

The Vite application at site/app/ serves as the public-facing portfolio at jersal.net. It showcases projects, work experience, and technologies.

  • Stack: Vite 7.x, TypeScript 5.x, Tailwind CSS 4.x
  • Hosting: Azure Static Web App (westeurope)
  • Deploy: Automatic on push to release branch

Documentation hub

This hub (what you're reading) provides organization-wide documentation, standards, and project tracking.

  • Stack: Material for MkDocs
  • Hosting: Azure Static Web App (separate from portfolio)
  • Deploy: Automatic on push to release branch when hub/ changes

CI/CD

All CI/CD runs through GitHub Actions targeting the release branch.

Workflow Trigger What it does
terraform-plan.yml PR to release (terraform/** changes) Runs terraform plan for shared and site environments
terraform-apply.yml Push to release (terraform/** changes) Runs terraform apply for shared and site environments
site-deploy.yml Push to release (site/app/** changes) Builds and deploys portfolio to Azure SWA
hub-deploy.yml Push to release (hub/** changes) Builds and deploys this hub to Azure SWA

Authentication

All CI/CD uses GitHub OIDC for Azure authentication. No stored credentials. See OIDC setup for details.

Key decisions