Commit Graph
100 Commits
Author SHA1 Message Date
javier 9b16ce3339 Updated the Negotiate method in the Localization package to add explicit language requests. 2026-08-30 19:05:52 +02:00
javier 79cfb42fbb Updated the LocalizationMiddleware middleware in the Infrastructure package to read explicit language requests. 2026-08-30 19:03:52 +02:00
javier 6c75d5e743 Improved the bootstrap script to write the canonical site origin and also, fixed some nasty bugs. 2026-08-30 09:53:39 +02:00
javier a3d0bc75fd Implemented the validation for the name and slug inputs in the bootstrap script. 2026-08-30 09:39:28 +02:00
javier 1cae261dff Improved the .dockerignore definitions in the Website service target. 2026-08-30 09:22:10 +02:00
javier 8bf6e86ffb Implemented the "tagging()" method for the the AnalyticsEvent+Tagging extension in the Infrastructure package. 2026-08-30 09:15:59 +02:00
javier cf58b97de1 Updated the ConfigReader+Properties extension in the Website service target to fail to the boot in case of unknown database tokens. 2026-08-30 09:03:50 +02:00
javier 5a833be33d Updated the documentations in the Website service target. 2026-08-30 08:37:19 +02:00
javier 8a9402e8f1 Improved the documentation of the README file in the Utility package. 2026-08-30 08:35:44 +02:00
javier c1ca6609e4 Improved the documentation of the README file in the Persistence package. 2026-08-30 08:35:35 +02:00
javier d40f988877 Improved the documentation of the README file in the Localization package. 2026-08-30 08:35:21 +02:00
javier 4ee1abbd67 Improved the documentation of the README file in the Infrastructure package. 2026-08-30 08:35:06 +02:00
javier 3358946e3d Added the ImageWidth enumeration to the Website library target. 2026-08-25 17:23:29 +02:00
javier c09ac657ab Added font preload links to the Page+Defaults extension in the Website library target. 2026-08-25 17:05:08 +02:00
javier 7aee1cd949 Added immutable caching to the fingerprinted media types for the ConfigReader+Properties extension in the Website service target. 2026-08-25 16:59:07 +02:00
javier 988090a511 Added a configurable site origin to the ConfigReader+Properties extension in the Website library target. 2026-08-25 16:24:03 +02:00
javier 5b2da4eb16 Added the MP4 and WOFF2 cases to the AssetExtension enumeration. 2026-08-25 16:06:05 +02:00
javier 1033cab2af Added an optional founder reference to the Organization node in the Infrastructure package. 2026-08-24 22:37:45 +02:00
javier 74e81e1517 Refactored the StaticFile enumeration in the Website library target into a structure. 2026-08-24 22:37:13 +02:00
javier d8cf1abf6a Changed the default Open Graph locale in the Website library target from en_US to en_NL. 2026-08-24 22:33:13 +02:00
javier eb0a2127f6 Reworded the documentation of the organization identifier helper in the Infrastructure package target. 2026-08-24 22:31:44 +02:00
javier 0ee8368e1a Added the organization identifier helper to the StructuredData type in the Infrastructure package target. 2026-08-24 22:29:00 +02:00
javier ecafb14608 Reworded the README documentation in the Infrastructure package target. 2026-08-24 17:49:06 +02:00
javier c64c8b726d Added the email property to the organization structured data in the Infrastructure package target. 2026-08-24 17:48:31 +02:00
javier fec52b7942 Added the noindex robots tag to the responses on the Health controller in the Website library target. 2026-08-24 17:47:57 +02:00
javier 88bcae9dc9 Added the WebP case to the Asset extensions in the Infrastructure package. 2026-08-24 17:44:43 +02:00
javier c0f56a4897 Wired the trailing-slash redirect into the App router in the Website service target. 2026-08-24 17:37:46 +02:00
javier 5996a78ff3 Documented and enabled the HTTPS redirect in the Website service. 2026-08-24 17:37:33 +02:00
javier f6a77305ac Trailing slash middleware for the Infrastructure package (#53) 2026-08-24 17:33:52 +02:00
javier 1520c44b16 HTTPS redirect middleware for the Infrastructure package (#52) 2026-08-24 17:32:02 +02:00
javier fcfb3f21d5 Added the organization descriptors and a number value to the structured data types in the Infrastructure package. 2026-08-23 10:13:37 +02:00
javier 6c014525bf Updated the analytics origin documentation for the Website service target. 2026-08-20 01:14:49 +02:00
javier 6ecc20987f Updated the README file in the repository root. 2026-08-20 01:10:37 +02:00
javier b6ad9ff497 Fixed the analytics and security headers for the Website service target. 2026-08-20 00:55:09 +02:00
javier 5422c8466d Merge branch 'setup' into template 2026-08-16 09:09:55 +02:00
javier 091c0f0686 Added an optional per-asset folder to the Asset protocol and the AssetExtension extension in the Infrastructure package. 2026-08-15 23:44:06 +02:00
javier 459002544b Merge branch 'setup' into template 2026-08-15 11:39:26 +02:00
javier 7d53be539e Bundled the static files into the App test target. 2026-08-15 11:32:56 +02:00
javier 844a85f88c Added the Event type to the Analytics type in the Infrastructure package. 2026-08-15 11:31:59 +02:00
javier a5305c6044 Improved the Docker image and build context for the Website service target. 2026-08-13 15:57:11 +02:00
javier c075adad84 Hardened the Docker build of the Website service target. 2026-08-13 03:19:10 +02:00
javier 2206d71997 Turned the analytics tracker off by default in the template. 2026-08-13 02:57:47 +02:00
javier b68eac4375 Merge branch 'setup' into template 2026-08-13 02:37:43 +02:00
javier 397ad6b896 Added the "analytics.recorder" flag to the Website service. 2026-08-13 01:29:44 +02:00
javier 4bb3e9098c Added the session recorder script to the Page protocol in the Infrastructure package. 2026-08-13 01:19:19 +02:00
javier 3bcae4d789 Added the "recorder" flag to the Analytics type in the Infrastructure package. 2026-08-13 01:19:12 +02:00
javier 964e7fa707 Update the documentation of the README files in the packages and in the Website service target. 2026-08-13 00:55:34 +02:00
javier 70c0cc5303 Added a connection pool timeout to the Configuration type in the Persistence package. 2026-08-13 00:14:51 +02:00
javier d7465d03cc Updated the Probe method in the Persistence package with a query deadline. 2026-08-13 00:11:59 +02:00
javier 8303598244 Documented the database connection pooling in the Website service. 2026-08-11 01:35:43 +02:00
javier 19fa9d8d8c Hardened the database configuration in the Website service target. 2026-08-10 23:42:22 +02:00
javier a88569ad4c Improved the verbosity of the documentation for the README file in the packages. 2026-08-10 16:35:13 +02:00
javier 98cfbdd105 Updated the "db-reset" task in the Makefile in the Website service to actually delete the local data. 2026-08-10 16:25:05 +02:00
javier 0796aa314e Moved the PostgreSQL TLS context building to the Service initialiser in the Persistence package. 2026-08-05 01:36:19 +02:00
javier e51f09c66f Added PostgresNIO and NIOSSL to the Persistence library target. 2026-08-05 01:30:59 +02:00
javier 52f092a4d7 Refactored the startup reply in the fake PostgreSQL server in the Persistence tests target. 2026-08-05 01:30:52 +02:00
javier f8a263168e Updated the documentation for the Website service target to name/reference PostgreSQL instead. 2026-08-05 01:30:32 +02:00
javier 6156cf5b0d Migrated the Website service tooling to use PostgreSQL instead. 2026-08-05 01:26:54 +02:00
javier 9b4a780ea3 Migrated the Website service and library targets to use Persistence package with PostgreSQL instead. 2026-08-05 01:26:26 +02:00
javier 3d27a27cb1 Migrated the documentations and test cases in the Persistence package to use/name PostgreSQL instead. 2026-08-04 17:46:04 +02:00
javier 8ca31e415c Migrated the fake plaintext server in the Persistence tests target to use PostgreSQL instead. 2026-08-04 17:44:12 +02:00
javier 1fe7ef2049 Migrated the Service method in the Persistence package to use PostgreSQL instead. 2026-08-04 17:44:02 +02:00
javier d7d2709f88 Migrated the Driver and TLS enumerations in the Persistence package to use PostgreSQL instead. 2026-08-04 17:43:44 +02:00
javier 02ab9671b1 Swapped the MySQL package dependencies for PostgreSQL in Persistence package. 2026-08-04 17:43:34 +02:00
javier 3463556c13 Updated the documentation of the README file in the Infrastructure package. 2026-08-04 12:19:27 +02:00
javier 16acdf0f3d Implemented the analytics preconnect hint on the Page protocol in the Infrastructure package. 2026-08-04 12:19:20 +02:00
javier c603421c28 Implemented the scripts' deferral on the Page protocol in the Infrastructure package. 2026-08-04 12:19:12 +02:00
javier 5c070c2b1a Integrated Analytics into the Infrastructure package (#40)
This PR contains the work done to define the `Analytics` type into the _Infrastructure_ package and also, to integrate this type into its `Page` protocol.

Reviewed-on: rock-n-code/loud-amsterdam#40
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
2026-08-04 11:23:25 +02:00
javier fd5aa84924 Improved the PNG assets optimization on the Dockerfile in the Website service target to do it recursively. 2026-08-02 03:06:17 +02:00
javier a4db1fe29c Updated the documentation for the README file of the template. 2026-08-02 03:04:50 +02:00
javier d10ced84a8 Fixed an issue in the bootstrap script when project name left as placeholder. 2026-08-02 02:59:53 +02:00
javier 422560ec10 Prompt the canonical site URL during bootstrap script to rewrite website crawlers. 2026-08-02 02:57:43 +02:00
javier a5ee02bb0b Improved the PNG assets optimization on the Dockerfile in the Website service target to do it recursively. 2026-08-02 02:41:46 +02:00
javier 59ce633499 Merge branch 'setup' 2026-08-02 02:34:42 +02:00
javier 64d2d5943a Updated the documentation of the README file in the Website service target. 2026-08-02 00:58:11 +02:00
javier a056f7f69a Renamed the "error" static assets at the Resources folder in the Website service target as "not-found". 2026-08-01 23:07:04 +02:00
javier 2c571233bc Renamed the Error page in the Website library target as NotFound. 2026-08-01 23:06:22 +02:00
javier b680ae0689 Structured Data support for the Page protocol in the Infrastructure package (#32)
This PR contains the work done to introduce a `StructuredData` type that pages use to describe themselves to search engines as schema.org JSON-LD, and wires it into the Page protocol so the payload renders automatically in the document head.

Reviewed-on: rock-n-code/loud-amsterdam#32
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
2026-08-01 17:21:16 +00:00
javier 1d1f0a9dc9 Utility package docker fix in the Website service target (#31)
This PR contains the work done to included the Utility package into the Docker deployment process in the Website service target.

Reviewed-on: rock-n-code/loud-amsterdam#31
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
2026-08-01 11:53:36 +00:00
javier 5c9fde9d41 Social Card tweaks in the Infrastructure package. (#30)
This PR contains the work done to address certain tweaks in the newly-introduced _Social Card_ types in the **Infrastructure** package.

Reviewed-on: rock-n-code/loud-amsterdam#30
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
2026-08-01 11:25:36 +00:00
javier 5f4316b85b Added the Utility package (#29)
This PR contains the work done to create the new **Utility** package within the project, and also included in it the `NormalizeEmail` method, as it's not something that belongs to the **Infrastructure** package.

Reviewed-on: rock-n-code/loud-amsterdam#29
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
2026-08-01 11:15:27 +00:00
javier efc933d5d0 Extra tags and Social Card integration in the Infrastructure package (#28)
This PR contains the work done to extends the `Page` protocol with the head tags that control search snippets and link previews: a meta description, a canonical URL, and a social card rendered as _Open Graph_ and _Twitter_ meta tags. All three are optional with nil defaults, so existing conformers compile and render unchanged.

Reviewed-on: rock-n-code/loud-amsterdam#28
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
2026-08-01 10:57:29 +00:00
javier ea00b94841 Tweaks and fixes throughout the project (#27)
This PR contains the work done to do a little bit of housekeeping pass across all packages and the Website service.

To provide further details about the work:
* Refreshed the READMEs and source documentation to match the current code;
* Tagged every test case consistently across the Infrastructure, Localization, Persistence, and Website test targets;
* Removed Website middleware tests now covered by Infrastructure's own suite;
* Conformed the `PrepareDB` method to Sendable;
* Relaxes the production Compose DATABASE_TLS default from require to prefer;
* Added Persistence test verifying the prefer posture falls back to plaintext connections.

Reviewed-on: rock-n-code/loud-amsterdam#27
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-30 06:33:57 +00:00
javier 0887135328 Fixes for the Localization package (#26)
This PR contains the work done to

Reviewed-on: rock-n-code/loud-amsterdam#26
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-28 23:37:33 +00:00
javier cdded06ba3 Renamed the Web package as Infrastructure (#25)
This PR contains the work done to rename the _Web_ package as _Infrastructure_, to provide a clear naming and purpose to this particular package within the project.

To provide further details about the work:

* Infrastructure
  * Asset fingerprinting: an FNV-1a token derived from the static files directory, appended as ?v= to asset URLs so deploys bust caches; pre-rendered pages also revalidate via weak ETags.
  * New middlewares: fixed-window RateLimitMiddleware (per-client budgets keyed by trusted X-Forwarded-For or remote address) and VaryMiddleware (Accept-Encoding on every response); SecurityHeadersMiddleware now also stamps error responses.
  * Auto-generated HEAD endpoints, cache max-age configuration, and Docker build/Compose refinements.
  * Protocols and scaffolding: Asset/AssetExtension, the Page protocol (viewport, stylesheets, scripts, versioned URLs), and LocalizedRequestContext.
  * Rate limiter's counter store swapped from an actor to a Mutex (no executor hop per request) with amortized batch eviction instead of O(n²) scans under client floods.
  * FingerprintAssets reports unreadable files to a logger instead of silently producing a token that never busts their cache.

Reviewed-on: rock-n-code/loud-amsterdam#25
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-23 01:04:37 +00:00
javier a868275347 Renamed the Web package as Infrastructure (#24)
Reviewed-on: rock-n-code/loud-amsterdam#24
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-22 21:26:55 +00:00
javier 242cb92bc5 Few small fixes for the Website service (#23)
This PR contains the work done to address small fixes.

To provide further details:

* HTML template
  * Removed the duplicate charset <meta> tag from the Page protocol's head property.

* Router
  * Enabled auto-generated HEAD endpoints so every GET route gets a HEAD sibling. Uptime monitors and crawlers probing with HEAD now receive the page's status and headers instead of a 404.

* Docker
  * Pinned the asset optimizer versionsvia build args so minified output is reproducible for a given Dockerfile commit.
  * Narrowed the build context copied into the release stage, only package manifests and Swift sources are copied. Static assets come from the separate assets stage after the binary is built.
  * svgo now minifies all SVGs recursively rather than just icon.svg, and the staging step creates Resources/Static explicitly instead of conditionally moving the unminified sources.
  * Added curl to the runtime image (needed for the container healthcheck) and .claude to .dockerignore.

* Docker-compose
  * Added a `healthcheck` to the website service hitting GET /health (liveness only), so Compose reports process health without coupling container health to database reachability.

Reviewed-on: rock-n-code/loud-amsterdam#23
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-19 18:23:46 +00:00
javier d0058dc636 Shared HTML template for the Website service (#22)
This PR contains the work done to define a `Page` protocol that extracts the HTML scaffolding that `IndexPage` and `ErrorPage` pages duplicated, so every page of the website declares only what makes it unique — its content, title, and assets — while the document structure lives in one place. Also cleans up imports across the workspace.

Reviewed-on: rock-n-code/loud-amsterdam#22
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-19 08:56:35 +00:00
javier 6bdc127057 Improvements to Icons for the Website service (#21)
Reviewed-on: rock-n-code/loud-amsterdam#21
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-19 03:35:50 +00:00
javier 698cd60521 Static asset magnification for the Website service (#20)
This PR contains the work done for build-time optimization of the static assets served by the Website service. The production Docker image now ships minified JS/CSS and losslessly recompressed images, while the sources in the repository stay readable and un-minified.

Reviewed-on: rock-n-code/loud-amsterdam#20
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-19 03:02:17 +00:00
javier 79ecf311f4 Local environment configuration support for the Website service (#19)
This PR contains the work done to amend the `.env.local` handling for the Website service, plus other small fixes.

Reviewed-on: rock-n-code/loud-amsterdam#19
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-19 02:28:05 +00:00
javier daf275b121 Improved the static assets definitions in the Website service (#18)
This PR contains the work done to overhaul the static asset definitions for the Website service.

To provide further details about the work:

* Website library
  * Overhauled the `StateFile` enumeration to reduce the number of cases to one case per logical file name, each exposing a `fileExtensions` list.
  * Wired everything into the pages with a consistent ordering convention: stylesheets load shared-first so the page sheet wins the CSS cascade; scripts load page-first with shared.js last. The error page also gained the shared stylesheet and its scripts; the index page gained its page CSS/JS and the new touch icon link.
  * Used the `StaticFile` enumeration as a single source of truth for every _href_/_src_ in the `IndexPage` and the `ErrorPage` pages, eliminating hardcoded asset paths.

* Website service
  * Added new assets to the Resources folder:
    * `apple-touch-icon.png`
    * `css/index.css`
    * `js/index.js`
    * `js/error.js`
    * `sitemap.xml`
  * Renamed existing assets within the Resources folder:
    * `css/style.css` → `css/shared.css`
    * `js/app.js` → `js/shared.js`
  * Fixed the working-directory location for the scheme in the Xcode project.

Reviewed-on: rock-n-code/loud-amsterdam#18
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-19 02:08:59 +00:00
javier a045a23519 Web support for the Website service (#17)
This PR contains the work done to introduce a new Web Swift package that provides a reusable, declarative way to register route controllers on a Hummingbird router, then adopt it in the Website service.

To provide further details about the work:

* Web package
  * The `RouterController` protocol — a Sendable protocol to group controllers behind one `routes` property.
  * The `RouteCollectionBuilder`  — a result builder that collects controllers' route collections into a stack, with full support for optionals, conditionals, and arrays.
  * The `addController(_:)` method — a `RouterMethods` extension letting controllers be listed declaratively and adding each one's routes at the router root.

* Website service
  * Added Web as a dependency of the _WebsiteLibrary_ target.
  * Conformed the `RootController` and `HealthController`controllers to the `RouterController` protocol.
  * Updated the `App+Build` extension to to use the cleaner `router.addController { … }` instead.

Reviewed-on: rock-n-code/loud-amsterdam#17
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-19 00:47:49 +00:00
javier 4a8413359f Converted the website service project into a reusable template. 2026-07-11 16:20:33 +02:00
javier a4906f8f26 Fixed container paths for the Packages test targets in the Website test plan. (#16)
Reviewed-on: rock-n-code/loud-amsterdam#16
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-11 10:43:27 +00:00
javier 4c57e15991 Fixed test case for the Persistence package. (#15)
This PR contains the work done to amend a test case within the Persistence tests target that was failing.

Reviewed-on: rock-n-code/loud-amsterdam#15
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-11 10:34:59 +00:00
javier a0f5c79434 Renamed the WebsiteCore target in the Website service package as WebsiteLibrary. (#14)
This PR contains the work done to rename the _Website_ service's library SwiftPM target from `WebsiteCore` to `WebsiteLibrary`, updating every reference across the manifest, source, tests, Xcode schemes, and documentations.

Reviewed-on: rock-n-code/loud-amsterdam#14
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-11 09:41:21 +00:00
javier dc6b22e648 Database setup for the Website service (#13)
This PR contains the work done to introduce a _Fluent_-based persistence layer for the Website service, selectable at runtime alongside the existing in-memory default, plus the local dev tooling and docs to support it.

To provide further details about the work:

* Persistence package
  * The `Driver` and `TLS` enumerations
  * The `Configuration` type
  * The `Service` factory that builds the  service
  * `PrepareDB` for migrations registration
  * The `Probe` for readiness checks.

* App integration
  *  Builds the driver, registers migrations, and attaches `Fluent` to the service lifecycle so it starts/stops with the HTTP server.
  * Migrate-on-boot is gated to the in-memory backend; MySQL/MariaDB is migrated out of band via --database-migrate so shared databases never race on startup.
  * The `ConfigReader+Properties` extension maps database.* config keys onto the driver.

* Library
  * Added database configuration constants.
  * The `HealthController` controller gains a readiness probe: `GET /health/ready` checks whether the database is reachable, separate from the existing liveness check.

* Others
  * Updated the `docker-compose` files to support a database service behind a database profile, and hardened for local development
  * New database targets on the `Makefile` file and overall documentation updated
  * Updated the `.env.local`, `Dockerfile`, and `README` files to document the persistence workflow, config keys, and local DB commands

Reviewed-on: rock-n-code/loud-amsterdam#13
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-11 09:15:58 +00:00
javier 9774454bba Website service Makefile and Localization package fixes (#12)
This PR contains the work done to get the Website service building and running correctly in its Linux container. The service depends on the local _Localization_ package, whose String-Catalog localization was Darwin-only and broke the Docker build. Thus the localization internals have been reworked to be platform-agnostic and fixes the container build context so the local package is actually available during the build.

* Localization package
  * Replaced the Darwin-only `String.LocalizationValue` / `String(localized:)` path with a StringCatalog type that reads raw JSON from a given `.xcstrings` file, so lookups resolve identically on macOS and Linux.
  * The `LanguageList` now derives available languages from the catalog instead of `Bundle.localizations`
  * The `Negotiate` does explicit _Accept-Language_ matching (exact tag, then primary subtag) instead of the Linux-broken `Bundle.preferredLocalizations`.
  * Switched the catalog resource rule from `.process` to `.copy` (in both Localization and Website manifests) so the raw `.xcstrings` ships verbatim on every platform.
  * Introduced a `CatalogResolving` protocol as a seam between the localizers and the storage backend, enabling test injection and a future native-Apple backend without changing callers.

* Website Docker build
  * Build context moved to the repository root so the relative-path `Localization` package is inside the context; `Dockerfile`, `docker-compose.override.yml`, and the _img-release_ make target updated to the new context/paths.
  *  Added a root `.dockerignore` to keep the context lean.

Reviewed-on: rock-n-code/loud-amsterdam#12
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-09 23:00:55 +00:00
javier b6f9633420 Adjustments to the Localization package dependency (#11)
This PR contains the work done to refactor the _Localization_ package and tidy the project a little bit.

To provider further details about the work:

* The `Negotiate` function was moved to the _Localization_ package.
* The `WebsiteRequestContext` context no longer resolves a default language at creation; it starts empty and relies on the `LocalizationMiddleware` middleware to fill it in.
* Fixed the local dependency path to Packages/Localization for the **Website** package as it only resolved inside the Xcode workspace before, breaking swift build, the Makefile, and the Docker build).
* Updated the `README` file to document language negotiation, the GET /health route, and the full middleware chain; doc comments across the moved/renamed types were brought back in sync with the code.

Reviewed-on: rock-n-code/loud-amsterdam#11
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-07-03 03:48:25 +00:00