Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1336 commits
Select commit Hold shift + click to select a range
7a04acd
fix(app): stop className from dropping Pressable state styles
simonvanlierde Aug 12, 2026
4bff718
refactor(app): converge product and profile style factories onto Nati…
simonvanlierde Aug 12, 2026
da5d16b
fix(app): include additional configuration files in Dockerfile for bu…
simonvanlierde Aug 12, 2026
ea7be03
fix(deploy): make secrets readable by container uids and check placeh…
simonvanlierde Aug 12, 2026
8c3cb9e
docs(deploy): document backup directory ownership for first-time hosts
simonvanlierde Aug 12, 2026
8919ef2
chore(deploy): tidy secret-mode check and cutover duplication
simonvanlierde Aug 12, 2026
a239ee2
docs(operations): reflect secret mode checks and backup dir ownership
simonvanlierde Aug 12, 2026
f0751da
fix(deploy): reject legacy placeholder-prefix secrets in secrets checks
simonvanlierde Aug 12, 2026
21990a6
docs(deploy): correct pg_isready healthcheck claim and note legacy pl…
simonvanlierde Aug 12, 2026
f0ec2d5
fix(deploy): warn instead of fail on placeholder values in optional s…
simonvanlierde Aug 12, 2026
ee8b5e4
docs(deploy): require owning-role membership for the migrator on adop…
simonvanlierde Aug 12, 2026
c167037
refactor(app): delete unused vendored ui primitives and their deps
simonvanlierde Aug 12, 2026
ec90996
fix(deploy): template external identity credentials as empty instead …
simonvanlierde Aug 12, 2026
2e8a2cd
refactor(app): converge on one curated Lucide icon component
simonvanlierde Aug 12, 2026
2740747
refactor(app): prune dead theme tokens, constants, and exports
simonvanlierde Aug 12, 2026
1a1488c
fix(ops): restore real dumps in the smoke by creating extensions and …
simonvanlierde Aug 12, 2026
146ebd0
fix(ops): keep watchdog foreground and stdin-detached so it cannot ha…
simonvanlierde Aug 12, 2026
4a805ff
refactor(app): finish NativeWind convergence for fontSize-only style …
simonvanlierde Aug 12, 2026
5b49736
refactor(app): unify error states on one ErrorState component
simonvanlierde Aug 12, 2026
0dcf42f
refactor(app): call toast directly instead of the CamerasSnackbar shim
simonvanlierde Aug 12, 2026
93a8913
fix(ops): read the offsite repository from .env in backup-offsite-copy
simonvanlierde Aug 12, 2026
a9d1532
docs(deploy): wire the watchdog cron example to a dead-man's switch
simonvanlierde Aug 12, 2026
f5d7937
fix(app): memoize useAppFeedback so its callbacks stay referentially …
simonvanlierde Aug 12, 2026
85cb3d3
refactor(app): fold SectionNav into its layout and move product-only …
simonvanlierde Aug 12, 2026
4ac84a8
refactor(app): retire the plain text variant onto real type-scale steps
simonvanlierde Aug 12, 2026
6dcc9a6
docs(app): drop stale paper-migration framing from component comments
simonvanlierde Aug 12, 2026
d15da52
docs(assets): reconcile DESIGN.md colour table with palette.json and …
simonvanlierde Aug 12, 2026
c7099c7
fix(backend): correct recording_session pk in the encryption migratio…
simonvanlierde Aug 12, 2026
ffa114f
feat(assets): generate radius/shadow/type/chart tokens from tokens.json
simonvanlierde Aug 12, 2026
0972487
refactor(app): consume generated design tokens for radius and type scale
simonvanlierde Aug 12, 2026
2bf5f5b
feat(deploy): add secrets export and restore for password-manager notes
simonvanlierde Aug 12, 2026
9182540
refactor(www,docs): consume generated design tokens instead of hand c…
simonvanlierde Aug 12, 2026
ef0bfbf
fix(www): exclude generated tokens css from biome formatting
simonvanlierde Aug 12, 2026
77b8ed9
fix(www): align body line-height and eyebrow labels to the canonical …
simonvanlierde Aug 12, 2026
aadeb37
fix(www): keep chip/badge font sizes off the label scale
simonvanlierde Aug 12, 2026
db7a388
fix(brand): pin diagram palette drift and put email radius on the scale
simonvanlierde Aug 12, 2026
ae0d337
refactor(app): converge remaining MD3 color-role call sites onto sema…
simonvanlierde Aug 12, 2026
99654da
feat(app): derive tailwind radius steps from the generated design tokens
simonvanlierde Aug 12, 2026
9bf3b1b
feat(app): add ControlledTextField and converge form fields onto it
simonvanlierde Aug 12, 2026
60cb083
feat(app): add phone bottom navigation for primary destinations
simonvanlierde Aug 12, 2026
c07c32c
test(scripts): add unit coverage for env policy and ops script decisi…
simonvanlierde Aug 12, 2026
c22cc07
fix(app): keep ActiveStreamBanner clear of BottomNav on phone-width web
simonvanlierde Aug 12, 2026
785d1c6
docs(justfile): keep the env-policy-check description on its doc comm…
simonvanlierde Aug 12, 2026
495f7f8
feat(app): dock product save actions in a bar on desktop, keep the fa…
simonvanlierde Aug 12, 2026
5eadac6
chore: update dependencies
simonvanlierde Aug 12, 2026
465190b
feat(.gitignore): add entry for local restic backup repository
simonvanlierde Aug 12, 2026
3b11cb0
fix(biome): update node_modules ignore pattern to prevent indexing in…
simonvanlierde Aug 12, 2026
59ed8bb
feat(pyproject): add flake8-copyright ignore rule for licensing compl…
simonvanlierde Aug 12, 2026
903e270
fix(router): change logger from exception to error for unexpected bac…
simonvanlierde Aug 12, 2026
9e51ef8
chore(env): remove development environment configuration file
simonvanlierde Aug 12, 2026
cf2ef39
fix(app): route SaveBar's needsAttention press to the error summary, …
simonvanlierde Aug 12, 2026
aa3cbf4
refactor(app): use the imperative input dialog for rename and descrip…
simonvanlierde Aug 12, 2026
63fda40
fix(app): make status/link colors scheme-aware and WCAG-compliant
simonvanlierde Aug 12, 2026
a7e69d7
feat(app): add heading/caption type steps and an eyebrow text variant
simonvanlierde Aug 12, 2026
82a1960
fix(app): designed signed-out, empty, and error states instead of bla…
simonvanlierde Aug 12, 2026
ca87852
refactor(app): converge off-scale font literals onto the type scale
simonvanlierde Aug 12, 2026
c75290d
refactor(app): centralize static header options and add welcome-card …
simonvanlierde Aug 12, 2026
e81b092
test(app): pin Chip's icon-sibling structure and the icon=false case
simonvanlierde Aug 12, 2026
cbf739d
fix(app): enforce flat-and-sharp radius/elevation and drop layout tra…
simonvanlierde Aug 12, 2026
1378bc9
refactor(app): converge selected states on the primary tint state layer
simonvanlierde Aug 12, 2026
6f78287
fix(app): keep floating chrome clear of the bottom bar on web
simonvanlierde Aug 12, 2026
c9ee436
feat(app): pressed/focus feedback on bottom tabs and a / search shortcut
simonvanlierde Aug 12, 2026
6205968
feat(app): give the manila accent its licensed homes
simonvanlierde Aug 12, 2026
7cef681
feat(app): animate overlay entrances per the motion spec
simonvanlierde Aug 13, 2026
e945755
fix(app): keep toast wrapper unflattened for its exit animation
simonvanlierde Aug 13, 2026
599f4ff
fix(app): honest pull-to-refresh spinner and error copy emphasis
simonvanlierde Aug 13, 2026
272f066
feat(app): infinite scroll for the products catalogue
simonvanlierde Aug 13, 2026
99de963
fix(app): drop stale placeholder data and dead code from products que…
simonvanlierde Aug 13, 2026
eb4e5d7
fix(app): give dialog actions a destructive hierarchy and safe Enter …
simonvanlierde Aug 13, 2026
4f02099
chore: prune expired astro mdx release-age pin, date the biome ones
simonvanlierde Aug 13, 2026
c46646e
fix(app): close the destructive-fallback and missed-call-site gaps in…
simonvanlierde Aug 13, 2026
c6bedfb
fix(backend): allow dev-only cross-port image loads past CORP
simonvanlierde Aug 13, 2026
eb78608
fix(backend): scope dev CORP relaxation to the uploads mount only
simonvanlierde Aug 13, 2026
7a7485f
feat(app): offline resilience for field capture
simonvanlierde Aug 13, 2026
0411604
fix(app): close out floating-chrome and state-floor follow-ups
simonvanlierde Aug 13, 2026
e9c290e
fix(app): close duplicate-create, cross-user cache, and lost-mutation…
simonvanlierde Aug 13, 2026
d60a8ce
fix(app): exclude /products/new from SaveBar dock reservation
simonvanlierde Aug 13, 2026
ff3d7ae
fix(app): normalize category-selection layout and enforce 44px touch …
simonvanlierde Aug 13, 2026
ec667a7
feat(app): speed up repeat capture
simonvanlierde Aug 13, 2026
bc401d3
docs(brand): record type-scale, status-colour, and dialog conventions…
simonvanlierde Aug 13, 2026
7d46710
fix(app): restore native focus-return for imperative dialogs
simonvanlierde Aug 13, 2026
f0e0a85
fix(www): tighten landing motion to the functional budget
simonvanlierde Aug 13, 2026
6a0c839
fix(backend): require ENVIRONMENT explicitly instead of defaulting to…
simonvanlierde Aug 13, 2026
6580803
refactor(app): move primary destinations into router tab groups
simonvanlierde Aug 13, 2026
a8c8a58
fix(app): make the tab bar and its neighbours behave like real tabs
simonvanlierde Aug 13, 2026
db671bf
refactor(www): strip generated-page tells and lead with the record
simonvanlierde Aug 13, 2026
34a99cc
feat(www): show the teardown photograph as content, not wallpaper
simonvanlierde Aug 13, 2026
a6dda58
refactor(www): drop the photo, quote the 9R definitions, tighten the …
simonvanlierde Aug 13, 2026
5ed985b
fix(app): restore manila accent, scope search shortcut, sweep MD3 con…
simonvanlierde Aug 13, 2026
79f8f75
fix(app): bound persisted caches, clear recents on sign-out, drop dea…
simonvanlierde Aug 13, 2026
15c46c5
fix(app): gate the account auth guard on screen focus
simonvanlierde Aug 13, 2026
2312cc1
feat(www): draw the 9R framework as a staircase, and fix the flowchar…
simonvanlierde Aug 13, 2026
336d2c1
feat(backend): add idempotency-key support to product/component creat…
simonvanlierde Aug 13, 2026
9fef1a4
refactor(www,docs): rebuild the workflow figure, move the 9R ladder t…
simonvanlierde Aug 13, 2026
25328cb
fix(backend): self-heal the idempotency-key in-flight marker
simonvanlierde Aug 13, 2026
8eda5f8
refactor(app): consolidate focus-gated auth guard and allowlist persi…
simonvanlierde Aug 13, 2026
eb43fc4
fix(www): stop claiming records are read through the 9R framework
simonvanlierde Aug 13, 2026
e23895e
refactor(docs): strip landing-page furniture from the docs site
simonvanlierde Aug 13, 2026
2eccced
docs(brand): scope the manila accent to data labels
simonvanlierde Aug 13, 2026
1819354
fix: cite the Zenodo concept DOI
simonvanlierde Aug 13, 2026
374b997
feat(app): send Idempotency-Key on product/component create POSTs
simonvanlierde Aug 13, 2026
df8056c
fix(www,docs): reframe the 9R as background, and hedge the contributo…
simonvanlierde Aug 13, 2026
87181e8
feat(www): add terms of use and settle the dataset licence on CC BY 4.0
simonvanlierde Aug 13, 2026
2126965
feat(assets): generate research identity from CITATION.cff
simonvanlierde Aug 13, 2026
ee0e282
fix(app): floor AmountChip taps, harden Chip a11y, retire MD3 *Contai…
simonvanlierde Aug 13, 2026
58c5068
feat(app): acknowledge queued saves when the device is offline
simonvanlierde Aug 13, 2026
1cbc72a
fix(app): flush AmountChip's pending draft before Save serializes it
simonvanlierde Aug 13, 2026
ea1ccd3
docs: ship the Apache-2.0 licence text the API carve-out asserts
simonvanlierde Aug 13, 2026
fceb59c
fix(app): P3 design-critique sweep — inline pills, type steps, and a1…
simonvanlierde Aug 13, 2026
f8cd01d
fix(app): drop tool-branded comment marker in InlinePills
simonvanlierde Aug 13, 2026
838dd6a
fix(www): give interactive borders the 3:1 contrast WCAG 1.4.11 wants
simonvanlierde Aug 13, 2026
645a214
docs: document the three licensing layers and sharpen the project fra…
simonvanlierde Aug 13, 2026
542380e
fix(www): warrant authorship of an upload, not absence of third-party…
simonvanlierde Aug 13, 2026
60f25db
feat(backend): keep capture parameters when filtering stored image EXIF
simonvanlierde Aug 13, 2026
6e73aae
feat(backend): add dataset release build and Zenodo deposit tooling
simonvanlierde Aug 13, 2026
f106335
feat(backend): record terms acceptance and release-credit consent
simonvanlierde Aug 13, 2026
3d3cb10
feat(backend): license the published API specification under Apache-2.0
simonvanlierde Aug 13, 2026
1ef3470
feat(app): link the terms at signup and add the release-credit opt-in
simonvanlierde Aug 13, 2026
852638e
docs(security): classify published dataset releases as their own data…
simonvanlierde Aug 13, 2026
219259f
fix(app): fade the products list swap safely and clean up the slow-lo…
simonvanlierde Aug 13, 2026
de435c9
fix(app): prevent a duplicate product create after a media-sync failure
simonvanlierde Aug 13, 2026
6d3bf37
docs(licensing): add site content as a fourth layer and reserve the m…
simonvanlierde Aug 13, 2026
6767b88
build: share the Playwright browser bootstrap across subrepos
simonvanlierde Aug 13, 2026
cf415e6
feat(app): fade form errors in and out within the feedback budget
simonvanlierde Aug 13, 2026
fb9a296
refactor(www): crossfade the theme toggle and normalize em-dash copy
simonvanlierde Aug 13, 2026
1e0088a
test(backend): match the websocket failure log to its error-level call
simonvanlierde Aug 13, 2026
c289518
feat(backend): add a dry-run inventory and refuse shared accounts
simonvanlierde Aug 13, 2026
8c3a445
feat(app): link the 9R framework from the account screen
simonvanlierde Aug 13, 2026
2d46f33
refactor(auth): credit contributors collectively, not by name
simonvanlierde Aug 13, 2026
03743a7
feat(backend): scope releases by consent and report every exclusion
simonvanlierde Aug 13, 2026
f2a057e
refactor(app): collapse useProfileAuthRedirect into useRequireAuth
simonvanlierde Aug 13, 2026
9b5bd28
fix(www): name the counterparty and close GDPR article 13 gaps
simonvanlierde Aug 13, 2026
094d4ce
feat(app): functional motion pass across gallery, overlays, and statu…
simonvanlierde Aug 17, 2026
2711121
docs(licensing): refresh the plugin schema now that it declares Apach…
simonvanlierde Aug 17, 2026
8347fe0
feat(docker): enhance caching strategy with service-specific scopes f…
simonvanlierde Aug 17, 2026
8c8eee8
feat(app): improve animated cube component with layout calculations a…
simonvanlierde Aug 17, 2026
6a8ff07
fix(release): correct Oskar's name
simonvanlierde Aug 17, 2026
a5e81f0
fix(backend): keep owner_id on inventory rows for the selection rules
simonvanlierde Aug 17, 2026
6cf58ac
feat(scripts): template the dataset pseudonym salt with the other sec…
simonvanlierde Aug 17, 2026
69cb8b8
fix(tests): update contributor name from Zemiolek to Imiolek in citat…
simonvanlierde Aug 17, 2026
f5f0f20
fix(backend): harden the dataset release build and Zenodo deposit
simonvanlierde Aug 17, 2026
2506d47
refactor(backend): move idempotency to common and bind replays to bod…
simonvanlierde Aug 17, 2026
6128424
refactor(backend): squash the credit_in_releases add-then-drop migrat…
simonvanlierde Aug 17, 2026
9c0ce49
fix(app): keep one idempotency key per draft and close review gaps
simonvanlierde Aug 17, 2026
c21bac9
chore: close the docs, www and tooling review findings
simonvanlierde Aug 17, 2026
92815e9
feat(docs): generate the data-model diagrams and dataset codebook
simonvanlierde Aug 17, 2026
5f1abb2
fix(app): make lightbox zoom keyboard-operable and size it from measu…
simonvanlierde Aug 17, 2026
a2ed18c
test(docs,www): cover the 9R ladder and skip the fixture-only landing…
simonvanlierde Aug 17, 2026
5c676ec
docs(architecture): add the app navigation flow page
simonvanlierde Aug 17, 2026
a529945
docs(app): fold ARCHITECTURE.md into the app README
simonvanlierde Aug 17, 2026
fee44e2
docs: tighten the data-model and codebook prose
simonvanlierde Aug 17, 2026
e9f4d85
fix(backend): harden alembic migrations against production locks
simonvanlierde Aug 17, 2026
521fd44
perf(backend): drop the redundant partial index on product.owner_id
simonvanlierde Aug 17, 2026
10df488
perf(backend): make search and paginated reads use their indexes
simonvanlierde Aug 17, 2026
7fefc8b
fix(backend): stop UserFactory drawing random account lifecycle state
simonvanlierde Aug 17, 2026
d1190dc
test(backend): make generated test data deterministic and minimal
simonvanlierde Aug 17, 2026
2f9402e
test(backend,ci): rotate the factory seed weekly and pin the detail-r…
simonvanlierde Aug 17, 2026
4338590
feat(backend): publish image derivatives and their pixel dimensions
simonvanlierde Aug 18, 2026
3a0ec16
feat(www): rebuild the landing hero as a photographic parts schedule
simonvanlierde Aug 18, 2026
b13ca9c
feat(app): show product-type labels and size gallery images to the sc…
simonvanlierde Aug 18, 2026
d902306
refactor(app): subscribe to window dimensions in the zoom fallback
simonvanlierde Aug 18, 2026
9b47c34
feat: migrate from pre-commit to prek for git hooks and repository po…
simonvanlierde Aug 18, 2026
7cbf9ea
refactor: simplify tabBar prop in TabsLayout and improve error handli…
simonvanlierde Aug 18, 2026
41183e6
test(app): silence the jest lane's act and localStorage warnings
simonvanlierde Aug 18, 2026
d5c395e
fix(app): render BottomNav as an element in the tabs layout
simonvanlierde Aug 18, 2026
71b3194
fix(backend): allow the Idempotency-Key header through CORS
simonvanlierde Aug 18, 2026
76573c4
refactor(assets): emit the type ramp and fix the misnamed surface token
simonvanlierde Aug 18, 2026
0a422fb
fix(www): keep the homepage honest about its own data
simonvanlierde Aug 18, 2026
810d613
fix(docs): make architecture diagrams legible
simonvanlierde Aug 18, 2026
c254625
build(backend): gate committed email HTML against a fresh compile
simonvanlierde Aug 18, 2026
3faf9e1
docs: record product truth and the two web design systems
simonvanlierde Aug 18, 2026
274827c
fix(app): make focus visible and stop empty fields reading as errors
simonvanlierde Aug 18, 2026
a2efbb1
build(dev): surface stale dev containers
simonvanlierde Aug 18, 2026
b8028e7
docs(app): record the app design system and add product screenshots
simonvanlierde Aug 18, 2026
0d134cb
fix(backend): harden the image-dimension rollout
simonvanlierde Aug 18, 2026
533f747
feat(backend): fuzzy-match product-type labels
simonvanlierde Aug 18, 2026
bd779e0
fix(app): keep the original when no derivative is wide enough
simonvanlierde Aug 18, 2026
aed4a2b
fix(www): give the hero schedule a spoken equivalent for its dash
simonvanlierde Aug 18, 2026
1e8d80c
fix(docs): re-pin mermaid diagrams when their frame resizes
simonvanlierde Aug 18, 2026
aeb5bf5
fix(app): keep the original reserved for zooming
simonvanlierde Aug 18, 2026
3c4b218
fix(app): pay down the small handover items
simonvanlierde Aug 18, 2026
a657fc2
feat(app): one disclosure idiom and power-user actions on the detail …
simonvanlierde Aug 18, 2026
d461b34
style(app): put text on the type ramp and the muted token
simonvanlierde Aug 18, 2026
d49e927
fix(app): drop CPVCard glyph and give dialog errors specific titles
simonvanlierde Aug 18, 2026
e6f5773
feat(app): fold the products index chrome behind a filters toggle
simonvanlierde Aug 18, 2026
a372b57
feat(backend): seed a photographed teardown tree
simonvanlierde Aug 18, 2026
633d686
feat(www): render the hero teardown as a plate grid
simonvanlierde Aug 18, 2026
d243a4e
feat(app): chunk the detail screen into four sections with one name c…
simonvanlierde Aug 18, 2026
9400e4f
feat(app): chunk the detail screen into four sections with one name c…
simonvanlierde Aug 18, 2026
ba745e3
feat(www): repoint the surface ramp onto the brand neutrals
simonvanlierde Aug 18, 2026
96fb834
test(www): cover the live-data hero with an e2e lane
simonvanlierde Aug 18, 2026
ff4e8fd
docs: add a glossary of Relab's vocabulary
simonvanlierde Aug 18, 2026
84dbf3b
fix(app): give each thing one name in user-facing copy
simonvanlierde Aug 18, 2026
e98ae9b
test(app): assert a seeded thumbnail is really served as an image
simonvanlierde Aug 18, 2026
1893552
refactor(backend): give the uploads resource policy its own switch
simonvanlierde Aug 18, 2026
1cd6017
feat(infra): declare the edge cache policy for stored media
simonvanlierde Aug 18, 2026
b6f976e
chore(deps): update renovate configuration for improved dependency ma…
simonvanlierde Aug 18, 2026
866148b
fix(products): address index and detail critiques
simonvanlierde Aug 18, 2026
250e25a
refactor(docs): streamline product description and user audience sect…
simonvanlierde Aug 18, 2026
901fcd1
feat(backend): add contributor roles and role-tiered upload quotas
simonvanlierde Aug 18, 2026
b078fdf
feat(backend): let existing accounts accept the contributor terms
simonvanlierde Aug 18, 2026
ba7493c
chore(api): regenerate OpenAPI schema and app types
simonvanlierde Aug 18, 2026
d0e6df1
feat(app): add lab-only research-file upload
simonvanlierde Aug 18, 2026
ef5c4c3
feat(app): prompt existing accounts to accept the contributor terms
simonvanlierde Aug 18, 2026
df91eef
docs: record the role model, quota tiers, and terms acceptance
simonvanlierde Aug 18, 2026
fa12048
feat(a11y): enforce WCAG 2.2 tags and publish the statement
simonvanlierde Aug 18, 2026
175d49a
fix(app): keep the terms prompt dismissed across a page reload
simonvanlierde Aug 18, 2026
51ba8b6
fix(www): resolve biome lint warnings in landing e2e specs
simonvanlierde Aug 19, 2026
4131f2b
test(app): stop two suites failing on timing
simonvanlierde Aug 19, 2026
37ce502
refactor(app): hoist nested components and lint-flagged literals
simonvanlierde Aug 19, 2026
fef4a7c
chore(docs): bump the RPi camera API schema to 0.6.1
simonvanlierde Aug 19, 2026
b1e82f6
refactor(www): drop Tailwind for authored CSS
simonvanlierde Aug 19, 2026
f99c7cd
build(app): migrate styling from NativeWind to Uniwind
simonvanlierde Aug 19, 2026
eb55ea6
fix(app): defer product back-navigation until the record loads
simonvanlierde Aug 19, 2026
ea14e9b
feat(infra): own zone-scoped Cloudflare config in a separate root
simonvanlierde Aug 19, 2026
d0f1e55
feat(deploy): ship container logs and host metrics over OTLP
simonvanlierde Aug 19, 2026
f41e7d8
feat(deploy): run scheduled jobs from systemd timers
simonvanlierde Aug 19, 2026
531d71b
docs(deploy): split the runbooks by host and by lifecycle
simonvanlierde Aug 19, 2026
fbdea52
docs: stop claiming controls that do not exist
simonvanlierde Aug 19, 2026
bc24532
feat(deploy): close the container, host-identity and GPU blind spots
simonvanlierde Aug 19, 2026
bbdafd5
docs(deploy): hand the central monitoring work over
simonvanlierde Aug 19, 2026
f219b5b
feat(deploy): make GPU metrics a one-line host opt-in
simonvanlierde Aug 19, 2026
61cb7f7
refactor(auth): drop the email and oauth re-export layers
simonvanlierde Aug 20, 2026
2c4cafa
refactor(file_storage): drop the unreachable storage read path
simonvanlierde Aug 20, 2026
d94a55a
refactor(backend): remove declarations nothing references
simonvanlierde Aug 20, 2026
3e08e5f
refactor(backend): collapse one-caller wrappers into their callers
simonvanlierde Aug 20, 2026
7eb8f19
refactor(backend): flatten two single-purpose indirections
simonvanlierde Aug 20, 2026
a1ece19
chore(just): drop three unreferenced private recipes
simonvanlierde Aug 20, 2026
4efc762
test: make five assertions test what they claim
simonvanlierde Aug 20, 2026
014d203
docs(design): reconcile the design system with its machine sources
simonvanlierde Aug 20, 2026
650b835
refactor(file_storage): drop the fastapi-storages fossil from the err…
simonvanlierde Aug 22, 2026
d6172f1
docs(design): pin the mono label weight to the one face that ships
simonvanlierde Aug 22, 2026
8185eb6
fix(infra): keep the OTLP token out of Cloudflare rulesets and harden…
simonvanlierde Aug 22, 2026
30d8571
feat(deploy): least-privilege Alloy and bounded logging on every service
simonvanlierde Aug 22, 2026
1eb7a9b
fix(deploy): make the scheduled jobs fail loudly
simonvanlierde Aug 22, 2026
e4d7d25
docs(deploy): match the runbooks to timer-driven backups and the edge…
simonvanlierde Aug 22, 2026
cb51570
docs(deploy): hand the monitoring design to the monitoring repo
simonvanlierde Aug 22, 2026
14fee5c
test(backend): factor out three repeated stub blocks
simonvanlierde Aug 22, 2026
fcae7fa
test(app): factor out repeated setup in seven test files
simonvanlierde Aug 22, 2026
c5d7c29
fix(deploy): stop the watchdog crying wolf on a root-owned host env file
simonvanlierde Aug 27, 2026
050b67c
fix(deploy): drop default capabilities from the telemetry containers
simonvanlierde Aug 27, 2026
e81444e
docs(deploy): describe the edge and the agent as actually deployed
simonvanlierde Aug 27, 2026
9168caa
fix(logging): update cAdvisor configuration to use host cgroup for ac…
simonvanlierde Aug 27, 2026
eb29fd3
feat(backend): export the API's own metrics over OTLP
simonvanlierde Aug 27, 2026
db80696
fix(deploy): scope cAdvisor metrics to this compose project
simonvanlierde Aug 27, 2026
2cf4cae
fix(backend): apply ASGI instrumentation to the live middleware stack
simonvanlierde Aug 27, 2026
07532d6
feat(metrics): add stable HTTP semantic conventions for metrics labeling
simonvanlierde Aug 27, 2026
61b852d
feat(deploy): add guidance for reclaiming space on `/var` after backups
simonvanlierde Aug 27, 2026
d315c24
feat(telemetry): vendor the agent stack from the central monitoring repo
simonvanlierde Aug 28, 2026
6f8e4ca
feat(deploy): update telemetry setup instructions for production and …
simonvanlierde Aug 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
121 changes: 0 additions & 121 deletions .cspell.yaml

