Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
75892f2
docs: add VitePress documentation site design spec
jung-thomas Mar 27, 2026
524212f
docs: fix markdownlint warnings in VitePress design spec
jung-thomas Mar 27, 2026
df81bae
docs: resolve remaining spec review issues (slides, mermaid theme, wo…
jung-thomas Mar 27, 2026
5ae8c62
docs: fix srcDir architecture, URL routing, deploy job, and public as…
jung-thomas Mar 27, 2026
d57e58d
docs: fix stale srcDir note in config key notes
jung-thomas Mar 27, 2026
79749bd
feat: add VitePress toolchain to docs/
jung-thomas Mar 27, 2026
1504306
chore: add .gitignore, remove llms.txt (generated at build time)
jung-thomas Mar 27, 2026
cc11500
feat: add SAP adaptive theme (Blue 7 light / Blue 6 dark)
jung-thomas Mar 27, 2026
c1cd5e2
feat: add static asset placeholders (logo, favicon)
jung-thomas Mar 27, 2026
104896e
feat: add full VitePress config with SAP nav, sidebar, Mermaid, agent…
jung-thomas Mar 27, 2026
bd4bc2a
feat: add audience-driven home page with VitePress hero layout
jung-thomas Mar 27, 2026
d295e38
feat: add prerequisites wrapper page
jung-thomas Mar 27, 2026
e39e6c8
feat: add slides section with CAP and HANA Cloud wrapper pages
jung-thomas Mar 27, 2026
d79a33c
feat: add exercises overview and Ex1-Ex4 wrapper pages
jung-thomas Mar 27, 2026
c8f2df7
feat: add Ex5-Ex8 wrapper pages with Mermaid architecture diagrams
jung-thomas Mar 27, 2026
46b478d
feat: add solution, instructor, and AI/agents wrapper pages
jung-thomas Mar 27, 2026
346475f
feat: add further learning section (HANA CLI, resources, contributing)
jung-thomas Mar 27, 2026
ac06f14
docs: add i18n translation guide
jung-thomas Mar 27, 2026
b38fe42
feat: add GitHub Actions workflow for VitePress GitHub Pages deployment
jung-thomas Mar 27, 2026
049c35a
fix: resolve VitePress build errors for image paths and details rende…
jung-thomas Mar 27, 2026
fb5cf7f
Refactor code structure for improved readability and maintainability
jung-thomas Mar 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"mcp__plugin_playwright_playwright__browser_navigate",
"Bash(git -C d:/projects/cap-hana-exercises-codejam log --oneline -10)",
"Bash(git add:*)",
"Bash(git commit:*)"
"Bash(git commit:*)",
"WebFetch(domain:raw.githubusercontent.com)"
]
}
}
111 changes: 111 additions & 0 deletions .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: Deploy Documentation to GitHub Pages

on:
push:
branches:
- main
paths:
- 'docs/**'
- 'exercises/**'
- 'slides/**'
- '*.md'
- 'solution/MyHANAApp/README.md'
- '.github/workflows/deploy-docs.yml'
pull_request:
branches:
- main
paths:
- 'docs/**'
- 'exercises/**'
- 'slides/**'
- '*.md'
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages-${{ github.ref }}
cancel-in-progress: false

jobs:
security-scan:
name: Security Scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: 'docs/package-lock.json'

- name: Install dependencies
run: npm ci
working-directory: docs

- name: Run security audit
run: npm audit --audit-level=moderate || true
working-directory: docs

build:
name: Build Documentation
runs-on: ubuntu-latest
needs: security-scan
defaults:
run:
working-directory: docs
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # required for lastUpdated timestamps
submodules: true # required for future external repo content

- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: 'docs/package-lock.json'

- uses: actions/cache@v4
with:
path: docs/.vitepress/cache
key: ${{ runner.os }}-vitepress-${{ hashFiles('docs/**/*.md', 'docs/.vitepress/**') }}
restore-keys: |
${{ runner.os }}-vitepress-

- name: Install dependencies
run: npm ci

- name: Build VitePress documentation
run: npm run docs:build

- name: Verify build output
run: |
test -f .vitepress/dist/index.html || \
(echo "Build failed: index.html not found in dist/" && exit 1)
echo "Build verification passed"

- uses: actions/configure-pages@v4
if: github.event_name != 'pull_request'

- uses: actions/upload-pages-artifact@v4
if: github.event_name != 'pull_request'
with:
path: docs/.vitepress/dist
retention-days: 1

deploy:
name: Deploy to GitHub Pages
if: github.event_name != 'pull_request'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/deploy-pages@v4
id: deployment
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# VitePress build output and cache
docs/.vitepress/dist/
docs/.vitepress/cache/

# Generated by @agentmarkup/vite at build time — do not commit
llms.txt
llms-full.txt

# Brainstorming session files (visual companion)
.superpowers/

# Node dependencies
node_modules/
docs/node_modules/
32 changes: 16 additions & 16 deletions InstructorSetup.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,16 @@ This is a shared, persistent subaccount used for all CAP CodeJams — do not cre

1. Log in the [SAP BTP Global Account: Developer Advocates Free Tier](https://emea.cockpit.btp.cloud.sap/cockpit/#/globalaccount/275320f9-4c26-4622-8728-b6f5196075f5/accountModel&//?section=HierarchySection&view=TreeTableView).
1. Navigate to the Directories and SubAccounts section. There you will find a folder for CodeJams. Within that is the Subaccount [CAP CodeJam](https://emea.cockpit.btp.cloud.sap/cockpit/#/globalaccount/275320f9-4c26-4622-8728-b6f5196075f5/subaccount/13f4f274-4515-4c67-8274-cbde80a4e744/subaccountoverview). That's where we will work.
![SAP BTP SubAccount](images/instructor/subaccount.png "SAP BTP SubAccount")
![SAP BTP SubAccount](/images/instructor/subaccount.png "SAP BTP SubAccount")

### Enable Cloud Foundry and Create a `dev` Space

CF is required because participants deploy HDI container service instances into this space.

1. Enable the Cloud Foundry Environment. ![Enable Cloud Foundry](images/instructor/enableCloudFoundry.png "Enable Cloud Foundry")
1. Enable the Cloud Foundry Environment. ![Enable Cloud Foundry](/images/instructor/enableCloudFoundry.png "Enable Cloud Foundry")
1. Use the default Enablement dialog choices.
1. Once the org is created, create a space named `dev` ![Create Space](images/instructor/createSpace.png "Create Space")![Create Space Dialog](images/instructor/createSpace2.png "Create Space Dialog")
1. Add the other instructors as Space Members with all roles.![Add Space Members](images/instructor/spaceMembers.png "Add Space Members")
1. Once the org is created, create a space named `dev` ![Create Space](/images/instructor/createSpace.png "Create Space")![Create Space Dialog](/images/instructor/createSpace2.png "Create Space Dialog")
1. Add the other instructors as Space Members with all roles.![Add Space Members](/images/instructor/spaceMembers.png "Add Space Members")

### Provisioning of SAP HANA Cloud

Expand All @@ -53,31 +53,31 @@ Each participant needs both a BTP subaccount user and a Cloud Foundry space memb

**Action 1: Create the subaccount user and assign the Role Collection**

1. Navigate to the "Security" section in your SubAccount. `Security -> Users` ![Navigate to User Management](images/instructor/securityUsers.png "Navigate to User Management")
1. Create User ![Create User](images/instructor/createUser.png "Create User")
1. Enter the email addresses of the participants and use the `Default identity provider` ![Create User Dialog](images/instructor/createUserDialog.png "Create User Dialog")
1. Assign them to the `CodeJam` Role Collection. ![Assign Role Collection](images/instructor/assignRoleCollection.png "Assign Role Collection") ![Assign CodeJam Role Collection](images/instructor/assignCodeJamRC.png "Assign CodeJam Role Collection")
1. Navigate to the "Security" section in your SubAccount. `Security -> Users` ![Navigate to User Management](/images/instructor/securityUsers.png "Navigate to User Management")
1. Create User ![Create User](/images/instructor/createUser.png "Create User")
1. Enter the email addresses of the participants and use the `Default identity provider` ![Create User Dialog](/images/instructor/createUserDialog.png "Create User Dialog")
1. Assign them to the `CodeJam` Role Collection. ![Assign Role Collection](/images/instructor/assignRoleCollection.png "Assign Role Collection") ![Assign CodeJam Role Collection](/images/instructor/assignCodeJamRC.png "Assign CodeJam Role Collection")

**Action 2: Add users to the Cloud Foundry space**

1. Assign the users to the Cloud Foundry `dev` Space ![Add Space Members](images/instructor/spaceMembers.png "Add Space Members")
1. Assign the users to the Cloud Foundry `dev` Space ![Add Space Members](/images/instructor/spaceMembers.png "Add Space Members")

## After the Event

Run these steps after every event to avoid ongoing costs and reset the subaccount for next time.

1. Delete all the HDI container instances from the BTP Cockpit SubAccount/Instances views. ![Delete Service Instances](images/instructor/cleanupDeleteServiceInstances.png "Delete Service Instances")
1. Delete all the HDI container instances from the BTP Cockpit SubAccount/Instances views. ![Delete Service Instances](/images/instructor/cleanupDeleteServiceInstances.png "Delete Service Instances")

1. Disable the Cloud Foundry Environment. This will remove all user access at the CF level and clean up remaining resources. ![Disable Cloud Foundry](images/instructor/cleanupCloudFoundry.png "Disable Cloud Foundry")
1. Disable the Cloud Foundry Environment. This will remove all user access at the CF level and clean up remaining resources. ![Disable Cloud Foundry](/images/instructor/cleanupCloudFoundry.png "Disable Cloud Foundry")

1. Delete the HANA Cloud Instance to save money.
* From the Subscriptions click on `SAP HANA Cloud`![SAP HANA Cloud Tools](images/instructor/hanaCloudTools.png "SAP HANA Cloud Tools")
* Then `Actions -> Delete`![Delete](images/instructor/hanaCloudDelete.png "Delete")
* From the Subscriptions click on `SAP HANA Cloud`![SAP HANA Cloud Tools](/images/instructor/hanaCloudTools.png "SAP HANA Cloud Tools")
* Then `Actions -> Delete`![Delete](/images/instructor/hanaCloudDelete.png "Delete")

1. Remove Users
* `Security -> Users` ![Navigate to User Management](images/instructor/securityUsers.png "Navigate to User Management")
* Manually delete all workshop users ![Delete Users](images/instructor/deleteUsers.png "Delete Users")
* `Security -> Users` ![Navigate to User Management](/images/instructor/securityUsers.png "Navigate to User Management")
* Manually delete all workshop users ![Delete Users](/images/instructor/deleteUsers.png "Delete Users")

1. Remove Role Collections created by participants during the event
* `Security -> Role Collections`
* Delete any Role Collections that participants created during the event. Do **not** delete the `CodeJam` Role Collection — it is pre-existing and reused across events. ![Delete Role Collection](images/instructor/deleterolecollection.png)
* Delete any Role Collections that participants created during the event. Do **not** delete the `CodeJam` Role Collection — it is pre-existing and reused across events. ![Delete Role Collection](/images/instructor/deleterolecollection.png)
Loading
Loading