Turn messy prescriptions into clean, structured notes.
Lisible is a small, privacy-friendly web app that helps you read your doctor's handwriting. Upload a photo of a prescription or clinical note, and get a tidy, structured transcript you can actually use.
Prereqs:
Install dependencies
composer install
npm install
Configure your environment
cp .env.example .env
php artisan key:generate
Use the built-in SQLite database and run migrations/seeders
php artisan migrate:fresh --seed
php artisan storage:link
Add your Gemini credentials to .env
GEMINI_API_KEY=your_api_key_here
# optional
GEMINI_MODEL=gemini-2.5-flash
GEMINI_TIMEOUT=300
Start the app (backend, queue, logs, and Vite) — one command
composer run dev
Then open http://localhost:8000 and register/login. Go to “Transcripts → Create,” upload an image, and watch the status update in real time.
You can switch databases or front the app with Nginx easily—this repo keeps defaults simple so you can self-host quickly.
Key environment variables in .env
:
Gemini config lives in config/services.php
and pulls from .env
.
Separate processes (alternative to composer script):
php artisan serve
php artisan queue:work --verbose --tries=3 --queue=transcription
npm run dev
Build assets for production:
npm run build
public/
.env
(set APP_ENV=production
, APP_DEBUG=false
, DB of choice)composer install --no-dev --optimize-autoloader
npm ci && npm run build
php artisan migrate --force && php artisan storage:link
storage/
and bootstrap/cache/
are writable by the web userWhere to look:
storage/logs/laravel.log
storage/logs/transcription.log
Common issues:
GEMINI_API_KEY
in .env
, then restart workerphp artisan queue:work
php artisan storage:link
and correct file permissionsGEMINI_TIMEOUT
or ensure outbound network accessRun the PHP test suite:
php artisan test
docs/TECHNICAL.md
Apache 2.0