This file was deleted.

15 changes: 15 additions & 0 deletions .devcontainer/app/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "relab-app",
"dockerComposeFile": ["../../compose.yaml", "../../compose.dev.yaml"],
"service": "app",
"runServices": ["app"],
"workspaceFolder": "/opt/relab/app",
"mounts": ["source=${localWorkspaceFolder},target=/opt/relab,type=bind,consistency=cached"],
"overrideCommand": true,
"postAttachCommand": "echo 'Relab app devcontainer ready.\\nUse this for focused app work; the root full-stack container is the default onboarding path.\\nRun just install if needed, then just dev or just check.\\nApp: http://127.0.0.1:8011'",
"features": {
"ghcr.io/devcontainers/features/git:1.3.8": {},
"ghcr.io/devcontainers-extra/features/expo-cli:1.0.11": {},
"ghcr.io/guiyomh/features/just:0.1.0": {}
}
}
5 changes: 3 additions & 2 deletions .devcontainer/backend/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@
"workspaceFolder": "/opt/relab/backend",
"mounts": ["source=${localWorkspaceFolder},target=/opt/relab,type=bind,consistency=cached"],
"overrideCommand": true,
"postAttachCommand": "echo 'RELab backend devcontainer ready.\\nUse this for focused backend work; the root full-stack container is the default onboarding path.\\nRun just install if needed, then just dev or just check.\\nAPI: http://localhost:8011'",
"postAttachCommand": "echo 'Relab backend devcontainer ready.\\nUse this for focused backend work; the root full-stack container is the default onboarding path.\\nRun just install if needed, then just dev or just check.\\nAPI: http://127.0.0.1:8010'",
"features": {
"ghcr.io/devcontainers/features/git:1": {}
"ghcr.io/devcontainers/features/git:1.3.8": {},
"ghcr.io/guiyomh/features/just:0.1.0": {}
},
"customizations": {
"vscode": {
Expand Down
13 changes: 7 additions & 6 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
{
"name": "relab-fullstack",
"dockerComposeFile": ["../compose.yaml", "../compose.dev.yaml"],
"service": "app-site",
"runServices": ["api", "redis", "postgres", "docs-site", "web-site", "app-site"],
"service": "app",
"runServices": ["api", "redis", "postgres", "docs", "www", "app"],
"workspaceFolder": "/opt/relab",
"mounts": ["source=${localWorkspaceFolder},target=/opt/relab,type=bind,consistency=cached"],
"features": {
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers-extra/features/expo-cli:1": {},
"ghcr.io/jsburckhardt/devcontainer-features/uv:1": {}
"ghcr.io/devcontainers/features/git:1.3.8": {},
"ghcr.io/devcontainers-extra/features/expo-cli:1.0.11": {},
"ghcr.io/jsburckhardt/devcontainer-features/uv:1.0.0": {},
"ghcr.io/guiyomh/features/just:0.1.0": {}
},
"postAttachCommand": "echo 'RELab full-stack devcontainer ready.\\nPrimary workflow: run just install once, then use just dev / just ci from the repo root.\\nPlatform: http://localhost:8010\\nAPI: http://localhost:8011\\nDocs: http://localhost:8012\\nApp: http://localhost:8013'"
"postAttachCommand": "echo 'Relab full-stack devcontainer ready.\\nPrimary workflow: run just install once, then use just dev / just ci from the repo root.\\nAPI: http://127.0.0.1:8010\\nApp: http://127.0.0.1:8011\\nDocs: http://127.0.0.1:8012\\nLanding site: http://127.0.0.1:8013'"
}
11 changes: 6 additions & 5 deletions .devcontainer/docs/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
{
"name": "relab-docs",
"dockerComposeFile": ["../../compose.yaml", "../../compose.dev.yaml"],
"service": "docs-site",
"runServices": ["docs-site"],
"service": "docs",
"runServices": ["docs"],
"workspaceFolder": "/opt/relab/docs",
"mounts": ["source=${localWorkspaceFolder},target=/opt/relab,type=bind,consistency=cached"],
"postAttachCommand": "echo 'RELab docs devcontainer ready.\\nUse this for focused docs work; the root full-stack container is the default onboarding path.\\nRun just install if needed, then just dev or just check.\\nDocs: http://localhost:8012'",
"postAttachCommand": "echo 'Relab docs devcontainer ready.\\nUse this for focused docs work; the root full-stack container is the default onboarding path.\\nRun just install if needed, then just dev or just check.\\nDocs: http://127.0.0.1:8012'",
"features": {
"ghcr.io/cirolosapio/devcontainers-features/alpine-bash:0": {},
"ghcr.io/devcontainers/features/git:1": {}
"ghcr.io/cirolosapio/devcontainers-features/alpine-bash:0.0.3": {},
"ghcr.io/devcontainers/features/git:1.3.8": {},
"ghcr.io/guiyomh/features/just:0.1.0": {}
}
}
14 changes: 0 additions & 14 deletions .devcontainer/frontend-app/devcontainer.json

This file was deleted.

13 changes: 0 additions & 13 deletions .devcontainer/frontend-web/devcontainer.json

This file was deleted.

14 changes: 14 additions & 0 deletions .devcontainer/www/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "relab-www",
"dockerComposeFile": ["../../compose.yaml", "../../compose.dev.yaml"],
"service": "www",
"runServices": ["www"],
"workspaceFolder": "/opt/relab/www",
"mounts": ["source=${localWorkspaceFolder},target=/opt/relab,type=bind,consistency=cached"],
"overrideCommand": true,
"postAttachCommand": "echo 'Relab web devcontainer ready.\\nUse this for focused web work; the root full-stack container is the default onboarding path.\\nRun just install if needed, then just dev or just check.\\nWeb: http://127.0.0.1:8013'",
"features": {
"ghcr.io/devcontainers/features/git:1.3.8": {},
"ghcr.io/guiyomh/features/just:0.1.0": {}
}
}
54 changes: 54 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Version control
.git/
.gitignore

# Local environments and secrets
.env
.env.*
!.env.example
secrets/
backups/

# Python environments and caches
.venv/
**/.venv/
__pycache__/
**/__pycache__/
.ruff_cache/
.pytest_cache/
.mypy_cache/
.ty/

# Node dependencies and package-manager stores
node_modules/
**/node_modules/
.pnpm-store/

# Build outputs and test reports
dist/
**/dist/
coverage/
**/coverage/
playwright-report/
**/playwright-report/
test-results/
**/test-results/
.astro/
**/.astro/
.expo/
**/.expo/
web-build/
**/web-build/
reports/
**/reports/

# Editor and OS files
.vscode/
.idea/
.DS_Store

# Debug logs
npm-debug.*
yarn-debug.*
yarn-error.*
pnpm-debug.*
Loading
Loading