Commit Graph

32 Commits

Author SHA1 Message Date
3f30621630 feat(assets): probe-first resolver + SPOT for IMAGE_NAME/PORT + README screenshot
Probe-first asset resolution (regression fix)
---------------------------------------------

cache_manager.cache_file() returned either a relative cache path
(success) or None (failure). The previous app.py fallback
asset['cache'] = cached or asset['source'] mixed both types into
one field, which the template wrapped in url_for('static', ...)
regardless — producing broken
/static/https://file.infinito.nexus/.../logo.png URLs whenever the
source couldn't be downloaded.

- New app/utils/asset_resolver.py: HEAD-probes the URL (3 s
  timeout, image/* content type). On hit, embed directly via a
  new external_url field — no download required. On miss, fall
  back to cache_manager.cache_file. If that also fails, expose
  the source URL via external_url so the browser shows the alt
  text instead of an empty src.
- app.py exposes an asset_src(asset) context processor that
  picks external_url first, then url_for('static', cache),
  so the template never wraps an absolute URL in a static prefix.
- Templates (base, navigation, card) switch to asset_src(...) and
  gate the card image branch on cache or external_url.
- 16 unit tests cover every probe/cache/fallback branch; one live
  integration test exercises the canonical
  https://file.infinito.nexus/assets/img/logo.png to prove the
  probe-first path works end-to-end (cache dir stays empty).
- config.sample.yaml: new Infinito.Nexus card driven by the same
  canonical asset URL.

Single source of truth for IMAGE_NAME and PORT
----------------------------------------------

- env.example is now the only place the literal values live.
- Makefile and docker-compose.yml reference \$(IMAGE_NAME) /
  \${IMAGE_NAME:?…} (same for PORT); no defaults, no silent
  fallbacks.
- New make env / make config bootstrap .env / app/config.yaml
  from their checked-in templates. Idempotent.
- All container-using targets depend on the two bootstrap targets
  so a fresh checkout runs in a single invocation.
- Recipes source .env at recipe-execution time so they pick up a
  freshly bootstrapped .env in the same make invocation.

README
------

- Screenshot added under the title.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 12:19:15 +02:00
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
f8c2b4236b Added d-flex to place logo next to brand 2025-07-21 14:24:28 +02:00
46b0b744ca Added logo to navbar when in fullscreen 2025-07-21 11:39:59 +02:00
d99a8c8452 Added restore functionality to small logo 2025-07-07 15:06:36 +02:00
430ea4a120 Solved loading bug 2025-07-07 13:19:49 +02:00
97378422bd Solved more CSS bugs 2025-07-05 21:07:31 +02:00
d0f8d7d172 Added logo for small screen 2025-07-05 18:54:18 +02:00
20b6c731b8 Added onclick functionality for menu items 2025-07-05 18:32:26 +02:00
2f63009c31 Implemented full width function 2025-07-05 18:00:23 +02:00
242d1b9948 Implemented iframes for menu items and imprint 2025-03-19 15:54:19 +01:00
3529749df5 Added iframe draft 2025-03-18 14:59:54 +01:00
464d307ee8 Optimized nav corners 2025-03-18 14:03:19 +01:00
11eccf2eca Integrated buttons für nav 2025-01-15 13:54:29 +01:00
d1bbecd71b Reactivated navbar toggle 2025-01-15 13:21:42 +01:00
69fabafd9a Refactored code and implemented that menüs open to the top 2025-01-15 13:07:02 +01:00
9f143e39b4 Removed link opening bug 2025-01-15 02:19:33 +01:00
9ff356ba70 Refactored code and implemented new childrens loading 2025-01-15 01:35:50 +01:00
f017cacebe Optimized logic in which direction menus open 2025-01-14 17:34:30 +01:00
573a3be360 Optimized menus for smartphone 2025-01-14 17:08:59 +01:00
28cd3e1f2f Solved link bug with subitems 2025-01-10 13:56:37 +01:00
9d510ec8fb Pulled navigation.html.j2 2025-01-10 11:45:22 +01:00
9455f40079 Optimized modals 2025-01-09 14:59:30 +01:00
d59cc73470 Implemented hover submenüs 2025-01-09 14:42:38 +01:00
7a66184a46 Added dynamic submenus 2025-01-09 14:36:44 +01:00
c87c1df10a Finished implementation of configuration resolver 2025-01-09 14:20:59 +01:00
14ccedf1c1 modified icon function 2025-01-09 12:20:57 +01:00
9b763cd34b Optimized navigation 2025-01-09 09:48:56 +01:00
00e8047fb7 Added eversport activities 2025-01-08 22:15:36 +01:00
4ca34b55de Optimized menu 2025-01-08 22:02:15 +01:00
f9af3e33b8 Added tooltipps 2025-01-08 20:17:32 +01:00
4b2c251e79 Optimized menus 2025-01-08 19:37:24 +01:00