No description
| apps/web | ||
| cmd/archive-server | ||
| docs/superpowers | ||
| internal | ||
| .dockerignore | ||
| .env.example | ||
| .env.production.example | ||
| .gitignore | ||
| check.go | ||
| docker-compose.yml | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| Makefile | ||
| README.md | ||
Arsip Dokumen Internal
Aplikasi internal untuk arsip dokumen sekolah dengan klasifikasi Johnny Decimal, OCR searchable PDF, pencarian full text (SQLite FTS5), dan Casdoor SSO.
Arsitektur singkat
- Backend Go (chi, modernc SQLite, alexedwards/scs, coreos go-oidc)
- SQLite untuk metadata + FTS5
- Storage abstraction: lokal atau S3
- OCR: ocrmypdf + tesseract + img2pdf (dipanggil lewat runner yang bisa di-mock saat test)
- Frontend React + Vite + Tailwind (tema Civic Ledger) + shadcn-style tokens
- Auth via Casdoor OIDC, sesi disimpan di memori scs
- Vite dev mem-proxy
/apike backend Go, sedangkan buildapps/web/distdiserve langsung oleh backend Go
Local Development
-
Salin
.env.exampleke.envdan isi kredensial Casdoor serta storage. -
Install dependensi frontend:
cd apps/web && npm install -
Jalankan test:
go test ./... cd apps/web && npx vitest run -
Install browser Playwright sekali:
cd apps/web && npx playwright install chromium -
Jalankan server dan frontend:
make devAlternatif terpisah:
make dev-api make dev-web -
Jalankan smoke e2e:
cd apps/web && npx playwright test tests/e2e/archive-smoke.spec.ts
Build artefak
make build
Menghasilkan bin/archive-server.exe dan bundle Vite di apps/web/dist.
Environment variables utama
SESSION_SECRET(wajib)DATABASE_PATH(defaultdata/app.db)STORAGE_BACKENDlocalataus3LOCAL_STORAGE_ROOT(defaultdata/files)S3_BUCKET,S3_REGION,S3_ENDPOINT,S3_ACCESS_KEY_ID,S3_SECRET_ACCESS_KEYCASDOOR_ISSUER_URL,CASDOOR_CLIENT_ID,CASDOOR_CLIENT_SECRET,CASDOOR_REDIRECT_URLOCR_LANGUAGES(defaultind+eng)OCRMYPDF_BIN,TESSERACT_BIN,IMG2PDF_BIN
Struktur folder
cmd/archive-server— entrypoint Gointernal/app— wiring dependencyinternal/config— parsing envinternal/db— sqlite + migrasi + seedinternal/archive— domain arsip (repository, service, indexer, search, OCR job state)internal/masterdata— document types, correspondents, JD classes, tagsinternal/users— repo user lokal yang mirror Casdoorinternal/auth— OIDC client + sessioninternal/http— router dan handlersinternal/http/handlers— arsip, auth, master data, dashboard, admininternal/http/middleware— require auth / require admininternal/ocr— pipeline OCR dengan command runner yang bisa di-mockinternal/dashboard— ringkasan admininternal/storage— abstraksi local + S3apps/web— React/Vite SPA