Loading repository data…
Loading repository data…
irfandwisamudra / repository
Personal Notes App — SPA React (Vite) dengan Notes REST API (Dicoding), autentikasi (login/register), arsip & pencarian, toggle tema & bahasa. Dibuat untuk memenuhi Submission Proyek: Membangun SPA + API, Context, dan Hooks pada kelas Belajar Fundamental Aplikasi Web dengan React Dicoding.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Aplikasi catatan pribadi berbasis React dengan arsitektur SPA yang mengimplementasikan:
localStorage,Proyek ini ditujukan untuk memenuhi Submission Proyek: Membangun SPA + API, Context, dan Hooks pada kelas Belajar Fundamental Aplikasi Web dengan React Dicoding. Semua kriteria wajib dan opsional telah dipenuhi.
Registrasi & Login (token disimpan ke localStorage, bootstrap sesi via API).
Proteksi fitur catatan: daftar, detail, tambah, arsip/aktif, hapus hanya untuk user login.
Daftar catatan aktif & arsip (opsional, diimplementasikan).
Detail catatan, Tambah catatan, Hapus catatan.
Arsipkan / Aktifkan catatan — tombol mengarahkan ke daftar yang relevan.
Pencarian judul (realtime filter di list).
Tema gelap/terang (Context) + persist.
Bahasa Indonesia/Inggris (Context) + persist.
Indikasi loading:
FAB (tombol tambah melayang) .
Aksesibilitas:
aria-live="polite",title/aria-label.useState, useEffect, custom hook useInput, dsb.)Menggunakan Dicoding Notes API v1
https://notes-api.dicoding.dev/v1
Nama file mengikuti implementasi saat ini (komponen dipisah sekecil mungkin – single responsibility).
personal-notes-app-with-api/
├─ docs/
│ ├─ home-screenshot-dark.png
│ ├─ home-screenshot-light.png
│ ├─ login-screenshot-dark.png
│ └─ login-screenshot-light.png
├─ public/
├─ favicon.svg
├─ src/
│ ├─ components/
│ │ ├─ auth/
│ │ │ ├─ AuthCTA.jsx
│ │ │ └─ AuthHeader.jsx
│ │ ├─ form/
│ │ │ ├─ Editor.jsx
│ │ │ ├─ ErrorText.jsx
│ │ │ ├─ Field.jsx
│ │ │ ├─ FormActions.jsx
│ │ │ ├─ SubmitButton.jsx
│ │ │ ├─ SuccessText.jsx
│ │ │ ├─ TitleCounter.jsx
│ │ │ └─ TitleInput.jsx
│ │ ├─ status/
│ │ │ ├─ NotFound.jsx
│ │ │ └─ StatusPage.jsx
│ │ ├─ AuthedFAB.jsx
│ │ ├─ AuthGate.jsx
│ │ ├─ BootGate.jsx
│ │ ├─ EmptyState.jsx
│ │ ├─ FloatingAddButton.jsx
│ │ ├─ GuestGate.jsx
│ │ ├─ HeaderBar.jsx
│ │ ├─ Loading.jsx
│ │ ├─ LocaleToggle.jsx
│ │ ├─ NoteCard.jsx
│ │ ├─ NoteList.jsx
│ │ ├─ SearchBar.jsx
│ │ ├─ Spinner.jsx
│ │ └─ ThemeToggle.jsx
│ ├─ contexts/
│ │ ├─ AuthContext.jsx
│ │ ├─ LocaleContext.jsx
│ │ └─ ThemeContext.jsx
│ ├─ hooks/
│ │ ├─ useInput.js
│ │ └─ usePrefersDark.js
│ ├─ pages/
│ │ ├─ Add.jsx
│ │ ├─ Archive.jsx
│ │ ├─ Detail.jsx
│ │ ├─ Home.jsx
│ │ ├─ Login.jsx
│ │ ├─ NotFound.jsx
│ │ └─ Register.jsx
│ ├─ utils/
│ │ ├─ date.js
│ │ ├─ index.js
│ │ └─ network-data.js
│ ├─ App.jsx
│ ├─ index.css
│ └─ main.jsx
├─ .gitignore
├─ index.html
├─ LICENSE
├─ package.json
├─ package-lock.json
├─ README.md
└─ vite.config.js
npm install
npm run dev
Buka http://localhost:5173 (default Vite) jika tidak terbuka otomatis.
HeaderBar
Brand (logo huruf + judul + subjudul) ikut bahasa:
Nav (Aktif/Arsip) hanya tampil ketika login.
User pill menampilkan nama; klik untuk dropdown Logout (tanpa ikon), fokus & ESC terkelola.
LocaleToggle & ThemeToggle ada di kanan.
Auth (Login/Register)
Form controlled + validasi (konfirmasi password).
Tombol submit menampilkan spinner saat submitting.
CTA di bawah form text-only:
Add Note
TitleField membatasi 50 karakter + counter live (aria-live="polite").
BodyField placeholder terjemahan:
Submit menampilkan spinner dan kembali ke list setelah berhasil.
Arsip/Aktif
FAB
AuthedFAB hanya merender <FloatingAddButton /> ketika login.NotFound
StatusPage + NotFoundStatus dengan terjemahan ID/EN.Counter judul dengan aria-live="polite" dan aria-atomic agar screen reader mengumumkan perubahan.
User menu:
aria-haspopup="menu", aria-expanded, aria-controls.Kontras warna & fokus ring disesuaikan pada kedua tema.
Kriteria Utama
getUserLogged)./login & /register.Kriteria Utama (Submission Sebelumnya)
Kriteria Opsional
Tambahan
type Note = {
id: string; // dari API
title: string; // max 50 karakter
body: string;
archived: boolean;
createdAt: string; // ISO string
owner?: string; // tergantung API (informasi user)
};
Platform seperti Netlify/Vercel (preset Vite):
npm run builddistTidak perlu environment variable.