← Back to docs

Menstrual Tracking

Menstrual Tracking

The Menstrual Tracking tool gives each authenticated user a private place to record cycle starts and follow cycle estimates over time.

  • Route: /menstrual-tracking
  • Access: Logged-in users (auth:web)
  • Data scope: Your own profile and any directly linked child profile you are authorized to manage; admin access remains separate

Admins can also manage another user's menstrual-tracking data directly:

  • Admin route: /admin/menstrual-tracking/{user}
  • Admin shortcut: /users/{id}/edit -> Menstrual tracking
  • Admin scope: View statistics, edit the user's profile, add cycle rows, edit duration and notes, and remove cycle rows without logging in as that user

The admin view cannot confirm or correct a forecast on the user's behalf. Forecast confirmation is reserved for the person using the menstrual tracker.

Linked family profiles are also available from the normal Menstrual Tracking view. The signed-in account and every directly linked child account are listed even when a child has no menstrual profile or cycle registrations yet. Selecting a child opens a dedicated family view where the linked parent can manage that child's profile and cycle history. Every family read/write is checked server-side against the direct parent_user_id relationship; unrelated users cannot use the family routes. Forecast confirmation and correction remain owner-only and are not available from the family view.


What you can save

  1. Birth date (optional)
  2. First known period start date (optional baseline)
  3. Cycle entries with an exact start date or month-level registration
  4. Period duration in days, optional, from 1 to 14 days
  5. Optional note per entry
  6. SMS reminder settings for the user and an optionally linked parent
  7. Forecast responses for confirmed, corrected or dismissed forecasts

Duration describes how many days the period itself lasted. It does not change cycle length, which continues to be calculated between registered period starts.


Edit history

The history table shows start date, month, duration, note and registration time.

  • Duration and note can be edited directly in each history row.
  • The Save button uses AJAX, so the page does not reload.
  • An empty duration is stored as unknown.
  • An empty note clears the note.
  • Duration is validated to 1-14 days and notes to at most 255 characters.
  • Ownership is checked server-side for AJAX edits. A user can only change their own entries, while the admin view is scoped to the user currently being managed.

Statistics and charts

The regular user view and admin view use the same statistics engine for the selected person. The overview includes average cycle length, variation, latest registered start, estimated next start, current cycle day, shortest and longest calculated cycle and usable interval count.

The chart period can be switched between 6, 12 and 24 months. Large reporting gaps continue to use the existing cycle-calculation rules.


Confirm or correct a forecast

When an estimated start date arrives or has passed, Tools can ask the user whether the forecast was correct. The question is displayed directly in the user's own menstrual-tracking view and is submitted with AJAX.

The user can confirm the date, enter another historical start date, or state that the period has not started yet. The admin view cannot perform this confirmation on the user's behalf.


SMS reminders

The profile card on /menstrual-tracking lets the user enable reminder SMS, choose a lead time from 1 to 7 days and optionally queue the same reminder for a linked parent account. SMS messages use the mobile numbers saved on the respective accounts. The page shows the latest queued reminder separately for the profile owner and linked parent, including its internal PDU id, and provides a per-recipient resend action. A queued PDU proves that Tools accepted the message into the SMSTools outbox; it is not a carrier delivery receipt.


Monthly registration

If the exact day is unknown, the month field (YYYY-MM) can be used. The system then uses the first day of that month as the baseline date, and exact dates can still be recorded later.