📂 SemiProject/
├─ 📂 backend/
│ ├─ 📂 app/
│ │ ├─ 📂 ai_models/
│ │ │ ├─ sbert.py
│ │ │ └─ yolo11n.pt
│ │ ├─ 📂 captures/
│ │ │ └─ real/
│ │ ├─ database.py
│ │ ├─ main.py
│ │ ├─ models.py
│ │ ├─ 📂 routers/
│ │ │ ├─ 📂 admin/
│ │ │ │ └─ admin.py
│ │ │ ├─ 📂 kiosk/
│ │ │ │ └─ kiosk.py
│ │ │ ├─ 📂 ml/
│ │ │ │ ├─ detect.py
│ │ │ │ ├─ statics.py
│ │ │ │ ├─ sugestion.py
│ │ │ │ └─ _archive.py
│ │ │ └─ 📂 web/
│ │ │ ├─ auth.py
│ │ │ ├─ mypage.py
│ │ │ ├─ plan.py
│ │ │ └─ ticket.py
│ │ ├─ schemas.py
│ │ ├─ 📂 utils/
│ │ │ └─ auth_utils.py
│ │ └─ __init__.py
│ ├─ pyproject.toml
│ └─ README.md
├─ 📂camera/
│ ├─ 📂 app/
│ │ ├─ 📂 app/
│ │ │ └─ 📂 vision/
│ │ │ └─ 📂 models/
│ │ │ └─ yolo11n.pt
│ │ ├─ app.py
│ │ ├─ 📂 routers/
│ │ │ ├─ health_api.py
│ │ │ └─ vision_api.py
│ │ ├─ 📂 vision/
│ │ │ ├─ camera_initializer.py
│ │ │ ├─ camera_manager.py
│ │ │ ├─ camera_worker.py
│ │ │ ├─ 📂 config/
│ │ │ │ └─ camera_config.json
│ │ │ ├─ 📂 models/
│ │ │ │ └─ yolo11n.pt
│ │ │ ├─ 📂 schemas/
│ │ │ │ └─ schemas.py
│ │ │ ├─ seat_manager.py
│ │ │ ├─ seat_state_machine.py
│ │ │ ├─ 📂 utils/
│ │ │ │ ├─ camera_config.generated.json
│ │ │ │ ├─ camera_to_rois.py
│ │ │ │ └─ detectors.py
│ │ │ └─ __init__.py
│ │ └─ __init__.py
│ ├─ pyproject.toml
│ └─ README.md
├─ 📂 frontend/
│ ├─ eslint.config.js
│ ├─ index.html
│ ├─ package-lock.json
│ ├─ package.json
│ ├─ README.md
│ ├─ 📂 src/
│ │ ├─ App.css
│ │ ├─ App.jsx
│ │ ├─ index.css
│ │ ├─ 📂 kiosk/
│ │ │ ├─ 📂 components/
│ │ │ │ ├─ KioskAlertModal.jsx
│ │ │ │ ├─ KioskCheckIn.jsx
│ │ │ │ ├─ KioskCheckOut.jsx
│ │ │ │ ├─ KioskHeader.jsx
│ │ │ │ └─ KioskPaymentModal.jsx
│ │ │ ├─ KioskApp.jsx
│ │ │ ├─ 📂 screens/
│ │ │ │ ├─ KioskLogin.jsx
│ │ │ │ ├─ KioskPhoneInput.jsx
│ │ │ │ ├─ KioskPinInput.jsx
│ │ │ │ ├─ KioskSeatStatus.jsx
│ │ │ │ ├─ KioskTicketList.jsx
│ │ │ │ └─ KioskUserSelect.jsx
│ │ │ └─ 📂 styles/
│ │ │ └─ Kiosk.css
│ │ ├─ main.jsx
│ │ ├─ 📂 utils/
│ │ │ ├─ authApi.js
│ │ │ ├─ authClient.js
│ │ │ └─ useAuthStores.js
│ │ └─ 📂 web/
│ │ ├─ 📂 components/
│ │ │ ├─ AdminHeader.jsx
│ │ │ ├─ AdminLayout.jsx
│ │ │ ├─ AdminSidebar.jsx
│ │ │ ├─ AuthButton.jsx
│ │ │ ├─ DailySalesChart.jsx
│ │ │ ├─ DashboardTodoList.jsx
│ │ │ ├─ FocusAnalysis.jsx
│ │ │ ├─ MemberStatusChart.jsx
│ │ │ ├─ SeatAnalysis.jsx
│ │ │ ├─ SeatBox.jsx
│ │ │ ├─ SeatSelector.jsx
│ │ │ ├─ SeatStatus.jsx
│ │ │ ├─ SeatUsageChart.jsx
│ │ │ ├─ StudyTimeSummary.jsx
│ │ │ ├─ TicketSalesChart.jsx
│ │ │ ├─ TodoModal.jsx
│ │ │ ├─ TodoProgress.jsx
│ │ │ └─ WebLayout.jsx
│ │ ├─ 📂 pages/
│ │ │ ├─ AccountRecovery.jsx
│ │ │ ├─ AdminDashboard.jsx
│ │ │ ├─ AdminLogin.jsx
│ │ │ ├─ AdminMembersManage.jsx
│ │ │ ├─ AdminProductsManage.jsx
│ │ │ ├─ AdminSeatsManage.jsx
│ │ │ ├─ AdminTodoManage.jsx
│ │ │ ├─ GoogleOnBoarding.jsx
│ │ │ ├─ Login.jsx
│ │ │ ├─ MyPage.jsx
│ │ │ ├─ MyPageCheckPw.jsx
│ │ │ ├─ MyPageEdit.jsx
│ │ │ ├─ MyPageOrder.jsx
│ │ │ ├─ Payment.jsx
│ │ │ ├─ PaymentSuccess.jsx
│ │ │ ├─ Planner.jsx
│ │ │ ├─ Signup.jsx
│ │ │ ├─ TicketList.jsx
│ │ │ └─ WebIndex.jsx
│ │ └─ 📂 styles/
│ │ ├─ Payment.css
│ │ └─ TicketList.css
│ └─ vite.config.js
└─ README.md