# JFT Smartphone Based Test

Aplikasi web ini dibuat untuk tryout JFT berbasis smartphone dengan UI modern minimalis dan database spreadsheet.

## Isi Paket

- `index.html` - aplikasi utama berbasis browser.
- `assets/styles.css` - desain UI modern minimalis dan responsif.
- `assets/app.js` - logika login, dashboard, tryout, review, flashcard, catatan, dan admin.
- `data/questions.csv` - bank soal hasil ekstraksi dari PDF.
- `data/settings.csv` - setting timer, jumlah soal, skor, passing score, dan fitur review.
- `data/test_sets.csv` - daftar paket tryout.
- `media/pdf_pages/` - gambar halaman sumber PDF untuk soal bergambar.
- `media/audio/` - folder untuk upload audio, contoh nama: `Y01-02.mp3`.
- `media/images/` - folder untuk upload gambar tambahan.
- `apps-script/Code.gs` - backend Google Apps Script untuk Google Spreadsheet.
- `api/proxy.php` - proxy PHP agar aplikasi di hosting dapat membaca dan menulis ke Apps Script.
- `database-template.xlsx` - template spreadsheet siap import ke Google Sheets.

## Akun Demo

Mode awal memakai localStorage, jadi bisa langsung dibuka tanpa backend.

- Admin: `admin@example.com` / `admin123`
- Siswa: `siswa@example.com` / `siswa123`

## Cara Deploy ke Hosting cPanel

1. Upload semua file ke folder public hosting, misalnya `public_html/jft-test`.
2. Buat Google Spreadsheet baru.
3. Import file `database-template.xlsx` ke Google Spreadsheet.
4. Buka menu Extensions > Apps Script.
5. Copy isi `apps-script/Code.gs` ke Apps Script.
6. Simpan lalu jalankan fungsi `setup()` satu kali.
7. Klik Deploy > New deployment > Web app.
8. Set Execute as: Me.
9. Set Who has access: Anyone.
10. Copy URL Web App.
11. Di hosting, copy `api/config.example.php` menjadi `api/config.php`.
12. Paste URL Web App ke variabel `$GAS_WEB_APP_URL`.
13. Buka `config.js`, ubah `mode` menjadi `production`.
14. Tes login admin.

## Cara Import Audio

Soal listening memakai kode seperti `[Y01-02]`. Upload file audio ke:

```text
media/audio/Y01-02.mp3
media/audio/Y01-03.mp3
media/audio/Y02-04.mp3
```

Pastikan nama file sama dengan kode audio pada soal.

## Struktur Spreadsheet

### Questions
Kolom penting:

- `question_id`: ID unik soal.
- `active`: TRUE atau FALSE.
- `test_id`: paket tes.
- `lesson`: nomor bab.
- `section`: nomor bagian.
- `type`: multiple_choice, listening, image, reading.
- `instruction`: instruksi soal.
- `question_text`: teks soal.
- `option_a` sampai `option_f`: pilihan jawaban.
- `correct_answer`: kunci jawaban.
- `points`: skor soal.
- `explanation`: pembahasan.
- `image_url`: file gambar di hosting.
- `audio_url`: file audio di hosting.

### Settings
Digunakan admin untuk mengubah:

- nama aplikasi,
- timer default,
- jumlah soal,
- nilai lulus,
- skor per soal,
- acak soal,
- pembahasan jawaban,
- izin pendaftaran akun.

## Saran Pengembangan

1. Gunakan Google Sheet sebagai sumber data utama, tetapi jangan tampilkan link sheet ke siswa.
2. Pisahkan paket latihan per bab dan paket tryout penuh.
3. Tambahkan pembahasan singkat untuk setiap soal agar siswa belajar dari kesalahan.
4. Upload audio listening ke hosting dengan nama file yang konsisten.
5. Gunakan gambar halaman PDF sebagai referensi awal, lalu pecah menjadi gambar soal satu per satu jika ingin UI lebih bersih.
6. Batasi satu akun siswa untuk satu perangkat jika ingin tes lebih ketat. Fitur ini dapat ditambahkan dengan kolom `device_id` pada sheet Users.
7. Buat backup spreadsheet rutin setiap minggu.

## Catatan Penting

Bank soal sudah dibuat dari PDF yang diberikan. Namun hasil ekstraksi teks Jepang dari PDF masih membawa furigana pada baris terpisah. Karena itu, setiap soal juga diberi `image_url` ke halaman sumber PDF agar tampilan tetap dapat dicek oleh siswa dan admin. Untuk versi final komersial, rapikan teks soal di spreadsheet dan tambahkan pembahasan manual.
