Skip to content

About

Computational Thinking group project in HCMUS (2025-2026)

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

103 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌍 TRAVEL TOGETHER

SMART TOURISM SYSTEM - Kết nối người du lịch thông minh

Flutter FastAPI Python License: MIT


ĐẠI HỌC QUỐC GIA TP.HCM

ĐẠI HỌC KHOA HỌC TỰ NHIÊN

KHOA CÔNG NGHỆ THÔNG TIN

Môn học: Tư duy tính toán
Học kỳ: 1 - Năm học 2025


👥 NHÓM SINH VIÊN THỰC HIỆN

MSSV Họ và Tên Email
24127137 Nguyễn Thanh Trúc 24127137@student.hcmus.edu.vn
24127422 Đào Minh Khoa 24127422@student.hcmus.edu.vn
24127018 Trần Lưu Gia Bảo 24127018@student.hcmus.edu.vn
24127337 Nguyễn Tiến Cường 24127337@student.hcmus.edu.vn
24127252 Nguyễn Khánh Toàn 24127252@student.hcmus.edu.vn
24127226 Phạm Trần Anh Quân 24127226@student.hcmus.edu.vn

👨‍🏫 GIẢNG VIÊN HƯỚNG DẪN

  • PhD. Nguyễn Tiến Huy
  • PhD. Lê Thanh Tùng
  • Mr. Trần Hoàng Quân


📖 Giới Thiệu

Travel Together là ứng dụng di động thông minh giúp kết nối những người đam mê du lịch, hỗ trợ lập kế hoạch hành trình nhóm và chia sẻ trải nghiệm. Với sự kết hợp giữa công nghệ AI tiên tiến và giao diện thân thiện, Travel Together mang đến trải nghiệm du lịch hoàn hảo cho mọi người.

🎯 Mục Tiêu Dự Án

  • Kết nối cộng đồng: Tìm kiếm và kết nối với những người có cùng sở thích du lịch
  • Lập kế hoạch thông minh: Công cụ lập lịch trình, tối ưu hoá lộ trình và định vị GPS
  • Giao tiếp realtime: Chat nhóm, thông báo đẩy và chia sẻ hình ảnh ngay lập tức
  • Trợ lý AI: Chatbot thông minh hỗ trợ gợi ý địa điểm, lên kế hoạch
  • An toàn bảo mật: Tăng cường bảo vệ người dùng và tài khoản với cơ chế mã PIN kép (Dual PIN)

✨ Tính Năng Chính

🔐 Xác Thực & Bảo Mật

  • Đăng ký/Đăng nhập với Email + Password
  • JWT Token Authentication với Firebase Admin SDK
  • Quản lý phiên đăng nhập an toàn
  • Cơ chế mã PIN kép: Nếu không nhập mã PIN sau 36 giờ, hệ thống tự động gửi định vị khẩn cấp đến email của người thân

👥 Quản Lý Nhóm Du Lịch

  • Tạo và tham gia nhóm du lịch
  • Khám phá nhóm theo địa điểm, thời gian
  • Phân quyền Host/Member với các chức năng riêng biệt
  • Lịch trình nhóm với Table Calendar
  • Quản lý chi phí chung
  • Deep Semantic Matching AI: Sử dụng AI để so sánh lịch trình cá nhân của người dùng với các nhóm hiện có dựa trên "ngữ nghĩa" (ví dụ: hiểu rằng "Bờ Hồ" và "Hồ Hoàn Kiếm" là một) để đưa ra gợi ý gia nhập nhóm chính xác nhất
  • Cơ chế Phê duyệt Thành viên: Quản lý danh sách yêu cầu gia nhập, cho phép Host duyệt hoặc từ chối thành viên mới
  • Reputation & Review System: Hệ thống đánh giá thành viên sau mỗi chuyến đi, tính toán điểm uy tín (Average Rating) dựa trên phản hồi của các thành viên khác trong nhóm

💬 Chat Realtime

  • WebSocket chat realtime trong nhóm
  • Gửi/nhận hình ảnh với Supabase Storage
  • Trạng thái đã xem tin nhắn (Read receipts)
  • Thông báo đẩy với Firebase Cloud Messaging
  • Lưu trữ lịch sử chat không giới hạn

🤖 AI Chatbot Du Lịch và thuật toán AI

  • Tích hợp Google Gemini AI
  • Gợi ý địa điểm, nhà hàng, khách sạn
  • Lập kế hoạch hành trình tự động
  • Phân tích hình ảnh và đề xuất địa điểm tương tự
  • Lưu session chat cho mỗi người dùng
  • AI Destination Ranking: AI chấm điểm (0-100) các địa điểm dựa trên sự phù hợp trực tiếp về sở thích, độ tuổi, giới tính của người dùng

🗺️ Bản Đồ & Định Vị

  • Tích hợp Flutter Map với OpenStreetMap
  • Vẽ tuyến đường với Polyline Points
  • Đánh dấu địa điểm quan trọng
  • Geocoding & Reverse Geocoding
  • Tích hợp lớp Layer tùy chỉnh hiển thị đầy đủ quần đảo Hoàng Sa và Trường Sa của Việt Nam

