ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证JohnHasmie/manajemen-sekolah-vue
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
KamilEdu Web — Vue 3 port of the Flutter mobile app
Vue 3 + Vite + TypeScript + Tailwind CSS + Pinia web app that mirrors the
KamilEdu school-management Flutter app.
The Flutter codebase organizes screens by feature, with admin / teacher /
parent / staff variants of each feature. This Vue port follows the same
rule — satu implementasi, tiga role (one implementation, three role
consumers). Shared components live in src/components/; views are
grouped by role under src/views/.
Current state: foundation + login flow complete. The login screen
(Frame A from the Flutter design) supports:查看完整 README ↗Vue 3 + Vite + TypeScript + Tailwind CSS + Pinia web app that mirrors the KamilEdu school-management Flutter app.
| Concern | Choice |
|---|---|
| Framework | Vue 3 (Composition API, <script setup>) |
| Build tool | Vite |
| Language | TypeScript (strict) |
| Styling | Tailwind CSS 3 + custom design tokens |
| State | Pinia + pinia-plugin-persistedstate |
| Routing | Vue Router 4 |
| HTTP | axios (with Sanctum + X-School-ID interceptors) |
| i18n | vue-i18n (id default, en fallback) |
| Font | Poppins (@fontsource/poppins) |
# 1. Install
npm install
# 2. Configure
cp .env.example .env.local
# edit VITE_API_URL and VITE_AI_API_URL to point at your Laravel backends
# 3. Run dev server
npm run dev # → http://localhost:5173
# 4. Build for production
npm run build # → dist/
npm run preview # serve dist locally for smoke test
The Flutter codebase organizes screens by feature, with admin / teacher /
parent / staff variants of each feature. This Vue port follows the same
rule — satu implementasi, tiga role (one implementation, three role
consumers). Shared components live in src/components/; views are
grouped by role under src/views/.
Current state: foundation + login flow complete. The login screen (Frame A from the Flutter design) supports:
Dashboards for admin / teacher / parent / staff are currently stubbed by
RoleHomeStub.vue. Real implementations land per the task list — see
CLAUDE.md for the working contract.
web-vue/
├── index.html
├── package.json
├── tailwind.config.ts # role colors, slate, AppSpacing tokens
├── tsconfig.app.json # @/ alias → ./src
├── vite.config.ts
├── env.d.ts
├── .env.example
├── CLAUDE.md # working contract (read this first)
└── src/
├── main.ts # bootstrap (Pinia + Router + Poppins + Tailwind)
├── App.vue # rehydrates auth on mount
├── style.css # Tailwind imports + global resets
├── router/
│ └── index.ts # role-aware guard + redirects
├── stores/
│ └── auth.ts # Pinia store mirroring Flutter AuthState
├── services/
│ └── auth.service.ts # /auth/* endpoint wrappers
├── lib/
│ ├── http.ts # axios instances + interceptors
│ └── storage.ts # localStorage wrapper
├── types/
│ ├── api.ts # Laravel envelope types
│ └── auth.ts # AuthStep, User, Role, School
├── composables/
│ └── useRoleColor.ts # ColorUtils.getRoleColor equivalent
├── components/
│ └── ui/
│ ├── Modal.vue
│ └── Toast.vue
└── views/
├── RoleHomeStub.vue # placeholder dashboard
└── auth/
├── LoginView.vue
└── components/
├── BrandBand.vue
├── FormCard.vue
├── LoginForm.vue
├── OtpForm.vue
├── SchoolPicker.vue
├── RolePicker.vue
├── ForgotPasswordModal.vue
└── HelpRequestModal.vue
Mirrors lib/core/utils/color_utils.dart:
| Token | Hex | Role |
|---|---|---|
bg-role-admin | #1E3A8A | Admin (navy) |
bg-role-teacher | #0D9488 | Guru / Wali Kelas (teal) |
bg-role-parent | #7C3AED | Wali Murid (violet) |
bg-role-staff | #B45309 | Staf (amber) |
bg-brand | #4F46E5 | Brand primary (indigo) |
Soft variants (bg-role-*-soft) are used for chip/badge backgrounds.
Use the useRoleColor(role) composable instead of hard-coding.
The app talks to two backends from the Flutter README:
VITE_API_URL. All requests carry
Authorization: Bearer <token> and X-School-ID: <id>.VITE_AI_API_URL. Same auth, separate base URL.Both are wired in src/lib/http.ts via api and aiApi instances.
Response envelope:
{ "success": true, "data": ..., "message": "..." }
extractData() unwraps the envelope; errors throw with the Indonesian
message from the backend.
Backend uses Pending / Approved / Rejected; UI shows
Menunggu / Disetujui / Ditolak. Use mapStatus() from
useRoleColor.ts at the display boundary.
| Flutter (Dart) | Vue equivalent |
|---|---|
lib/features/auth/.../login_screen.dart | src/views/auth/LoginView.vue |
AuthController + AuthState | src/stores/auth.ts (Pinia) |
auth_service.dart | src/services/auth.service.ts |
dio_client.dart | src/lib/http.ts |
color_utils.dart → getRoleColor | src/composables/useRoleColor.ts |
snackbar_utils.dart → showError/showSuccess | src/components/ui/Toast.vue |
AppBottomSheet / AppEditBottomSheet | src/components/ui/Modal.vue (sheet on mobile breakpoint) |
AppNavigator.push / pop | useRouter() from vue-router |
See CLAUDE.md for the full working contract.