Commit Graph
100 Commits
Author SHA1 Message Date
kevinveenbirkenbachandClaude Opus 4.7 4424db22cb fix(cypress): allow scrollTo on non-scrollable pages in footer dropup test
cy.scrollTo('bottom') threw on CI ("element is not scrollable") whenever
the rendered page fit inside the viewport. Pass ensureScrollable:false
so the call is a no-op on short pages — the footer is already in view
and the subsequent rect-position pre-check enforces the actual
precondition that chooseDirection() needs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 02:38:06 +02:00
kevinveenbirkenbachandClaude Opus 4.7 28a796e24f chore(claude): enable sandbox and consolidate bash allowlist
Activate the harness sandbox (enabled + autoAllowBashIfSandboxed +
filesystem write/deny rules) and replace the ~30 specific Bash(...)
permission entries with a single Bash(*) wildcard. The existing deny
list (git push --force, git reset --hard, rm -rf, sudo) and ask list
(git push, docker run, curl) keep their precedence.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 02:36:28 +02:00
kevinveenbirkenbachandClaude Opus 4.7 f3c15e3e1c fix(navigation): unclip dropdowns and flip toward the side with more space
- Move <header> overflow:hidden into body.fullscreen scope and drop the
  implicit-vertical-clip overflow-x:auto from .navbar-nav so dropdown
  menus can escape the navbar.
- Drive top-level dropdowns through bootstrap.Dropdown (popperConfig
  strategy:'fixed'), and add a chooseDirection() helper that toggles
  .dropup/.dropdown on the .nav-item based on space above vs below
  before each show. Split the navigation.css rules to position the menu
  with top:100% or bottom:100% accordingly.
- Mark the dropdown toggle with data-bs-toggle="dropdown" in the
  template; cover that with a Jinja-rendered unit test and add Cypress
  specs for the header (opens downward) and footer (flips to .dropup)
  cases.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 02:26:02 +02:00
kevinveenbirkenbachandClaude Opus 4.7 3301f8d95f chore(claude): allow jobs bash command in harness
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 02:22:06 +02:00
kevinveenbirkenbachandClaude Opus 4.7 a575fddaa2 build(compose): run npm install in container, persist deps in named volumes
Replace the host-side `make npm-install` step with a compose-level
`command:` override that runs `npm install` inside the container on
every start. Back node_modules and static/vendor with named volumes so
the bind-mounted source tree no longer shadows the install while state
still survives container restarts. Drop the now-redundant npm-install
target and its references in up/dev/prod/test-e2e.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 02:17:53 +02:00
kevinveenbirkenbachandClaude Opus 4.7 c9fe7d8583 chore(claude): expand harness allowlist and ignore local state
Add permissions for read-only test/inspection commands (make test-e2e,
docker exec/restart, /tmp reads) and gitignore everything under .claude
except the shared settings/gitignore.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 02:15:04 +02:00
kevinveenbirkenbachandClaude Opus 4.7 03f17a6e05 build(make): run npm-install before docker-compose targets
Add npm-install dependency to up/dev/prod targets so app/static/vendor
and app/node_modules exist on the host before the ./app:/app bind mount
masks the build-time artifacts inside the container.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:40:19 +02:00
kevinveenbirkenbach 3132aab2a5 Release version 1.1.0 2026-03-30 10:47:32 +02:00
kevinveenbirkenbach 3d1db1f8ba Updated mirrors 2026-03-30 10:46:39 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 58872ced81 fix(ci): grant security-events: write to lint job
The lint-docker job in lint.yml requires security-events: write
for SARIF upload; must be explicitly granted to the caller job.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 10:18:14 +02:00
kevinveenbirkenbach 13b3af3330 Entered and removed whitespaces in README.md 2026-03-30 10:16:53 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 eca7084f4e fix(ci): grant security-events and packages permissions to security job
Reusable workflow calls inherit only explicitly granted permissions.
The nested security job requires packages: read and security-events: write
for CodeQL analysis.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 10:16:30 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 6861b2c0eb fix(nav): prevent navbar items from wrapping to second line
- Set flex-wrap: nowrap on navbar-nav to keep all items in one row
- Add hidden overflow-x scroll (no visible scrollbar) as fallback
- Fix #navbar_logo taking up space when invisible via max-width transition

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 10:10:55 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 66b1f0d029 feat(agents): add AGENTS.md and CLAUDE.md with pre-commit rules
- Add AGENTS.md: require make test before every non-doc commit and
  document the npm vendor asset workflow
