This project is a small application demonstrating a much-needed toilet paper dispenser controlled by a React Native app. The project was bootstrapped with create-expo-app and uses file‑based routing.
The app offers:
- SoundWaveVisualizer with animated concentric circles that pulse during recording
- RecordButton with spring animations and color changes
- Bluetooth connection to TP-Dispenser-Pro device
- Audio recording and AI analysis to determine optimal sheet count
- Bluetooth command transmission to physical dispenser
- Real-time motor control and dispensing progress
- Protocol interface showing available BLE commands
- Main app integrating all components with simulated audio amplitude, AI analysis workflow, and automatic dispensing.
The app features a 2-screen view:
- Initial recording screen (app/index.tsx) with sound wave visualizer and record button, plus navigation to control screen after recording
- Control screen (app/control.tsx) with AI analysis, Bluetooth management, dispenser controller, and toilet paper dispenser components
Yes, this is real. Yes, I did spend some time working on it.
Last but not least, licensed under the "FLIP 0FF license".
- Node.js 18 or newer
- npm 9 or newer
Install the project dependencies after cloning the repository:
npm installStart Expo in development mode:
npx expo startThe terminal output includes options to open the app in a development build, Android emulator, iOS simulator or Expo Go.
npm run android– start the Android emulatornpm run ios– start the iOS simulatornpm run web– run the web buildnpm run lint– run ESLint (requires the Expo CLI)npm run build– export a static web buildnpm run reset-project– move the currentappdirectory toapp-exampleand create a freshapp
To check TypeScript types without emitting files:
npx tsc --noEmitAudit dependencies for known vulnerabilities:
npm audit --omit=devRunning npm audit fix will attempt to update packages to patched versions.
If you want to begin from a blank slate, run:
npm run reset-projectThe script moves the existing app directory to app-example and creates a fresh app folder containing a minimal screen.
If you're going to clone this masterpiece of bathroom-based overengineering and not even leave a star, the least you can do is stare at yourself in the mirror and ask: “What kind of person am I?”
Stars are free. Shame is forever.
