From 04df14cd5534a9cc58d4db29b1e2f2b1a47bb5ee Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Sun, 16 Nov 2025 19:09:40 +0100 Subject: [PATCH 01/31] =?UTF-8?q?feat:=20=E2=9C=A8=20Add=20privacy=20secti?= =?UTF-8?q?on=20including=20imprint=20and=20privacy=20policy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.mts | 7 ++++ imprint.md | 25 ++++++++++++++ privacy.md | 76 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 imprint.md create mode 100644 privacy.md diff --git a/.vitepress/config.mts b/.vitepress/config.mts index b8b7d45..188f1aa 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -18,6 +18,13 @@ export default defineConfig({ { text: 'Markdown Examples', link: '/markdown-examples' }, { text: 'Runtime API Examples', link: '/api-examples' } ] + }, + { + text: 'Legal', + items: [ + { text: 'Imprint', link: '/imprint' }, + { text: 'Privacy', link: '/privacy' } + ] } ], diff --git a/imprint.md b/imprint.md new file mode 100644 index 0000000..9dfdcb5 --- /dev/null +++ b/imprint.md @@ -0,0 +1,25 @@ +# Imprint + +## Information pursuant to ยง 5 ECG (Austrian E-Commerce Act) + +**Content responsibility:** +Martin Haberfellner + +**Contact:** +Email: void@neoncode.systems + +--- + +## Disclaimer + +### Liability for Content + +The contents of this website have been created with the greatest care. However, no guarantee can be given for the accuracy, completeness and timeliness of the content. + +### Liability for Links + +This website contains links to external third-party websites over whose content we have no influence. Therefore, we cannot assume any liability for this external content. The respective provider or operator of the linked pages is always responsible for the content of the linked pages. + +### Copyright + +The content and works created by the site operators on these pages are subject to Austrian copyright law. Duplication, processing, distribution and any form of commercialization of such material beyond the scope of the copyright law require the prior written consent of its respective author or creator. diff --git a/privacy.md b/privacy.md new file mode 100644 index 0000000..da6ba6f --- /dev/null +++ b/privacy.md @@ -0,0 +1,76 @@ +# Privacy Policy + +## General + +This privacy policy explains the type, scope and purpose of the processing of personal data (hereinafter referred to as "data") within our online offering and the associated websites, functions and content (hereinafter collectively referred to as "online offering"). + +**Data Controller:** +Martin Haberfellner +Email: void@neoncode.systems + +## Hosting and Server Logs + +This website is hosted on **Cloudflare Pages**. + +Every time you access this website, the following data is stored in server log files: +- IP address of the accessing computer +- Date and time of access +- Name and URL of the retrieved file +- Amount of data transferred +- Message about successful retrieval (HTTP status code) +- Browser type and version +- Operating system +- Referrer URL (previously visited page) + +This data is used exclusively to ensure trouble-free operation of the site and to improve our offering. It does not allow any conclusions to be drawn about your person. + +**Legal basis:** Legitimate interest (Art. 6 para. 1 lit. f GDPR) in providing a functional website. + +**Storage period:** The data is deleted as soon as it is no longer required for the purpose for which it was collected. This is usually after 7 days. + +**Hosting Provider:** +Cloudflare, Inc. +101 Townsend St. +San Francisco, CA 94107, USA + +Cloudflare is certified under the EU-US Data Privacy Framework. + +More information about Cloudflare's privacy policy: +https://www.cloudflare.com/privacypolicy/ + +## Cookies + +This website does **not use cookies**. + +## Contact + +When you contact us by email, the data you provide (email address, name if applicable, and other voluntary information) will be stored by us in order to process your request. + +**Legal basis:** Consent (Art. 6 para. 1 lit. a GDPR) or legitimate interest in responding to your request (Art. 6 para. 1 lit. f GDPR). + +**Storage period:** This data will be deleted as soon as it is no longer required for the purpose for which it was collected, or if you request deletion. + +## Your Rights + +You have the following rights with regard to personal data concerning you: + +- Right of access (Art. 15 GDPR) +- Right to rectification (Art. 16 GDPR) +- Right to erasure (Art. 17 GDPR) +- Right to restriction of processing (Art. 18 GDPR) +- Right to data portability (Art. 20 GDPR) +- Right to object (Art. 21 GDPR) +- Right to lodge a complaint with a supervisory authority (Art. 77 GDPR) + +**Austrian Data Protection Authority:** +Barichgasse 40-42 +1030 Vienna, Austria +Phone: +43 1 52 152-0 +Email: dsb@dsb.gv.at +Web: https://www.dsb.gv.at/ + +## Changes to this Privacy Policy + +We reserve the right to adapt this privacy policy so that it always complies with current legal requirements or to implement changes to our services in the privacy policy. + +**Last updated:** November 2025 From d8ffd7816503e3eac64b58fe4ce2dd690d9cc17f Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Sun, 16 Nov 2025 19:11:55 +0100 Subject: [PATCH 02/31] =?UTF-8?q?feat:=20=E2=9C=A8=20Add=20github=20and=20?= =?UTF-8?q?linked=20social=20links?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.mts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 188f1aa..58c48be 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -29,7 +29,8 @@ export default defineConfig({ ], socialLinks: [ - { icon: 'github', link: 'https://github.com/vuejs/vitepress' } + { icon: 'github', link: 'https://github.com/evilru/neoncode.systems' }, + { icon: 'linkedin', link: 'https://www.linkedin.com/in/martin-haberfellner-b3119515a/' } ] } }) From f935ef1aaa94b3c26455b360a500efcb60e851eb Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Tue, 16 Dec 2025 12:14:47 +0100 Subject: [PATCH 03/31] =?UTF-8?q?chore:=20=F0=9F=93=9D=20Add=20proto.labs,?= =?UTF-8?q?=20prompt.forge=20and=20license?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.mts | 23 ++++++++++++++++------- LICENSE.md | 17 +++++++++++++++++ index.md | 22 +++++++++++----------- prompt.forge/index.md | 1 + proto.labs/index.md | 1 + 5 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 LICENSE.md create mode 100644 prompt.forge/index.md create mode 100644 proto.labs/index.md diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 58c48be..6d90288 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -7,27 +7,36 @@ export default defineConfig({ themeConfig: { // https://vitepress.dev/reference/default-theme-config nav: [ - { text: 'Home', link: '/' }, - { text: 'Examples', link: '/markdown-examples' } + { text: '//proto.labs', link: '/proto.labs/index.md' }, + { text: '//prompt.forge', link: '/prompt.forge/index.md' } ], sidebar: [ { - text: 'Examples', + text: 'Navigation', items: [ - { text: 'Markdown Examples', link: '/markdown-examples' }, - { text: 'Runtime API Examples', link: '/api-examples' } + { text: '//proto.labs', link: '/proto.labs/index.md' }, + { text: '//prompt.forge', link: '/prompt.forge/index.md' } ] }, { text: 'Legal', items: [ - { text: 'Imprint', link: '/imprint' }, - { text: 'Privacy', link: '/privacy' } + { text: 'Imprint', link: '/imprint.md' }, + { text: 'Privacy', link: '/privacy.md' }, + { text: 'License', link: 'LICENSE.md' } ] } ], + lastUpdated: { + text: 'Last updated', + formatOptions: { + dateStyle: 'short', + timeStyle: 'short' + } + }, + socialLinks: [ { icon: 'github', link: 'https://github.com/evilru/neoncode.systems' }, { icon: 'linkedin', link: 'https://www.linkedin.com/in/martin-haberfellner-b3119515a/' } diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..8ed37b8 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,17 @@ +# License + +Copyright © 2025 Martin Haberfellner + +All rights reserved. + +This work is provided for viewing and reference purposes only. + +You may not use, copy, modify, or distribute this work without explicit permission from the copyright holder. + +You may link to and reference this work with attribution. + +--- + +EXCEPTIONS: + +Some subdirectories may contain their own LICENSE files which take precedence over this license for content within those directories. diff --git a/index.md b/index.md index c86ff8b..98c4138 100644 --- a/index.md +++ b/index.md @@ -5,22 +5,22 @@ layout: home hero: name: "NEONCODE!" text: "//neoncode.systems" - tagline: My great project tagline + tagline: Making systems visible actions: - theme: brand - text: Markdown Examples - link: /markdown-examples + text: Explore //proto.labs + link: /proto.labs/ - theme: alt - text: API Examples - link: /api-examples + text: Browse //prompt.forge + link: /prompt.forge features: - - title: Feature A - details: Lorem ipsum dolor sit amet, consectetur adipiscing elit - - title: Feature B - details: Lorem ipsum dolor sit amet, consectetur adipiscing elit - - title: Feature C - details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: What This Is + details: A space for building AI-powered tools and learning in public. //proto.labs for experiments & proof-of-concepts. + - title: Who + details: Martin Haberfellner โ€” Organizational Systems Engineer. Building the invisible infrastructure that makes teams work. + - title: Why + details: Because the best systems go unseen. --- + + + + diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index def4cfc..d739fd4 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -2,16 +2,22 @@ import { h } from 'vue' import type { Theme } from 'vitepress' import DefaultTheme from 'vitepress/theme' +import VersionBadge from './components/VersionBadge.vue' import './style.css' +// Read version once at module level +const APP_VERSION = `v${import.meta.env.VITE_APP_VERSION || 'dev'}` + export default { extends: DefaultTheme, Layout: () => { return h(DefaultTheme.Layout, null, { // https://vitepress.dev/guide/extending-default-theme#layout-slots + 'nav-bar-content-before': () => h(VersionBadge, { version: APP_VERSION }) }) }, enhanceApp({ app, router, siteData }) { - // ... + // Provide version globally for any component to use + app.config.globalProperties.$version = APP_VERSION } } satisfies Theme diff --git a/index.md b/index.md index 98c4138..4193138 100644 --- a/index.md +++ b/index.md @@ -22,9 +22,3 @@ features: - title: Why details: Because the best systems go unseen. --- - - - -[v{{ appVersion }}](./version.md) diff --git a/version.md b/version.md index 60670c1..48ab666 100644 --- a/version.md +++ b/version.md @@ -1,8 +1,11 @@ -# Version v{{ appVersion }} +# Version {{ version }} * [CHANGELOG](./CHANGELOG.md) * [RELEASE_NOTES](./RELEASE_NOTES.md) From eea233ddb348ee1cba4d160e5f95c52ca79c83df Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 02:25:51 +0100 Subject: [PATCH 14/31] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Correct=20API=20que?= =?UTF-8?q?ry=20parameter=20from=20'environment'=20to=20'env'=20in=20Cloud?= =?UTF-8?q?flare=20housekeeping=20workflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/cf-housekeeping.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cf-housekeeping.yml b/.github/workflows/cf-housekeeping.yml index 58d5920..448939a 100644 --- a/.github/workflows/cf-housekeeping.yml +++ b/.github/workflows/cf-housekeeping.yml @@ -19,7 +19,7 @@ jobs: keep="${entry##*:}" echo "Processing environment: $env (keep last $keep deployments)" - deployments=$(curl -sS -H "Authorization: Bearer $API_TOKEN" "$API_URL?environment=$env") + deployments=$(curl -sS -H "Authorization: Bearer $API_TOKEN" "$API_URL?env=$env") if ! echo "$deployments" | jq -e '.success == true' >/dev/null 2>&1; then echo "Cloudflare API error for env $env:" echo "$deployments" | jq '.errors, .messages' || echo "$deployments" From cd234cf1f6ecd828dc947ed3059a1a2e8ecec086 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 02:29:29 +0100 Subject: [PATCH 15/31] =?UTF-8?q?ci:=20=F0=9F=91=B7=20Add=20comment=20to?= =?UTF-8?q?=20clarify=20force=20deletion=20option=20in=20Cloudflare=20hous?= =?UTF-8?q?ekeeping=20workflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/cf-housekeeping.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cf-housekeeping.yml b/.github/workflows/cf-housekeeping.yml index 448939a..97e0945 100644 --- a/.github/workflows/cf-housekeeping.yml +++ b/.github/workflows/cf-housekeeping.yml @@ -35,7 +35,7 @@ jobs: for deployment in $deployment_ids; do if [ -n "$deployment" ]; then echo "Deleting $env deployment $deployment" - del=$(curl -sS -w "\n%{http_code}" -X DELETE -H "Authorization: Bearer $API_TOKEN" "$API_URL/$deployment") + del=$(curl -sS -w "\n%{http_code}" -X DELETE -H "Authorization: Bearer $API_TOKEN" "$API_URL/$deployment") # add ?force=true to delete even if active code=$(echo "$del" | tail -n1) body=$(echo "$del" | sed '$d') if [ "$code" -ge 400 ]; then From 8ea6791ec87d1c3a4ea45574704025ef3742dcda Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 02:40:22 +0100 Subject: [PATCH 16/31] chore(release): v0.2.0-basis-setup.16 [skip ci] --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ RELEASE_NOTES.md | 35 ++++++++++++++++++----------------- package.json | 2 +- 3 files changed, 45 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b5e9e0..a4a35fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Changelog +## [0.2.0-basis-setup.16] - 2025-12-17 + +### ๐Ÿš€ Features + +- โœจ Add privacy section including imprint and privacy policy +- โœจ Add github and linked social links +- โœจ Add AI agent instructions and VSCode settings for commit message generation +- โœจ Add discovery sessions section for content exploration and documentation +- โœจ Add content concept document outlining project structure and experiment details +- โœจ Enhance prompt.forge and proto.labs documentation with detailed experiment descriptions and participation guidelines +- โœจ Add discovery session workflow and GitHub templates for prompt-forge repository +- โœจ Revise privacy policy for clarity and compliance with GDPR +- โœจ Update VitePress configuration with footer and sidebar structure +- โœจ Enhance VitePress configuration with meta tags, search provider, and edit link +- โœจ Exclude discovery folder from source processing in VitePress configuration +- โœจ Add VersionBadge component and integrate version display in layout + +### ๐Ÿ› Bug Fixes + +- ๐Ÿ› Correct API query parameter from 'environment' to 'env' in Cloudflare housekeeping workflow + +### โš™๏ธ Miscellaneous Tasks + +- ๐Ÿ“ Add proto.labs, prompt.forge and license +- ๐Ÿ“ Simplify conventional commits section in copilot instructions +- ๐Ÿ‘ท Add comment to clarify force deletion option in Cloudflare housekeeping workflow ## [0.1.1] - 2025-11-05 ### โš™๏ธ Miscellaneous Tasks diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ec05aad..e1cdb87 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -13,23 +13,24 @@ features, implementation, and supporting infrastructure. ### New Features -- Automated versioning using Taskfile.yml: - - The Taskfile provides automatic version management, tagging, - changelog, and release note generation for every build and release. -- Version display and linking in documentation: - - index.md now shows the current version and provides a direct link to - the version details in the footer. - - version.md is prepared to explain the automatic versioning process - for future reference. -- Continuous integration and deployment pipeline: - - main.yml defines the GitHub Actions workflow for building, - versioning, releasing, and deploying the documentation site. -- Automated housekeeping for deployments: - - cf-housekeeping.yml cleans up old Cloudflare deployments, keeping - only the most recent production and preview builds. +- Automated versioning using Taskfile.yml: + - The Taskfile provides automatic version management, tagging, + changelog, and release note generation for every build and + release. +- Version display and linking in documentation: + - index.md now shows the current version and provides a direct + link to the version details in the footer. + - version.md is prepared to explain the automatic versioning + process for future reference. +- Continuous integration and deployment pipeline: + - main.yml defines the GitHub Actions workflow for building, + versioning, releasing, and deploying the documentation site. +- Automated housekeeping for deployments: + - cf-housekeeping.yml cleans up old Cloudflare deployments, + keeping only the most recent production and preview builds. ### Other Notes -- Documentation and automation are designed for easy future extension. - See version.md for details on how versioning is automated and how the - workflow can be adapted for new requirements. +- Documentation and automation are designed for easy future extension. + See version.md for details on how versioning is automated and how + the workflow can be adapted for new requirements. diff --git a/package.json b/package.json index 1705a45..a89b19e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.1", + "version": "0.2.0-basis-setup.16", "devDependencies": { "vitepress": "^1.6.4", "vue": "^3.5.22" From e4a3f156358bb3924880580a06032b3b205c4967 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 02:49:29 +0100 Subject: [PATCH 17/31] =?UTF-8?q?docs:=20=F0=9F=93=9D=20Add=20release=20no?= =?UTF-8?q?tes=20for=20proto.labs,=20prompt.forge=20and=20the=20version=20?= =?UTF-8?q?badge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tforge-and-protolabs-3e485a9ee4c05d64.yaml | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml diff --git a/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml b/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml new file mode 100644 index 0000000..267e181 --- /dev/null +++ b/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml @@ -0,0 +1,55 @@ +--- +prelude: > + This release introduces the core content and structure for neoncode.systems, + establishing the experimental workshop concept with two main sections: + proto.labs for experimental projects and prompt.forge for the + prompt engineering experiment. The site now includes comprehensive documentation, + a discovery workflow for content development, and enhanced SEO optimization. +features: + - | + Added proto.labs experimental workshop section with detailed description + of the prompt engineering methodology and invitation for community + participation. + - | + Added prompt.forge section documenting the Jobs-to-be-Done prompt generator + experiment, including complete user journey (11 steps), community voting + mechanism, and FAQ. + - | + Implemented discovery session workflow with three-stage folder structure + (exploring/ready/implemented) for content concept development and documentation + lifecycle management. + - | + Added VersionBadge Vue component displaying current version in navigation bar + with link to version page, reading from VITE_APP_VERSION environment variable. + - | + Enhanced VitePress configuration with comprehensive SEO meta tags (Open Graph, + Twitter Cards), local search provider, GitHub edit links, and custom footer + with legal links and "Human ๐Ÿค AI collaboration" message. + - | + Added GitHub templates for prompt-forge repository including README structure, + issue templates for job submission, and participation guidelines. + - | + Implemented GDPR-compliant privacy policy with Cloudflare-specific details + (hosting, analytics, DDoS protection, security cookies). + - | + Added imprint page with legal contact information and regulatory compliance + details. + - | + Configured AI agent instructions for content development workflow and + conventional commit message generation. +fixes: + - | + Fixed Cloudflare Pages housekeeping workflow to use correct API query + parameter 'env' instead of 'environment' for deployment filtering. + - | + Added comment about force=true parameter for deployment deletion API calls to handle + aliased production deployments correctly. +other: + - | + Excluded discovery folder from VitePress source processing to keep + work-in-progress content private. + - | + Added social links for GitHub repository and LinkedIn profile. + - | + Configured sidebar navigation structure for proto.labs and prompt.forge + sections with overview pages. From 41a1a75da33f083281aa04e5424a48b2febb4af7 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 03:22:00 +0100 Subject: [PATCH 18/31] =?UTF-8?q?chore:=20=F0=9F=9A=9A=20Move=20legal=20do?= =?UTF-8?q?cuments=20and=20update=20navigation=20for=20improved=20accessib?= =?UTF-8?q?ility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.mts | 38 +++++++++++++------- .vitepress/theme/components/VersionBadge.vue | 2 +- imprint.md => legal/imprint.md | 0 privacy.md => legal/privacy.md | 0 4 files changed, 26 insertions(+), 14 deletions(-) rename imprint.md => legal/imprint.md (100%) rename privacy.md => legal/privacy.md (100%) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index f3f5181..14ff7c9 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -21,7 +21,11 @@ export default defineConfig({ ['link', { rel: 'canonical', href: 'https://neoncode.systems/' }], ['link', { rel: 'icon', href: '/favicon.ico' }] ], - + rewrites: { + 'LICENSE.md': 'legal/license.md', + 'CHANGELOG.md': 'version/changelog.md', + 'RELEASE_NOTES.md': 'version/releasenotes.md' + }, themeConfig: { // https://vitepress.dev/reference/default-theme-config @@ -38,7 +42,6 @@ export default defineConfig({ level: [2, 3], label: 'On this page' }, - nav: [ { text: '//proto.labs', link: '/proto.labs/index.md' }, { text: '//prompt.forge', link: '/prompt.forge/index.md' }, @@ -53,19 +56,28 @@ export default defineConfig({ ], footer: { message: 'Human ๐Ÿค AI collaboration', - copyright: '© 2025 Martin Haberfellner ยท All Rights Reserved | Imprint | Privacy | License' + copyright: '© 2025 Martin Haberfellner ยท All Rights Reserved | Imprint | Privacy | License' }, sidebar: { - // '/': [ - // { - // text: 'Legal', - // items: [ - // { text: 'Imprint', link: '/imprint.md' }, - // { text: 'Privacy', link: '/privacy.md' }, - // { text: 'License', link: '/LICENSE.md' } - // ] - // } - // ], + '/version': [ + { + text: 'Version', + items: [ + { text: 'Release Notes', link: '/version/releasenotes.md' }, + { text: 'Changelog', link: '/version/changelog.md' } + ] + } + ], + '/legal/': [ + { + text: 'Legal', + items: [ + { text: 'Imprint', link: '/legal/imprint.md' }, + { text: 'Privacy', link: '/legal/privacy.md' }, + { text: 'License', link: '/legal/license.md' } + ] + } + ], '/proto.labs/': [ { text: '//proto.labs', diff --git a/.vitepress/theme/components/VersionBadge.vue b/.vitepress/theme/components/VersionBadge.vue index 7e3f655..868efbf 100644 --- a/.vitepress/theme/components/VersionBadge.vue +++ b/.vitepress/theme/components/VersionBadge.vue @@ -7,7 +7,7 @@ defineProps<{ diff --git a/imprint.md b/legal/imprint.md similarity index 100% rename from imprint.md rename to legal/imprint.md diff --git a/privacy.md b/legal/privacy.md similarity index 100% rename from privacy.md rename to legal/privacy.md From e117615cefd3040f0f20a57f21a414583f29f3c5 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 03:30:12 +0100 Subject: [PATCH 19/31] =?UTF-8?q?chore:=20=F0=9F=93=9D=20Remove=20redundan?= =?UTF-8?q?t=20formatting=20and=20clean=20up=20markdown=20in=20prompt.forg?= =?UTF-8?q?e=20and=20proto.labs=20overview?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prompt.forge/index.md | 15 +-------------- proto.labs/index.md | 4 ---- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/prompt.forge/index.md b/prompt.forge/index.md index fdb39a7..b711d5c 100644 --- a/prompt.forge/index.md +++ b/prompt.forge/index.md @@ -1,6 +1,6 @@ # \/\/prompt.forge -**A living laboratory for testing WSPL through Job-to-be-Done prompts.** +A living laboratory for testing WSPL through Job-to-be-Done prompts. ## The Experiment @@ -11,24 +11,17 @@ That's exactly what we're doing here. 1. **Start with a Job-to-be-Done Interview** Use our guided interview prompt with your AI (ChatGPT, Claude, or any major LLM) to document what you're trying to accomplish. - 2. **Get Your Baseline Prompt** The interview automatically generates a working prompt tailored to your job โ€“ this is your baseline version. - 3. **Submit to GitHub** Share your Job-to-be-Done documentation and baseline prompt via a GitHub issue. - 4. **Community Votes** (if needed) When multiple submissions come in, the community votes on which jobs to tackle first. - 5. **WSPL Version Created** I'll create an alternative version using WSPL methodology. - 6. **Compare & Vote** Test both prompts with your AI. Vote on which works better for you โ€“ subjectively, honestly. ---- - ## Why This Matters This isn't about proving WSPL is "better" โ€“ it's about learning: @@ -39,8 +32,6 @@ This isn't about proving WSPL is "better" โ€“ it's about learning: You become part of the research process. Your feedback directly shapes the evolution of WSPL. ---- - ## Get Started ### Ready to Participate? @@ -61,16 +52,12 @@ Head to the GitHub repository to: - 10-15 minutes for the interview - Curiosity about what makes prompts work ---- - ## The Collection All prompts created through this experiment will be collected in the repository โ€“ both baseline and WSPL versions. Think of it as a snapshot library of different prompt writing approaches applied to real problems. **Note:** This is experimental research, not a maintained tool library. Prompts are optimized for learning, not long-term production use. ---- - ## Questions? This is open, collaborative research. If something's unclear, open an issue on GitHub or reach out directly. diff --git a/proto.labs/index.md b/proto.labs/index.md index 622a959..7569c68 100644 --- a/proto.labs/index.md +++ b/proto.labs/index.md @@ -14,8 +14,6 @@ Prompts written with WSPL are designed to be more resilient, adaptable, and effe **How you can participate:** Head over to [//prompt.forge](/prompt.forge/) to see WSPL in action and join the experiment. ---- - ## Philosophy This is not a portfolio of polished products โ€“ it's a laboratory. @@ -27,8 +25,6 @@ Experiments here are: Think of this as open research. Snapshots of exploration, not production tools. ---- - ## Get Involved Interested in experimenting together? Check out the active experiments above, explore the repositories, and join the conversation on GitHub. From 9d32f49d8245e0bc56a0f13af11e44a9e2955577 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 03:42:27 +0100 Subject: [PATCH 20/31] =?UTF-8?q?feat:=20=E2=9C=A8=20Enable=20external=20l?= =?UTF-8?q?ink=20icon=20in=20theme=20configuration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.mts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 14ff7c9..9b12410 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -28,7 +28,7 @@ export default defineConfig({ }, themeConfig: { // https://vitepress.dev/reference/default-theme-config - + externalLinkIcon: true, search: { provider: 'local' }, From 73b95f550d51f937d4413b5c30fe6ca1c101ac73 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 03:53:55 +0100 Subject: [PATCH 21/31] =?UTF-8?q?feat:=20=E2=9C=A8=20Add=20site=20title=20?= =?UTF-8?q?to=20theme=20configuration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.mts | 1 + 1 file changed, 1 insertion(+) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 9b12410..d89902e 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -28,6 +28,7 @@ export default defineConfig({ }, themeConfig: { // https://vitepress.dev/reference/default-theme-config + siteTitle: 'NC!', externalLinkIcon: true, search: { provider: 'local' From f22aa1cca7f77705873f77c40de000d53e863cb7 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 03:55:15 +0100 Subject: [PATCH 22/31] =?UTF-8?q?doc:=20=F0=9F=93=9D=20Add=20SiteTitle=20a?= =?UTF-8?q?nd=20title=20config=20to=20the=20releasenotes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml b/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml index 267e181..cd06ed9 100644 --- a/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml +++ b/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml @@ -25,6 +25,9 @@ features: Enhanced VitePress configuration with comprehensive SEO meta tags (Open Graph, Twitter Cards), local search provider, GitHub edit links, and custom footer with legal links and "Human ๐Ÿค AI collaboration" message. + - | + Configured separate site title for navigation (NC!) and browser title + (NEONCODE!) using siteTitle in theme config. - | Added GitHub templates for prompt-forge repository including README structure, issue templates for job submission, and participation guidelines. From 53ad276e7c8e35e55038b85f6488b26d58316444 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 11:45:02 +0100 Subject: [PATCH 23/31] =?UTF-8?q?feat:=20=E2=9C=A8=20Update=20prompt.forge?= =?UTF-8?q?,=20protolabs=20and=20relnotes=20=20for=20WSPL=20methodology=20?= =?UTF-8?q?and=20prompt=20engineering=20experiment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prompt.forge/index.md | 21 +++++++++++-------- proto.labs/index.md | 10 ++++----- ...tforge-and-protolabs-3e485a9ee4c05d64.yaml | 10 ++++----- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/prompt.forge/index.md b/prompt.forge/index.md index b711d5c..2e2bdec 100644 --- a/prompt.forge/index.md +++ b/prompt.forge/index.md @@ -1,11 +1,12 @@ # \/\/prompt.forge -A living laboratory for testing WSPL through Job-to-be-Done prompts. +A living laboratory for testing [WSPL](/proto.labs/) (my method for prompt design) through Job-to-be-Done prompts. ## The Experiment -What if we could compare two approaches to prompt writing side-by-side? -That's exactly what we're doing here. +For me, WSPL prompts work exceptionally well. Through this experiment, you help me test whether that's true for others too. + +Here's how it works โ€“ comparing two approaches to prompt writing side-by-side: ### How It Works @@ -18,19 +19,21 @@ That's exactly what we're doing here. 4. **Community Votes** (if needed) When multiple submissions come in, the community votes on which jobs to tackle first. 5. **WSPL Version Created** - I'll create an alternative version using WSPL methodology. + I'll create an alternative version using WSPL. 6. **Compare & Vote** Test both prompts with your AI. Vote on which works better for you โ€“ subjectively, honestly. ## Why This Matters -This isn't about proving WSPL is "better" โ€“ it's about learning: +Your feedback helps answer the question: Do WSPL prompts work exceptionally well for others too? + +Through this experiment, you: -- Where does WSPL excel? -- Where does it need refinement? -- What patterns emerge from real-world usage? +- Test real-world prompts in your own context +- Share what works (and what doesn't) +- Help shape the evolution of the method -You become part of the research process. Your feedback directly shapes the evolution of WSPL. +This is open research. Your experience matters. ## Get Started diff --git a/proto.labs/index.md b/proto.labs/index.md index 7569c68..12b0106 100644 --- a/proto.labs/index.md +++ b/proto.labs/index.md @@ -4,15 +4,13 @@ Welcome to my experimental workshop โ€“ a space where ideas take shape, get test ## Current Experiments -### WSPL: A New Approach to Prompt Writing +### WSPL: My Method for Prompt Design -I'm developing and testing **WSPL** (Writing System for Prompt Language) โ€“ a methodology for crafting AI prompts that work differently than conventional approaches. Rather than explaining the theory, I'm proving it through practice. +WSPL โ€“ my method for prompt design, developed through practice. -**What makes it different?** -Prompts written with WSPL are designed to be more resilient, adaptable, and effective across different AI models. +For me, they work exceptionally well. Through [//prompt.forge](/prompt.forge/), I'm testing whether that's true for others too. -**How you can participate:** -Head over to [//prompt.forge](/prompt.forge/) to see WSPL in action and join the experiment. +See it in action. Join the experiment. ## Philosophy diff --git a/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml b/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml index cd06ed9..9d819a6 100644 --- a/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml +++ b/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml @@ -7,13 +7,13 @@ prelude: > a discovery workflow for content development, and enhanced SEO optimization. features: - | - Added proto.labs experimental workshop section with detailed description - of the prompt engineering methodology and invitation for community - participation. + Added proto.labs experimental workshop section introducing WSPL (my method + for prompt design, developed through practice) with invitation for community + participation through prompt.forge experiment. - | Added prompt.forge section documenting the Jobs-to-be-Done prompt generator - experiment, including complete user journey (11 steps), community voting - mechanism, and FAQ. + experiment for testing WSPL methodology, including complete user journey + (11 steps), community voting mechanism, and FAQ. - | Implemented discovery session workflow with three-stage folder structure (exploring/ready/implemented) for content concept development and documentation From 3c98ccb5d4ba3f234b408238f1aaa9d585d52ddb Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Wed, 17 Dec 2025 11:55:25 +0100 Subject: [PATCH 24/31] =?UTF-8?q?chore:=20=F0=9F=93=9D=20Update=20.gitigno?= =?UTF-8?q?re=20to=20include=20discovery?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 98f5eaf..1528cd8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ +discovery node_modules .vitepress/dist .vitepress/cache -.env \ No newline at end of file +.env From 8416e92634cbfc4033128590ac8d1ca8e39cd011 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Sat, 20 Dec 2025 14:54:07 +0100 Subject: [PATCH 25/31] =?UTF-8?q?refactor:=20=F0=9F=92=AC=20Update=20text?= =?UTF-8?q?=20shown=20on=20homepage=20to=20reflect=20the=20vision?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 4193138..27494a8 100644 --- a/index.md +++ b/index.md @@ -16,9 +16,9 @@ hero: features: - title: What This Is - details: A space for building AI-powered tools and learning in public. //proto.labs for experiments & proof-of-concepts. + details: Experiments. Currently focused on AI. Learning in public. - title: Who details: Martin Haberfellner โ€” Organizational Systems Engineer. Building the invisible infrastructure that makes teams work. - title: Why - details: Because the best systems go unseen. + details: Because the best systems go unnoticed. --- From 5991b2fcf2c1b8314fb90e396c75e8a0e2c4f966 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Sat, 20 Dec 2025 14:54:44 +0100 Subject: [PATCH 26/31] =?UTF-8?q?docs:=20=F0=9F=93=9D=20Add=20Readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..791c430 --- /dev/null +++ b/README.md @@ -0,0 +1,134 @@ +# neoncode.systems + +Portfolio website. Built with VitePress. Automated everything. Public because transparency tools should be transparent. + +**๐ŸŒ Live:** [neoncode.systems](https://neoncode.systems) + +--- + +## Features + +- **Semantic Versioning** - Automated via GitVersion based on git history +- **Changelog** - Auto-generated from conventional commits via git-cliff +- **Release Notes** - Structured release documentation via reno +- **Task Runner** - Streamlined workflows with Taskfile +- **CI/CD** - Automated build, version, and deploy pipeline +- **Environment Management** - Separate preview and production deployments +- **Automated Housekeeping** - Deployment cleanup and management + +## Tech Stack + +- **[VitePress](https://vitepress.dev/)** - Vue-powered static site generator +- **[Taskfile](https://taskfile.dev/)** - Modern task runner for project automation +- **[GitVersion](https://gitversion.net/)** - Semantic versioning from git history (Docker-based) +- **[git-cliff](https://git-cliff.org/)** - Changelog generator from conventional commits +- **[reno](https://docs.openstack.org/reno/)** - Release notes management +- **[pandoc](https://pandoc.org/)** - Document conversion for release notes +- **[Cloudflare Pages](https://pages.cloudflare.com/)** - Modern hosting and CDN +- **[GitHub Actions](https://github.com/features/actions)** - CI/CD automation +- **[pnpm](https://pnpm.io/)** - Fast, disk space efficient package manager + +## Getting Started + +### Prerequisites + +- **Node.js** 22+ +- **pnpm** 10+ +- **Task** ([installation](https://taskfile.dev/installation/)) +- **Docker** (for GitVersion) +- **Python** with pip (for reno and git-cliff) +- **pandoc** ([installation](https://pandoc.org/installing.html)) + +### Installation + +```bash +# Clone the repository +git clone https://github.com/yourusername/neoncode.systems.git +cd neoncode.systems + +# Install dependencies +pnpm install + +# Install Python tools +pip install reno git-cliff + +# Start development server +task dev +``` + +### Development + +```bash +task dev # Start dev server at http://localhost:5173 +task preview # Preview production build +task build # Build with changelog and release notes +task release # Full release (use PUSH=true to push to remote) +``` + +## How It Works + +### Semantic Versioning + +Version numbers are calculated automatically using **GitVersion** based on git history and conventional commits. The version follows the TrunkBased workflow pattern: + +- Feature branches: `0.x.0-branch.n` +- Main branch: `0.x.0` + +Version is exposed via `VITE_APP_VERSION` environment variable and accessible in components through `import.meta.env.VITE_APP_VERSION`. + +### Changelog Generation + +**git-cliff** generates `CHANGELOG.md` from conventional commit messages: + +```bash +# Commit format +type(scope): description + +# Types: feat, fix, docs, style, refactor, test, chore +``` + +The changelog is automatically generated during build and includes all commits categorized by type. + +### Release Notes + +**reno** manages structured release notes stored in `releasenotes/notes/*.yaml`. Each note can contain: + +- `prelude` - Introduction and overview +- `features` - New features and capabilities +- `fixes` - Bug fixes and corrections +- `other` - Additional notes + +Release notes are converted from RST to Markdown via pandoc with custom filters. + +### CI/CD Pipeline + +**Build Process:** + +1. **GitVersion** calculates semantic version from git history +2. Temporary git tag created (`v{VERSION}`) +3. **git-cliff** generates changelog +4. **reno** generates release notes (converted via pandoc) +5. Temporary tag removed +6. **VitePress** builds static site with version injected +7. Artifacts uploaded for deployment + +**Deployment Flow:** + +- **Push to any branch** โ†’ Build + Preview deployment +- **Push to main** โ†’ Build + Version bump + Tag + Production deployment + [GitHub Release](https://github.com/evilru/neoncode.systems/releases/) + +**Environments:** + +- [`preview`](https://github.com/evilru/neoncode.systems/deployments/preview) - Feature branches and non-main branches +- [`production`](https://github.com/evilru/neoncode.systems/deployments/production) - Main branch only + +### Automated Housekeeping + +A separate workflow manages Cloudflare deployment cleanup, maintaining organization and preventing deployment sprawl. + +--- + +**Martin Haberfellner** | Organizational Systems Engineer + +Human ๐Ÿค AI collaboration + From b70b6ca45b1743d8904a0bf9b12267899b7bf88d Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Sat, 20 Dec 2025 14:57:31 +0100 Subject: [PATCH 27/31] =?UTF-8?q?docs:=20=F0=9F=93=9D=20Add=20Readme=20to?= =?UTF-8?q?=20Release=20Notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml b/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml index 9d819a6..4149ba4 100644 --- a/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml +++ b/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml @@ -40,6 +40,11 @@ features: - | Configured AI agent instructions for content development workflow and conventional commit message generation. + - | + Added comprehensive README.md documenting project structure, tech stack, + development workflow, and complete setup guide including semantic versioning + automation, changelog generation, release notes management, and CI/CD pipeline + with GitHub Releases and environment deployments. fixes: - | Fixed Cloudflare Pages housekeeping workflow to use correct API query From 3bae54c01377bad5fca3a405cb6365364406b110 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Tue, 17 Feb 2026 17:53:10 +0100 Subject: [PATCH 28/31] =?UTF-8?q?docs:=20=F0=9F=93=9D=20Update=20link=20to?= =?UTF-8?q?=20the=20jobs=20to=20be=20done=20prompt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prompt.forge/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prompt.forge/index.md b/prompt.forge/index.md index 2e2bdec..2a7ebfc 100644 --- a/prompt.forge/index.md +++ b/prompt.forge/index.md @@ -39,7 +39,7 @@ This is open research. Your experience matters. ### Ready to Participate? -**โ†’ [Get the Job-to-be-Done Interview Prompt](https://github.com/neoncode-systems/prompt-forge)** +**โ†’ [Get the Job-to-be-Done Interview Prompt](https://github.com/evilru/prompt.forge)** Head to the GitHub repository to: From b540c8222f869758ff294c4b5978abee0e816f9c Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Tue, 17 Feb 2026 18:08:34 +0100 Subject: [PATCH 29/31] =?UTF-8?q?docs:=20=F0=9F=93=9D=20Remove=20AI=20noti?= =?UTF-8?q?ce=20from=20footer=20and=20relnote,=20update=20to=20current=20y?= =?UTF-8?q?ear?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.mts | 4 ++-- LICENSE.md | 2 +- .../notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index d89902e..c89af48 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -56,8 +56,8 @@ export default defineConfig({ // } ], footer: { - message: 'Human ๐Ÿค AI collaboration', - copyright: '© 2025 Martin Haberfellner ยท All Rights Reserved | Imprint | Privacy | License' + message: 'Imprint | Privacy | License', + copyright: '© 2026 Martin Haberfellner ยท All Rights Reserved' }, sidebar: { '/version': [ diff --git a/LICENSE.md b/LICENSE.md index 8ed37b8..48df70c 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ # License -Copyright © 2025 Martin Haberfellner +Copyright © 2026 Martin Haberfellner All rights reserved. diff --git a/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml b/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml index 4149ba4..7f551d1 100644 --- a/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml +++ b/releasenotes/notes/promptforge-and-protolabs-3e485a9ee4c05d64.yaml @@ -24,7 +24,7 @@ features: - | Enhanced VitePress configuration with comprehensive SEO meta tags (Open Graph, Twitter Cards), local search provider, GitHub edit links, and custom footer - with legal links and "Human ๐Ÿค AI collaboration" message. + with legal links. - | Configured separate site title for navigation (NC!) and browser title (NEONCODE!) using siteTitle in theme config. From e5e1779741f6f1342de3e7d1e9e4e7e47111b705 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Tue, 17 Feb 2026 18:24:13 +0100 Subject: [PATCH 30/31] =?UTF-8?q?ci:=20=F0=9F=92=9A=20Append=20force=3Dtru?= =?UTF-8?q?e=20for=20deleting=20preview=20deployments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the last deployment of a branch has its name as alias --- .github/workflows/cf-housekeeping.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cf-housekeeping.yml b/.github/workflows/cf-housekeeping.yml index 97e0945..53e827b 100644 --- a/.github/workflows/cf-housekeeping.yml +++ b/.github/workflows/cf-housekeeping.yml @@ -35,7 +35,9 @@ jobs: for deployment in $deployment_ids; do if [ -n "$deployment" ]; then echo "Deleting $env deployment $deployment" - del=$(curl -sS -w "\n%{http_code}" -X DELETE -H "Authorization: Bearer $API_TOKEN" "$API_URL/$deployment") # add ?force=true to delete even if active + force_param="" + [ "$env" = "preview" ] && force_param="?force=true" + del=$(curl -sS -w "\n%{http_code}" -X DELETE -H "Authorization: Bearer $API_TOKEN" "$API_URL/$deployment$force_param") code=$(echo "$del" | tail -n1) body=$(echo "$del" | sed '$d') if [ "$code" -ge 400 ]; then From d7fdcbcb9f626d579a12df2283e415667c4b3394 Mon Sep 17 00:00:00 2001 From: Martin Haberfellner Date: Tue, 17 Feb 2026 18:27:35 +0100 Subject: [PATCH 31/31] =?UTF-8?q?ci:=20=F0=9F=91=B7=20Allow=2050=20preview?= =?UTF-8?q?=20deployments=20instead=20of=2020=20to=20keep=20older=20branch?= =?UTF-8?q?es=20available?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/cf-housekeeping.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cf-housekeeping.yml b/.github/workflows/cf-housekeeping.yml index 53e827b..f0d6077 100644 --- a/.github/workflows/cf-housekeeping.yml +++ b/.github/workflows/cf-housekeeping.yml @@ -14,7 +14,7 @@ jobs: API_TOKEN="${{ secrets.CLOUDFLARE_API_TOKEN }}" API_URL="https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pages/projects/$PROJECT_NAME/deployments" - for entry in "production:10" "preview:20"; do + for entry in "production:10" "preview:50"; do env="${entry%%:*}" keep="${entry##*:}" echo "Processing environment: $env (keep last $keep deployments)"