- Add CLAUDE.md: instruct agents to read AGENTS.md at conversation start
- Add npm-install dependency to test-e2e Makefile target

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 09:59:09 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 a29a0b1862 feat(vendor): replace CDN dependencies with local npm packages
Introduces a vendor build pipeline so all third-party browser assets
(Bootstrap, Bootstrap Icons, Font Awesome, marked, jQuery) are served
from local static files instead of external CDNs.

- Add app/package.json with vendor deps and postinstall/build scripts
- Add app/scripts/copy-vendor.js to copy assets to static/vendor/
- Update base.html.j2 to use url_for('static', ...) for all vendor assets
- Update Dockerfile to install Node.js/npm and run npm install
- Update .gitignore to exclude app/node_modules/ and app/static/vendor/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 09:29:28 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 252b50d2a7 feat: migrate to pyproject.toml, add test suites, split CI workflows
- Replace requirements.txt with pyproject.toml for modern Python packaging
- Add unit, integration, lint and security test suites under tests/
- Add utils/export_runtime_requirements.py and utils/check_hadolint_sarif.py
- Split monolithic CI into reusable lint.yml, security.yml and tests.yml
- Refactor ci.yml to orchestrate reusable workflows; publish on semver tag only
- Modernize Dockerfile: pin python:3.12-slim, install via pyproject.toml
- Expand Makefile with lint, security, test and CI targets
- Add test-e2e via act with portfolio container stop/start around run
- Fix navbar_logo_visibility.spec.js: win.fullscreen() → win.enterFullscreen()
- Set use_reloader=False in app.run() to prevent double-start in CI
- Add app/core.* and build artifacts to .gitignore
- Fix apt-get → sudo apt-get in tests.yml e2e job
- Fix pip install --ignore-installed to handle stale act cache

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 23:03:09 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 2c61da9fc3 chore: remove comments from settings.json
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 23:37:10 +01:00
kevinveenbirkenbachandClaude Sonnet 4.6 2d8185b747 chore: add Claude Code project permissions settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 23:16:29 +01:00
kevinveenbirkenbach a47a5babce chore: remove unused imports 2026-03-28 19:08:57 +01:00
kevinveenbirkenbach 3f6c90cc3c Release version 1.0.0 2026-02-19 11:18:50 +01:00
kevinveenbirkenbach 69c4f15ce7 Prepare config.yaml from sample in CI before Cypress 2026-02-19 11:14:52 +01:00
kevinveenbirkenbach 56c1b0d0cd Fix Cypress action for repositories without lockfile 2026-02-19 11:13:12 +01:00
kevinveenbirkenbach 91e9caea48 Fix CI node cache path and npm install strategy 2026-02-19 11:11:11 +01:00
kevinveenbirkenbach feb6af28ef Add CI workflow for tests and conditional image publish 2026-02-19 11:05:26 +01:00
kevinveenbirkenbach f8c2b4236b Added d-flex to place logo next to brand 2025-07-21 14:24:28 +02:00
kevinveenbirkenbach dc2626e020 Added test for log 2025-07-21 12:18:07 +02:00
kevinveenbirkenbach 46b0b744ca Added logo to navbar when in fullscreen 2025-07-21 11:39:59 +02:00
kevinveenbirkenbach 5f2e7ef696 Changed pkgmgr commands 2025-07-12 18:54:42 +02:00
kevinveenbirkenbach 152a85bfb8 Merge branch 'main' of github.com:kevinveenbirkenbach/portfolio 2025-07-12 18:53:03 +02:00
kevinveenbirkenbach fdfe301868 Renamed PortWebUI to PortUI 2025-07-12 18:52:51 +02:00
kevinveenbirkenbach cbfe1ed8ae Update README.md
Solved another layout bug
2025-07-12 18:27:47 +02:00
kevinveenbirkenbach 9470162236 Solved formatation bug 2025-07-12 18:26:51 +02:00
kevinveenbirkenbach 6a57fa1e00 Optimized README.md 2025-07-12 18:24:49 +02:00
kevinveenbirkenbach ab67fc0b29 Renamed portfolio to PortWebUI 2025-07-12 18:22:19 +02:00
kevinveenbirkenbach e18566d801 Solved some bugs 2025-07-09 22:20:58 +02:00
kevinveenbirkenbach 7bc0f32145 Added cypress tests 2025-07-08 17:16:57 +02:00
kevinveenbirkenbach 6ed3e60dd0 Solved 2tap fullscreen hight bug 2025-07-08 14:39:13 +02:00
kevinveenbirkenbach ab8ea0dbd6 Added iframe observer 2025-07-07 23:40:35 +02:00
kevinveenbirkenbach b0446dcd29 Added include svgs 2025-07-07 19:14:29 +02:00
kevinveenbirkenbach 55d309b2d7 Changed fade between html iframe animation 2025-07-07 15:37:24 +02:00
kevinveenbirkenbach d99a8c8452 Added restore functionality to small logo 2025-07-07 15:06:36 +02:00
kevinveenbirkenbach 3f6a195ecb Optimizid hover 2025-07-07 13:37:02 +02:00
kevinveenbirkenbach 430ea4a120 Solved loading bug 2025-07-07 13:19:49 +02:00
kevinveenbirkenbach cc0fc9b77f Replaced object by svg 2025-07-07 12:46:56 +02:00
kevinveenbirkenbach 9ada9acb3a Implemented SVG handling 2025-07-07 12:40:25 +02:00
kevinveenbirkenbach 246ef1b059 Added backup logik for missing images 2025-07-07 08:57:30 +02:00
kevinveenbirkenbach 6572a39d48 Added hover effects to cards 2025-07-06 22:25:22 +02:00
kevinveenbirkenbach a80262c0d4 Solved container height bug 2025-07-06 22:18:28 +02:00
kevinveenbirkenbach 531c2295bd Added header/footer animation 2025-07-06 18:14:42 +02:00
kevinveenbirkenbach 0640ec6439 Added animation for fullscreen log 2025-07-06 17:46:51 +02:00
kevinveenbirkenbach a7eb14046f Added fullwidth animation 2025-07-06 17:35:40 +02:00
kevinveenbirkenbach 539580ad09 Added missing enterfullscreen function 2025-07-06 17:13:15 +02:00
kevinveenbirkenbach faf5bd1e8c Solved iframe margin bug 2025-07-06 10:55:12 +02:00
kevinveenbirkenbach 97378422bd Solved more CSS bugs 2025-07-05 21:07:31 +02:00
kevinveenbirkenbach 2632c21de3 Removed unnecessary log messages 2025-07-05 20:33:08 +02:00
kevinveenbirkenbach 64db9a4e6a Implemented Nasa Picture of the day 2025-07-05 20:08:00 +02:00
kevinveenbirkenbach d0f8d7d172 Added logo for small screen 2025-07-05 18:54:18 +02:00
kevinveenbirkenbach 20b6c731b8 Added onclick functionality for menu items 2025-07-05 18:32:26 +02:00
kevinveenbirkenbach 2f63009c31 Implemented full width function 2025-07-05 18:00:23 +02:00
kevinveenbirkenbach f0d4206731 Finished resize implementation for iframe 2025-07-05 16:53:25 +02:00
kevinveenbirkenbach b8aad8b695 Removed non functional resize code 2025-07-05 14:39:18 +02:00
kevinveenbirkenbach 697696347f finished fullscreen base implementation 2025-07-05 14:20:52 +02:00
kevinveenbirkenbach d6389157ec Added fullscreen mode 2025-07-05 13:30:25 +02:00
kevinveenbirkenbach 25dbc3f331 Added correct iframe size loading 2025-07-05 13:17:38 +02:00
kevinveenbirkenbach bb8799eb8a Added functionality for iframe url 2025-07-05 11:54:20 +02:00
kevinveenbirkenbach 86fd72b623 Solved wrong environment bug 2025-07-05 11:41:18 +02:00
kevinveenbirkenbach 9c24a8658f Solved other port mapping issues 2025-07-05 11:06:42 +02:00
kevinveenbirkenbach 5fc19f6ccb Solved other port bugs 2025-07-05 10:55:32 +02:00
kevinveenbirkenbach 35bfeeb51e Added correct env path import 2025-07-05 10:12:49 +02:00
kevinveenbirkenbach dfbc840c69 Optimized default port 2025-07-05 09:40:11 +02:00
kevinveenbirkenbach 1bea9703ea Added port via env 2025-07-05 09:32:07 +02:00
kevinveenbirkenbach 4d68ed2a24 Solved caching bug 2025-07-01 23:28:25 +02:00
kevinveenbirkenbach a0c7a7e8ca Added exception for debugging 2025-04-10 14:01:53 +02:00
kevinveenbirkenbach 3ec92ff853 Update README.md 2025-04-08 18:12:08 +02:00
kevinveenbirkenbach 8cb2f578df Added --delete and browse 2025-03-21 18:36:00 +01:00
kevinveenbirkenbach 412a7bae16 Added helper functions for portfolio 2025-03-20 00:23:35 +01:00
kevinveenbirkenbach 8e280de139 Added header h1 pointer 2025-03-19 17:20:08 +01:00
kevinveenbirkenbach 19f47a82fa Implemented iframe logic for modals 2025-03-19 17:16:44 +01:00
kevinveenbirkenbach 3b4dc298f8 Rafactored iframe.js 2025-03-19 16:53:49 +01:00
kevinveenbirkenbach 79e10e97b7 Marked header h1 as clickable 2025-03-19 16:16:27 +01:00
kevinveenbirkenbach f5a9838474 Added logic for reload via header 2025-03-19 16:14:06 +01:00
kevinveenbirkenbach 242d1b9948 Implemented iframes for menu items and imprint 2025-03-19 15:54:19 +01:00
kevinveenbirkenbach 3db9872791 deleted test file 2025-03-19 15:48:34 +01:00
kevinveenbirkenbach 6a0db00f24 Modified scrollbars for iframes 2025-03-18 15:03:03 +01:00
kevinveenbirkenbach 3529749df5 Added iframe draft 2025-03-18 14:59:54 +01:00
kevinveenbirkenbach ae775916b0 Replaced German by English comments 2025-03-18 14:27:07 +01:00
kevinveenbirkenbach 45969feaed Refactored card logic 2025-03-18 14:10:30 +01:00
kevinveenbirkenbach 464d307ee8 Optimized nav corners 2025-03-18 14:03:19 +01:00
kevinveenbirkenbach 4aceb2ed62 Solved main shadow bug 2025-03-18 13:56:42 +01:00
kevinveenbirkenbach a8a2efd091 Solved scrollbar issues 2025-03-18 13:49:35 +01:00
kevinveenbirkenbach 3284684282 Solved main size bug 2025-03-18 13:30:38 +01:00
kevinveenbirkenbach 20c4a4809b Refactored css 2025-03-18 13:10:35 +01:00
kevinveenbirkenbach 898f7479c9 Added scrollbar draft 2025-03-18 12:50:14 +01:00
kevinveenbirkenbach 56513230e4 Implemented flexible card box sizes depending on card box amount 2025-03-18 03:56:37 +01:00
kevinveenbirkenbach c35f44baef Added Funding 2025-03-12 20:52:48 +01:00
kevinveenbirkenbach ef7059e748 Solved title bug 2025-03-12 11:14:40 +01:00
kevinveenbirkenbach 6597fb2862 Implemented better differenciation between platform and company 2025-02-19 23:47:34 +01:00
kevinveenbirkenbach 6ba6b2ea99 Implemented to set just class for cards 2025-02-19 22:41:41 +01:00
kevinveenbirkenbach 94b4e1f883 Added support for css logos 2025-02-19 20:53:05 +01:00
kevinveenbirkenbach e03e740149 Solved bug 2025-01-17 10:56:45 +01:00