From 1512ca7ed7e2b6c65ba44c33f6ae36af5530ce7b Mon Sep 17 00:00:00 2001 From: Carlos Barajas Date: Tue, 3 Feb 2026 01:31:21 +0000 Subject: [PATCH 01/10] docs: initialize claude --- .devcontainer/devcontainer.json | 13 +++-- CLAUDE.md | 95 +++++++++++++++++++++++++++++++++ solthoth/package-lock.json | 30 ++++++++++- solthoth/package.json | 2 +- 4 files changed, 135 insertions(+), 5 deletions(-) create mode 100644 CLAUDE.md diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 785214d..aebf0be 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -6,21 +6,28 @@ "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bullseye", // Features to add to the dev container. More info: https://containers.dev/features. - // "features": {}, + "features": { + "ghcr.io/devcontainers-extra/features/angular-cli:2": {}, + "ghcr.io/devcontainers-community/npm-features/prettier:1": {}, + "ghcr.io/devcontainers-extra/features/pre-commit:2": {}, + "ghcr.io/devcontainers/features/azure-cli:1": {} + }, // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "npm install -g @angular/cli", + "postCreateCommand": "cd solthoth && npm install", // Configure tool-specific properties. "customizations": { "vscode": { "extensions": [ + "tal7aouy.icons", "angular.ng-template", "ms-azuretools.vscode-docker", - "motivesoft.vscode-uuid-generator" + "motivesoft.vscode-uuid-generator", + "anthropic.claude-code" ] } }, diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..7d8a69c --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,95 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +ProfileSite is an Angular 17 application showcasing professional work experience through a job listing interface. The application uses standalone components (no NgModules), Angular Material for UI, and supports server-side rendering via Express. + +## Development Commands + +All commands should be run from the `solthoth/` directory: + +```bash +cd solthoth +``` + +- **Install dependencies**: `npm install` +- **Development server**: `npm start` (serves on `http://0.0.0.0:4200`) +- **Build for production**: `npm run build` +- **Build with watch mode**: `npm run watch` +- **Run tests**: `npm test` (Karma/Jasmine) +- **SSR production server**: `npm run serve:ssr:solthoth` (serves built SSR app on port 4000) + +Note: Tests are currently commented out in CI (see `.github/workflows/ci.yaml:19`). + +## Architecture + +### Application Structure + +The application follows Angular 17's standalone component pattern with dependency injection via the `inject()` function rather than constructor injection. + +**Core Components:** +- `AppComponent` - Root component with Material toolbar and router outlet +- `HomeComponent` - Main listing page displaying all jobs +- `JobComponent` - Reusable card component for individual job entries +- `JobDetailsComponent` - Detail view for a specific job (route: `/details/:id`) + +**Routing:** +- `/` - HomeComponent (job listing) +- `/details/:id` - JobDetailsComponent (job detail view) + +Routes defined in [app.routes.ts](solthoth/src/app/app.routes.ts). + +### Data Model + +Job data is currently **hardcoded** in [JobService](solthoth/src/app/job.service.ts:9-166) as an in-memory array. The `Job` interface includes: +- `id`: UUID string +- `title`, `companyName`, `companyLink` +- `dateRange`, `internalRange`: String dates (not Date objects) +- `achivements`: Array of accomplishment strings +- `details`: Optional additional details array + +### Styling System + +Global design tokens are defined in [styles.css](solthoth/src/styles.css:5-39) using CSS custom properties: +- Layout: `--layout-max-width: 960px` +- Spacing scale: `--spacing-{2xs,xs,sm,md,lg,xl,2xl,3xl,4xl}` +- Color system: Primary blue (`#2563eb`), secondary indigo (`#6366f1`) +- Typography: Inter font family via `--font-display` + +Components use these tokens for consistent spacing and theming. The app uses Angular Material's indigo-pink prebuilt theme. + +### Server-Side Rendering + +SSR is configured via [server.ts](solthoth/server.ts) using Angular's CommonEngine with Express. The server: +- Serves static files from `dist/solthoth/browser/` +- Renders Angular routes server-side +- Runs on port 4000 (configurable via `PORT` env var) +- Includes placeholder for REST API endpoints at line 21 + +### TypeScript Configuration + +Strict mode enabled in [tsconfig.json](solthoth/tsconfig.json:7-11) with: +- `strict: true` +- `noImplicitReturns: true` +- `noFallthroughCasesInSwitch: true` +- Angular strict templates enabled + +Target: ES2022 with ES2022 modules. + +## CI/CD + +GitHub Actions workflow (`.github/workflows/ci.yaml`) runs on push/PR: +1. Build job: `npm ci` → `npm run build` → upload browser artifacts +2. Deploy job (main branch only): Downloads artifacts → FTP deploy to production + +The default branch for PRs is `master` (not `main`), but deployment triggers on `main`. + +## Development Environment + +DevContainer configuration available at `.devcontainer/devcontainer.json` with: +- Node.js 20 TypeScript image +- Angular CLI pre-installed +- Azure CLI, Prettier, pre-commit hooks +- Post-create command runs `npm install` in solthoth/ diff --git a/solthoth/package-lock.json b/solthoth/package-lock.json index 6dbaa09..b5a53d4 100644 --- a/solthoth/package-lock.json +++ b/solthoth/package-lock.json @@ -266,6 +266,7 @@ "version": "17.3.0", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.0.tgz", "integrity": "sha512-H7R3c2E479CPpaX6bU84F8u4JV+IFEfM8BUOgrbcI9tF16m6C2eJbl8IqNuW0yADuTarRSlOT7TW0qyrmcxhRw==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -280,6 +281,7 @@ "version": "17.3.0", "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.3.0.tgz", "integrity": "sha512-/RIEzP7D3wCGgk2FEvSWTvcKMa+4L7djMF6ZnOKqU6CiJLX3Ksr3+RXqXuiVkdVZBoRXEWRofS/DYEai+nIW8A==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -330,6 +332,7 @@ "version": "17.3.0", "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.0.tgz", "integrity": "sha512-JnS6jbLl2RxsvGFUOBGeoyviNLEjZKRhn3uK4Ein3DENPv0BeSFMjif9Dp4ReUCnqoD4QQVG0X/r1GFaqHn2pw==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -345,6 +348,7 @@ "version": "17.3.0", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.0.tgz", "integrity": "sha512-lZBD5mFq7SzFJydZwW2jvnQGmtcU1s3e548hl4MSZpRgt13m5UmBQKbyMOvVN2WxKvWKlmDlywsAJlMSXepYig==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -365,6 +369,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.0.tgz", "integrity": "sha512-ewo+pb0QUC69Ey15z4vPteoBeO81HitqplysOoeXbyVBjMnKmZl3343wx7ukgcI97lmj4d38d1r4AnIoO5n/Vw==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "7.23.9", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -437,6 +442,7 @@ "version": "17.3.0", "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.0.tgz", "integrity": "sha512-umwsNFl/wEMTCUVvNl5iieEgHA+ESxSMcjedZGFWNGnpUxKTgYFYNG41/1wNZfPrS0+uRPHuYU9IHD+NR2s/Rw==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -452,6 +458,7 @@ "version": "17.3.0", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.0.tgz", "integrity": "sha512-TnLOake1fQCmmGEOZbTjP2gbKerZ/bfEMuiFfoe7R2rUvKl4xHGAHp99bqf7bUyAbB8ZgmPZc9/VHrrts8UNyA==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -533,6 +540,7 @@ "version": "17.3.0", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.0.tgz", "integrity": "sha512-sIquvbq04KMOdpk1VdVFt7kVhOk/Rk+hI3M4raarMK5EbZ16nLYzpqjc2OZetUpKy6LB/FemClgNUShj9NlrqA==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -571,6 +579,7 @@ "version": "17.3.0", "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-17.3.0.tgz", "integrity": "sha512-kCtAZskxn5iKSF9yw+IALA6Otv8eqGp19R0RX/Btj7hLPEUPz1/n9pUIBLOtyE5P4xWT6JCty+vaPOdloSO9RA==", + "peer": true, "dependencies": { "tslib": "^2.3.0", "xhr2": "^0.2.0" @@ -643,6 +652,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", "dev": true, + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", @@ -4450,6 +4460,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz", "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==", "dev": true, + "peer": true, "dependencies": { "undici-types": "~5.26.4" } @@ -4731,6 +4742,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4804,6 +4816,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -5255,6 +5268,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001587", "electron-to-chromium": "^1.4.668", @@ -8074,7 +8088,8 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/jest-worker": { "version": "27.5.1", @@ -8216,6 +8231,7 @@ "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz", "integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==", "dev": true, + "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -8455,6 +8471,7 @@ "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "dev": true, + "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -10125,6 +10142,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -10789,6 +10807,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -10827,6 +10846,7 @@ "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", "dev": true, + "peer": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -11672,6 +11692,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -11724,6 +11745,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11892,6 +11914,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12116,6 +12139,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.5.tgz", "integrity": "sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==", "dev": true, + "peer": true, "dependencies": { "esbuild": "^0.19.3", "postcss": "^8.4.35", @@ -12617,6 +12641,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", "dev": true, + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", @@ -12692,6 +12717,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dev": true, + "peer": true, "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -12848,6 +12874,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13130,6 +13157,7 @@ "version": "0.14.4", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.4.tgz", "integrity": "sha512-NtTUvIlNELez7Q1DzKVIFZBzNb646boQMgpATo9z3Ftuu/gWvzxCW7jdjcUDoRGxRikrhVHB/zLXh1hxeJawvw==", + "peer": true, "dependencies": { "tslib": "^2.3.0" } diff --git a/solthoth/package.json b/solthoth/package.json index 2a750c9..febc141 100644 --- a/solthoth/package.json +++ b/solthoth/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "scripts": { "ng": "ng", - "start": "ng serve", + "start": "ng serve --host 0.0.0.0", "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test", From d1829de4e54e7fc66e397f4c669c9235cf4edc2f Mon Sep 17 00:00:00 2001 From: Carlos Barajas Date: Tue, 3 Feb 2026 01:38:28 +0000 Subject: [PATCH 02/10] ci: add comitlint validation workflow --- .github/workflows/ci.yaml | 22 +- .pre-commit-config.yaml | 14 + commitlint.config.js | 27 ++ solthoth/package-lock.json | 552 ++++++++++++++++++++++++++++++++++++- solthoth/package.json | 4 +- 5 files changed, 611 insertions(+), 8 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 commitlint.config.js diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 4c3e8e2..1c76778 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -2,6 +2,27 @@ name: Build and Test run-name: ${{ github.actor }} is building ProfileSite on: [push, pull_request] jobs: + commitlint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install commitlint dependencies + run: | + cd solthoth + npm ci + - name: Validate PR commits with commitlint + if: github.event_name == 'pull_request' + run: npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose + - name: Validate current commit (push) + if: github.event_name == 'push' + run: npx commitlint --from HEAD~1 --to HEAD --verbose + build: runs-on: ubuntu-latest env: @@ -41,4 +62,3 @@ jobs: username: ${{ env.FTP_USERNAME }} password: ${{ secrets.FTP_PASSWORD }} protocol: ftps - diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..c5346ec --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,14 @@ +repos: + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v3.1.0 + hooks: + - id: prettier + types_or: [javascript, jsx, ts, tsx, json, yaml, markdown, css, scss] + exclude: "package-lock.json" + + - repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook + rev: v9.11.0 + hooks: + - id: commitlint + stages: [commit-msg] + additional_dependencies: ["@commitlint/config-conventional"] diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..39d70d3 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,27 @@ +module.exports = { + extends: ["@commitlint/config-conventional"], + rules: { + "type-enum": [ + 2, + "always", + [ + "feat", // New feature + "fix", // Bug fix + "docs", // Documentation changes + "style", // Code style changes (formatting, semicolons, etc.) + "refactor", // Code refactoring + "perf", // Performance improvements + "test", // Adding or updating tests + "build", // Build system or dependency changes + "ci", // CI configuration changes + "chore", // Other changes that don't modify src or test files + "revert", // Revert a previous commit + ], + ], + "type-case": [2, "always", "lower-case"], + "type-empty": [2, "never"], + "subject-empty": [2, "never"], + "subject-full-stop": [2, "never", "."], + "header-max-length": [2, "always", 100], + }, +}; diff --git a/solthoth/package-lock.json b/solthoth/package-lock.json index b5a53d4..339b86f 100644 --- a/solthoth/package-lock.json +++ b/solthoth/package-lock.json @@ -29,6 +29,8 @@ "@angular-devkit/build-angular": "^17.3.0", "@angular/cli": "^17.3.0", "@angular/compiler-cli": "^17.3.0", + "@commitlint/cli": "^20.4.1", + "@commitlint/config-conventional": "^20.4.1", "@types/express": "^4.17.17", "@types/jasmine": "~5.1.0", "@types/node": "^18.18.0", @@ -2369,6 +2371,275 @@ "node": ">=0.1.90" } }, + "node_modules/@commitlint/cli": { + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.4.1.tgz", + "integrity": "sha512-uuFKKpc7OtQM+6SRqT+a4kV818o1pS+uvv/gsRhyX7g4x495jg+Q7P0+O9VNGyLXBYP0syksS7gMRDJKcekr6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/format": "^20.4.0", + "@commitlint/lint": "^20.4.1", + "@commitlint/load": "^20.4.0", + "@commitlint/read": "^20.4.0", + "@commitlint/types": "^20.4.0", + "tinyexec": "^1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.4.1.tgz", + "integrity": "sha512-0YUvIeBtpi86XriqrR+TCULVFiyYTIOEPjK7tTRMxjcBm1qlzb+kz7IF2WxL6Fq5DaundG8VO37BNgMkMTBwqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.4.0", + "conventional-changelog-conventionalcommits": "^9.1.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.4.0.tgz", + "integrity": "sha512-zShmKTF+sqyNOfAE0vKcqnpvVpG0YX8F9G/ZIQHI2CoKyK+PSdladXMSns400aZ5/QZs+0fN75B//3Q5CHw++w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.4.0", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure": { + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.4.1.tgz", + "integrity": "sha512-WLQqaFx1pBooiVvBrA1YfJNFqZF8wS/YGOtr5RzApDbV9tQ52qT5VkTsY65hFTnXhW8PcDfZLaknfJTmPejmlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.4.0", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-20.0.0.tgz", + "integrity": "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.4.0.tgz", + "integrity": "sha512-i3ki3WR0rgolFVX6r64poBHXM1t8qlFel1G1eCBvVgntE3fCJitmzSvH5JD/KVJN/snz6TfaX2CLdON7+s4WVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.4.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.4.1.tgz", + "integrity": "sha512-In5EO4JR1lNsAv1oOBBO24V9ND1IqdAJDKZiEpdfjDl2HMasAcT7oA+5BKONv1pRoLG380DGPE2W2RIcUwdgLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.4.0", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/lint": { + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.4.1.tgz", + "integrity": "sha512-g94LrGl/c6UhuhDQqNqU232aslLEN2vzc7MPfQTHzwzM4GHNnEAwVWWnh0zX8S5YXecuLXDwbCsoGwmpAgPWKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/is-ignored": "^20.4.1", + "@commitlint/parse": "^20.4.1", + "@commitlint/rules": "^20.4.1", + "@commitlint/types": "^20.4.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.4.0.tgz", + "integrity": "sha512-Dauup/GfjwffBXRJUdlX/YRKfSVXsXZLnINXKz0VZkXdKDcaEILAi9oflHGbfydonJnJAbXEbF3nXPm9rm3G6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^20.4.0", + "@commitlint/execute-rule": "^20.0.0", + "@commitlint/resolve-extends": "^20.4.0", + "@commitlint/types": "^20.4.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", + "is-plain-obj": "^4.1.0", + "lodash.mergewith": "^4.6.2", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/message": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.0.tgz", + "integrity": "sha512-B5lGtvHgiLAIsK5nLINzVW0bN5hXv+EW35sKhYHE8F7V9Uz1fR4tx3wt7mobA5UNhZKUNgB/+ldVMQE6IHZRyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/parse": { + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.4.1.tgz", + "integrity": "sha512-XNtZjeRcFuAfUnhYrCY02+mpxwY4OmnvD3ETbVPs25xJFFz1nRo/25nHj+5eM+zTeRFvWFwD4GXWU2JEtoK1/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.4.0", + "conventional-changelog-angular": "^8.1.0", + "conventional-commits-parser": "^6.2.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/read": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.4.0.tgz", + "integrity": "sha512-QfpFn6/I240ySEGv7YWqho4vxqtPpx40FS7kZZDjUJ+eHxu3azfhy7fFb5XzfTqVNp1hNoI3tEmiEPbDB44+cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/top-level": "^20.4.0", + "@commitlint/types": "^20.4.0", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8", + "tinyexec": "^1.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.4.0.tgz", + "integrity": "sha512-ay1KM8q0t+/OnlpqXJ+7gEFQNlUtSU5Gxr8GEwnVf2TPN3+ywc5DzL3JCxmpucqxfHBTFwfRMXxPRRnR5Ki20g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^20.4.0", + "@commitlint/types": "^20.4.0", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/rules": { + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.4.1.tgz", + "integrity": "sha512-WtqypKEPbQEuJwJS4aKs0OoJRBKz1HXPBC9wRtzVNH68FLhPWzxXlF09hpUXM9zdYTpm4vAdoTGkWiBgQ/vL0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/ensure": "^20.4.1", + "@commitlint/message": "^20.4.0", + "@commitlint/to-lines": "^20.0.0", + "@commitlint/types": "^20.4.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-20.0.0.tgz", + "integrity": "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.0.tgz", + "integrity": "sha512-NDzq8Q6jmFaIIBC/GG6n1OQEaHdmaAAYdrZRlMgW6glYWGZ+IeuXmiymDvQNXPc82mVxq2KiE3RVpcs+1OeDeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.4.0.tgz", + "integrity": "sha512-aO5l99BQJ0X34ft8b0h7QFkQlqxC6e7ZPVmBKz13xM9O8obDaM1Cld4sQlJDXXU/VFuUzQ30mVtHjVz74TuStw==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.2.1", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -4953,6 +5224,13 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, "node_modules/autoprefixer": { "version": "10.4.18", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", @@ -5687,6 +5965,17 @@ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -5850,6 +6139,48 @@ "node": ">= 0.6" } }, + "node_modules/conventional-changelog-angular": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.1.0.tgz", + "integrity": "sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.1.0.tgz", + "integrity": "sha512-MnbEysR8wWa8dAEvbj5xcBgJKQlX/m0lhS8DsyAAWDHdfs2faDJxTgzRYlRYpXSe7UiKrIIlB4TrBKU9q9DgkA==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-commits-parser": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.1.tgz", + "integrity": "sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^13.0.0" + }, + "bin": { + "conventional-commits-parser": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -5975,6 +6306,34 @@ } } }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.2.0.tgz", + "integrity": "sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jiti": "^2.6.1" + }, + "engines": { + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" + } + }, + "node_modules/cosmiconfig-typescript-loader/node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/cosmiconfig/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -6179,6 +6538,19 @@ "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", "dev": true }, + "node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/date-format": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", @@ -6370,6 +6742,19 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -6616,10 +7001,11 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -7173,6 +7559,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/git-raw-commits/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -7211,6 +7628,32 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -7656,6 +8099,17 @@ "node": ">=4" } }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -7862,6 +8316,16 @@ "node": ">=0.12.0" } }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", @@ -8619,12 +9083,54 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -8805,6 +9311,19 @@ "node": ">= 4.0.0" } }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -10004,9 +10523,10 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.1", @@ -11465,6 +11985,16 @@ "wbuf": "^1.7.3" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -11810,6 +12340,16 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", diff --git a/solthoth/package.json b/solthoth/package.json index febc141..e668608 100644 --- a/solthoth/package.json +++ b/solthoth/package.json @@ -32,6 +32,8 @@ "@angular-devkit/build-angular": "^17.3.0", "@angular/cli": "^17.3.0", "@angular/compiler-cli": "^17.3.0", + "@commitlint/cli": "^20.4.1", + "@commitlint/config-conventional": "^20.4.1", "@types/express": "^4.17.17", "@types/jasmine": "~5.1.0", "@types/node": "^18.18.0", @@ -43,4 +45,4 @@ "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.4.2" } -} \ No newline at end of file +} From 428f94de2a0b021502d6a303c2a86a7095f9b2e3 Mon Sep 17 00:00:00 2001 From: Carlos Barajas Date: Tue, 3 Feb 2026 01:44:24 +0000 Subject: [PATCH 03/10] ci: implement prettier commands and checks --- solthoth/.prettierignore | 14 ++++ solthoth/angular.json | 19 ++--- solthoth/package.json | 4 +- solthoth/server.ts | 9 ++- solthoth/src/app/app.component.css | 10 ++- solthoth/src/app/app.component.html | 22 +++++- solthoth/src/app/app.component.ts | 20 +++--- solthoth/src/app/app.config.server.ts | 4 +- solthoth/src/app/app.config.ts | 6 +- solthoth/src/app/app.routes.ts | 20 +++--- solthoth/src/app/home/home.component.css | 7 +- solthoth/src/app/home/home.component.html | 71 +++++++++++++------ solthoth/src/app/home/home.component.spec.ts | 7 +- solthoth/src/app/home/home.component.ts | 10 +-- .../job-detail/job-detail.component.spec.ts | 7 +- .../app/job-detail/job-detail.component.ts | 6 +- solthoth/src/app/job.service.ts | 11 ++- solthoth/src/app/job.ts | 16 ++--- solthoth/src/app/job/job.component.css | 16 +++-- solthoth/src/app/job/job.component.html | 8 ++- solthoth/src/app/job/job.component.spec.ts | 7 +- solthoth/src/app/job/job.component.ts | 2 +- solthoth/src/index.html | 30 ++++---- solthoth/src/main.ts | 5 +- solthoth/src/styles.css | 11 ++- solthoth/tsconfig.app.json | 14 +--- solthoth/tsconfig.json | 5 +- solthoth/tsconfig.spec.json | 9 +-- 28 files changed, 217 insertions(+), 153 deletions(-) create mode 100644 solthoth/.prettierignore diff --git a/solthoth/.prettierignore b/solthoth/.prettierignore new file mode 100644 index 0000000..24fa07d --- /dev/null +++ b/solthoth/.prettierignore @@ -0,0 +1,14 @@ +# Dependencies +node_modules +package-lock.json + +# Build outputs +dist +.angular + +# Coverage +coverage + +# Environment +.env +.env.* diff --git a/solthoth/angular.json b/solthoth/angular.json index a9e4d6b..3f817f1 100644 --- a/solthoth/angular.json +++ b/solthoth/angular.json @@ -16,14 +16,9 @@ "outputPath": "dist/solthoth", "index": "src/index.html", "browser": "src/main.ts", - "polyfills": [ - "zone.js" - ], + "polyfills": ["zone.js"], "tsConfig": "tsconfig.app.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], + "assets": ["src/favicon.ico", "src/assets"], "styles": [ "@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css" @@ -80,15 +75,9 @@ "test": { "builder": "@angular-devkit/build-angular:karma", "options": { - "polyfills": [ - "zone.js", - "zone.js/testing" - ], + "polyfills": ["zone.js", "zone.js/testing"], "tsConfig": "tsconfig.spec.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], + "assets": ["src/favicon.ico", "src/assets"], "styles": [ "@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css" diff --git a/solthoth/package.json b/solthoth/package.json index e668608..2f54708 100644 --- a/solthoth/package.json +++ b/solthoth/package.json @@ -7,7 +7,9 @@ "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test", - "serve:ssr:solthoth": "node dist/solthoth/server/server.mjs" + "serve:ssr:solthoth": "node dist/solthoth/server/server.mjs", + "format": "prettier --write \"**/*.{js,ts,json,css,scss,html,md}\"", + "format:check": "prettier --check \"**/*.{js,ts,json,css,scss,html,md}\"" }, "private": true, "dependencies": { diff --git a/solthoth/server.ts b/solthoth/server.ts index 7083b14..d90e342 100644 --- a/solthoth/server.ts +++ b/solthoth/server.ts @@ -20,9 +20,12 @@ export function app(): express.Express { // Example Express Rest API endpoints // server.get('/api/**', (req, res) => { }); // Serve static files from /browser - server.get('*.*', express.static(browserDistFolder, { - maxAge: '1y' - })); + server.get( + '*.*', + express.static(browserDistFolder, { + maxAge: '1y', + }), + ); // All regular routes use the Angular engine server.get('*', (req, res, next) => { diff --git a/solthoth/src/app/app.component.css b/solthoth/src/app/app.component.css index 7f75682..1ad91cf 100644 --- a/solthoth/src/app/app.component.css +++ b/solthoth/src/app/app.component.css @@ -12,13 +12,11 @@ --header-padding-top: clamp(var(--spacing-2xl), 8vw, var(--spacing-4xl)); --header-padding-inline: var(--spacing-lg); --header-padding-bottom: var(--spacing-lg); - padding: var(--header-padding-top) var(--header-padding-inline) var(--header-padding-bottom); + padding: var(--header-padding-top) var(--header-padding-inline) + var(--header-padding-bottom); padding-top: calc( - var(--header-padding-top) - + max( - env(safe-area-inset-top, 0px), - constant(safe-area-inset-top, 0px) - ) + var(--header-padding-top) + + max(env(safe-area-inset-top, 0px), constant(safe-area-inset-top, 0px)) ); overflow: visible; } diff --git a/solthoth/src/app/app.component.html b/solthoth/src/app/app.component.html index 355c43e..0f8a279 100644 --- a/solthoth/src/app/app.component.html +++ b/solthoth/src/app/app.component.html @@ -6,13 +6,29 @@ CB
Carlos Barajas - Site Reliability & Engineering Leadership + Site Reliability & Engineering Leadership
diff --git a/solthoth/src/app/app.component.ts b/solthoth/src/app/app.component.ts index 087cc0f..ea63c53 100644 --- a/solthoth/src/app/app.component.ts +++ b/solthoth/src/app/app.component.ts @@ -1,20 +1,22 @@ import { Component } from '@angular/core'; import { RouterModule } from '@angular/router'; -import {MatToolbarModule} from '@angular/material/toolbar'; -import {MatButtonModule} from '@angular/material/button'; -import {MatCardModule} from '@angular/material/card'; -import {MatTabsModule} from '@angular/material/tabs'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatTabsModule } from '@angular/material/tabs'; @Component({ selector: 'app-root', standalone: true, - imports: [RouterModule, - MatToolbarModule, - MatButtonModule, + imports: [ + RouterModule, + MatToolbarModule, + MatButtonModule, MatCardModule, - MatTabsModule], + MatTabsModule, + ], templateUrl: './app.component.html', - styleUrls: ['./app.component.css'] + styleUrls: ['./app.component.css'], }) export class AppComponent { title = 'solthoth'; diff --git a/solthoth/src/app/app.config.server.ts b/solthoth/src/app/app.config.server.ts index b4d57c9..1980cfe 100644 --- a/solthoth/src/app/app.config.server.ts +++ b/solthoth/src/app/app.config.server.ts @@ -3,9 +3,7 @@ import { provideServerRendering } from '@angular/platform-server'; import { appConfig } from './app.config'; const serverConfig: ApplicationConfig = { - providers: [ - provideServerRendering() - ] + providers: [provideServerRendering()], }; export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/solthoth/src/app/app.config.ts b/solthoth/src/app/app.config.ts index a32deb9..a5b922b 100644 --- a/solthoth/src/app/app.config.ts +++ b/solthoth/src/app/app.config.ts @@ -6,5 +6,9 @@ import { provideClientHydration } from '@angular/platform-browser'; import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; export const appConfig: ApplicationConfig = { - providers: [provideRouter(routes), provideClientHydration(), provideAnimationsAsync()] + providers: [ + provideRouter(routes), + provideClientHydration(), + provideAnimationsAsync(), + ], }; diff --git a/solthoth/src/app/app.routes.ts b/solthoth/src/app/app.routes.ts index 8b92569..7a630eb 100644 --- a/solthoth/src/app/app.routes.ts +++ b/solthoth/src/app/app.routes.ts @@ -3,14 +3,14 @@ import { HomeComponent } from './home/home.component'; import { JobDetailsComponent } from './job-detail/job-detail.component'; export const routes: Routes = [ - { - path:'', - title: 'SolThoth', - component: HomeComponent - }, - { - path: 'details/:id', - title: 'Details Page', - component: JobDetailsComponent - } + { + path: '', + title: 'SolThoth', + component: HomeComponent, + }, + { + path: 'details/:id', + title: 'Details Page', + component: JobDetailsComponent, + }, ]; diff --git a/solthoth/src/app/home/home.component.css b/solthoth/src/app/home/home.component.css index 9fcd44e..a4e612b 100644 --- a/solthoth/src/app/home/home.component.css +++ b/solthoth/src/app/home/home.component.css @@ -20,7 +20,12 @@ padding: var(--spacing-3xl); border-radius: var(--radius-lg); border: 1px solid var(--color-border); - background: linear-gradient(140deg, rgba(255, 255, 255, 0.98) 0%, rgba(219, 234, 254, 0.92) 40%, rgba(255, 255, 255, 0.95) 100%); + background: linear-gradient( + 140deg, + rgba(255, 255, 255, 0.98) 0%, + rgba(219, 234, 254, 0.92) 40%, + rgba(255, 255, 255, 0.95) 100% + ); box-shadow: var(--shadow-card); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); diff --git a/solthoth/src/app/home/home.component.html b/solthoth/src/app/home/home.component.html index 1ec027d..c7a1e4a 100644 --- a/solthoth/src/app/home/home.component.html +++ b/solthoth/src/app/home/home.component.html @@ -1,37 +1,59 @@
Hello World! 👋 -

