[PR #1733] [MERGED] feat: blueprint ui on dashboard #1199

Closed
opened 2025-11-13 12:20:19 -06:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/fosrl/pangolin/pull/1733
Author: @Fredkiss3
Created: 10/22/2025
Status: Merged
Merged: 10/30/2025
Merged by: @oschwartz10612

Base: devHead: feat-blueprint-ui-on-dashboard


📝 Commits (10+)

  • 3633e02 🔨 run next server with turbopack (easy win)
  • 5fd104b 🗃️ add bluePrintRuns model
  • ba74558 🎨 format with prettier
  • d84ee3d 🌐 add blueprint section title in the sidebar in messages (en-US for now)
  • e575fae 🚧 SQLite database schema with modes (is it okay ?)
  • 202d207 🚧 add blueprint to the sidebar and scaffold page
  • 6521b66 🍱 add jsonschema for blueprint yaml validation
  • 9024b2a 🗃️ finish db schemas for blueprints
  • 259cea1 add API endpoint for listing blueprints
  • a5b48ab 🚧 blueprints page

📊 Changes

45 files changed (+1695 additions, -142 deletions)

View changed files

docker-compose.drizzle.yml (+15 -0)
📝 docker-compose.pgr.yml (+1 -1)
📝 messages/en-US.json (+19 -0)
📝 next.config.mjs (+2 -1)
📝 package-lock.json (+114 -0)
📝 package.json (+6 -0)
📝 server/auth/actions.ts (+2 -1)
📝 server/db/pg/schema/schema.ts (+17 -2)
📝 server/db/sqlite/driver.ts (+7 -2)
📝 server/db/sqlite/schema/schema.ts (+18 -0)
📝 server/lib/blueprints/applyBlueprint.ts (+59 -11)
📝 server/lib/blueprints/applyNewtDockerBlueprint.ts (+6 -1)
📝 server/nextServer.ts (+1 -1)
📝 server/openApi.ts (+2 -1)
📝 server/routers/blueprints/applyJSONBlueprint.ts (+9 -23)
server/routers/blueprints/applyYAMLBlueprint.ts (+146 -0)
server/routers/blueprints/getBlueprint.ts (+110 -0)
server/routers/blueprints/index.ts (+4 -0)
server/routers/blueprints/listBlueprints.ts (+144 -0)
server/routers/blueprints/types.ts (+7 -0)

...and 25 more files

📄 Description

Community Contribution License Agreement

By creating this pull request, I grant the project maintainers an unlimited,
perpetual license to use, modify, and redistribute these contributions under any terms they
choose, including both the AGPLv3 and the Fossorial Commercial license terms. I
represent that I have the right to grant this license for all contributed content.

Description

Main changes:

  • Implemented the ability to apply blueprints from the UI (screenshots attached below)
  • Implemented saving of blueprints runs in the database, wether they are triggered from newt, API or the UI
  • Updated the existing applyBlueprint function to save the result of a blueprint run in the database, to not break the existing the logic, the blueprint json contents is parsed to yaml when saving its content in the database, and a name is generated with faker if not provided

Other changes:

  • Added a topbar navigation for feedback when you navigate across pages (screenshots below)
  • Renamed applyBlueprint from the integration API to applyJSONBlueprint and put all the blueprint API endpoints into blueprints/ folder
  • Added logging for SQL queries for debugging in development for sqlite driver
  • Added turbopack to the next server start script for faster compile time in DEV
  • Added an openapi Tag for Blueprints
  • Proposed a change to the way cache(getOrg) is called, the current way it's done doesn't cache (or technically deduplicate) anything, it's just executing the function everytime it's caleld. cache needs to be declared on the top level to actually deduplicate function calls, this way the function getOrg only gets executed once if called at multiple places during the processing of a request
    c7df70143e/src/app/%5BorgId%5D/settings/domains/page.tsx (L41)
    c7df70143e/src/lib/api/getCachedOrg.ts (L1-L12)
  • Added a custom not-found.tsx page at the settings layout level to not hide the sidebar if there is a 404.
  • Updated the button component to accept asChild (asChild require only a single child component)
  • Fixed an alignment UI bug where the header wouldn't be aligned with table rows

Warning

You might notice formatting changes across files, I applied prettier with the existing .prettierrc config file in the repo. It's applied on save, so the formatting changes are caused by when I visit the file then hit save.

Screenshots

- -
List blueprint Screenshot 2025-10-25 at 02 54 22
Create blueprint Screenshot 2025-10-25 at 03 22 17
Blueprint details Screenshot 2025-10-28 at 00 14 01
Top loader navigation
------ ------
Header misaligned image
Header alignment fixed image (1)

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/fosrl/pangolin/pull/1733 **Author:** [@Fredkiss3](https://github.com/Fredkiss3) **Created:** 10/22/2025 **Status:** ✅ Merged **Merged:** 10/30/2025 **Merged by:** [@oschwartz10612](https://github.com/oschwartz10612) **Base:** `dev` ← **Head:** `feat-blueprint-ui-on-dashboard` --- ### 📝 Commits (10+) - [`3633e02`](https://github.com/fosrl/pangolin/commit/3633e02ff770ff7509a3d8c45b3829133e13e011) 🔨 run next server with turbopack (easy win) - [`5fd104b`](https://github.com/fosrl/pangolin/commit/5fd104bb30c285091803828bea6fc45943769d2f) 🗃️ add `bluePrintRuns` model - [`ba74558`](https://github.com/fosrl/pangolin/commit/ba745588e9457ea8dc2fd1d277f33c18958fbf10) 🎨 format with prettier - [`d84ee3d`](https://github.com/fosrl/pangolin/commit/d84ee3d03d45c8abfce341562e83317306035f8b) 🌐 add blueprint section title in the sidebar in messages (`en-US` for now) - [`e575fae`](https://github.com/fosrl/pangolin/commit/e575fae73b835a25a9a88f0fcf0dfc23ac04cdeb) 🚧 SQLite database schema with modes (is it okay ?) - [`202d207`](https://github.com/fosrl/pangolin/commit/202d2075a692fdb9db6dc8884767f39404dd4ae7) 🚧 add blueprint to the sidebar and scaffold page - [`6521b66`](https://github.com/fosrl/pangolin/commit/6521b66b7cbb141770384eb0a770c30a1872dec6) 🍱 add jsonschema for blueprint yaml validation - [`9024b2a`](https://github.com/fosrl/pangolin/commit/9024b2a974fdf2e032f44446c09446d565e5a3c2) 🗃️ finish db schemas for blueprints - [`259cea1`](https://github.com/fosrl/pangolin/commit/259cea1c42efe748bd3c0aa800598d7e35fb9b14) ✨ add API endpoint for listing blueprints - [`a5b48ab`](https://github.com/fosrl/pangolin/commit/a5b48ab3924f48a914b12e6ed51056f0480ca693) 🚧 blueprints page ### 📊 Changes **45 files changed** (+1695 additions, -142 deletions) <details> <summary>View changed files</summary> ➕ `docker-compose.drizzle.yml` (+15 -0) 📝 `docker-compose.pgr.yml` (+1 -1) 📝 `messages/en-US.json` (+19 -0) 📝 `next.config.mjs` (+2 -1) 📝 `package-lock.json` (+114 -0) 📝 `package.json` (+6 -0) 📝 `server/auth/actions.ts` (+2 -1) 📝 `server/db/pg/schema/schema.ts` (+17 -2) 📝 `server/db/sqlite/driver.ts` (+7 -2) 📝 `server/db/sqlite/schema/schema.ts` (+18 -0) 📝 `server/lib/blueprints/applyBlueprint.ts` (+59 -11) 📝 `server/lib/blueprints/applyNewtDockerBlueprint.ts` (+6 -1) 📝 `server/nextServer.ts` (+1 -1) 📝 `server/openApi.ts` (+2 -1) 📝 `server/routers/blueprints/applyJSONBlueprint.ts` (+9 -23) ➕ `server/routers/blueprints/applyYAMLBlueprint.ts` (+146 -0) ➕ `server/routers/blueprints/getBlueprint.ts` (+110 -0) ➕ `server/routers/blueprints/index.ts` (+4 -0) ➕ `server/routers/blueprints/listBlueprints.ts` (+144 -0) ➕ `server/routers/blueprints/types.ts` (+7 -0) _...and 25 more files_ </details> ### 📄 Description ## Community Contribution License Agreement By creating this pull request, I grant the project maintainers an unlimited, perpetual license to use, modify, and redistribute these contributions under any terms they choose, including both the AGPLv3 and the Fossorial Commercial license terms. I represent that I have the right to grant this license for all contributed content. ## Description **Main changes:** - Implemented the ability to apply blueprints from the UI (screenshots attached below) - Implemented saving of blueprints runs in the database, wether they are triggered from newt, API or the UI - Updated the existing `applyBlueprint` function to save the result of a blueprint run in the database, to not break the existing the logic, the blueprint json contents is parsed to yaml when saving its content in the database, and a name is generated with [faker](https://fakerjs.dev/api/word.html#adjective) if not provided **Other changes:** - Added a topbar navigation for feedback when you navigate across pages (screenshots below) - Renamed `applyBlueprint` from the integration API to `applyJSONBlueprint` and put all the blueprint API endpoints into `blueprints/` folder - Added logging for SQL queries for debugging in `development` for sqlite driver - Added turbopack to the next server start script for faster compile time in DEV - Added an openapi Tag for Blueprints - Proposed a change to the way `cache(getOrg)` is called, the current way it's done doesn't cache (or technically deduplicate) anything, it's just executing the function everytime it's caleld. `cache` needs to be declared on the top level to actually deduplicate function calls, this way the function `getOrg` only gets executed once if called at multiple places during the processing of a request https://github.com/Fredkiss3/pangolin/blob/c7df70143e65b45fb5dfb10c75f7cbe4a436b097/src/app/%5BorgId%5D/settings/domains/page.tsx#L41 https://github.com/Fredkiss3/pangolin/blob/c7df70143e65b45fb5dfb10c75f7cbe4a436b097/src/lib/api/getCachedOrg.ts#L1-L12 - Added a custom `not-found.tsx` page at the settings layout level to not hide the sidebar if there is a 404. - Updated the button component to accept `asChild` (`asChild` require only a single child component) - Fixed an alignment UI bug where the header wouldn't be aligned with table rows > [!WARNING] > You might notice formatting changes across files, I applied prettier with the existing `.prettierrc` config file in the repo. It's applied on save, so the formatting changes are caused by when I visit the file then hit save. ## Screenshots | - | - | | ------ | ------ | | List blueprint | <img width="3248" height="2120" alt="Screenshot 2025-10-25 at 02 54 22" src="https://github.com/user-attachments/assets/77c20ba8-ff3b-40b6-af52-cc8bfd93ba4e" /> | | Create blueprint | <img width="3248" height="2120" alt="Screenshot 2025-10-25 at 03 22 17" src="https://github.com/user-attachments/assets/4123b43f-02c4-4b22-953f-c9a0b2766365" /> | | Blueprint details | <img width="3248" height="2120" alt="Screenshot 2025-10-28 at 00 14 01" src="https://github.com/user-attachments/assets/ce38e851-874c-43a3-8d64-3c781505c050" /> | | Top loader navigation | <video src="https://github.com/user-attachments/assets/d86591c3-b051-4166-a35a-497831cb3711"></video> | | ------ | ------ | | Header misaligned | <img width="2106" height="720" alt="image" src="https://github.com/user-attachments/assets/ec957d46-ffc8-447d-8b44-c9199dd1c650" /> | | Header alignment fixed | <img width="2130" height="722" alt="image (1)" src="https://github.com/user-attachments/assets/3d3c4df3-e915-4fc9-8b1c-db1f770cbb48" /> | --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2025-11-13 12:20:19 -06:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/pangolin#1199