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>
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>
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>
- Add post-admin-header-child row to calendars, calendar, markets,
and payments index templates so the admin nav bar persists
- Create events-app-specific post/admin nav and header templates
using coop_url() for blog endpoints instead of url_for()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New markets blueprint at /<slug>/markets/ with create/delete
- New payments blueprint at /<slug>/payments/ with SumUp config
- Register both in events app with context processor for markets
- Remove PageConfig feature flag check from calendar creation
(feature toggles replaced by direct management pages)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace url_for('blog.post.post_detail', ...) and
url_for('blog.post.admin.entries', ...) with coop_url() for
cross-service links back to the blog app.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Calendar nav: fix Slots link URL, add admin cog for admins
- Calendar header: add left padding to calendar name
- Post nav: add settings cog linking to blog admin
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Calendar templates extend post/index.html which includes _meta.html
expecting a `post` variable. In standalone events mode there's no
post — override with empty meta block.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ticket purchase:
- tickets blueprint with routes for my tickets list, ticket detail with QR
- Buy tickets form on entry detail page (HTMX-powered)
- Ticket services: create, query, availability checking
Admin check-in:
- ticket_admin blueprint with dashboard, lookup, and check-in routes
- QR scanner/lookup interface with real-time search
- Per-entry ticket list view
- Check-in transitions ticket state to checked_in
Internal API:
- GET /internal/events/tickets endpoint for cross-app queries
- POST /internal/events/tickets/<code>/checkin for programmatic check-in
Template fixes:
- All templates updated: blog.post.calendars.* → calendars.*
- Removed slug=post.slug parameters (standalone events service)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract events/calendar functionality into standalone microservice:
- app.py and events_api.py from apps/events/
- Calendar blueprints (calendars, calendar, calendar_entries, calendar_entry, day, slots, slot, ticket_types, ticket_type)
- Templates for all calendar/event views including admin
- Dockerfile (APP_MODULE=app:app, IMAGE=events)
- entrypoint.sh (no Alembic - migrations managed by blog app)
- Gitea CI workflow for build and deploy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>