{"id":44402853,"url":"https://github.com/redhat-appdev-practice/website","last_synced_at":"2026-02-12T06:29:23.712Z","repository":{"id":37084198,"uuid":"300470089","full_name":"redhat-appdev-practice/website","owner":"redhat-appdev-practice","description":"Cloud Native AppDev Site","archived":false,"fork":false,"pushed_at":"2024-01-17T18:58:12.000Z","size":8973,"stargazers_count":7,"open_issues_count":7,"forks_count":7,"subscribers_count":3,"default_branch":"trunk","last_synced_at":"2026-01-28T09:59:05.740Z","etag":null,"topics":["hacktoberfest","hacktoberfest2022"],"latest_commit_sha":null,"homepage":"","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redhat-appdev-practice.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-10-02T01:31:10.000Z","updated_at":"2023-09-08T16:22:10.000Z","dependencies_parsed_at":"2024-01-16T17:31:07.039Z","dependency_job_id":null,"html_url":"https://github.com/redhat-appdev-practice/website","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/redhat-appdev-practice/website","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-appdev-practice%2Fwebsite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-appdev-practice%2Fwebsite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-appdev-practice%2Fwebsite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-appdev-practice%2Fwebsite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redhat-appdev-practice","download_url":"https://codeload.github.com/redhat-appdev-practice/website/tar.gz/refs/heads/trunk","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-appdev-practice%2Fwebsite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29360644,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T01:03:07.613Z","status":"online","status_checked_at":"2026-02-12T02:00:06.911Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","hacktoberfest2022"],"created_at":"2026-02-12T06:29:23.188Z","updated_at":"2026-02-12T06:29:23.707Z","avatar_url":"https://github.com/redhat-appdev-practice.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# This is a [VitePress](https://vitepress.dev/) site for [Cloud-Native AppDev](https://appdev.consulting.redhat.com/)\n\n## Prerequisites\n\n* NodeJS \u003e= 18\n* NPM \u003e= 10.2\n* Git\n* A Modern Browser\n* (OPTIONAL) An editor with support for Markdown\n\n## Introduction\n\n[![Introduction to Code](.assets/thumbnails/CodeIntro.png)](https://drive.google.com/file/d/1CbOOInA3EhOHFse-eOvwMhDqyW_3yV9C/preview)\n\nThe website appdev.consulting.redhat.com is an initiative undertaken by consultants from the AppDev Community of Practice (CoP). Its purpose is to provide practical examples of various technologies and techniques that can greatly benefit our clients and fellow consultants. These examples cover areas not directly addressed by the official Red Hat learning resources.\n\nThis platform enables the creation of uncomplicated and free lab exercises. These labs serve as valuable tools to assist customers in comprehending different technologies. Furthermore, they contribute to raising awareness about the services offered by Red Hat's organization.\n\n### Why Should I Contribute\n\nContributing content, such as videos, to this project offers more than just the act of giving back. It presents several additional advantages.\n\nFirstly, the platform offers a safe space to practice public speaking and technical topic presentations. This practice occurs in a controlled setting without the pressure of a live audience.\n\nSecondly, your involvement will enhance your personal brand. Not only will your contributions be visible to those within Red Hat, but they will also be accessible to the wider audience utilizing our website.\n\n### What Can I Contribute\n\nThe biggest contribution you can make is more content. We want you to create content on technologies you are passionate about! We do have guidelines as to help make sure our site has a coherient feel and more info on what accept can be found [below](#creating-a-new-article)\n\nBut if you do not have the time or are not yet comfortable contributing an entire article we are more than happy to take other contributions such as:\n\n* Grammar/Spelling mistake fixes\n* Improved tooling to help with\n  * Website look/feel\n  * Developer or DevOps tooling\n\n## Creating Content\n\nOur [Journey Map](https://lucid.app/documents/embeddedchart/74fe4c6a-a778-4b96-961a-2af86a36326e) serves as our guiding compass for determining the upcoming content we intend to develop. While we remain open to receiving videos that don't directly align with our journey map, the Cloud Native AppDev Enablement team places significant emphasis on ensuring that any content created resonates with our brand identity.\n\nShould you choose to craft content and wish to have it considered, we kindly request that you share it within our [Google Chat](https://chat.google.com/room/AAAAyFv-1vU?cls=4) channel before starting. This step is crucial in ensuring that we are all in agreement and aligned before moving forward. Your collaboration in this process is greatly appreciated.\n\n## Content Guidelines\n\nThe Cloud Native AppDev Enablement Team has a few guiding principles we like to follow when creating content\n\n### Consumable\n\nWe want our content to be short and sweet. Optimally these are labs and videos that a consultant or client could look at on their lunch break and make it through. The rule of thumb for the videos that we release on our youtube channel is that they run around 20 minutes give or take a couple minutes.\n\n### Red Hat Technology Adjacent\n\nThe Cloud Native AppDev Enablement Team is not attempting to compete with Red Hat Learning. The subjects we cover may have some overlap with our internal training but should not be focused directly on a Red Hat product. Rather we want to talk about ways to empower our customers with other open source tools and practices that our Services have found useful in the past.\n\n### Technical and Demoable\n\nThe Cloud Native AppDev Enablement Team wants to aim this platform at technical resources. While we encourage basic explications at the start of a video or lab, we also want to make sure that users are able to try out the subject that you are attempting to explain.\n\n## Adding a New Text Lab\n\nBelow are the technical details for creating and validating your text article on the website.\n\n### Useful Links\n\nA set of useful links when writing articles or making changes to this repository\n\n* [Markdown](https://www.markdownguide.org/basic-syntax/) is the techincal writing language used\n* [VitePress](https://vitepress.dev/guide/getting-started) is how we are generating our site\n  * [Custom Containers](https://vitepress.dev/guide/markdown#custom-containers) are a useful trick to know\n\n### Run the Site on Your Local Machine\n\n* Clone this repository\n* Run `npm run docs:dev`\n* Navigate to the URL shown in the console\n\n\u003e **Note:** Depending on your version of node you may need to set the openssl-legacy-provider option so use this command: `NODE_OPTIONS=--openssl-legacy-provider npm run docs:dev --no-cache`\n\n### Creating New Articles\n\n[![Contributing](.assets/thumbnails/contributing.png)](https://drive.google.com/file/d/1CbOOInA3EhOHFse-eOvwMhDqyW_3yV9C/preview)\n\nTo create a new article first create a new markdown(.md) file inside of `src/tracks/\u003cTRACK FOLDER\u003e`\n\nEvery new article should start with some basic [frontmatter](https://vitepress.dev/guide/frontmatter). Frontmatter is a TOML block at the top of your markdown file which allows you to set some additional metadata about your document.\n\n  ```markdown\n  ---\n  title: Behavior-Driven Development\n  tags:\n  - gherkin\n  - bdd\n  - behavior\n  - behaviour\n  - behavior-driven\n  - behaviour-driven\n  ---\n\n  # Behavior-Driven Development  // Markdown starts here\n  ```\n\n\u003e **Tip** The site(and search) is indexed based on this metadata. So the better your metadata is the more likely people are to find your article\n\nAnd an example article body should look something like this:\n\n  ```markdown\n  # My Article Title\n\n  ## Video\n  \u003c!-- Embedded Video --\u003e\n\n  ## Introduction\n  \u003c!-- Short introduction of the topic --\u003e\n\n  ## Lab Instructions\n\n  ### Prerequisites\n  \u003c!-- Prereqs if any --\u003e\n\n  ### Section 1\n\n  ### Section 2\n\n  ## Wrap Up\n  \u003c!-- What did this lab show, next steps (sometimes we create an \"extra credit\" section with additional unguided challenges) --\u003e\n  ```\n\n### Update the Navigation\n\nIt is important that once you have created your article you also update the navigation so users are able to find it\n\n* Open the `src/.vitepress/config.mts` **AND** `src/.vitepress/config-stage.mts` file\n* Locate the `sidebar` key under `themeConfig`\n* Locate `items` key beneath `Tracks`\n* Locate the child for the track you wish to expand\n* Add a new entry to the `items`\n\n  ```javascript\n          {\n            title: 'Developer Tools',\n            link: '/tracks/devtools/',\n            collapsed: true,\n            items: [\n              '/tracks/devtools/owasp-dependency-check',\n              '/tracks/devtools/owasp-zap-hud',\n              '/tracks/devtools/npm-audit-ci-wrapper',\n              '/tracks/devtools/my-new-devtool-article'  // \u003c== Like this!\n            ]\n          }\n  ```\n\n\u003e **Note:** If required a new section can be created by adding another json object to the list of `Tracks`\n\n### Publishing this site\n\n#### Local Validation\n\nBefore creating a Merge Request please run and validate there are no errors:\n`npm run docs:build`\n\n\u003e **Note:** as mentioned above may need to modify the build to `NODE_OPTIONS=--openssl-legacy-provider yarn build`\n\nIt is also a good idea to validate the docker image is building correctly:\n\n```sh\ndocker build -t cloudnative-local:latest .\ndocker run  -p 127.0.0.1:80:8080/tcp cloudnative-local:latest\n```\n\nMake sure to visit the site at `127.0.0.1`, and validate you are able to navigate to your article and everything looks as expected.\n\n#### Staging\n\nOnce local validation is completed a version of the website should be automatically deployed to our staging environment through a [github workflow](.github/workflows/stage.yaml). Once the deployment is completed a comment with the pages url will be added to your merge request. Please validate against the staging environment as well to make sure everything looks good.\n\nIf the staging environment is not being updated properly, then validate the workflow ran successfully by navigating to `Actions -\u003e Build and Stage` and finding the job associated with your MR:\n\n![Build and Stage](.assets/build-and-stage.png)\n\n#### Approval\n\nOnce you feel like your article is ready for review please post in the [Slack Channel](https://app.slack.com/client/E030G10V24F/C06E0HFU6UU) and ask for a reviewer. If our reviewers do not find any issues we will merge your branch with the `trunk`\n\n#### Final Publish\n\nOnce merged with `trunk` a [GitHub Actions](.github/workflows/containerize.yml) has been created to publish an image with the new site to `quay.io/cloud-native-runtimes/cnad-vuepress:latest`.\n\nOnce this job runs successfully there is a cron job that runs periodicity on the consulting GitHub that actually publishes out the site.\n\nIf you do not see your changes being published within about an hour of the merge then run through the following steps:\n\n1. Verify the [build](https://github.com/redhat-appdev-practice/redhat-appdev-practice.github.io/actions) was successful\n1. Validate the latest `quay.io/cloud-native-runtimes/cnad-vuepress` image is correct\n   * Pull the latest image and validate the `CREATED` date makes sense\n   * Run the image using docker and make sure you are able see your changes\n  [![asciicast](https://asciinema.org/a/601732.svg)](https://asciinema.org/a/601732)\n1. If the latest image does not match with what is on [https://appdev.consulting.redhat.com/](https://appdev.consulting.redhat.com/), then please ping the admins in the `Consulting Gitlab Channel` (This channel is not public but most of the consultants are in it by default, if you can't find it ping someone on our channel)\n\n### Congrats!!!\n\nYou have uploaded new content to our site! In a few months Google Analytics can tell us just how popular you are!\n\n### Article Writing Tips and Tricks\n\n#### Adding images\n\n[Images](https://vitepress.dev/guide/asset-handling) can be placed in `src/public/` and everything in that directory will be relative to the web root. For example, if you place an image in `src/public/devtools/my-cool-image.svg`, then it's relative path would be `https://\u003csite\u003e/devtools/my-cool-image.svg` and it could be referenced in your markdown with `![Alt Text](/devtools/my-cool-image.svg)`. If you place images in the same directory as your Markdown file, you can just use a relative path like `![Alt Text](my-cool-image.svg)`\n\n### Adding asciinema recordings/playback\n\n[ASCIInema](https://asciinema.org/) is a great tool for recording command-line screencasts which remain \"just text\" and as such have the following benefits:\n\n* You can copy and paste content from the cast\n* It's more accessible to people with visual impairment\n* It's lighter than a video stream\n\n1. Add your `cast` file to the `src/public/casts` folder\n1. Add the **AsciinemaPlayer** component to your page\n\n   ```html\n   \u003cAsciinemaPlayer src=\"/casts/angular-openapi-prism-watch.cast\" cols=120 rows=30 /\u003e\n   ```\n\n#### Known Issues\n\nIf you are trying to use `{{ }}` in your article it must be escaped, see the helm-intro project or [here](https://vitepress.dev/guide/using-vue#escaping)\n\n## Adding a new Video to YouTube\n\nIf possible the Cloud Native AppDev Enablement team try to match our written content with a video component, although we may accept just written labs or just videos depending on the subject.\n\nAs mentioned in our guidelines videos should be around 20 minutes in length and meet a few other criteria:\n\n* Clear Audio\n  * Reduce background noise when recording\n  * Use as high quality a mic as you have access too.\n* Clear Screen Capture\n  * Screen should be readable\n  * When doing any recording or post work try to capture video in at least 1080p\n  * We encourage you to be on screen but do not block your work\n* Hide your information!\n  * Remember these are public, it is recommended you limit the content you are sharing on screen to what is relevant for the topic\n  * Using a dedicated browser profile for recording is a good idea\n\n### Recommended Tools\n\n#### Video Capture\n\n[OBS](https://obsproject.com/) is the gold standard in opensource video recording.\n\n#### Video Editing\n\nWhile some of our members are able to capture the video in a single shot, minor post work can be useful for cutting out long silences are small mistakes. It can also be used to break the recording up into multiple sessions although this will normally increase the overall time and effort it takes to complete the video.\n\n[Openshot](https://www.openshot.org/) is a very easy to use opensource editing software.\n\n### Uploading your Video\n\nIf this is your first video please ask someone in our [Slack Channel](https://app.slack.com/client/E030G10V24F/C06E0HFU6UU) to do the upload with a link to the raw video on Google Drive. We may also give direct access if you become a regular contributor.\n\n## Other Contributions\n\nIf you would like to submit a pull against this repository and have it count toward Hacktoberfest, please be aware that this is what we are looking for:\n\n* Improvements to one of the existing track pages:\n  * Better or more idomatic workflow (Subjective and at the discretion of our team to decide if wanted)\n  * Fixes to spelling\n  * Updated or improved tooling\n* New track pages which align with our [Journey Map](https://appdev.consulting.redhat.com/Cloud-Native_Journey_Map.svg)\n\nIn order to avoid wasting your time and ours, it is recommended that you submit an issue describing your contribution first.\n\n**Thank you! And happy hacking!!**\n\n## Other Recommendations\n\nThis section is for folks to recommend tools they find useful.\n\n### VS Code Plugins\n\n- [Markdown Linter](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint)\n-\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-appdev-practice%2Fwebsite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredhat-appdev-practice%2Fwebsite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-appdev-practice%2Fwebsite/lists"}