Overview
When a listing reaches its maximum reservation period, it should automatically transition to an “expired” state through a background expiration process. The UI and backend must both be updated to fully support this feature.
Requirements
- Backend: Automated Listing Expiration
- Implement or extend a background job that scans for listings whose reservation period has ended.
- When a listing expires:
- Update its state in the database to “expired” per the domain model.
- Ensure any necessary domain/integration events are emitted.
- Backend: Search & Visibility
- Update listing search logic so expired listings are:
- Not returned in public/browse/search queries for reservers.
- Still visible to the sharer (listing owner) in their “My Listings” view.
- Enforce this at the repository/service/query layer.
- Frontend: Listing Page UI (Sharer View)
- On the listing page (when viewed by the listing owner/sharer):
- Display an “Expired” label above the listing title (use Ant Design Tag:
<Tag color="default">Expired</Tag>).
- Show a top-level Ant Design Alert banner:
<Alert type="warning" message="This listing has expired." banner />
- Ensure the UI is only shown when the listing is in the “expired” state.
4. Integration & Testing
- Expiration process (domain/event test, integration test for background job).
- Search filtering (expired listings not in public search).
- UI rendering (label and alert appear for expired listings).
- Add/Update Storybook stories for the listing component to cover the expired state.
Acceptance Criteria
- Listings automatically transition to “expired” when their reservation period ends.
- Expired listings are never shown in public search/browse, but remain visible to their sharer.
- Listing page for sharer displays an “Expired” label and alert banner.
References
- See
.github/instructions/ui/components.instructions.md, api-persistence.instructions.md, contexts.instructions.md, and project BRD/SRD for domain and UI conventions.

Overview
When a listing reaches its maximum reservation period, it should automatically transition to an “expired” state through a background expiration process. The UI and backend must both be updated to fully support this feature.
Requirements
<Tag color="default">Expired</Tag>).<Alert type="warning" message="This listing has expired." banner />4. Integration & Testing
Acceptance Criteria
References
.github/instructions/ui/components.instructions.md,api-persistence.instructions.md,contexts.instructions.md, and project BRD/SRD for domain and UI conventions.