Engineering resilient systems and empowering teams to deliver with confidence.

+

+ Engineering resilient systems and empowering teams to deliver with + confidence. +

- Welcome to my website. This is essentially my resume on the web—tailored so you can explore the type of - contributor or leader you need. Select the perspective that best fits the story you are looking for. + Welcome to my website. This is essentially my resume on the + web—tailored so you can explore the type of contributor or leader + you need. Select the perspective that best fits the story you are looking + for.

Operational Excellence -

Guide cross-functional teams to streamline delivery, reduce toil, and reinforce reliability practices.

+

+ Guide cross-functional teams to streamline delivery, reduce toil, and + reinforce reliability practices. +

Cloud Architecture -

Design secure, scalable AWS platforms while modernizing deployments, observability, and incident response.

+

+ Design secure, scalable AWS platforms while modernizing deployments, + observability, and incident response. +

People Leadership -

Coach engineers and partner with stakeholders to translate ambitious goals into sustainable execution.

+

+ Coach engineers and partner with stakeholders to translate ambitious + goals into sustainable execution. +

- +

Engineering Enthusiast

- Seasoned engineering professional with a robust background in leading cross-functional teams to achieve - operational excellence. Eager to transition into a Software Engineering role, leveraging comprehensive - expertise in software development across a range of technologies including Java, C#, Python, and Go. - Proficient in managing cloud infrastructure, implementing CI/CD pipelines, and ensuring system reliability - and security. Committed to driving innovation and delivering high-quality solutions. Seeking a challenging - opportunity to apply leadership experience and technical proficiency in software architecture and - development within a dynamic team environment. + Seasoned engineering professional with a robust background in + leading cross-functional teams to achieve operational excellence. + Eager to transition into a Software Engineering role, leveraging + comprehensive expertise in software development across a range of + technologies including Java, C#, Python, and Go. Proficient in + managing cloud infrastructure, implementing CI/CD pipelines, and + ensuring system reliability and security. Committed to driving + innovation and delivering high-quality solutions. Seeking a + challenging opportunity to apply leadership experience and technical + proficiency in software architecture and development within a + dynamic team environment.

