Skip to content

Commit ef036f4

Browse files
committed
Complete guest UI skeleton implementation (Step 03)
- Implement backend health endpoint with controller and service - Create frontend components (Header, TilesGrid, PrivateTile, PublicTile) - Add useFetch hook for API communication - Implement comprehensive test suite for all components and hooks - Set up project structure and configuration files
1 parent 6da81f7 commit ef036f4

File tree

82 files changed

+9007
-22
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+9007
-22
lines changed

.clinerules

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# CLINERULES – Roo Code Execution Contract
2+
3+
> **These rules are non‑negotiable. Every automated action performed by Roo Code **MUST** comply. Deviation will be treated as a defect.**
4+
5+
---
6+
7+
## 1  Authoritative Source Files
8+
9+
| Priority | File / Folder | Purpose |
10+
|----------|---------------|---------|
11+
|1|`docs/PRD/oidc-auth-demo.md`|Canonical functional specification (what to build).|
12+
|2|`docs/guidelines/architecture.md` & `docs/guidelines/coding-guidelines.md`|How the solution must be architected and coded.|
13+
|3|`docs/plan/00-high-level-plan.md`|Roadmap overview of all implementation steps.|
14+
|4|`docs/plan/0X-*.md` (Step files)|Detailed scope and acceptance criteria for each incremental deliverable.|
15+
16+
**Read these files in the order shown before writing any code.**
17+
18+
---
19+
20+
## 2  Execution Flow
21+
1. **Initialization** – Parse files 1 → 4 and cache relevant directives.
22+
2. **Iterative Development** – For *each* step file (`01-…`, `02-…`, …):
23+
1. Inspect *Scope* and *Acceptance Criteria*.
24+
2. Switch to "architect mode" and generate subtasks that fully satisfy both. One level of subtasks is sufficient. Write the subtasks to a file in the docs/implementation folder called <step-number>-tasks.md
25+
3. Verify that the subtasks are aligned with docs/architecture.md and docs/coding-guidelines.md. If not, correct the subtasks until alignment is reached.
26+
3. PAUSE and ask the human operator to review and confirm the plan. DO NOT start coding until the operator explicitly approves.
27+
4. Once approved, switch to "Boomerang mode" and execute the subtasks one by one. Implement code, tests, configs, and docs as prescribed in the tasks file.
28+
5. Switch to "Code mode" when done.
29+
5. Run the complete test suite (`./mvnw test` + `pnpm test`).
30+
6. Ensure CI workflow passes locally (`pnpm dlx github-actions-runner ...` not required but mimic).
31+
7. Only when **all criteria are met and tests are green** may Roo Code mark the step *Done* and proceed to the next.
32+
3. **Documentation Discipline** – Every change ***must*** include the documentation updates listed in the step file before completion.
33+
34+
---
35+
36+
## 3  Coding & Architectural Compliance Checks
37+
* **Follow** all language, framework, and tooling versions mandated in the architecture and coding‑guidelines documents.
38+
* **Reject** any transitive dependency or configuration that violates these guidelines.
39+
* **Lint, format, and coverage gates** are mandatory.
40+
41+
---
42+
43+
## 4  Quality Gates
44+
| Category | Threshold |
45+
|----------|-----------|
46+
|Backend Jacoco coverage|≥ 80 % lines |
47+
|Frontend Vitest coverage|≥ 80 % lines |
48+
|ESLint/Spotless|0 errors |
49+
|CI Workflow|All jobs green |
50+
51+
**If any gate fails, fix immediately before advancing.**
52+
53+
---
54+
55+
## 5  Forbidden Actions
56+
* Skipping steps or merging multiple steps into one commit.
57+
* Modifying PRD or guidelines files without explicit human approval.
58+
* Lowering coverage thresholds or disabling linting.
59+
60+
---
61+
62+
## 6  Success Definition
63+
Roo Code is successful when, after completing Step 10, **all acceptance criteria across every step are met**, the full CI pipeline passes, and documentation accurately reflects the implemented system.
64+
65+
---
66+
67+
*End of CLINERULES*
68+

.editorconfig

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
root = true
2+
3+
[*]
4+
charset = utf-8
5+
end_of_line = lf
6+
insert_final_newline = true
7+
trim_trailing_whitespace = true
8+
indent_style = space
9+
indent_size = 4
10+
11+
[*.{md,yaml,yml}]
12+
indent_size = 2

.github/workflows/.gitkeep

Whitespace-only changes.

.github/workflows/ci.yml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
8+
9+
jobs:
10+
backend-test:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- uses: actions/checkout@v4
15+
16+
- name: Set up JDK 21
17+
uses: actions/setup-java@v4
18+
with:
19+
java-version: '21'
20+
distribution: 'temurin'
21+
cache: maven
22+
23+
- name: Build and test with Maven
24+
run: cd backend && ./mvnw -B verify
25+
26+
- name: Upload Jacoco coverage report
27+
uses: actions/upload-artifact@v4
28+
if: success() || failure()
29+
with:
30+
name: backend-coverage-report
31+
path: backend/target/site/jacoco/
32+
retention-days: 5
33+
34+
frontend-test:
35+
runs-on: ubuntu-latest
36+
37+
steps:
38+
- uses: actions/checkout@v4
39+
40+
- name: Set up Node.js 20
41+
uses: actions/setup-node@v4
42+
with:
43+
node-version: '20'
44+
cache: 'pnpm'
45+
46+
- name: Install pnpm
47+
run: npm install -g pnpm
48+
49+
- name: Install dependencies
50+
run: cd frontend && pnpm install
51+
52+
- name: Run tests with coverage
53+
run: cd frontend && pnpm test -- --coverage
54+
55+
- name: Upload coverage report
56+
uses: actions/upload-artifact@v4
57+
if: success() || failure()
58+
with:
59+
name: frontend-coverage-report
60+
path: frontend/coverage/
61+
retention-days: 5