🎨 Giao Diện Người Dùng

  • Material Design 3
  • Animations với Flutter Animate
  • Chuyển đổi ngôn ngữ tiếng việt <-> tiếng anh với Easy Localization

🛠️ Công Nghệ Sử Dụng

Frontend - Flutter/Dart

Công nghệ Phiên bản Mục đích
Flutter SDK 3.0+ Framework chính
Dart 3.0+ Ngôn ngữ lập trình
Supabase Flutter 2.10.3 Realtime database & Storage
Firebase Core 3.6.0 Firebase services
Firebase Messaging 15.1.3 Push notifications
HTTP 1.2.0 REST API calls
WebSocket Channel 3.0.3 Realtime chat
Flutter Map 7.0.2 Map rendering
Geolocator 10.1.0 GPS location
Image Picker 1.0.7 Camera/Gallery access
Shared Preferences 2.3.3 Local storage
Hive Flutter 1.1.0 NoSQL database
Easy Localization 3.0.8 Internationalization
Flutter Animate 4.5.2 UI animations
Confetti 0.7.0 Celebration effects

Backend - Python/FastAPI

Công nghệ Mục đích
FastAPI REST API framework
Uvicorn ASGI server
SQLModel ORM (SQL databases)
Supabase Python Database client
Google Generative AI AI Chatbot (Gemini)
Firebase Admin SDK Authentication & FCM
Pydantic Data validation
FastAPI Mail Email service
APScheduler Background tasks
Psycopg2 PostgreSQL adapter

Database & Cloud Services

  • 🗄️ Supabase (PostgreSQL): Database chính, Authentication, Storage
  • 🔥 Firebase: Push notifications, Analytics
  • 🤖 Google Gemini AI: AI Chatbot service

DevOps & Tools

  • Git & GitHub: Version control
  • Android Studio / VS Code: Development IDE
  • Postman: API testing
  • PowerShell Scripts: Automation

📥 Hướng Dẫn Cài Đặt

Yêu Cầu Hệ Thống

Backend Requirements:

  • Python 3.8 trở lên
  • pip (Python package manager)
  • Virtual environment (khuyến nghị)
  • PostgreSQL database (hoặc Supabase account)

Frontend Requirements:

  • Flutter SDK 3.0+
  • Dart SDK 3.0+
  • Android Studio hoặc VS Code
  • Android Emulator hoặc thiết bị Android thật
  • Xcode (cho iOS - optional)

Network Requirements:

  • Máy tính và điện thoại phải cùng WiFi (khi chạy local)
  • Port 8000 không bị firewall chặn

BƯỚC 1: Clone Repository

git clone https://github.com/yourusername/TravelTogether.git
cd TravelTogether

BƯỚC 2: Thiết Lập Backend

2.1. Tạo Virtual Environment

cd backend
python -m venv venv

# Windows
venv\Scripts\activate

# macOS/Linux
source venv/bin/activate

2.2. Cài Đặt Dependencies

pip install -r requirements.txt

2.3. Cấu Hình Environment Variables

Tạo file .env trong thư mục backend/:

# Database
SUPABASE_URL=your_supabase_url
SUPABASE_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key

# JWT
JWT_SECRET_KEY=your_jwt_secret_key_here
JWT_ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30


# Email Service
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=your_app_password
MAIL_FROM=your_email@gmail.com
MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587

# Firebase
FIREBASE_CREDENTIALS_PATH=./firebase-admin-sdk.json

⚠️ Lưu ý: File .env liên lạc với cn20378@gmail.com để lấy!

2.4. Thêm Firebase Service Account

Tải file firebase-admin-sdk.json từ Firebase Console và đặt vào thư mục backend/

2.5. Khởi Động Server

Cách 1: Sử dụng script (Windows)

.\run_server.bat

Cách 2: Chạy thủ công

uvicorn main:app --reload --host 0.0.0.0 --port 8000

Kiểm tra server đang chạy: Mở browser và truy cập: http://localhost:8000/docs để xem API documentation (Swagger UI)


BƯỚC 3: Thiết Lập Frontend

3.1. Cài Đặt Flutter Dependencies

cd frontend
flutter pub get

3.2. Cấu Hình API Endpoint

Mở file lib/config/api_config.dart và cập nhật IP của máy chạy backend:

class ApiConfig {
  // Thay <YOUR_IP> bằng IP máy tính của bạn
  static const String baseUrl = 'http://<YOUR_IP>:8000';
  static const String chatWebSocket = 'ws://<YOUR_IP>:8000/ws/chat';
  
  // Hoặc dùng localhost nếu chạy trên emulator
  // static const String baseUrl = 'http://10.0.2.2:8000'; // Android Emulator
}

Tìm IP máy tính:

# Windows
ipconfig

# macOS/Linux
ifconfig

3.3. Cấu Hình Firebase

