×

注意!页面内容来自https://github.com/Coding-Camp-Capstone-Project-2026/frontend,本站不储存任何内容,为了更好的阅读体验进行在线解析,若有广告出现,请及时反馈。若您觉得侵犯了您的利益,请通知我们进行删除,然后访问 原网页

Skip to content
<> /* Override primer focus outline color for marketing header dropdown links for better contrast */ [data-color-mode="light"] .HeaderMenu-dropdown-link:focus-visible, [data-color-mode="light"] .HeaderMenu-trailing-link a:focus-visible { outline-color: var(--color-accent-fg); }

Coding-Camp-Capstone-Project-2026/frontend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🖥️ Frontend — Menstrual Health Companion

Single Page Application (SPA) dibangun dengan React dan Vitemenyediakan antarmuka interaktif untuk melacak siklus menstruasimencatat kondisi hariandan melihat prediksi AI.


🛠️ Tech Stack

Technology Purpose
React 18+ UI Library
Vite 8.0 Build tool & dev server (HMR)
TypeScript 5.9 Type safety
React Router 7.x Client-side routing
Axios 1.x HTTP client for API calls
CSS Modules Component-scoped styling

🚀 Quick Start

# Install dependencies
npm install

# Start development server (HMR)
npm run dev
# → http://localhost:5173

# Build for production
npm run build

# Preview production build
npm run preview

Note: Pastikan Backend API (http://localhost:5000) sudah berjalan sebelum menggunakan frontend.


📁 Project Structure

frontend/
├── package.on             # Dependencies & scripts
├── index.html               # HTML entry point
├── tsconfig.on            # TypeScript configuration
├── public/
│   ├── favicon.svg          # App icon
│   └── icons.svg            # Icon sprites
└── src/
    ├── App.x              # 🏠 Root componentroutingguards
    ├── main.x             # 🚀 React entry point
    ├── index.css            # 🎨 Global s
    │
    ├── context/
    │   └── AuthContext.x  # 🔐 Authentication state (tokenuser)
    │
    ├── components/
    │   ├── Navbar.x       # 🧭 Navigation bar
    │   └── Navbar.css       # Navbar styling
    │
    ├── pages/
    │   ├── LoginPage.x    # 🔑 Login form
    │   ├── RegisterPage.x # 📝 Registration form
    │   ├── Dashboard.x    # 📊 Main dashboard
    │   ├── Dashboard.css    # Dashboard styling
    │   ├── CalendarPage.x # 📅 Calendar view
    │   ├── CalendarPage.css # Calendar styling
    │   ├── CycleForm.x    # 🩸 Menstrual cycle input
    │   ├── DailyLogForm.x # 📋 Daily health log form
    │   ├── ProfilePage.x  # 👤 User profile
    │   ├── ProfilePage.css  # Profile styling
    │   ├── Auth.css         # Auth pages styling
    │   └── FormPage.css     # Form pages styling
    │
    └── services/
        └── api.           # 🌐 Axios instance & interceptors

🗺️ Routing

Path Component Auth Description
/login LoginPage Public Halaman login
/register RegisterPage Public Halaman registrasi
/ Dashboard 🔒 Protected Dashboard utama
/calendar CalendarPage 🔒 Protected Kalender siklus
/cycle CycleForm 🔒 Protected Form input siklus
/daily-log DailyLogForm 🔒 Protected Form log harian
/profile ProfilePage 🔒 Protected Profil pengguna

Route Guards

  • ProtectedRoute — Redirect ke /login jika belum login
  • PublicRoute — Redirect ke / jika sudah login

🔐 State Management

AuthContext

Centralized authentication state menggunakan React Context API:

// Provides: { tokenuserloginlogoutloading }
<AuthProvider>
  <App />
</AuthProvider>
State Type Description
token string | null JWT token dari localStorage
user object | null Data user (idnameemail)
loading boolean Auth state loading indicator
login(tokenuser) function Set token & usersimpan ke localStorage
logout() function Clear token & userredirect ke login

🌐 API Integration

API Service (services/api.)

Axios instance yang dikonfigurasi untuk berkomunikasi dengan backend:

// Base URL: http://localhost:5000/api
// Auto-attach Authorization header dari localStorage
// Response interceptor: auto-logout on 401/403

API Calls per Page

Page API Endpoints Called
LoginPage POST /api/auth/login
RegisterPage POST /api/auth/register
Dashboard GET /api/cyclesGET /api/predictionsGET /api/daily-logs
CalendarPage GET /api/cyclesGET /api/daily-logs
CycleForm POST /api/cyclesPUT /api/cycles/:id
DailyLogForm POST /api/daily-logs
ProfilePage GET /api/profilePUT /api/profile

🎨 Styling

Aplikasi menggunakan Vanilla CSS dengan pendekatan:

  • Global s (index.css) — CSS variablesresettypography
  • Page-level CSS — Setiap halaman memiliki file CSS sendiri
  • Component CSS — Component-scoped s (e.g.Navbar.css)

Design System

  • Color scheme dengan CSS custom properties
  • Responsive design (mobile-first)
  • Smooth transitions dan micro-animations
  • Loading spinners dan skeleton states

📝 Pages Overview

🔑 LoginPage & RegisterPage

  • Form validasi client-side
  • Password visibility toggle
  • Error handling dengan user-friendly messages
  • Auto-redirect setelah login/register berhasil

📊 Dashboard

  • Ringkasan siklus terakhir & prediksi berikutnya
  • Status panjang siklus & kepercayaan prediksi
  • Quick action buttons ke fitur lain
  • Statistik dan overview data kesehatan

📅 CalendarPage

  • Kalender interaktif dengan visualisasi siklus
  • Warna berbeda untuk hari menstruasiovulasi estimasi
  • Klik tanggal untuk melihat detail log

🩸 CycleForm

  • Input start/end datepanjang siklusintensitas
  • Validasi input dengan feedback realtime
  • Support create & edit mode

📋 DailyLogForm

  • Input mood (1-5)symptomskualitas tidurstrespuasa
  • Multi-select symptoms dengan checkboxes
  • Auto-fill jika log sudah ada untuk tanggal tersebut

👤 ProfilePage

  • Tampilkan & edit profil (namatanggal lahirrata-rata siklus)
  • Account information display

About

No descriptionwebsiteor topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors