Suggestions
Improvement recommendations for future projects based on the frontend implementation experience.
Testing
Section titled “Testing”-
Canvas/image export tests need realistic dimensions. Unit tests with 1x1 mock images pass but don’t validate coordinate-space geometry. For canvas-heavy features, add a Storybook play function that renders at realistic dimensions and asserts pixel output, or use a Playwright visual comparison.
-
E2E page objects should use
getByRole/getByLabel, notgetByPlaceholder. Theitems.page.tshas 18 occurrences ofgetByPlaceholder('Item name*')— a single placeholder text change in the design system breaks nearly every item test. Design-system components should exposearia-labelprops to support structural locators. (Tracked in Arda-cards/arda-frontend-app#755 analysis section.) -
make cinotmake checkfor ux-prototype.make check(lint + typecheck) misses Storybook play function failures and VRT regressions. Always runmake cibefore pushing.
Architecture
Section titled “Architecture”-
Context over callbacks from the start. When a component needs 3+ injectable behaviors sharing a common concern, use a React Context provider from the first version. The 4.x → 5.0.0 migration (3 callbacks →
ImageUploadProvider) could have been avoided if the context pattern was chosen initially. -
Dual-mode infrastructure patterns should be documented early. The CDN signed-cookie vs signed-URL dual mode was a late discovery. Future features that depend on domain-scoped browser APIs (cookies, CORS, service workers) should audit Amplify preview / localhost compatibility during the design phase.
-
Rate limiter should be documented as in-memory/per-instance. The current
RateLimiterin the BFF is per-Node-process. In multi-instance Amplify deployments, rate limits aren’t shared. This is acceptable at current scale but should be called out in architecture docs.
Process
Section titled “Process”-
Rebase CHANGELOG verification. After any rebase involving CHANGELOG changes, run
grep "## \["on the file and verify: (a) all expected versions are present, (b) versions are in descending order, (c) CLQ will accept the result. Squash-merge + rebase is a known footgun. -
Pre-release design-system versions need explicit tracking. The
common-modulepreview version (8.2.0-jmpicnic-DINTG-...) in operations PR #163 needs to be bumped to stable before merge. Consider adding a CI check that rejects pre-release dependency versions on PRs targetingmain.
Copyright: (c) Arda Systems 2025-2026, All rights reserved
Copyright: © Arda Systems 2025-2026, All rights reserved