Thêm file google-services.json (Android) và GoogleService-Info.plist (iOS) vào thư mục tương ứng:

  • Android: android/app/google-services.json
  • iOS: ios/Runner/GoogleService-Info.plist

3.4. Tạo File .env

Tạo file .env trong thư mục frontend/:

SUPABASE_URL=your_supabase_url
SUPABASE_ANON_KEY=your_supabase_anon_key

3.5. Chạy Ứng Dụng

Kiểm tra thiết bị:

flutter devices

Chạy app:

# Chạy trên thiết bị đầu tiên
flutter run

# Chạy trên thiết bị cụ thể
flutter run -d <device-id>

# Chạy ở chế độ release
flutter run --release

Hot reload trong khi chạy:

  • Nhấn r để reload
  • Nhấn R để restart hoàn toàn
  • Nhấn q để thoát

BƯỚC 4: Mở Firewall (Windows Only)

Mở PowerShell với quyền Administrator và chạy:

New-NetFirewallRule -DisplayName "Travel Backend API" -Direction Inbound -LocalPort 8000 -Protocol TCP -Action Allow

Kiểm tra rule đã tạo:

Get-NetFirewallRule -DisplayName "Travel Backend API"

BƯỚC 5: Kiểm Tra Kết Nối

Từ máy tính:

curl http://localhost:8000/docs

Từ điện thoại:

Mở browser trên điện thoại, truy cập:

http://<IP_MÁY_TÍNH>:8000/docs

Nếu thấy giao diện Swagger UI → Thành công! 🎉


Hướng Dẫn Sử Dụng

1️⃣ Đăng Ký Tài Khoản

  1. Mở app Travel Together
  2. Chọn "Đăng ký" → Nhập email, mật khẩu
  3. Hoàn thiện hồ sơ (tên, avatar, sở thích)

2️⃣ Tạo Nhóm Và Tham Gia Nhóm Du Lịch

  1. Chọn thời gian đi
  2. Chọn thành phố du lịch
  3. Chọn địa điểm du lịch trong thành phố đó
  4. Tạo nhóm:
  • Điền thông tin: Tên nhóm, avatar nhóm (optional)
  1. Tham gia nhóm:
  • Chọn nhóm mình muốn dựa trên % tương thích
  • Gửi lời mời, đợi xét duyệt
  • Vào tab "Cá Nhân" -> "Tình Trạng" để xem tình trạng xét duyệt

3️⃣ Chat Với Nhóm

  1. Vào nhóm → Tab "Chat"
  2. Gửi tin nhắn, ảnh

4️⃣ Sử Dụng AI Chatbot

  1. Hỏi: "Gợi ý 3 địa điểm du lịch ở Đà Nẵng"
  2. Upload ảnh để AI phân tích và gợi ý

5️⃣ Xem Lộ Trình tối ưu

  1. Vào tab "Tin Nhắn" -> bấm vào nhóm muốn xem lịch trình
  2. Bấm vào icon Lộ Trình góc trên phải
  3. Xem lộ trình tối ưu gồm thời gian, tổng quảng đường, thứ tự chuyến đi tối ưu

6️⃣ Cài Đặt & Tùy Chỉnh

  1. Chỉnh sửa Profile: Vào tab Cá nhân -> Chỉnh sửa hồ sơ để thay đổi thông tin cá nhân, Avatar, cập nhật lại sở thích, mô tả bản thân.
  2. Đa ngôn ngữ: Vào phần Cài đặt -> Chọn Ngôn ngữ để chuyển đổi giao diện giữa Tiếng Anh và Tiếng Việt.
  3. Bảo mật: - Đổi mật khẩu: Chọn Cài đặt mật khẩu để cập nhật mật khẩu mới.
    • Mã PIN kép: Thiết lập hoặc thay đổi mã PIN bảo vệ để đảm bảo an toàn cho tài khoản.
  4. Phản hồi nhóm (Member Rating): Sau mỗi chuyến đi, bạn có thể vào tab Phản hồi nhóm để thực hiện đánh giá các thành viên khác. Điều này giúp cộng đồng lọc ra những người bạn đồng hành tích cực.
  5. Hệ thống Uy tín (Reputation): Truy cập tab Uy tín để xem điểm số tín nhiệm cá nhân của bạn. Điểm này được tổng hợp từ các đánh giá thực tế của những người đã từng đi du lịch cùng bạn.

📄 Giấy Phép

Dự án này được phát hành dưới giấy phép MIT License.

Xem file LICENSE để biết thêm chi tiết.


📞 Liên Hệ & Hỗ Trợ

⚠️ Lưu ý: Nếu gặp sự cố hãy liên lạc với cn20378@gmail.com để hỏi đáp!


📚 Tài Liệu Tham Khảo

Official Documentation:

Tutorials & Guides:


⭐ Star Project Nếu Bạn Thích!

Nếu dự án này hữu ích với bạn, hãy cho chúng tôi một ⭐ trên GitHub!

🌟 Star | 🐛 Report Bug | 💡 Request Feature


Thanks

About

Computational Thinking group project in HCMUS (2025-2026)

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages