# 📅 ระบบจัดการนัดหมาย (Appointment Management System)
ระบบจัดการนัดหมายแบบ Progressive Web App (PWA) ที่ทันสมัย รองรับการทำงานทั้งออนไลน์และออฟไลน์ ด้วยการออกแบบแบบ Glassmorphism และ Font Awesome Icons




## ✨ คุณสมบัติหลัก
### 🎯 การจัดการนัดหมาย
- **บันทึกนัดหมาย**: รองรับการพิมพ์และการใช้เสียง (Speech Recognition)
- **ดูรายการนัดหมาย**: แสดงนัดหมายตามวันที่ (วันนี้, พรุ่งนี้, สัปดาห์นี้, หรือทั้งหมด)
- **การแจ้งเตือน**: แจ้งเตือนก่อนนัดหมาย 30 นาที
- **ข้อมูลครบถ้วน**: เก็บชื่องาน, วันที่, เวลา, และสถานที่
### 💻 เทคโนโลยีที่ใช้
- **Frontend**: HTML5, CSS3, Vanilla JavaScript
- **Database**: IndexedDB (สำหรับการทำงานแบบออฟไลน์)
- **PWA**: Service Worker, Web App Manifest
- **Design**: Glassmorphism, Font Awesome Icons
- **Typography**: Google Fonts (Prompt)
- **Speech**: Web Speech API
### 📱 การรองรับ
- ✅ Responsive Design - ใช้งานได้ทั้งมือถือและเดสก์ท็อป
- ✅ Progressive Web App - ติดตั้งได้เหมือน App
- ✅ Offline First - ทำงานได้แม้ไม่มีอินเทอร์เน็ต
- ✅ Speech Recognition - รองรับการสั่งงานด้วยเสียง
- ✅ Push Notifications - แจ้งเตือนนัดหมาย
## 🚀 การติดตั้งและใช้งาน
### การติดตั้งแบบง่าย
1. **ดาวน์โหลดไฟล์**
2. **เปิดใน Web Server**
```bash
# ใช้ Python
python -m http.server 8000
# หรือใช้ Node.js
npx serve .
# หรือใช้ PHP
php -S localhost:8000
```
3. **เข้าใช้งาน**
- เปิดเบราว์เซอร์ไปที่ `http://localhost:8000`
- บน Mobile: สามารถ "Add to Home Screen" เพื่อติดตั้งเป็น App
- บน Desktop Chrome: คลิก install icon ใน address bar
### 📱 การติดตั้งเป็น PWA
#### บน Android/iOS:
1. เปิดเว็บไซต์ใน Chrome/Safari
2. เมนู → "Add to Home Screen" หรือ "Install App"
3. แอปจะปรากฏใน Home Screen
#### บน Desktop:
1. เปิดเว็บไซต์ใน Chrome/Edge
2. คลิก install icon (⬇️) ใน address bar
3. หรือ เมนู → "Install [ชื่อแอป]"
#### ข้อกำหนดสำหรับ PWA:
- ✅ HTTPS (หรือ localhost สำหรับ development)
- ✅ Valid manifest.json
- ✅ Service Worker ที่ทำงาน
- ✅ Icons ครบตามขนาด (ดู ICONS.md)
### การใช้งาน
#### 📝 การบันทึกนัดหมาย
```
วิธีที่ 1: พิมพ์ข้อความ
"ประชุมทีม วันนี้ 14:00 ห้องประชุม"
วิธีที่ 2: ใช้เสียง
กดปุ่มไมโครโฟนแล้วพูด
วิธีที่ 3: ทีละขั้นตอน
ระบบจะถามทีละขั้นตอน
```
#### 👀 การดูนัดหมาย
- **Quick Actions**: ใช้ปุ่มด่วน (วันนี้, พรุ่งนี้, ทั้งหมด, สัปดาห์นี้)
- **พิมพ์คำสั่ง**: "แสดงนัดหมายวันนี้", "ดูนัดหมายทั้งหมด"
## 🎨 การออกแบบ
### Glassmorphism UI
```css
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow: 0 32px 64px rgba(0, 0, 0, 0.15);
```
### สีหลักที่ใช้
- **Primary**: `#6366f1` (Indigo)
- **Secondary**: `#8b5cf6` (Purple)
- **Accent**: `#ec4899` (Pink)
- **Background**: Gradient combination
### Font Awesome Icons
- 📅 `fa-calendar-check` - Header icon
- 🔊 `fa-microphone` - Voice input
- ✈️ `fa-paper-plane` - Send message
- 📍 `fa-map-marker-alt` - Location
- ⏰ `fa-clock` - Time
## 📂 โครงสร้างไฟล์
```
appointment-chat/
├── index.html # หน้าหลักของแอป
├── manifest.json # PWA Manifest
├── sw.js # Service Worker สำหรับ offline support
├── package.json # Node.js dependencies
├── README.md # เอกสารนี้
├── ICONS.md # คู่มือการสร้าง icons
├── icon-generator.html # Web-based icon generator
├── generate-assets.js # Node.js icon generator
├── generate_icons.py # Python icon generator
├── generate-icons.bat # Windows batch script
├── generate-icons.sh # macOS/Linux shell script
└── .github/
└── copilot-instructions.md
```
## 🎨 การสร้างไอคอนและ Screenshots
### 🚀 วิธีที่ 1: ใช้ Script อัตโนมัติ (แนะนำ)
#### Windows:
```bash
# เรียกใช้ batch script
.\generate-icons.bat
```
#### macOS/Linux:
```bash
# ทำให้ไฟล์สามารถรันได้
chmod +x generate-icons.sh
# รัน script
./generate-icons.sh
```
### 🌐 วิธีที่ 2: ใช้ Web Generator
1. เปิดไฟล์ `icon-generator.html` ใน web browser
2. คลิก "📦 ดาวน์โหลดไอคอนทั้งหมด"
3. คลิก "📦 ดาวน์โหลด Screenshots ทั้งหมด"
4. ไฟล์จะถูกดาวน์โหลดอัตโนมัติ
### 🐍 วิธีที่ 3: ใช้ Python (เฉพาะ Icons)
```bash
# ติดตั้ง dependencies
pip install Pillow
# รัน Python script
python3 generate_icons.py
```
### 📦 วิธีที่ 4: ใช้ Node.js (ครบ Icons + Screenshots)
```bash
# ติดตั้ง dependencies
npm install canvas
# รัน Node.js script
node generate-assets.js
```
## 🔧 Service Worker Features
### การทำงานแบบ Offline-First
```javascript
// Network First with Cache Fallback Strategy
- พยายามเรียกจาก network ก่อน
- หาก network fail ให้ fallback ไป cache
- Cache static files (CSS, JS, Fonts) automatically
- Dynamic caching สำหรับ content ใหม่
```
### Background Sync
```javascript
// ระบบ sync ข้อมูลเมื่อกลับมา online
self.addEventListener('sync', (event) => {
if (event.tag === 'appointment-sync') {
event.waitUntil(syncAppointments());
}
});
```
### Push Notifications
```javascript
// รองรับการแจ้งเตือนแบบ push
self.addEventListener('push', (event) => {
// แสดง notification เมื่อได้รับ push
});
```
## 🔧 การทำงานภายใน
### Database Schema (IndexedDB)
```javascript
// Appointments Store
{
id: (auto-increment),
userId: "user_timestamp",
title: "ชื่องาน",
date: "YYYY-MM-DD",
time: "HH:MM",
location: "สถานที่",
createdAt: "ISO timestamp",
synced: boolean
}
// Pending Sync Store
{
id: (auto-increment),
...appointmentData
}
```
### การทำงานแบบ Offline-First
1. **บันทึกข้อมูล**: เก็บใน IndexedDB ก่อนเสมอ
2. **Sync ออนไลน์**: เมื่อมีอินเทอร์เน็ตจึงส่งไปเซิร์ฟเวอร์
3. **Pending Queue**: เก็บรายการที่ยังไม่ได้ sync
4. **Status Indicator**: แสดงสถานะ Online/Offline
## 🛠️ การพัฒนาเพิ่มเติม
### การเพิ่มฟีเจอร์ใหม่
```javascript
// เพิ่มฟีเจอร์ในฟังก์ชัน processMessage()
if (lowerMsg.includes('คำสั่งใหม่')) {
await newFeature(message);
}
```
### การปรับแต่ง UI
```css
/* ปรับสีธีม */
:root {
--primary-color: #your-color;
--secondary-color: #your-color;
}
```
### การเชื่อมต่อ Backend
```javascript
// ปรับใน syncAppointmentToServer()
const response = await fetch('your-api-endpoint', {
method: 'POST',
body: JSON.stringify(appointment)
});
```
## 🌟 ฟีเจอร์ที่สามารถเพิ่มได้ในอนาคต
- [ ] **การแก้ไข/ลบนัดหมาย**: แก้ไขและลบนัดหมายที่มีอยู่
- [ ] **การแชร์นัดหมาย**: แชร์นัดหมายให้ผู้อื่น
- [ ] **Calendar View**: แสดงปฏิทินแบบมองเห็นภาพ
- [ ] **Categories**: จัดหมวดหมู่นัดหมาย
- [ ] **Recurring Events**: นัดหมายที่ซ้ำรอบ
- [ ] **Team Collaboration**: การทำงานร่วมกันเป็นทีม
- [ ] **API Integration**: เชื่อมต่อกับ Google Calendar, Outlook
## 🐛 การแก้ไขปัญหา
### ปัญหาที่พบบ่อย
**1. Speech Recognition ไม่ทำงาน**
```javascript
// ตรวจสอบการรองรับ
if (!('webkitSpeechRecognition' in window)) {
console.log('Browser ไม่รองรับ Speech Recognition');
}
```
**2. Notification ไม่แสดง**
```javascript
// ขออนุญาต Notification
if (Notification.permission === 'default') {
Notification.requestPermission();
}
```
**3. PWA ติดตั้งไม่ได้**
- ตรวจสอบ `manifest.json`
- ต้องใช้ HTTPS (ยกเว้น localhost)
- ต้องมี Service Worker
## 📄 License
MIT License - สามารถใช้งานและปรับแต่งได้อย่างอิสระ
## 👨💻 ผู้พัฒนา
พัฒนาด้วย ❤️ โดย Goragod Wiriya
---
*อัปเดตล่าสุด: 30 กันยายน 2568*