Root / shows all upcoming events across all pages with page badges.
/<slug>/ reverted to show only that page's events.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Page summary now loads all upcoming events globally, not just the
current page's. Each card shows an amber page badge when the event
belongs to a different page. Links use the correct page slug.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract shared _ticket_widget.html with stable #page-ticket-{id} target.
Adjust route returns re-rendered widget + OOB cart-mini swap, same
pattern as the entry detail page's ticket adjust.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The cards were posting to tickets.adjust_quantity which returns the
entry detail buy form — wrong context for the page summary. New
page_summary.adjust_ticket route calls the service and returns
HX-Refresh: true so the whole listing refreshes with correct counts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Was using cart_url (cross-app) which causes invalid path for HTMX.
Use url_for('tickets.adjust_quantity') — the events-local route.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The update_tickets route was rendering index.html (full page) but the
HTMX form targets #entry-tickets with innerHTML swap. Return just the
_tickets.html fragment instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New /<slug>/ route shows upcoming confirmed events across all calendars
for a container. Features list/tile view toggle, date-grouped cards,
ticket +/- cart widgets, and infinite scroll pagination.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Day view and entry detail now load and render registered container_nav
widgets (e.g. market links) from the same container page — matching how
blog post pages work. Calendar-domain widgets are skipped since we're
already on a calendar page. Adds /w/<widget_domain>/ paginate route for
infinite scroll support.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace emit_event("calendar_entry.created") with direct try_publish().
Update shared submodule.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Emit calendar_entry.created events when entries are added
- Updated shared with federation handlers, delivery, anchoring
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Register StubFederationService in services/__init__.py
- Add federation to CI sibling list
- Add federation URL to app-config.yaml
- Update shared submodule with federation models/contracts/services
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The mini macro was imported without context, so cart_count was invisible
to the macro. Pass count explicitly in _adjust_response.html and add
'with context' to _buy_result.html. Update shared submodule.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Pass cart_count directly to the template instead of relying on the
context processor, which may not resolve correctly for the /tickets/
URL prefix.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The OOB swap was replacing the cart display with empty/wrong content.
Cart count updates naturally on next page navigation instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Entry page shows tickets sold count, remaining, and "in basket" count
- Replace numeric input + Buy button with add-to-basket / +/- controls
- New POST /tickets/adjust/ route creates/cancels tickets to target count
- Keep buy form active after adding (no confirmation replacement)
- New service functions: get_sold_ticket_count, get_user_reserved_count,
cancel_latest_reserved_ticket
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The buy_tickets response now includes an OOB swap of #cart-mini
so the cart badge count updates immediately when tickets are reserved.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>