AulaFlux is a local-first collaborative whiteboard for classrooms, workshops, and group activities. It runs as a single-page React app and synchronizes sessions through PeerJS cloud signaling.
- Shareable room IDs
- Join link with QR code
- Editable sticky notes
- Visual zones with optional grid reflow
- Connectors between board objects
- Drag and drop image upload for files under 2 MB
- Remote cursors with participant names
- Session export and import through Fabric JSON snapshots
- Built-in UI localization for Spanish, Galician, English, French, German, Portuguese, Catalan, and Basque
- React 19
- TypeScript
- Vite 8
- Tailwind CSS 4
- Fabric.js 7
- PeerJS
qrcodefor invite QR generationmotionlucide-reactsonner@fontsource-variable/space-grotesk
The application uses a host-authoritative model.
- The host owns the room ID, accepts peer connections, sends the initial snapshot, and rebroadcasts updates.
- Each peer connects to the host room, sends local edits, and receives object, metadata, and cursor updates.
Supported message types:
HELLOSYNC_SNAPSHOTUPSERT_OBJECTREMOVE_OBJECTUPDATE_METACURSOR
The app includes these interface languages:
- Spanish (
es) - Galician (
gl) - English (
en) - French (
fr) - German (
de) - Portuguese (
pt) - Catalan (
ca) - Basque (
eu)
The selected language is stored in the lang query parameter so invite links keep the same UI language for peers.
npm install
npm run devDefault dev URL:
http://localhost:5173/pensando/npm run buildThe Vite base path is configured as /pensando/ for deployment under that subpath.
- The app uses PeerJS cloud signaling only.
- There is no local PeerServer configuration in the UI.
- Invite links only carry
roomandlang. - An invited board can only be opened as a peer, so each board keeps a single teacher/host session.
- The teacher can edit every object on the board.
- Each student can create and edit only the objects they own.
src/
App.tsx Main UI, board lifecycle, localization, and P2P session flow
main.tsx React bootstrap and toaster setup
index.css Global styles
qrcode.d.ts Local typing shim for the qrcode package
lib/board.ts Board factories, serialization, and share URL helpers
lib/i18n.ts Language catalog and localization helpers
- Networking starts inside the board lifecycle instead of the setup click handler, which keeps development behavior stable under React StrictMode.
- The production bundle still emits a chunk-size warning because the main client bundle is large. This does not block the build.