Context
We use MyTurn for camping gear lending. MyTurn only surfaces pick-up appointments — there's no view showing expected drop-offs/returns. This means librarians have to manually track returns on a whiteboard. Without proactive tracking, returns get lost and items go overdue without anyone noticing until someone else needs them.
The goal: a dashboard in Circulate showing upcoming pick-ups AND drop-offs in chronological order, so librarians can see at a glance what's expected each day and follow up same-day when someone doesn't show.
Research
I poked around MyTurn's admin interface and confirmed we can pull reservation data out programmatically. The data we need is available: reservation ID, borrower info, start date, pickup time slot, loan length, status, items, and pickup location. From start date + length we can compute expected return dates (the missing piece MyTurn doesn't surface).
Last season had ~90 fulfilled camping gear reservations with overlapping multi-day loans — confirms the need for a tracking view.
What to build
A chronological dashboard showing a unified list of upcoming events:
- Pick-ups: borrower name, date/time slot, items being checked out
- Drop-offs: borrower name, expected return date, items to be returned
The main value is making it easy to spot no-shows same-day — "they had a drop-off today at 1pm and at 3pm they're nowhere to be found, let's call them now."
Technical details
MyTurn's public API is gated behind a "kiosk" feature we don't have enabled, but the admin web UI has JSON endpoints we can use:
- Auth:
POST /library/j_spring_security_check with username/password form login. Returns a session cookie + a grails_remember_me cookie (~30 day expiry). We'll need to handle re-auth when sessions expire.
- Reservation list:
POST /library/orgInventory/reservationReportData — returns JSON array of reservations with date range and status filters. Each record includes user info, start date, pickup time slot, length in days, status, and pickup location.
- Reservation detail:
GET /library/orgInventory/editReservation/{id} — returns JSON with explicit from/to dates and item-level detail (names, types, quantities).
To explore further
Context
We use MyTurn for camping gear lending. MyTurn only surfaces pick-up appointments — there's no view showing expected drop-offs/returns. This means librarians have to manually track returns on a whiteboard. Without proactive tracking, returns get lost and items go overdue without anyone noticing until someone else needs them.
The goal: a dashboard in Circulate showing upcoming pick-ups AND drop-offs in chronological order, so librarians can see at a glance what's expected each day and follow up same-day when someone doesn't show.
Research
I poked around MyTurn's admin interface and confirmed we can pull reservation data out programmatically. The data we need is available: reservation ID, borrower info, start date, pickup time slot, loan length, status, items, and pickup location. From start date + length we can compute expected return dates (the missing piece MyTurn doesn't surface).
Last season had ~90 fulfilled camping gear reservations with overlapping multi-day loans — confirms the need for a tracking view.
What to build
A chronological dashboard showing a unified list of upcoming events:
The main value is making it easy to spot no-shows same-day — "they had a drop-off today at 1pm and at 3pm they're nowhere to be found, let's call them now."
Technical details
MyTurn's public API is gated behind a "kiosk" feature we don't have enabled, but the admin web UI has JSON endpoints we can use:
POST /library/j_spring_security_checkwith username/password form login. Returns a session cookie + agrails_remember_mecookie (~30 day expiry). We'll need to handle re-auth when sessions expire.POST /library/orgInventory/reservationReportData— returns JSON array of reservations with date range and status filters. Each record includes user info, start date, pickup time slot, length in days, status, and pickup location.GET /library/orgInventory/editReservation/{id}— returns JSON with explicitfrom/todates and item-level detail (names, types, quantities).To explore further