Personas
★
New User
First-time visitor going through onboarding
☾
Cycle Tracker
Active user tracking their period and symptoms
✎
Account Holder
Person managing multiple family profiles
♥
Partner
Person with read-only shared access to a profile
⚙
Admin
Operations team member managing the platform
1
Onboarding
ONBD-01 — ONBD-06
Trust-building screens, goal selection, cycle history intake, and bilingual first-run experience. The onboarding flow must generate an accurate first prediction before any data is logged.
As a new user, I want to see trust and privacy screens before I enter any personal data, so that I feel safe sharing sensitive health information.
Acceptance Criteria
- ✓First screen after app load displays a privacy assurance message before any data input fields appear.
- ✓Trust screen includes a link to the full privacy policy and explains data encryption in plain language.
- ✓User must explicitly tap "Continue" to proceed past the trust screen; it cannot be auto-dismissed.
As a new user, I want to select my primary health goal (track period, try to conceive), so that the app adapts its experience to my specific needs.
Acceptance Criteria
- ✓Goal selection screen presents exactly two options: "Track my period" and "Trying to conceive."
- ✓Selected goal is persisted to the user's profile and determines which dashboard widgets and content recommendations appear.
- ✓User can change their goal later from profile settings without re-onboarding.
As a new user, I want to enter my cycle history (last period date, cycle length estimate, period duration), so that the app can generate an accurate first prediction.
Acceptance Criteria
- ✓Date picker for last period start defaults to approximately 14 days ago and allows selection within the past 90 days.
- ✓Cycle length input has a slider or selector ranging from 21–40 days with 28-day default.
- ✓All three fields (last period, cycle length, period duration) are required before proceeding.
As a new user, I want to enter my personal data (date of birth, height, weight), so that the app has baseline biometric context for insights.
Acceptance Criteria
- ✓Date of birth, height, and weight fields are presented on a single screen with appropriate input types (date picker, numeric).
- ✓Height and weight support both metric (cm/kg) and imperial (ft-in/lb) units with a toggle.
- ✓Personal data is optional to skip, but a note explains how it improves predictions if provided.
As a new user, I want the app to generate a first prediction after onboarding without any prior logged data, so that I immediately see value before I start tracking.
Acceptance Criteria
- ✓After onboarding completes, the dashboard displays next predicted period date, current cycle day, and phase name.
- ✓Prediction is generated using the Tier 1 simple average algorithm with the data entered during onboarding.
- ✓Calendar view shows predicted period and fertile window markers for the next 3 months.
As a new user, I want the onboarding flow to support both English and Bengali, so that I can complete setup in my native language.
Acceptance Criteria
- ✓Language selector is the first interactive element on the onboarding welcome screen.
- ✓All onboarding screens (trust, goal, cycle history, personal data) render fully in the selected language with no untranslated strings.
- ✓Selected language persists as the user's default language preference after account creation.
2
Authentication & Account
AUTH-01 — AUTH-08
Account creation, email verification, password management, session persistence, and the multi-profile system that enables one account to manage health tracking for multiple family members.
As a new user, I want to create an account with email and password, so that I can access the app and my data is tied to my identity.
Acceptance Criteria
- ✓Signup form requires a valid email address and a password with minimum 8 characters including at least one number.
- ✓Duplicate email addresses are rejected with a clear error message.
- ✓Successful signup redirects the user to the onboarding flow (or dashboard if onboarding is already complete).
As a new user, I want to receive email verification after signup, so that my account is secure and I confirm ownership of my email.
Acceptance Criteria
- ✓Verification email is sent within 30 seconds of account creation with a clickable confirmation link.
- ✓Unverified accounts can use the app but see a persistent banner prompting email verification.
- ✓Verification link expires after 24 hours; user can request a new link from the banner.
As a user, I want to reset my password via an email link, so that I can regain access if I forget my credentials.
Acceptance Criteria
- ✓"Forgot password" link on login screen triggers a reset email to the registered address within 60 seconds.
- ✓Reset link expires after 1 hour and can only be used once.
- ✓After resetting, user is redirected to login with a success message; all existing sessions are invalidated.
As a user, I want my session to persist across browser refresh, so that I stay logged in without re-entering credentials every time.
Acceptance Criteria
- ✓JWT token is stored securely and automatically refreshed before expiration.
- ✓Refreshing the browser or reopening the tab restores the authenticated session without a login screen.
- ✓Sessions expire after 30 days of inactivity, at which point the user is redirected to login.
As an account holder, I want to create multiple health profiles with name, relation type (self/wife/sister/mother/daughter/girlfriend), date of birth, height, weight, cycle length, and last period date, so that I can track health for my family.
Acceptance Criteria
- ✓Profile creation form includes all required fields: name, relation type (dropdown), DOB, height, weight, cycle length, last period date.
- ✓No hard limit on the number of profiles per account; each profile gets its own independent data store.
- ✓Newly created profile immediately generates a first prediction from the entered cycle data.
As an account holder, I want to switch between profiles via a profile switcher UI, so that I can manage different family members without logging out.
Acceptance Criteria
- ✓Profile switcher is accessible from the top navigation bar on every screen.
- ✓Switching profiles loads that profile's dashboard, calendar, and data within 1 second.
- ✓Active profile name and avatar are visually indicated in the navigation at all times.
As an account holder, I want all health data isolated per profile, so that each family member's cycle data, symptoms, and predictions remain completely separate.
Acceptance Criteria
- ✓Every API call includes a profile ID; no endpoint returns data from multiple profiles in a single response.
- ✓Database queries are scoped by profile ID at the query level, preventing cross-profile data leakage.
- ✓Deleting a profile removes only that profile's data; other profiles and the account remain intact.
As an account holder, I want to edit or delete any profile I manage, so that I can keep information current or remove profiles no longer needed.
Acceptance Criteria
- ✓Edit profile screen allows changing name, relation type, DOB, height, weight, and cycle defaults.
- ✓Delete profile requires a confirmation dialog with the profile name typed to confirm (destructive action safeguard).
- ✓If the currently active profile is deleted, the app switches to the first remaining profile or prompts to create a new one.
3
Period Tracking & Cycle Dashboard
CYCL-01 — CYCL-06
The core habit loop: log period, see predictions, understand cycle phase. Cycle day is the hero metric. Every interaction should take 2–3 taps maximum.
As a cycle tracker, I want to log my period start with flow intensity (light/medium/heavy) in 2–3 taps, so that tracking is effortless and becomes a daily habit.
Acceptance Criteria
- ✓Prominent "Log Period" button on the dashboard opens a modal with flow intensity selection (light, medium, heavy).
- ✓The complete logging flow (open modal, select intensity, confirm) requires no more than 3 taps.
- ✓After logging, the dashboard immediately updates to show "Day 1" and the current cycle phase changes to "Menstrual."
As a cycle tracker, I want to log my period end date, so that the app refines my average period length and cycle calculations over time.
Acceptance Criteria
- ✓During an active period, a "Period Ended" button replaces the "Log Period" button on the dashboard.
- ✓End date is recorded and the period duration (start to end) is stored for average calculation.
- ✓If the user does not log an end date, the system auto-closes the period after the average period length + 2 days.
As a cycle tracker, I want to see my current cycle day, phase name (follicular, ovulatory, luteal, menstrual), and days until next period at a glance, so that I understand where I am in my cycle immediately.
Acceptance Criteria
- ✓Dashboard hero section displays cycle day number, phase name, and "X days until next period" simultaneously.
- ✓Phase name updates dynamically based on the current day within the predicted cycle.
- ✓All three data points are visible without scrolling on both mobile and desktop viewports.
As a cycle tracker, I want cycle day displayed as the largest UI element on the dashboard, so that I immediately know where I am in my cycle the moment I open the app.
Acceptance Criteria
- ✓Cycle day number is rendered at a minimum font size of 48px and is the visually dominant element on the dashboard.
- ✓Cycle day is surrounded by a circular progress indicator showing position within the full cycle.
- ✓Color of the progress ring changes based on the current phase (red = menstrual, teal = fertile, blue = follicular, orange = luteal).
As a cycle tracker, I want predictions to recalculate immediately when I log new data, so that my forecast always reflects my most recent information.
Acceptance Criteria
- ✓After logging period start or end, all predictions (next period, fertile window, ovulation) update within 2 seconds.
- ✓Calendar view refreshes predicted markers without requiring a page reload.
- ✓Notification schedules for upcoming predictions are recalculated server-side and rescheduled accordingly.
As a cycle tracker, I want to edit or correct past period dates retroactively, so that logging mistakes do not permanently skew my predictions.
Acceptance Criteria
- ✓Tapping a past period day on the calendar opens an edit modal allowing start/end date and flow intensity changes.
- ✓Editing a past period triggers a full prediction recalculation using the corrected historical data.
- ✓Edits are logged in an audit trail so the user can see what was changed and when.
4
Calendar
CALR-01 — CALR-04
Color-coded monthly view showing period days, fertile windows, and ovulation markers. Tap any date to view or edit logged data.
As a cycle tracker, I want to view a full month calendar with color-coded markers (red/pink for period, teal for fertile window, accent for ovulation, muted for low-fertility), so that I can see my entire cycle at a glance.
Acceptance Criteria
- ✓Month view renders a 7-column grid with all days of the month, using distinct background colors for each cycle event.
- ✓Period days are red/pink, fertile window days are teal, ovulation day has a distinct accent marker, and remaining days use a muted neutral tone.
- ✓A color legend is displayed below the calendar explaining each marker type.
As a cycle tracker, I want the calendar to show predicted future periods and fertile windows, so that I can plan ahead based on my forecast.
Acceptance Criteria
- ✓Predicted events use a lighter shade or dashed border to visually distinguish them from logged (actual) events.
- ✓Future predictions are displayed for at least 3 months ahead of the current date.
- ✓When a prediction is replaced by actual logged data, the marker style updates from predicted to confirmed.
As a cycle tracker, I want to tap any date on the calendar to view or edit the logged data for that day, so that I can review and correct my history easily.
Acceptance Criteria
- ✓Tapping a date opens a detail panel showing all logged data (period status, flow intensity, symptoms) for that day.
- ✓Detail panel includes an "Edit" button that allows modifying period status, flow, and symptoms for that date.
- ✓Tapping a future predicted date shows the prediction details without edit functionality.
As a cycle tracker, I want to navigate to past and future months on the calendar, so that I can review my cycle history and see upcoming predictions.
Acceptance Criteria
- ✓Left and right arrow buttons allow month-by-month navigation with the current month/year label updating accordingly.
- ✓Swiping left/right on mobile viewports also navigates between months.
- ✓A "Today" button instantly returns to the current month regardless of how far the user has navigated.
5
Ovulation & Fertility
FERT-01 — FERT-03
Fertile window display, ovulation day marker, and TTC-specific conception tips. The fertile window spans 5 days before ovulation plus ovulation day.
As a cycle tracker, I want to see my fertile window (5 days before ovulation + ovulation day) displayed on the calendar and dashboard, so that I understand my fertility status throughout my cycle.
Acceptance Criteria
- ✓Fertile window is highlighted on the calendar as a 6-day span using teal background markers.
- ✓Dashboard displays a fertility status indicator (e.g., "Fertile window in X days" or "You are in your fertile window").
- ✓Fertile window calculation uses ovulation day = predicted next period start − 14 days.
As a cycle tracker, I want ovulation day clearly marked with a distinct visual indicator, so that I can immediately identify my most fertile day on the calendar.
Acceptance Criteria
- ✓Ovulation day displays a unique icon (e.g., filled circle or star) that is visually distinct from the fertile window markers.
- ✓Tapping ovulation day on the calendar shows an explanatory tooltip: "Estimated ovulation day — your most fertile day."
- ✓Ovulation marker appears on both the calendar view and the 7-day dashboard strip.
As a cycle tracker in TTC mode, I want to see daily conception tips based on my current cycle phase, so that I have actionable guidance for optimizing my chances of conception.
Acceptance Criteria
- ✓TTC mode dashboard shows a daily tip card that changes based on the current cycle phase (follicular, fertile, luteal).
- ✓Tips are sourced from the content platform and available in both English and Bengali.
- ✓Tips are only visible to profiles with the "Trying to conceive" health goal selected.
6
Symptom Logging
SYMP-01 — SYMP-08
Icon-based symptom logging across four categories: physical, mood, vaginal discharge, and lifestyle. Logged data feeds into the prediction engine and content personalization.
As a cycle tracker, I want to log symptoms via icon-based tap selection (not text-heavy forms), so that logging never feels like a chore and I can do it quickly.
Acceptance Criteria
- ✓Symptom logging screen presents icons in a grid layout, where tapping an icon selects/deselects it with a visual highlight.
- ✓Each icon has a short text label (max 2 words) beneath it for clarity.
- ✓The complete symptom logging flow (open, select symptoms, save) can be completed in under 5 seconds.
As a cycle tracker, I want to log physical symptoms (cramps, headache, breast tenderness, bloating, back pain, fatigue, nausea, acne), so that I can track how my body changes across my cycle.
Acceptance Criteria
- ✓Physical symptoms category contains all 8 specified symptoms, each with a unique icon.
- ✓Multiple physical symptoms can be selected simultaneously for a single day.
- ✓Logged physical symptoms appear on the calendar day detail and are stored with the date and profile ID.
As a cycle tracker, I want to log mood and emotional symptoms (calm, sad, happy, anxious, mood swings, irritable, energetic, depressed), so that I can identify emotional patterns tied to my cycle phases.
Acceptance Criteria
- ✓Mood category contains all 8 specified emotional states, each with a distinct emoji-style icon.
- ✓Mood symptoms are displayed as a separate tab or section from physical symptoms for clear categorization.
- ✓Only one primary mood can be selected per day, but secondary moods can be added as supplementary.
As a cycle tracker, I want to log vaginal discharge characteristics (sticky, creamy, watery, egg white, spotting, atypical), so that I can monitor fertility signals and flag anything unusual.
Acceptance Criteria
- ✓Discharge category contains all 6 specified types with descriptive icons and brief explanations.
- ✓Only one discharge type can be selected per day (mutually exclusive selection).
- ✓Selecting "Atypical" triggers a subtle educational note suggesting the user consult a healthcare provider if it persists.
As a cycle tracker, I want to log lifestyle factors (sleep quality, water intake, exercise, weight, stress), so that I can understand how daily habits correlate with how I feel during my cycle.
Acceptance Criteria
- ✓Lifestyle section includes all 5 specified factors with appropriate input types (sliders for quality/stress, numeric for water/weight).
- ✓Each lifestyle factor can be logged independently; no factor is required to save others.
- ✓Logged lifestyle data is associated with the date and profile, and is available for the prediction engine.
As a cycle tracker, I want to customize which symptom categories appear on my logging screen, so that the interface only shows what is relevant to me.
Acceptance Criteria
- ✓A "Customize" button on the symptom logging screen opens a settings panel listing all available categories with toggles.
- ✓At least one symptom category must remain enabled; the UI prevents disabling all categories.
- ✓Customization preferences are saved per profile, so different family members can have different logging layouts.
As a cycle tracker, I want to edit a symptom log already submitted for the current day, so that I can correct mistakes without losing the rest of my data.
Acceptance Criteria
- ✓If symptoms have already been logged today, the logging screen opens pre-populated with the existing selections.
- ✓Changes overwrite the previous entry for today rather than creating a duplicate record.
- ✓A "Logged today" indicator badge appears on the symptom logging button when data exists for the current day.
As a cycle tracker, I want my logged symptoms to feed into the prediction engine and content personalization, so that my tracking effort makes my experience smarter over time.
Acceptance Criteria
- ✓Symptom data is included as an input vector for Tier 2 and Tier 3 prediction models when sufficient data is available.
- ✓Content recommendations on the dashboard reflect logged symptoms (e.g., logging cramps surfaces articles about cramp relief).
- ✓A "Your data improves predictions" message is shown periodically to reinforce the value of consistent logging.
7
Prediction Engine
PRED-01 — PRED-05
Three-tier prediction system that auto-escalates as data accumulates: simple average from day one, ARIMA after 6 cycles, LSTM/ML after 12 cycles. Confidence is visible to the user.
As a cycle tracker, I want Tier 1 predictions (rolling average of last 3–6 cycle lengths) to work from my very first cycle, so that I get useful forecasts immediately without needing months of data.
Acceptance Criteria
- ✓With only onboarding data (cycle length estimate), the system generates a next-period prediction using that single value.
- ✓As more cycles are logged (2–6), the rolling average incorporates all available cycle lengths.
- ✓Ovulation is estimated at predicted next period start minus 14 days (standard luteal phase assumption).
As a cycle tracker with 6+ logged cycles, I want Tier 2 predictions (ARIMA time-series model) to activate automatically, so that my forecasts become more accurate as my data grows.
Acceptance Criteria
- ✓The system automatically switches from Tier 1 to Tier 2 when 6 complete logged cycles are available for a profile.
- ✓ARIMA model accounts for trend and seasonality in cycle length variation, not just simple averaging.
- ✓User is notified via a one-time dashboard message: "Your predictions have been upgraded based on your tracking history."
As a cycle tracker with 12+ logged cycles, I want Tier 3 predictions (LSTM/neural network with multi-factor inputs) to activate automatically, so that my forecasts incorporate symptoms, lifestyle, and age for maximum accuracy.
Acceptance Criteria
- ✓The system automatically switches from Tier 2 to Tier 3 when 12 complete logged cycles and sufficient symptom data are available.
- ✓Tier 3 model uses cycle lengths, logged symptoms, lifestyle factors, and user age as input features.
- ✓If Tier 3 predictions are less accurate than Tier 2 for a specific user, the system falls back to Tier 2 with a logged reason.
As a cycle tracker, I want the system to auto-escalate my prediction tier as my data accumulates (Tier 1 → 2 → 3), so that I benefit from better models without any manual action.
Acceptance Criteria
- ✓Tier escalation check runs automatically after every new cycle is completed and logged.
- ✓Escalation thresholds are configurable in the admin panel (default: 6 cycles for Tier 2, 12 for Tier 3).
- ✓The current prediction tier is visible to the user in their profile settings as an informational label.
As a cycle tracker, I want to see a confidence percentage for my predictions, so that I understand how reliable the forecast is and can set expectations accordingly.
Acceptance Criteria
- ✓A confidence percentage (e.g., "72% confidence") is displayed next to the predicted next period date on the dashboard.
- ✓Confidence increases as more cycles are logged and as the prediction tier escalates.
- ✓Tapping the confidence indicator shows a brief explanation of what affects confidence and how to improve it.
8
Notifications & Reminders
NOTF-01 — NOTF-07
Period, fertile window, and logging reminder alerts delivered via email and SMS. Per-profile routing, user-controlled toggles, and Bengali SMS content for BTRC compliance.
As a cycle tracker, I want to receive a period start prediction alert via email and SMS, so that I am never caught off guard by my period starting.
Acceptance Criteria
- ✓Alert is sent 2 days before the predicted period start date via both email and SMS (if phone number is provided).
- ✓Email includes the predicted start date, current cycle day, and a link to the dashboard.
- ✓SMS message is concise (under 160 characters) and delivered in the user's selected language.
As a cycle tracker, I want a period logging reminder via email and SMS if I have not logged by the predicted start date, so that my data stays current and predictions remain accurate.
Acceptance Criteria
- ✓Reminder is sent on the predicted period start date if no period log exists for that day by 6 PM local time.
- ✓Reminder message asks "Did your period start today?" with a direct link to the period logging screen.
- ✓A follow-up reminder is sent 2 days after the predicted date if still no period has been logged.
As a cycle tracker, I want a fertile window alert via email and SMS, so that I am aware when my fertile days are approaching.
Acceptance Criteria
- ✓Alert is sent 1 day before the predicted fertile window opens.
- ✓For TTC users, the message emphasizes conception timing; for period trackers, it simply notes the fertile phase.
- ✓Fertile window alerts are only sent if the user has this notification type enabled in their settings.
As a cycle tracker, I want to toggle each notification type (period alert, logging reminder, fertile window) on or off individually, so that I only receive the alerts I find useful.
Acceptance Criteria
- ✓Notification settings screen lists each notification type with an independent on/off toggle.
- ✓Changes take effect immediately; toggling off a notification cancels any scheduled future deliveries of that type.
- ✓Default state for new profiles: period alert ON, logging reminder ON, fertile window OFF.
As an account holder, I want notification routing to work per-profile in my multi-profile system, so that each family member's alerts go to the correct phone number and email.
Acceptance Criteria
- ✓Each profile has its own notification settings including an optional phone number for SMS delivery.
- ✓Alerts for Profile A are never sent to the phone number or email configured for Profile B.
- ✓If no phone number is set for a profile, SMS notifications are silently skipped (email-only delivery).
As a cycle tracker in Bangladesh, I want SMS delivery via SSL Wireless (Bangladesh provider), so that messages arrive reliably on my local carrier.
Acceptance Criteria
- ✓SMS is routed through SSL Wireless API for all Bangladeshi phone numbers (country code +880).
- ✓Delivery status (sent, delivered, failed) is tracked and available in admin reports.
- ✓Failed SMS delivery triggers a retry after 15 minutes with exponential backoff (max 3 retries).
As a cycle tracker, I want SMS content delivered in Bengali per BTRC requirements, so that the messages are understandable and legally compliant in Bangladesh.
Acceptance Criteria
- ✓All SMS messages to Bangladeshi numbers are sent in Bengali (Unicode SMS encoding) by default.
- ✓SMS content is transliterated properly for display on basic feature phones that may not support full Unicode.
- ✓Users who have set their language to English still receive SMS in Bengali if their number is +880 (BTRC compliance); email follows their language preference.
9
Content Platform
CONT-01 — CONT-05
Bilingual articles on menstrual health, fertility, and reproductive wellness. Content is categorized by topic, tagged by cycle phase, and addresses Bangladeshi cultural context.
As a cycle tracker, I want to read blog-style articles on menstrual health, fertility, and reproductive wellness, so that I can educate myself about my body and make informed decisions.
Acceptance Criteria
- ✓Content section is accessible from the main navigation and displays articles in a card-based feed with title, excerpt, and thumbnail.
- ✓Articles support rich text formatting including headers, images, and bulleted lists.
- ✓At least 20 articles are available at launch covering core topics: period basics, fertile window, nutrition, exercise, and common myths.
As a cycle tracker, I want all content available in both English and Bengali, so that I can read articles in my preferred language.
Acceptance Criteria
- ✓Every article has both an English and Bengali version stored as separate content entries linked by a shared article ID.
- ✓The content feed automatically displays articles in the user's selected language.
- ✓A language toggle on the article page allows switching between English and Bengali without navigating away.
As a cycle tracker, I want content categorized by topic and tagged by cycle phase, so that I can find relevant articles quickly and see content matched to where I am in my cycle.
Acceptance Criteria
- ✓Content is organized into categories (e.g., Menstrual Health, Fertility, Nutrition, Exercise, Mental Health) with filterable tabs.
- ✓Each article is tagged with one or more cycle phases (menstrual, follicular, ovulatory, luteal) as metadata.
- ✓Phase tags are visible on article cards and can be used as a filter criterion.
As a cycle tracker, I want phase-specific content recommendations on my dashboard, so that I see the most relevant articles for where I currently am in my cycle.
Acceptance Criteria
- ✓Dashboard displays a "Recommended for you" section with 2–3 article cards matched to the user's current cycle phase.
- ✓Recommendations change as the user's cycle phase changes (e.g., transitioning from follicular to fertile shows fertility-related content).
- ✓Tapping a recommended article card opens the full article in the user's selected language.
As a cycle tracker in Bangladesh, I want content that addresses Bangladeshi cultural context and menstrual myths, so that the information feels relevant to my life and helps me overcome cultural misconceptions.
Acceptance Criteria
- ✓At least 5 launch articles directly address common menstrual myths in Bangladeshi culture (e.g., food restrictions during periods, pickle taboo).
- ✓Cultural context articles are written by or reviewed by Bangladeshi healthcare professionals.
- ✓Content uses culturally sensitive language and avoids dismissing beliefs; instead, it explains the science while respecting the cultural context.
10
Partner Sharing
PRTN-01 — PRTN-06
Sharing code generation, read-only partner access to cycle calendar and phase insights, daily partner tips, and instant revocation. Partners cannot see logged symptoms or edit data.
As an account holder, I want to generate a sharing code for a specific profile and send it to my partner, so that they can access relevant cycle information without me explaining it manually.
Acceptance Criteria
- ✓A "Share with Partner" button in profile settings generates a unique 6-character alphanumeric code.
- ✓The code expires after 48 hours if not redeemed and can be regenerated at any time.
- ✓Only one active partner link is allowed per profile; generating a new code invalidates the previous one.
As a partner, I want read-only access to my partner's current cycle calendar and phase insights, so that I understand where they are in their cycle without them having to tell me.
Acceptance Criteria
- ✓After entering a valid sharing code, the partner sees a simplified dashboard showing current cycle day, phase name, and calendar view.
- ✓Calendar displays period days, fertile window, and ovulation markers (same color coding as the primary user's view).
- ✓No edit buttons, logging capabilities, or symptom data are visible in the partner's view.
As a partner, I want to receive daily insights about my partner's current cycle phase, so that I can be emotionally supportive at the right moments.
Acceptance Criteria
- ✓Partner dashboard shows a daily insight card with a brief, empathetic description of the current phase (e.g., "Your partner may feel more fatigued during this phase").
- ✓Insights change daily based on the cycle day and phase, providing variety across the cycle.
- ✓Insights are available in both English and Bengali based on the partner's language preference.
As a partner of someone in TTC mode, I want to see fertile window visibility on the shared calendar, so that I can be an active participant in conception planning.
Acceptance Criteria
- ✓Fertile window and ovulation markers are visible on the partner's calendar view when the primary user is in TTC mode.
- ✓Fertile window visibility is automatically enabled for TTC profiles and hidden for period-tracking-only profiles.
- ✓The primary user can override this default and hide fertile window from the partner view in their sharing settings.
As a partner, I want to be unable to see logged symptoms or edit any data, so that the primary user's detailed health data remains private and under their sole control.
Acceptance Criteria
- ✓Partner API endpoints return only calendar events and phase data; symptom logs, lifestyle data, and personal biometrics are excluded.
- ✓No edit, delete, or logging endpoints are accessible with a partner-level authentication token.
- ✓Attempting to access restricted data returns a 403 Forbidden response with a clear error message.
As an account holder, I want to instantly revoke my partner's access at any time, so that I remain in full control of who can see my health data.
Acceptance Criteria
- ✓"Revoke Partner Access" button in profile sharing settings terminates the partner link immediately.
- ✓After revocation, the partner sees a "Access has been revoked" screen on their next page load or API call.
- ✓Revocation does not require the partner's consent or notification; it is a unilateral action by the profile owner.
11
Bilingual Support
I18N-01 — I18N-04
Every UI string translatable between English and Bengali. Language switching, date/number formatting, and Bengali as the default for Bangladesh-based users.
As a user, I want every UI string to be translatable between English and Bengali, so that I can use the entire app in my preferred language without encountering untranslated text.
Acceptance Criteria
- ✓All UI strings are externalized in a translation file (JSON) with keys for both English (en) and Bengali (bn).
- ✓No hardcoded strings exist in component code; every visible text uses the translation system.
- ✓A CI/CD check verifies that every English key has a corresponding Bengali translation before deploy.
As a user, I want to switch language at any time from any screen, so that I am never locked into a language choice I made during onboarding.
Acceptance Criteria
- ✓A language toggle (EN/BN) is accessible from the settings screen and optionally from the navigation bar.
- ✓Switching language re-renders the entire UI in the new language without a page reload or data loss.
- ✓Language preference is saved to the user's profile and persists across sessions and devices.
As a user, I want date and number formatting to adapt to my selected language, so that dates, times, and numbers display in a format natural to me.
Acceptance Criteria
- ✓Bengali mode displays dates using Bengali numerals and the Bengali calendar month names where appropriate.
- ✓English mode uses standard Gregorian date formatting (e.g., "March 26, 2026").
- ✓Numeric values (cycle day, confidence %, days until period) render in Bengali numerals when Bengali is selected.
As a new user based in Bangladesh, I want Bengali to be the default language, so that I do not need to search for a language setting to use the app in my native tongue.
Acceptance Criteria
- ✓Geolocation or browser locale detection identifies Bangladesh-based users and sets Bengali as the default.
- ✓Default language can be overridden on the onboarding welcome screen before any other interaction.
- ✓Users outside Bangladesh default to English, with an option to switch to Bengali at any time.
12
Privacy & Security
PRIV-01 — PRIV-05
Field-level encryption for health data, account deletion, bilingual privacy policy, terms of service, and multi-profile consent mechanisms.
As a cycle tracker, I want my health data (symptoms, cycle data) encrypted at field level in the database, so that even if the database is compromised, my sensitive information remains unreadable.
Acceptance Criteria
- ✓All health-related database fields (cycle dates, symptoms, flow intensity, lifestyle data) are encrypted using AES-256 at rest.
- ✓Encryption keys are stored in a separate secrets manager (not in the application database or codebase).
- ✓Decryption happens at the application layer only when the authenticated user or their authorized partner requests the data.
As an account holder, I want to delete my entire account and all associated data, so that I can exercise my right to be forgotten and remove all traces of my health information.
Acceptance Criteria
- ✓Account deletion requires password re-entry and a confirmation dialog explaining that all profiles and data will be permanently removed.
- ✓Deletion is executed within 24 hours and removes all profiles, cycle data, symptoms, notifications, and partner links.
- ✓After deletion, the user receives a confirmation email and the account cannot be recovered.
As a new user, I want a clear privacy policy explaining how multi-profile data is handled, so that I understand what data is collected, how it is stored, and who can access it.
Acceptance Criteria
- ✓Privacy policy is accessible from the onboarding trust screen, settings, and footer of every page.
- ✓Policy explicitly explains that multi-profile data is isolated and that the account holder controls all profiles' data.
- ✓Policy is written in plain language (not legalese) and covers data collection, storage, encryption, sharing, and deletion.
As a user, I want terms of service available in both English and Bengali, so that I can understand my rights and obligations in my preferred language.
Acceptance Criteria
- ✓Terms of service page renders in the user's selected language with a toggle to switch between English and Bengali.
- ✓Both language versions are legally equivalent and reviewed by a legal professional familiar with Bangladeshi law.
- ✓Users must accept the terms during signup; the acceptance timestamp and language version are recorded.
As an account holder, I want a multi-profile consent mechanism requiring profile owner acknowledgment, so that I explicitly confirm responsibility for managing other people's health data.
Acceptance Criteria
- ✓When creating a profile for someone other than "self," a consent dialog explains data stewardship responsibilities.
- ✓Consent acknowledgment is timestamped and stored with the profile creation record.
- ✓The consent dialog is available in both English and Bengali and includes a summary of what data will be collected.
13
Feature Gating (Free/Pro)
GATE-01 — GATE-05
Admin-controlled feature access levels. Every feature can be toggled between free and pro tiers in real-time.
As an admin, I want a backend middleware that checks subscription tier before granting feature access, so that pro features are only available to paying users.
Acceptance Criteria
- ✓Middleware returns 403 for free users accessing pro features.
- ✓Pro users pass through the middleware without obstruction.
- ✓Middleware reads access configuration from the feature_gates table.
As an admin, I want to configure which features are free vs pro from the admin portal, so that I can adjust monetization strategy without code changes.
Acceptance Criteria
- ✓Admin UI shows feature list with free/pro toggle for each feature.
- ✓Changes persist to the database immediately.
- ✓Changes take effect without application restart.
As a free user, I want to see a “Pro” badge on locked features with an upgrade prompt, so that I know what’s available if I subscribe.
Acceptance Criteria
- ✓Pro badge is visible on all gated features for free users.
- ✓Tapping the badge shows an upgrade prompt with subscription details.
- ✓Pro users never see Pro badges or upgrade prompts.
As a pro user, I want immediate access to all features marked as pro, so that my subscription has clear value.
Acceptance Criteria
- ✓All pro-gated features are accessible without restriction.
- ✓No upgrade prompts are shown to pro users.
- ✓Access works across all profiles managed by the pro account.
As an admin, I want feature gate changes to take effect in real-time, so that I can respond to business needs immediately.
Acceptance Criteria
- ✓Toggling a feature gate updates user experience within seconds.
- ✓Changes take effect without page reload or app restart.
14
Session Management
SESS-01 — SESS-04
Admin controls for monitoring and terminating active user sessions remotely.
As an admin, I want to view all active sessions for any user including device, IP, and last activity time, so that I can monitor suspicious activity.
Acceptance Criteria
- ✓Session list shows device info, IP address, login time, and last activity timestamp.
- ✓Session data updates on page load.
As an admin, I want to terminate individual user sessions remotely, so that I can respond to security incidents.
Acceptance Criteria
- ✓Clicking “Terminate” immediately invalidates the session.
- ✓The user’s next request returns 401 Unauthorized.
- ✓The user must re-login to regain access.
As an admin, I want to terminate all sessions for a user at once, so that I can force a complete logout during account compromise.
Acceptance Criteria
- ✓“Terminate All” button invalidates every session for the user.
- ✓All devices are logged out simultaneously.
As a user, I want my sessions tracked securely so that admin can protect my account if compromised.
Acceptance Criteria
- ✓Sessions are stored in Redis with JWT blacklist support.
- ✓Expired sessions are auto-cleaned from the store.
- ✓Session data includes device fingerprint for identification.
15
BDApps Subscription (Pro Billing)
SUBS-01 — SUBS-08
Pro subscription management via BDApps carrier billing with automatic access control based on charging status.
As a user, I want to subscribe to Pro via BDApps carrier billing, so that the charge appears on my mobile phone bill.
Acceptance Criteria
- ✓BDApps charging API is called successfully upon subscription.
- ✓Subscription status is stored in the database.
- ✓Pro access is granted immediately after successful charge.
As an admin, I want the system to check BDApps charging status daily, so that we know which users have active subscriptions.
Acceptance Criteria
- ✓Cron job runs daily to query BDApps API for each subscriber.
- ✓Subscription status is updated in the database based on API response.
As a pro user, I want my pro access automatically disabled if charging fails for several days, so that the business doesn’t give away free pro access.
Acceptance Criteria
- ✓After N days (admin-configurable) of failed charges, pro access is revoked.
- ✓User is downgraded to free tier automatically.
As a user in grace period, I want to see a warning that my subscription is expiring, so that I can resolve the billing issue.
Acceptance Criteria
- ✓Banner shows “Your subscription expires in X days” during grace period.
- ✓Banner links to billing help or support page.
As a user whose charging resumes, I want my pro access automatically restored, so that I don’t need to re-subscribe manually.
Acceptance Criteria
- ✓When BDApps reports a successful charge, pro access is re-enabled automatically.
- ✓No manual intervention is needed to restore access.
As an admin, I want to view subscription status for all users, so that I can monitor revenue health.
Acceptance Criteria
- ✓Admin list shows counts for: active, grace period, expired, and never subscribed.
- ✓Per-user subscription status is viewable in the user detail view.
As an admin, I want to manually grant or revoke pro access, so that I can handle edge cases and promotions.
Acceptance Criteria
- ✓Admin can override BDApps status to grant or revoke pro access.
- ✓Manual grant/revoke is logged with a reason field.
- ✓Override takes effect immediately.
As an admin, I want to view subscription history per user, so that I can investigate billing disputes.
Acceptance Criteria
- ✓History shows charge date, amount, status, and tier changes in chronological order.
16
Admin Panel
ADMN-01 — ADMN-17
Operational dashboard, user and profile management, health data analytics, prediction accuracy reports, CMS, notification controls, security roles, data export, usage reporting, and management UIs for feature gating, sessions, and subscriptions.
As an admin, I want a dashboard showing total users, active users, profiles created, and tracking activity metrics, so that I can monitor platform health at a glance.
Acceptance Criteria
- ✓Dashboard displays key metrics: total accounts, total profiles, daily active users (DAU), monthly active users (MAU), and periods logged today.
- ✓Metrics update in near-real-time (within 5 minutes of data change).
- ✓Dashboard loads in under 3 seconds even with 100k+ users in the system.
As an admin, I want visual charts showing daily new users, monthly active users, and profile creation trends, so that I can identify growth patterns and seasonality.
Acceptance Criteria
- ✓Line charts display daily new signups, MAU trend, and profile creation counts over selectable time ranges (7d, 30d, 90d, 1y).
- ✓Charts support hover tooltips showing exact values for any data point.
- ✓Chart data can be exported as CSV for external analysis.
As an admin, I want user management capabilities (list, view details, suspend, reactivate, delete, reset password), so that I can handle support requests and enforce platform policies.
Acceptance Criteria
- ✓User list supports search by email, name, or account ID with pagination (50 users per page).
- ✓Each user row shows email, signup date, last active, profile count, and account status (active/suspended).
- ✓Suspend, reactivate, delete, and password reset actions require confirmation and are logged in an admin audit trail.
As an admin, I want profile monitoring with aggregated cycle insights (privacy-protected), so that I can understand usage patterns without accessing individual health data.
Acceptance Criteria
- ✓Profile monitoring shows aggregated statistics only: total profiles, active/inactive ratio, average profiles per account.
- ✓No individual cycle data, symptom logs, or personal health information is visible to admins.
- ✓Aggregated insights require a minimum anonymity threshold (e.g., 50+ profiles) before displaying any statistic.
As an admin, I want health data analytics showing aggregated population-level insights (average cycle length, irregular cycle percentage, common symptoms), so that I can identify trends for product and content decisions.
Acceptance Criteria
- ✓Analytics dashboard displays: average cycle length, median period duration, % of irregular cycles (>35 or <21 days), and top 10 logged symptoms.
- ✓All data is aggregated and anonymized; no individual profile can be identified from the analytics view.
- ✓Filters allow slicing by date range, age group, and health goal (period tracking vs. TTC).
As an admin, I want prediction accuracy reports showing predicted vs. actual dates and accuracy percentages, so that I can evaluate and improve the prediction engine.
Acceptance Criteria
- ✓Report shows: mean absolute error (days), percentage of predictions within 1/2/3 days of actual, and accuracy by prediction tier.
- ✓Accuracy trend chart shows improvement (or degradation) over time as more user data accumulates.
- ✓Report is filterable by prediction tier (1, 2, 3) and date range.
As an admin, I want a content management system to create, edit, and delete articles, manage categories, and handle languages, so that I can maintain and expand the content library without developer involvement.
Acceptance Criteria
- ✓CMS provides a rich text editor for creating articles with title, body, category, phase tags, and thumbnail image upload.
- ✓Each article has side-by-side English and Bengali editor fields to ensure both translations are created together.
- ✓Published articles are immediately visible to users; draft status keeps articles hidden until published.
As an admin, I want notification management to control reminder types and send broadcast notifications, so that I can communicate with users about platform updates or health campaigns.
Acceptance Criteria
- ✓Admin can enable/disable each notification type globally (period alert, fertile window, logging reminder) as a kill switch.
- ✓Broadcast notification tool allows sending a one-time message to all users or a filtered segment via email and/or SMS.
- ✓Broadcast messages require bilingual content (English + Bengali) before they can be sent.
As an admin, I want security and access control with Super Admin and Content Admin roles, so that team members have appropriate permissions without unnecessary access to sensitive data.
Acceptance Criteria
- ✓Super Admin has full access to all admin features; Content Admin is limited to CMS and content analytics only.
- ✓Role assignment is managed by Super Admins through the admin user management interface.
- ✓All admin actions are logged with timestamp, actor (admin email), and action type for audit purposes.
As an admin, I want to export analytics and research data as CSV or Excel, so that I can perform external analysis and generate reports for stakeholders.
Acceptance Criteria
- ✓Export button is available on every analytics dashboard (user metrics, health analytics, prediction reports).
- ✓Exported files contain only aggregated, anonymized data; no PII or individual health records are included.
- ✓Export supports both CSV and Excel (.xlsx) formats with a format selector before download.
As an admin, I want a feature usage report showing usage percentages per feature area, so that I can identify which features are delivering value and which are underutilized.
Acceptance Criteria
- ✓Report shows usage percentage for each feature: period logging, symptom logging, calendar views, content reads, partner sharing, and notification opt-in rates.
- ✓Feature usage is calculated as (users who used feature / total active users) over a selectable time period.
- ✓Bar chart visualization makes it easy to compare feature adoption at a glance.
As an admin, I want an alert engagement report showing reminders delivered, opened, and action taken, so that I can optimize notification timing and content for better user engagement.
Acceptance Criteria
- ✓Report tracks three metrics per notification type: delivered count, open/click rate, and action rate (e.g., period logged after reminder).
- ✓SMS delivery and email open tracking are implemented and feed data into this report.
- ✓Data is breakable by channel (email vs. SMS) and by language (English vs. Bengali).
As an admin, I want multi-profile usage analytics showing accounts, profiles per account, and relation type breakdown, so that I can understand how the family-oriented model is being adopted.
Acceptance Criteria
- ✓Dashboard shows: total accounts with multiple profiles, average profiles per account, and distribution of relation types (self, wife, sister, etc.).
- ✓Pie chart displays relation type breakdown; bar chart shows profiles-per-account distribution.
- ✓Trend line shows multi-profile adoption rate over time (percentage of new accounts creating 2+ profiles).
As an admin, I want a data completeness report showing complete vs. partial vs. inactive profiles, so that I can identify engagement issues and target re-engagement campaigns.
Acceptance Criteria
- ✓Profiles are classified as: Complete (logged 3+ cycles with symptoms), Partial (logged 1–2 cycles or missing symptoms), Inactive (no logs in 60+ days).
- ✓Report shows counts and percentages for each category with a trend over time.
- ✓Inactive profile segment can be exported as a list (account email only, no health data) for re-engagement email campaigns.
As an admin, I want a feature gating management UI, so that I can toggle features between free and pro.
Acceptance Criteria
- ✓Feature list displays all gatable features with free/pro toggles.
- ✓Changes are saved to the database upon toggle.
- ✓Toggle changes take effect in real-time without restart.
As an admin, I want a session management UI, so that I can view and terminate user sessions.
Acceptance Criteria
- ✓Session list is displayed per user with device, IP, and activity details.
- ✓Terminate individual and terminate all buttons are available.
- ✓Confirmation dialog appears before terminating sessions.
As an admin, I want a subscription management UI, so that I can view BDApps status, set grace period, and override access.
Acceptance Criteria
- ✓Subscription dashboard shows aggregate and per-user subscription status.
- ✓Grace period duration is configurable from the UI.
- ✓Manual grant/revoke with a reason field is available per user.
v2 Deferred Stories
The following features are tracked but not in the current v1 roadmap. Included here for completeness and future planning.
Pregnancy mode, medicine tracker, sleep monitor, exercise tracking, sex life tracking, health analytics, menopause, and community features. These will be prioritized after v1 ships and validates product-market fit.
As a cycle tracker who becomes pregnant, I want to switch to pregnancy mode by entering my due date or last menstrual period date, so that the app transitions to gestational tracking seamlessly.
Acceptance Criteria
- ✓Pregnancy mode switch is accessible from profile settings and accepts either a due date or LMP date to calculate gestational age.
- ✓Switching to pregnancy mode pauses cycle predictions and replaces the dashboard with pregnancy-focused widgets.
As a pregnant user, I want week-by-week fetal development visualization, so that I have a vivid sense of my baby's growth at every stage.
Acceptance Criteria
- ✓Dashboard hero shows current gestational week with a fetal size comparison illustration.
- ✓Developmental milestones and body changes are listed for each week in both English and Bengali.
As a cycle tracker, I want to add medicines with name, dosage, schedule, and duration, so that I can track my medication alongside my cycle.
Acceptance Criteria
- ✓Medicine entry form accepts name, dosage, frequency (daily/weekly/as needed), and start/end dates.
- ✓Automated reminders are sent at scheduled times for active medications.
As a cycle tracker, I want to log my sleep duration, start/wake times, and quality, so that I can correlate sleep patterns with my cycle phases.
Acceptance Criteria
- ✓Sleep logging includes bedtime, wake time (auto-calculating duration), and a 1–5 quality rating.
- ✓Sleep data is correlated with cycle phase in a chart showing sleep quality trends across the cycle.
As a cycle tracker, I want to log steps, workouts, and calories burned, so that I can understand how exercise correlates with my cycle regularity.
Acceptance Criteria
- ✓Exercise logging supports workout type, duration, intensity, and estimated calories burned.
- ✓Analytics show exercise frequency vs. cycle regularity correlation over time.
As a cycle tracker, I want to log intercourse date and protection status (encrypted, opt-in only), so that I can correlate timing with my fertile window and track conception attempts.
Acceptance Criteria
- ✓Sex life tracking is a hidden-by-default feature that must be explicitly opted into from privacy settings.
- ✓All sex life data is encrypted with an additional encryption layer beyond standard health data encryption.
As a cycle tracker, I want monthly charts showing my period history and cycle variation, so that I can visualize trends and discuss them with my healthcare provider.
Acceptance Criteria
- ✓Charts display cycle length variation, period duration trends, and symptom frequency over the last 6–12 months.
- ✓Health report can be exported as a shareable PDF for doctor visits.
As a cycle tracker aged 40+, I want to switch to perimenopause mode, so that the app provides phase-appropriate insights for hot flashes, night sweats, mood changes, and irregular cycles.
Acceptance Criteria
- ✓Perimenopause mode adds tracking for hot flashes, night sweats, and menopause-specific symptoms.
- ✓Cycle predictions adapt to account for increasing irregularity typical of perimenopause.
As a cycle tracker, I want anonymous community posting with random avatars, so that I can discuss health topics and get peer support without revealing my identity.
Acceptance Criteria
- ✓Users are assigned a random avatar and display name upon entering the community; no real names or profile data are visible.
- ✓All posts are pre-moderated by the admin team before appearing publicly.