.gitignore

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
1-
# Compiled class file
2-
*.class
3-
4-
# Log file
1+
# Java/Maven
2+
target/
3+
*.jar
4+
*.war
5+
*.ear
56
*.log
67

7-
# BlueJ files
8-
*.ctxt
8+
# Node.js/pnpm
9+
node_modules/
10+
build/
11+
dist/
12+
coverage/
13+
.pnpm-debug.log*
14+
*.tsbuildinfo
915

10-
# Mobile Tools for Java (J2ME)
11-
.mtj.tmp/
16+
# IDEs
17+
.vscode/
18+
.idea/
19+
*.iml
20+
*.ipr
21+
*.iws
1222

13-
# Package Files #
14-
*.jar
15-
*.war
16-
*.nar
17-
*.ear
18-
*.zip
19-
*.tar.gz
20-
*.rar
23+
# OS-specific
24+
.DS_Store
25+
Thumbs.db
2126

22-
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
23-
hs_err_pid*
24-
replay_pid*
27+
# Maven Wrapper - Ignore everything in .mvn except the wrapper jar
28+
.mvn/*
29+
!.mvn/wrapper/maven-wrapper.jar

.husky/_/husky.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/usr/bin/env sh
2+
if [ -z "$husky_skip_init" ]; then
3+
debug () {
4+
if [ "$HUSKY_DEBUG" = "1" ]; then
5+
echo "husky (debug) - $1"
6+
fi
7+
}
8+
9+
readonly hook_name="$(basename -- "$0")"
10+
debug "starting $hook_name..."
11+
12+
if [ "$HUSKY" = "0" ]; then
13+
debug "HUSKY env variable is set to 0, skipping hook"
14+
exit 0
15+
fi
16+
17+
if [ -f ~/.huskyrc ]; then
18+
debug "sourcing ~/.huskyrc"
19+
. ~/.huskyrc
20+
fi
21+
22+
readonly husky_skip_init=1
23+
export husky_skip_init
24+
sh -e "$0" "$@"
25+
exitCode="$?"
26+
27+
if [ $exitCode != 0 ]; then
28+
echo "husky - $hook_name hook exited with code $exitCode (error)"
29+
fi
30+
31+
exit $exitCode
32+
fi

.husky/pre-commit

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/usr/bin/env sh
2+
. "$(dirname -- "$0")/_/husky.sh"
3+
4+
cd frontend && npx lint-staged

.roomodes

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"customModes": [
3+
{
4+
"slug": "boomerang-mode",
5+
"name": "Boomerang Mode",
6+
"roleDefinition": "You are Roo, a strategic workflow orchestrator who coordinates complex tasks by delegating them to appropriate specialized modes. You have a comprehensive understanding of each mode's capabilities and limitations, allowing you to effectively break down complex problems into discrete tasks that can be solved by different specialists.",
7+
"customInstructions": "Your role is to coordinate complex workflows by delegating tasks to specialized modes. As an orchestrator, you should:\n\n1. When given a complex task, break it down into logical subtasks that can be delegated to appropriate specialized modes.\n\n2. For each subtask, use the `new_task` tool to delegate. Choose the most appropriate mode for the subtask's specific goal and provide comprehensive instructions in the `message` parameter. These instructions must include:\n * All necessary context from the parent task or previous subtasks required to complete the work.\n * A clearly defined scope, specifying exactly what the subtask should accomplish.\n * An explicit statement that the subtask should *only* perform the work outlined in these instructions and not deviate.\n\n* Instructions to read docs/architecture.md and doc/coding-guidelines.md . During the execution of the subtask these architecture and coding guidelines should be respected. \n\n * An instruction for the subtask to signal completion by using the `attempt_completion` tool, providing a concise yet thorough summary of the outcome in the `result` parameter, keeping in mind that this summary will be the source of truth used to keep track of what was completed on this project. \n * A statement that these specific instructions supersede any conflicting general instructions the subtask's mode might have.\n\n3. Track and manage the progress of all subtasks. When a subtask is completed, analyze its results and determine the next steps.\n\n4. Help the user understand how the different subtasks fit together in the overall workflow. Provide clear reasoning about why you're delegating specific tasks to specific modes.\n\n5. When all subtasks are completed, synthesize the results and provide a comprehensive overview of what was accomplished.\n\n6. Ask clarifying questions when necessary to better understand how to break down complex tasks effectively.\n\n7. Suggest improvements to the workflow based on the results of completed subtasks.\n\nUse subtasks to maintain clarity. If a request significantly shifts focus or requires a different expertise (mode), consider creating a subtask rather than overloading the current one.",
8+
"groups": [],
9+
"source": "project"
10+
}
11+
]
12+
}

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [Unreleased]
9+
10+
### Added
11+
12+
- **Step 01:** Initial repository scaffold, backend (Spring Boot) and frontend (React/Vite) skeletons, basic toolchain (Maven, pnpm, Vite, ESLint, Prettier, Spotless, Jacoco, Vitest), Husky pre-commit hooks, and GitHub Actions CI pipeline.
13+
- **Step 02:** Added public health endpoint.
14+
- **Step 03:** Guest UI skeleton with health fetch.

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2025 Roeland Hofkens
3+
Copyright (c) 2025 Project Contributors
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

0 commit comments

Comments
 (0)