This PR contains the latest updates from the generic Website template, which have been added while working on #loud-amsterdam. Reviewed-on: #1 Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Utility
The general-purpose helpers the platform's services share: small, single-purpose methods with no dependencies beyond Foundation and no ties to any web framework.
Overview
| Role | Types |
|---|---|
| Validation | NormalizeEmail, which reduces a submitted email address to its canonical form |
Design rules
- Dependency-free. A helper belongs here only while it needs nothing beyond Foundation; one that grows a framework dependency belongs in the package owning that framework's concerns (e.g.
Infrastructurefor Hummingbird). - Method structs. Helpers hold their lifetime-fixed configuration in
initand take only per-call inputs incallAsFunction.
Layout
Sources are split by visibility, then by kind, one type per file:
Sources/
└── Public/
└── Methods/ NormalizeEmail
Tests/
├── Cases/ the test suites, mirroring the Sources/ layout
└── Utils/ the suite Tag constants
Testing
Every suite carries a tag for the kind of API it exercises — .method, declared in Tests/Utils/Extensions/Tag+Constants.swift — so test plans and summaries can slice a run by kind. A new suite adopts the tag matching its subject, or adds one when none fits.
Requirements
- Swift 6.3 toolchain (
swift-tools-version:6.3). - macOS 15, matching the sibling packages (the services deploy to Linux containers; the packages carry no UI platforms).
- No package dependencies — Foundation only.