| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-08-06 | 3.4 kB | |
| v0.2.2 -- project media_ layout plans, brochures, construction photos source code.tar.gz | 2026-08-06 | 877.0 kB | |
| v0.2.2 -- project media_ layout plans, brochures, construction photos source code.zip | 2026-08-06 | 1.2 MB | |
| Totals: 3 Items | 2.1 MB | 0 | |
A note on this release's CI. This tag was cut during a major GitHub Actions platform outage, and its own CI run (#104) never completed — jobs failed to be acquired by any runner, with a workflow-level internal server error. The run was never re-attempted. The code in this tag is nevertheless covered by a fully green run:
498de53(v0.2.3) is a direct descendant of this commit, and its run passed all six jobs with real log evidence — Playwright 12/12, docker-compose healthcheck booting the tagged build, and a native upgrade from a populated previous-release database. This release is published after the fact so the releases page reflects what actually shipped, rather than skipping a version silently.
Added
- Layout plan / brochure / photo uploads.
UploadServicehas supported these categories since Phase 2 but no route ever called it — this release wires it up. Staff get a Media panel on a project's detail page (upload, list, download, delete); customers see the same files under a new "Layout plans & brochures" section on the portal Property page, with real download links. - Construction-progress photos actually render now. The upload path for
ConstructionUpdateMediahas existed since v0.2.1's own predecessor, but there was never a serving route on either side — the portal only ever showed a photo count. Staff and portal both gained a download route, and the portal Property page now renders the real images inline instead of a bare "N photo(s)" line. - Per-project storage cap. Layout plans, brochures, photos, and construction-progress photos all roll up disk usage under one project — unbounded uploads on a self-hosted box eventually fill the disk, which surfaces as Postgres refusing writes and looks like total system failure rather than a storage problem. A configurable file-count cap (default 50) and total-size cap (default 500MB) per project are enforced before any file touches disk, with a clear error naming the limit. Configurable via Company Config (
projectMediaMaxFiles/projectMediaMaxBytes). - IDOR coverage for both new download routes: a customer with a booking in one project cannot fetch another project's media by guessing an id — proven via the same raw-connection RLS discipline as every other portal IDOR test in this codebase, since both
project_media/construction_update_media's portal RLS predicates are multi-hop and therefore not mirrored at the JS layer. - Two new e2e Playwright scenarios: staff uploads a layout plan through the real UI and the customer downloads it in the portal; and a staff-published construction-progress photo renders as a real decoded image in the portal (not just a 200 response).
Still missing (at the time of this tag)
- Custom field values. Admins could define custom fields (Applicant, Unit, etc.) via Admin → Custom Fields, but no form anywhere in either app captured or displayed a value for one.
This has since been delivered in v0.2.3, which also closed a data-integrity hole and a portal data-exposure issue in the same area. If you are installing fresh, go straight to v0.2.3.
Upgrading
Native installs: deploy/native/upgrade-native.sh. Superseded by v0.2.3 — upgrade to that instead unless you have a specific reason to pin this version.