@@ -39,12 +61,16 @@

Engineering Enthusiast

Engineering Leader

- I am seeking a leadership position where I can leverage my technical expertise, leadership skills, and - business acumen to drive organizational growth, streamline operations, foster a culture of continuous - improvement, and optimize software development and delivery processes. Committed to delivering innovative - solutions with cloud technologies, automation, and scalability to drive operational excellence and enable - seamless cloud deployments. Excited to contribute to the success of a forward-thinking organization through - strong architecture, DevOps practices, and people development. + I am seeking a leadership position where I can leverage my technical + expertise, leadership skills, and business acumen to drive + organizational growth, streamline operations, foster a culture of + continuous improvement, and optimize software development and + delivery processes. Committed to delivering innovative solutions + with cloud technologies, automation, and scalability to drive + operational excellence and enable seamless cloud deployments. + Excited to contribute to the success of a forward-thinking + organization through strong architecture, DevOps practices, and + people development.

@@ -55,7 +81,10 @@

Engineering Leader

Recent Experience

-

Highlights from roles spanning reliability engineering, security, and platform transformation.

+

+ Highlights from roles spanning reliability engineering, security, and + platform transformation. +

diff --git a/solthoth/src/app/home/home.component.spec.ts b/solthoth/src/app/home/home.component.spec.ts index 60c47c4..7737f1c 100644 --- a/solthoth/src/app/home/home.component.spec.ts +++ b/solthoth/src/app/home/home.component.spec.ts @@ -8,10 +8,9 @@ describe('HomeComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [HomeComponent] - }) - .compileComponents(); - + imports: [HomeComponent], + }).compileComponents(); + fixture = TestBed.createComponent(HomeComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/solthoth/src/app/home/home.component.ts b/solthoth/src/app/home/home.component.ts index 299f942..30ad812 100644 --- a/solthoth/src/app/home/home.component.ts +++ b/solthoth/src/app/home/home.component.ts @@ -1,21 +1,21 @@ import { Component, inject } from '@angular/core'; import { CommonModule } from '@angular/common'; -import {MatCardModule} from '@angular/material/card'; -import {MatTabsModule} from '@angular/material/tabs'; +import { MatCardModule } from '@angular/material/card'; +import { MatTabsModule } from '@angular/material/tabs'; import { JobComponent } from '../job/job.component'; import { JobService } from '../job.service'; -import { Job } from '../job' +import { Job } from '../job'; @Component({ selector: 'app-home', standalone: true, imports: [CommonModule, MatCardModule, MatTabsModule, JobComponent], templateUrl: './home.component.html', - styleUrl: './home.component.css' + styleUrl: './home.component.css', }) export class HomeComponent { homeJobList: Job[] = []; - jobService: JobService = inject(JobService) + jobService: JobService = inject(JobService); constructor() { this.homeJobList = this.jobService.getAllJobs(); } diff --git a/solthoth/src/app/job-detail/job-detail.component.spec.ts b/solthoth/src/app/job-detail/job-detail.component.spec.ts index 4dd2619..5100293 100644 --- a/solthoth/src/app/job-detail/job-detail.component.spec.ts +++ b/solthoth/src/app/job-detail/job-detail.component.spec.ts @@ -8,10 +8,9 @@ describe('JobDetailsComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [JobDetailsComponent] - }) - .compileComponents(); - + imports: [JobDetailsComponent], + }).compileComponents(); + fixture = TestBed.createComponent(JobDetailsComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/solthoth/src/app/job-detail/job-detail.component.ts b/solthoth/src/app/job-detail/job-detail.component.ts index e3e3e09..f194d98 100644 --- a/solthoth/src/app/job-detail/job-detail.component.ts +++ b/solthoth/src/app/job-detail/job-detail.component.ts @@ -5,8 +5,6 @@ import { Component } from '@angular/core'; standalone: true, imports: [], templateUrl: './job-detail.component.html', - styleUrl: './job-detail.component.css' + styleUrl: './job-detail.component.css', }) -export class JobDetailsComponent { - -} +export class JobDetailsComponent {} diff --git a/solthoth/src/app/job.service.ts b/solthoth/src/app/job.service.ts index 33a8b3d..10088da 100644 --- a/solthoth/src/app/job.service.ts +++ b/solthoth/src/app/job.service.ts @@ -2,10 +2,9 @@ import { Injectable } from '@angular/core'; import { Job } from './job'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class JobService { - protected jobList: Job[] = [ { id: 'edcbb4ab-4c8b-41db-856b-725a0580b595', @@ -113,7 +112,7 @@ export class JobService { 'Updated domain services per business requirements in C# using WCF and REST.', 'Updated front-end desktop applications written in C# using WPF and WinForms.', 'Added enhancements to CI/CD, reducing build and test times via multi- threading tests and NUnit.', - 'Help start the company\'s first DevOps team.', + "Help start the company's first DevOps team.", 'Maintained and upgraded CI/CD tools like TeamCity and Octopus Deploy.', 'Introduced configuration management using Puppet and PowerShell DSC. Create and provision new environments on-demand for performance testing.', 'Worked with technology leadership to review and explore new technology.', @@ -162,9 +161,9 @@ export class JobService { 'Develop consumer services for file (XML, ACH) inputs.', 'Work with stakeholders and gather requirements for project management team.', ], - } - ] - constructor() { } + }, + ]; + constructor() {} getAllJobs(): Job[] { return this.jobList; diff --git a/solthoth/src/app/job.ts b/solthoth/src/app/job.ts index 3def6fb..ba64522 100644 --- a/solthoth/src/app/job.ts +++ b/solthoth/src/app/job.ts @@ -1,10 +1,10 @@ export interface Job { - id: string, - title: string, - companyName: string, - companyLink: string, - dateRange: string, - internalRange: string, - achivements: string[], - details?: string[], + id: string; + title: string; + companyName: string; + companyLink: string; + dateRange: string; + internalRange: string; + achivements: string[]; + details?: string[]; } diff --git a/solthoth/src/app/job/job.component.css b/solthoth/src/app/job/job.component.css index 27efec4..c4944d1 100644 --- a/solthoth/src/app/job/job.component.css +++ b/solthoth/src/app/job/job.component.css @@ -15,11 +15,15 @@ } .job-card::before { - content: ''; + content: ""; position: absolute; inset: 0; border-radius: inherit; - background: linear-gradient(120deg, rgba(37, 99, 235, 0.12), rgba(99, 102, 241, 0.08)); + background: linear-gradient( + 120deg, + rgba(37, 99, 235, 0.12), + rgba(99, 102, 241, 0.08) + ); opacity: 0; transition: opacity 0.25s ease; pointer-events: none; @@ -90,14 +94,18 @@ } .job-card__list-item::before { - content: ''; + content: ""; position: absolute; left: 0; top: 10px; width: 10px; height: 10px; border-radius: 999px; - background: linear-gradient(135deg, var(--color-primary), var(--color-secondary)); + background: linear-gradient( + 135deg, + var(--color-primary), + var(--color-secondary) + ); box-shadow: 0 6px 12px -6px rgba(37, 99, 235, 0.6); } diff --git a/solthoth/src/app/job/job.component.html b/solthoth/src/app/job/job.component.html index ea48bb7..1a87ee1 100644 --- a/solthoth/src/app/job/job.component.html +++ b/solthoth/src/app/job/job.component.html @@ -3,7 +3,13 @@
{{ job.dateRange }}
diff --git a/solthoth/src/app/job/job.component.spec.ts b/solthoth/src/app/job/job.component.spec.ts index 5e9565e..7176fb7 100644 --- a/solthoth/src/app/job/job.component.spec.ts +++ b/solthoth/src/app/job/job.component.spec.ts @@ -8,10 +8,9 @@ describe('JobComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [JobComponent] - }) - .compileComponents(); - + imports: [JobComponent], + }).compileComponents(); + fixture = TestBed.createComponent(JobComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/solthoth/src/app/job/job.component.ts b/solthoth/src/app/job/job.component.ts index 6220357..755a2ea 100644 --- a/solthoth/src/app/job/job.component.ts +++ b/solthoth/src/app/job/job.component.ts @@ -9,7 +9,7 @@ import { RouterModule } from '@angular/router'; standalone: true, imports: [MatCardModule, RouterModule, CommonModule], templateUrl: './job.component.html', - styleUrl: './job.component.css' + styleUrl: './job.component.css', }) export class JobComponent { @Input() job!: Job; diff --git a/solthoth/src/index.html b/solthoth/src/index.html index 71e8f06..8f0895f 100644 --- a/solthoth/src/index.html +++ b/solthoth/src/index.html @@ -1,15 +1,21 @@ - - - Solthoth - - - - - - - - - + + + Solthoth + + + + + + + + + diff --git a/solthoth/src/main.ts b/solthoth/src/main.ts index 35b00f3..8882c45 100644 --- a/solthoth/src/main.ts +++ b/solthoth/src/main.ts @@ -2,5 +2,6 @@ import { bootstrapApplication } from '@angular/platform-browser'; import { appConfig } from './app/app.config'; import { AppComponent } from './app/app.component'; -bootstrapApplication(AppComponent, appConfig) - .catch((err) => console.error(err)); +bootstrapApplication(AppComponent, appConfig).catch((err) => + console.error(err), +); diff --git a/solthoth/src/styles.css b/solthoth/src/styles.css index 477138f..a657611 100644 --- a/solthoth/src/styles.css +++ b/solthoth/src/styles.css @@ -1,6 +1,6 @@ /* Global design tokens and base styles */ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); +@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"); :root { --layout-max-width: 960px; @@ -16,7 +16,12 @@ --spacing-4xl: 60px; --color-bg: #f5f7fb; - --color-bg-gradient: linear-gradient(165deg, #f8fbff 0%, #eef2ff 45%, #fdfcff 100%); + --color-bg-gradient: linear-gradient( + 165deg, + #f8fbff 0%, + #eef2ff 45%, + #fdfcff 100% + ); --color-surface: #ffffff; --color-surface-muted: rgba(255, 255, 255, 0.82); --color-surface-accent: rgba(37, 99, 235, 0.08); @@ -35,7 +40,7 @@ --radius-md: 16px; --radius-sm: 12px; - --font-display: 'Inter', Roboto, 'Helvetica Neue', sans-serif; + --font-display: "Inter", Roboto, "Helvetica Neue", sans-serif; } * { diff --git a/solthoth/tsconfig.app.json b/solthoth/tsconfig.app.json index 7dc7284..d4702ee 100644 --- a/solthoth/tsconfig.app.json +++ b/solthoth/tsconfig.app.json @@ -3,16 +3,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/app", - "types": [ - "node" - ] + "types": ["node"] }, - "files": [ - "src/main.ts", - "src/main.server.ts", - "server.ts" - ], - "include": [ - "src/**/*.d.ts" - ] + "files": ["src/main.ts", "src/main.server.ts", "server.ts"], + "include": ["src/**/*.d.ts"] } diff --git a/solthoth/tsconfig.json b/solthoth/tsconfig.json index f37b67f..fd2d87a 100644 --- a/solthoth/tsconfig.json +++ b/solthoth/tsconfig.json @@ -19,10 +19,7 @@ "target": "ES2022", "module": "ES2022", "useDefineForClassFields": false, - "lib": [ - "ES2022", - "dom" - ] + "lib": ["ES2022", "dom"] }, "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, diff --git a/solthoth/tsconfig.spec.json b/solthoth/tsconfig.spec.json index be7e9da..47e3dd7 100644 --- a/solthoth/tsconfig.spec.json +++ b/solthoth/tsconfig.spec.json @@ -3,12 +3,7 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] + "types": ["jasmine"] }, - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] } From decdf8a0937f64abfc7893340f8430112c98b02c Mon Sep 17 00:00:00 2001 From: Carlos Barajas Date: Tue, 3 Feb 2026 01:44:38 +0000 Subject: [PATCH 04/10] ci: implement prettier commands and checks #2 --- .github/workflows/ci.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1c76778..63eaed1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -23,6 +23,24 @@ jobs: if: github.event_name == 'push' run: npx commitlint --from HEAD~1 --to HEAD --verbose + prettier: + runs-on: ubuntu-latest + env: + working-directory: ./solthoth + defaults: + run: + working-directory: ${{ env.working-directory }} + steps: + - uses: actions/checkout@v4 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install dependencies + run: npm ci + - name: Check code formatting with Prettier + run: npm run format:check + build: runs-on: ubuntu-latest env: From e4420b16cb1a2d4259cf5609aee00fdbb6b7584f Mon Sep 17 00:00:00 2001 From: Carlos Barajas Date: Tue, 3 Feb 2026 01:45:31 +0000 Subject: [PATCH 05/10] ci: remove deploy step --- .github/workflows/ci.yaml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 63eaed1..b27a0e1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -63,20 +63,3 @@ jobs: name: browser_profile_ftp path: ${{ github.workspace }}/solthoth/dist/solthoth/browser/ if-no-files-found: error - deploy: - runs-on: ubuntu-latest - needs: build - if: github.ref == 'refs/heads/main' - steps: - - name: Download browser files - uses: actions/download-artifact@v4 - with: - name: browser_profile_ftp - # https://github.com/marketplace/actions/ftp-deploy - - name: FTP Deploy - uses: SamKirkland/FTP-Deploy-Action@v4.3.5 - with: - server: ${{ env.FTP_SERVER }} - username: ${{ env.FTP_USERNAME }} - password: ${{ secrets.FTP_PASSWORD }} - protocol: ftps From c7c11c08a081bbfdd9aa8fa1f17fc7f7639092ef Mon Sep 17 00:00:00 2001 From: Carlos Barajas Date: Tue, 3 Feb 2026 02:49:45 +0000 Subject: [PATCH 06/10] build: setup pr generation script with ollama --- .claude/settings.local.json | 5 ++ .devcontainer/devcontainer.json | 73 ++++++++++++++--------- .devcontainer/post-start.sh | 14 +++++ .gitignore | 5 ++ scripts/pr-create-draft.sh | 19 ++++++ scripts/pr-draft-ai.sh | 101 ++++++++++++++++++++++++++++++++ 6 files changed, 189 insertions(+), 28 deletions(-) create mode 100644 .claude/settings.local.json create mode 100755 .devcontainer/post-start.sh create mode 100755 scripts/pr-create-draft.sh create mode 100755 scripts/pr-draft-ai.sh diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..58d0b57 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,5 @@ +{ + "permissions": { + "allow": ["Bash(npm install:*)", "Bash(pre-commit install:*)"] + } +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index aebf0be..92ab5d3 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,37 +1,54 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the // README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node { - "name": "Node.js & TypeScript", - // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bullseye", + "name": "Node.js & TypeScript", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bullseye", - // Features to add to the dev container. More info: https://containers.dev/features. - "features": { - "ghcr.io/devcontainers-extra/features/angular-cli:2": {}, - "ghcr.io/devcontainers-community/npm-features/prettier:1": {}, - "ghcr.io/devcontainers-extra/features/pre-commit:2": {}, - "ghcr.io/devcontainers/features/azure-cli:1": {} - }, + "mounts": [ + "source=/run/host-services/ssh-auth.sock,target=/ssh-agent,type=bind" + ], - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], + "containerEnv": { + "SSH_AUTH_SOCK": "/ssh-agent" + }, - // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "cd solthoth && npm install", + // Features to add to the dev container. More info: https://containers.dev/features. + "features": { + "ghcr.io/devcontainers-extra/features/apt-packages:1": { + "packages": "zstd" + }, + "ghcr.io/devcontainers-extra/features/angular-cli:2": {}, + "ghcr.io/devcontainers-community/npm-features/prettier:1": {}, + "ghcr.io/devcontainers-extra/features/pre-commit:2": {}, + "ghcr.io/devcontainers/features/azure-cli:1": {}, + "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/github-cli:1": {}, + "ghcr.io/prulloac/devcontainer-features/ollama:1": { + "pull": "llama3.1" + } + }, - // Configure tool-specific properties. - "customizations": { - "vscode": { - "extensions": [ - "tal7aouy.icons", - "angular.ng-template", - "ms-azuretools.vscode-docker", - "motivesoft.vscode-uuid-generator", - "anthropic.claude-code" - ] - } - }, + // Use 'forwardPorts' to make a list of ports inside the container available locally. + "forwardPorts": [11434], - // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. - // "remoteUser": "root" + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "cd solthoth && npm install", + "postStartCommand": ".devcontainer/post-start.sh", + + // Configure tool-specific properties. + "customizations": { + "vscode": { + "extensions": [ + "tal7aouy.icons", + "angular.ng-template", + "ms-azuretools.vscode-docker", + "motivesoft.vscode-uuid-generator", + "anthropic.claude-code" + ] + } + } + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" } diff --git a/.devcontainer/post-start.sh b/.devcontainer/post-start.sh new file mode 100755 index 0000000..adf119f --- /dev/null +++ b/.devcontainer/post-start.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -euo pipefail + +export OLLAMA_HOST="${OLLAMA_HOST:-0.0.0.0:11434}" + +# If already running, don't start another copy +if pgrep -x ollama >/dev/null 2>&1; then + echo "ollama already running" + exit 0 +fi + +# Start in background with logs +nohup ollama serve > /tmp/ollama.log 2>&1 & +echo "ollama started (logs: /tmp/ollama.log)" \ No newline at end of file diff --git a/.gitignore b/.gitignore index d2fee34..9dc1b98 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +# Custom Files +.DS_Store +PR_TITLE.txt +PR.md + # Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,angular # Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,angular diff --git a/scripts/pr-create-draft.sh b/scripts/pr-create-draft.sh new file mode 100755 index 0000000..5a70ded --- /dev/null +++ b/scripts/pr-create-draft.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -euo pipefail + +BASE_BRANCH="${BASE_BRANCH:-main}" + +if [[ ! -f PR_TITLE.txt || ! -f PR.md ]]; then + echo "Missing PR_TITLE.txt or PR.md. Run scripts/pr-draft-ai.sh first." + exit 1 +fi + +title="$(cat PR_TITLE.txt)" +head_branch="$(git rev-parse --abbrev-ref HEAD)" + +gh pr create \ + --base "$BASE_BRANCH" \ + --head "$head_branch" \ + --title "$title" \ + --body-file PR.md \ + --draft \ No newline at end of file diff --git a/scripts/pr-draft-ai.sh b/scripts/pr-draft-ai.sh new file mode 100755 index 0000000..fb6a54d --- /dev/null +++ b/scripts/pr-draft-ai.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env bash +set -euo pipefail + +MODEL="${MODEL:-llama3.1}" +BASE_BRANCH="${BASE_BRANCH:-main}" +MAX_DIFF_CHARS="${MAX_DIFF_CHARS:-180000}" + +branch="$(git rev-parse --abbrev-ref HEAD)" +if [[ "$branch" == "HEAD" ]]; then + echo "Detached HEAD. Checkout a branch first." + exit 1 +fi + +git fetch -q origin "$BASE_BRANCH" || true + +diff="$(git diff --no-color "origin/$BASE_BRANCH...HEAD")" +commits="$(git log --oneline "origin/$BASE_BRANCH..HEAD" || true)" +files="$(git diff --name-status "origin/$BASE_BRANCH...HEAD")" + +if [[ -z "${diff// }" ]]; then + echo "No diff found against origin/$BASE_BRANCH...HEAD" + exit 1 +fi + +# Trim very large diffs +if (( ${#diff} > MAX_DIFF_CHARS )); then + diff="${diff:0:MAX_DIFF_CHARS}\n\n[TRUNCATED DIFF: exceeded ${MAX_DIFF_CHARS} chars]" +fi + +prompt=$( +cat <<'EOF' +You are writing a GitHub Pull Request for the changes provided. + +OUTPUT EXACTLY TWO SECTIONS in this order: + +TITLE: +BODY: + + +TITLE rules (commitlint / Conventional Commits): +- Format: type(scope): summary OR type: summary +- type must be one of: feat, fix, chore, docs, refactor, test, ci, build, perf, style +- scope (optional): choose a short scope based on the area changed. For a frontend app, prefer: + ui, routing, i18n, forms, auth, api, state, components, styles, deps, config, build, ci, infra +- summary: imperative, present tense, <= 72 chars, no period. +- Do NOT invent ticket numbers or claim tests were run if unknown. + +BODY rules: +Use Markdown with headings: + +## Summary +- 2–6 bullets describing what changed and why + +## Testing +- What you tested locally / in CI +- If you did not run tests, say so explicitly + +## Risk / Rollback +- 1–3 bullets for risk +- Clear rollback steps + +## Notes for reviewers +- Call out key files/areas +- Mention follow-ups/known limitations + +Be accurate. Use specifics from diff/commits. No hallucinations. +EOF +) + +input=$( +cat < PR_TITLE.txt +echo "$body" > PR.md + +echo "✅ Generated PR_TITLE.txt and PR.md" +echo "👉 Review/edit them, then run: scripts/pr-create-draft.sh" \ No newline at end of file From 3d7485840da8729e4f700a10235106cef93c0d15 Mon Sep 17 00:00:00 2001 From: Carlos Barajas Date: Tue, 3 Feb 2026 03:47:36 +0000 Subject: [PATCH 07/10] fix: ci jobs --- .claude/settings.local.json | 7 ++++++- .github/workflows/ci.yaml | 16 +++++++--------- solthoth/package.json | 1 + solthoth/src/index.html | 4 ++++ solthoth/src/styles.css | 2 -- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 58d0b57..1eda3d9 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,5 +1,10 @@ { "permissions": { - "allow": ["Bash(npm install:*)", "Bash(pre-commit install:*)"] + "allow": [ + "Bash(npm install:*)", + "Bash(pre-commit install:*)", + "Bash(gh run list:*)", + "Bash(gh run view:*)" + ] } } diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b27a0e1..e57fb84 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -4,6 +4,11 @@ on: [push, pull_request] jobs: commitlint: runs-on: ubuntu-latest + env: + working-directory: ./solthoth + defaults: + run: + working-directory: ${{ env.working-directory }} steps: - uses: actions/checkout@v4 with: @@ -13,9 +18,7 @@ jobs: with: node-version: 20 - name: Install commitlint dependencies - run: | - cd solthoth - npm ci + run: npm ci - name: Validate PR commits with commitlint if: github.event_name == 'pull_request' run: npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose @@ -43,6 +46,7 @@ jobs: build: runs-on: ubuntu-latest + needs: [commitlint, prettier] env: working-directory: ./solthoth defaults: @@ -57,9 +61,3 @@ jobs: - run: npm ci # - run: npm run test:headless - run: npm run build - - name: Upload browser files - uses: actions/upload-artifact@v4 - with: - name: browser_profile_ftp - path: ${{ github.workspace }}/solthoth/dist/solthoth/browser/ - if-no-files-found: error diff --git a/solthoth/package.json b/solthoth/package.json index 2f54708..0edec9c 100644 --- a/solthoth/package.json +++ b/solthoth/package.json @@ -45,6 +45,7 @@ "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", + "prettier": "^3.2.5", "typescript": "~5.4.2" } } diff --git a/solthoth/src/index.html b/solthoth/src/index.html index 8f0895f..f01e60a 100644 --- a/solthoth/src/index.html +++ b/solthoth/src/index.html @@ -6,6 +6,10 @@ + Date: Tue, 3 Feb 2026 03:50:07 +0000 Subject: [PATCH 08/10] build: update package-lock --- solthoth/package-lock.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/solthoth/package-lock.json b/solthoth/package-lock.json index 339b86f..20e54fc 100644 --- a/solthoth/package-lock.json +++ b/solthoth/package-lock.json @@ -40,6 +40,7 @@ "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", + "prettier": "^3.2.5", "typescript": "~5.4.2" } }, @@ -10786,6 +10787,22 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", From 9145012a05ca65e9bbb6bf57fc87492ebb0077a2 Mon Sep 17 00:00:00 2001 From: Carlos Barajas Date: Tue, 3 Feb 2026 03:55:41 +0000 Subject: [PATCH 09/10] fix: move commitlint config --- solthoth/commitlint.config.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 solthoth/commitlint.config.js diff --git a/solthoth/commitlint.config.js b/solthoth/commitlint.config.js new file mode 100644 index 0000000..39d70d3 --- /dev/null +++ b/solthoth/commitlint.config.js @@ -0,0 +1,27 @@ +module.exports = { + extends: ["@commitlint/config-conventional"], + rules: { + "type-enum": [ + 2, + "always", + [ + "feat", // New feature + "fix", // Bug fix + "docs", // Documentation changes + "style", // Code style changes (formatting, semicolons, etc.) + "refactor", // Code refactoring + "perf", // Performance improvements + "test", // Adding or updating tests + "build", // Build system or dependency changes + "ci", // CI configuration changes + "chore", // Other changes that don't modify src or test files + "revert", // Revert a previous commit + ], + ], + "type-case": [2, "always", "lower-case"], + "type-empty": [2, "never"], + "subject-empty": [2, "never"], + "subject-full-stop": [2, "never", "."], + "header-max-length": [2, "always", 100], + }, +}; From 5b620d4851ea5a60ea0281a779a7b03f7610d3d3 Mon Sep 17 00:00:00 2001 From: Carlos Barajas Date: Tue, 3 Feb 2026 04:05:21 +0000 Subject: [PATCH 10/10] fix(css): adjust budget size --- .claude/settings.local.json | 3 ++- solthoth/angular.json | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 1eda3d9..424d541 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -4,7 +4,8 @@ "Bash(npm install:*)", "Bash(pre-commit install:*)", "Bash(gh run list:*)", - "Bash(gh run view:*)" + "Bash(gh run view:*)", + "Bash(npm run build:*)" ] } } diff --git a/solthoth/angular.json b/solthoth/angular.json index 3f817f1..8b59b54 100644 --- a/solthoth/angular.json +++ b/solthoth/angular.json @@ -35,13 +35,13 @@ "budgets": [ { "type": "initial", - "maximumWarning": "500kb", + "maximumWarning": "600kb", "maximumError": "1mb" }, { "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" + "maximumWarning": "4kb", + "maximumError": "8kb" } ], "outputHashing": "all"