project
ส่งมอบ 3 ชิ้น: Repository + README • แอปที่รันได้จริง (OIDC Auth + ฟีเจอร์) • วิดีโอสาธิต
นักศึกษาจะพัฒนา แอปพลิเคชันมือถือจริง 1 โปรเจกต์ โดยนำทุกอย่างที่เรียนมาทั้งภาคมาใช้ — Flutter (MVVM, Data Layer, Forms) คู่กับ Backend ยืนยันตัวตนมาตรฐาน OAuth2/OpenID Connect — แล้วส่งมอบผ่าน Git และวิดีโอสาธิต:
โปรเจกต์อยู่ใน repository หลักของนักศึกษาเอง ภายใต้ branch ชื่อ project พร้อม README.md ที่อธิบายโปรเจกต์และวิธีรันครบถ้วน
แอป Flutter ที่ล็อกอินผ่าน OIDC Server ได้จริง มีฟีเจอร์หลักครบ + Extra Features ที่เลือกเอง — อาจารย์จะ clone แล้วรันซ้ำตาม README
วิดีโอหนึ่งคลิปพิสูจน์ 3 เรื่อง: รันตาม README ได้ไม่มี error, Authentication ทำงาน, และฟีเจอร์หลัก+พิเศษครบ
project ของ Repo หลัก 🌿
project — ตัวพิมพ์เล็กทั้งหมด ห้ามต่าง!main ที่เก็บใบงานรายสัปดาห์pyproject.toml/uv.lock) ไว้ใน repo ด้วย ในโฟลเดอร์ backend/.venv/, build/ หรือ secret/key ใดๆ (ใช้ .gitignore)$ git checkout -b project
$ git add . && git commit -m "feat: course project"
$ git push origin project
# ตรวจชื่อ branch ก่อนส่งทุกครั้ง:
$ git branch --show-current # ต้องได้ project
อาจารย์จะเปิด README → พิมพ์คำสั่งตาม → แอปต้องขึ้น โดยไม่ต้องถามนักศึกษาแม้แต่ข้อเดียว หัวข้อที่ต้องมีครบ:
① ชื่อโปรเจกต์ + คำอธิบาย: แก้ปัญหาอะไร ให้ใครใช้
② Features: รายการฟีเจอร์หลักและ Extra Features (✅ ครบตามที่โชว์ในวิดีโอ)
③ Tech Stack: Flutter version, Django, django-oidc-provider, uv
④ Prerequisites: สิ่งที่ต้องติดตั้งก่อน (พร้อมลิงก์ดาวน์โหลด)
⑤ How to Run: คำสั่งทีละบรรทัด ตามลำดับ terminal จริง
⑥ Demo Account: username/password ทดสอบของ OIDC
⑦ Screenshots: ภาพหน้าจอสำคัญอย่างน้อย 2 ภาพ
⑧ 🎬 Demo Video: ลิงก์วิดีโอส่งท้ายโปรเจกต์
# โครง README.md ตัวอย่าง (วางไว้ที่ root ของ branch project)
# 🧭 TripMate — แอปจองทริปท่องเที่ยว
แอป Flutter จองทริป เข้าสู่ระบบผ่าน OIDC (django-oidc-provider)
## ✨ Features
- OIDC Login/Logout 🔐 (Extra: Dark Mode 🌙)
- CRUD รายการจองทริป / ค้นหา / รายการโปรด
## 🧰 Prerequisites
- [Flutter SDK](https://docs.flutter.dev/get-started/install)
- [uv](https://docs.astral.sh/uv/) , Google Chrome
## ▶️ How to Run
# Terminal 1 — Backend (OIDC Server)
$ cd backend
$ uv sync
$ uv run manage.py migrate
$ uv run manage.py runserver
# Terminal 2 — Flutter Web App
$ flutter pub get
$ flutter run -d chrome --web-port 50000
# Demo account: student01 / test1234
## 🎬 Demo Video
[YouTube link — unlisted]
✔ View ห้ามคุยกับ Service ตรงๆ • ✔ Dependency Injection ด้วย provider • ✔ Result Pattern กับข้อผิดพลาด
uv run manage.py runserver ตาม README💡 ธีมแอปเลือกได้ตามใจ เช่น จองทริป, จัดการค่าใช้จ่าย, ตารางนัดหมายคลินิก, ร้านค้า, บันทึกพืชผักสวนครัว
🚀 ความคิดสร้างสรรค์อื่นๆ ยินดีรับ — อธิบายเหตุผลและโชว์ในวิดีโอให้ชัดเจน
project → เลื่อนดู README สั้นๆgit branch --show-current ให้เห็นคำว่า project หนึ่งครั้ง| # | เกณฑ์การประเมิน | สิ่งที่ผู้ตรวจดู | คะแนน |
|---|---|---|---|
| 1 | 🗂️ Repository & Branch | อยู่ใน repo ตนเอง บน branch project ถูกต้อง โครงสร้างไฟล์สะอาด ไม่มี .venv/build/secrets | 10 |
| 2 | 📄 README.md | ครบ 8 หัวข้อ อธิบายชัด คำสั่งรันถูกลำดับ มี demo account + screenshots + ลิงก์วิดีโอ | 10 |
| 3 | 🎬 วิดีโอ: Zero-Error Setup | วิดีโอแสดงการรันตาม README จาก clone ใหม่จนแอปขึ้น โดยไม่มี error และไม่มีการแก้นอก README | 20 |
| 4 | 🎬 วิดีโอ: OIDC Authentication | Login/Logout ผ่าน OIDC Server ทำงานจริง Session อยู่รอดหลังปิดเปิดแอป Route Guard ปกป้องหน้าจอ | 20 |
| 5 | 🎬 วิดีโอ: Main Functions | CRUD ครบทำงานสมบูรณ์ พร้อม Error Handling อย่างน้อย 1 สถานการณ์ | 15 |
| 6 | ✨ Extra Features | ความยาก ความสมบูรณ์ และประโยชน์ของฟีเจอร์เสริม (โชว์ในวิดีโอครบตามที่เขียนใน README) | 10 |
| 7 | 🏗️ Code Quality & Architecture | แยกเลเยอร์ MVVM ถูกต้อง DI ผ่าน provider ตั้งชื่อตัวแปรดี commit message สื่อความ | 10 |
| 8 | 🎥 คุณภาพการนำเสนอ | เสียงชัด ภาพอ่านง่าย เวลาพอดี ลำดับเนื้อหาตรง storyboard | 5 |
| รวมทั้งสิ้น | 100 | ||
เต็ม 17–20: Flow สมบูรณ์ PKCE/public client, session อยู่รอด, route guard ทั้งแอป, logout สะอาด
กลาง 12–16: Login/Logout ใช้ได้ แต่ขาด route guard หรือ session หลุดหลังรีเฟรช
ต่ำ 0–11: ล็อกอินแบบ hard-code ไม่ผ่าน OIDC จริง / ทำงานบางส่วน / crash
อาจารย์จะ clone และรันซ้ำจริง จาก README ของกลุ่มที่สุ่มตรวจ — หากรันไม่ผ่านตามวิดีโอ จะถูกเรียกสอบปากเปล่าโค้ด
Project หรือ push บน main) — หัก 5 คะแนน + ผู้ตรวจจะมองหา branch ที่ใกล้เคียงเท่านั้น* ตัวเลขข้อหักอาจปรับตามประกาศของอาจารย์ผู้สอนในแต่ละภาคการศึกษา
git branch --show-current = project และ push ล่าสุดแล้วmigrate / creatersakey ก่อน# จำลองการตรวจของอาจารย์ด้วยตัวเอง:
$ cd /tmp && git clone -b project <your-repo-url>
ขอให้ทุกทีมสนุกกับการสร้างแอปของตัวเอง — เจอกันวันนำเสนอ! 🎉