This app uses a Tauri (React + TypeScript) frontend and connects directly to Supabase from Libapp/src/api.ts.
- Frontend: Tauri, React, TypeScript, Tailwind CSS
- Database: PostgreSQL (Supabase)
- Languages: Rust, TypeScript, SQL
- Node.js and npm
- Rust (required for Tauri): https://www.rust-lang.org/tools/install
- Git
- Clone the repository.
- Open a terminal in
Libapp. - Install dependencies:
npm install- Create
Libapp/.envwith Supabase credentials:
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_PUBLISHABLE_KEY=your_publishable_key
SUPABASE_SECRET_KEY=your_secret_keySUPABASE_SECRET_KEY is stored for server-side usage only and is not used by the frontend client.
From Libapp:
npm run tauri dev- Users log in with:
- Email + password, or
- Username (
full_name) + password (users.password). - Supported roles:
MemberLibrarianAdmin
- Members have
library_card_number. - Card numbers are unique.
- Card number is shown on Profile.
- User search supports card number in:
- Users Management
- Loans page (librarian/admin view)
- Fines page (librarian/admin view)
From repo root:
python Libapp/scripts/seed_supabase.py --wipe-all --book-source public-domain --books 400 --users 150 --librarians 12 --loans 250Alternative source mix:
python Libapp/scripts/seed_supabase.py --wipe-all --book-source mixed --books 400 --users 150 --librarians 12 --loans 250Seeder behavior:
- Creates fixed users:
admin/admin(roleAdmin, emailadmin@library.com)Librarian Admin(roleLibrarian)Guest(roleMember)- Generates unique/diverse names (uses
fakerif installed). - Generates random passwords for seeded users (except fixed
admin). - Uses role-based email domains:
@library.comforLibrarian/Admin@example.comforMember
/libapp
├── src-tauri/ # Rust backend (Tauri Core)
├── src/
│ ├── components/ # UI Components
│ └── api.ts # Supabase data-access layer
├── package.json
└── tauri.conf.json
If books do not load:
- Verify
Libapp/.envvalues are correct. - Check browser/devtools console for Supabase errors.
- Confirm Supabase RLS policies allow the needed
select/insertoperations for your publishable key.