CycleWise is a full-stack cycle tracking web application built with Laravel, Inertia.js, React, TypeScript, and Tailwind CSS.
It helps users track menstrual cycles, Day One records, basal body temperature, symptoms, fertile windows, ovulation estimates, partner sharing, and cycle insights in one private dashboard.
- Cycle and period tracking
- Calendar visualization for period days, fertile windows, ovulation, safe days, and pregnancy test estimates
- Basal body temperature logging
- BBT trend charts
- Multiple symptoms per day with severity levels and notes
- Cycle prediction based on previous cycle lengths
- Dashboard summary for current cycle status
- Insights page for cycle regularity, BBT summaries, symptom patterns, and ovulation correlation
- Partner access system with permission-based data sharing
- Profile settings with avatar upload
- Temperature unit preference for Celsius or Fahrenheit
- Authentication and account settings
- Laravel 12
- PHP 8.4
- Inertia.js
- React
- TypeScript
- Tailwind CSS
- Recharts
- React DayPicker
- MySQL or SQLite
- Laravel Fortify
- Vite
Additional screenshots are available in public/screenshots, including detailed views for dashboard, calendar, cycles, BBT, insights, partner request flow, and settings.
After running the database seeders, you can use the following demo accounts:
test@example.com
password
test2@example.com
password
test3@example.com
password
The first two accounts contain sample cycle data. The third account is mostly empty and can be used to test the first-time user experience.
Clone the repository:
git clone https://github.com/Rico23Y/cycle-tracker.git
cd cycle-trackerInstall PHP dependencies:
composer installInstall JavaScript dependencies:
npm installCopy the environment file:
cp .env.example .envOn Windows PowerShell, use:
Copy-Item .env.example .envGenerate the application key:
php artisan key:generateConfigure your database in .env.
For SQLite, create the database file:
New-Item database/database.sqliteThen set this in .env:
DB_CONNECTION=sqliteRun migrations and seeders:
php artisan migrate:fresh --seedStart the frontend dev server:
npm run devStart the Laravel server if you are not using Laravel Herd:
php artisan serveRun migrations:
php artisan migrateReset and reseed the database:
php artisan migrate:fresh --seedRun tests:
php artisan testRun frontend build:
npm run buildClear cached Laravel files:
php artisan optimize:clearImportant files and folders:
app/Http/Controllers
app/Models
app/Services
database/migrations
database/seeders
resources/js/pages
resources/js/components
resources/js/layouts
routes/web.php
Main pages:
resources/js/pages/dashboard/index.tsx
resources/js/pages/calendar/index.tsx
resources/js/pages/cycles
resources/js/pages/bbt
resources/js/pages/insights
resources/js/pages/partners
resources/js/pages/settings
Important services:
app/Services/CyclePredictionService.php
app/Services/DataAccessContextService.php
Day One is the first day of a menstrual period. CycleWise uses Day One records to calculate cycle length, estimate the next period, and build calendar predictions.
BBT means basal body temperature. CycleWise stores BBT internally in Celsius and displays it according to the user's preferred temperature unit.
Users can log multiple symptoms on the same day. Each symptom can include a type, severity level, and optional notes.
Users can share selected tracking data with a partner. Access is controlled by permissions, so the owner can decide what data is visible or editable.
CycleWise was built as a portfolio project to demonstrate practical full-stack development skills, including:
- Laravel backend development
- React and TypeScript frontend development
- Inertia.js full-stack routing
- Database design and Eloquent relationships
- Authentication and user settings
- Data visualization
- Permission-based data access
- Form validation and CRUD workflows
- Responsive UI design
- Real-world domain modeling
CycleWise is a personal tracking and portfolio application. It is not a medical device and should not be used as a substitute for professional medical advice, diagnosis, contraception, or fertility treatment.