An open-source, multilingual audioguide web application for museums and cultural institutions. Built with Laravel, Filament, and Tailwind CSS.
| Home (Desktop) | Home (Mobile) |
|---|---|
![]() |
![]() |
| Exhibition | Piece/Room |
|---|---|
![]() |
![]() |
| Admin Panel |
|---|
![]() |
- Multilingual - Support for Catalan, Spanish, English, and French (easily extensible)
- Audio guides - Audio player for each exhibition piece/room
- Audio descriptions - Accessibility feature for visually impaired visitors
- Sign language videos - Support for embedded sign language videos
- QR codes - Generate QR codes for each piece, ready to print and place in your museum
- Accessibility widget - High contrast mode, font size controls
- Admin panel - Full CRUD management with Filament
- Visitor statistics - Track visits, languages, devices (privacy-friendly, no personal data)
- PDF documents - Attach documents and room sheets to exhibitions
- Responsive - Mobile-first design, works on any device
- URL redirects - Manage redirects from old QR codes or URLs
- Customizable - Easy branding configuration via environment variables
- Backend: Laravel 12, PHP 8.2+
- Admin Panel: Filament 3
- Frontend: Tailwind CSS 4, Alpine.js
- Build: Vite
- Database: MySQL / MariaDB / SQLite
- PHP 8.2+ with GD extension
- Composer
- Node.js 18+
- SQLite (development) or MySQL (production)
# Clone the repository
git clone https://github.com/humbertblanco/appmuseus.git
cd appmuseus
# Install dependencies and set up
composer setupThis single command will:
- Install PHP dependencies
- Copy
.env.exampleto.env - Generate the application key
- Run database migrations
- Install Node.js dependencies
- Build frontend assets
composer devThis starts the Laravel server, queue worker, log viewer, and Vite dev server concurrently.
php artisan db:seedDefault admin credentials: admin@example.com / password
Important: Change the default password immediately!
- Frontend: http://127.0.0.1:8000
- Admin Panel: http://127.0.0.1:8000/admin
All branding can be configured via environment variables in your .env file:
# Museum name shown in the browser title and admin panel
MUSEUM_NAME="My Museum Audioguide"
# Institution name shown in the footer
MUSEUM_INSTITUTION="City Museum"
# Logo file (place in public/images/)
MUSEUM_LOGO=images/logo.png
# Primary color theme (affects both frontend and admin panel)
# Options: red, orange, amber, green, emerald, teal, cyan, sky, blue,
# indigo, violet, purple, fuchsia, pink, rose
MUSEUM_PRIMARY_COLOR=blue
# Default language (ca, es, en, fr)
MUSEUM_DEFAULT_LOCALE=ca
# Available languages (comma-separated)
MUSEUM_LOCALES=ca,es,en,fr
# Font for the admin panel (Google Fonts)
MUSEUM_FONT=Montserrat
# Legal notice URL (shown in footer)
MUSEUM_LEGAL_URL=https://example.com/legal
# Footer credit text
MUSEUM_FOOTER_CREDIT="My Organization"- Place your logo file in
public/images/ - Set
MUSEUM_LOGO=images/your-logo.pngin.env
- Add the language code to
MUSEUM_LOCALESin.env - Update the route constraint in
routes/web.php - Add translations in
lang/directory - Add language option in
resources/views/components/language-selector.blade.php
app/
Filament/ # Admin panel resources and widgets
Http/Controllers/ # Frontend controllers
Http/Middleware/ # Language detection, redirects
Models/ # Eloquent models
config/
museum.php # Museum-specific configuration
database/
migrations/ # Database schema
seeders/ # Sample data
resources/
views/ # Blade templates
css/ # Stylesheets
js/ # JavaScript
public/
images/ # Logo and static images
routes/
web.php # Application routes
- Exposicio (Exhibition) - The main entity, contains metadata and translations
- Peca (Piece/Room) - Individual stops within an exhibition
- ExposicioTraduccio / PecaTraduccio - Translations for each language
- PecaImatge - Images for each piece
- PecaMaterial - Additional materials (PDFs, videos, links)
- Estadistica - Visitor statistics
- Redireccio - URL redirects
# Copy and edit your environment
cp .env.example .env
# Edit .env with your settings
# Build and run
docker compose up --buildThe app will be available at http://localhost:8000
To use MySQL instead of SQLite, uncomment the mysql service in docker-compose.yml and update DB_* vars in .env.
See DEPLOYMENT.md for detailed deployment instructions.
This project is open-sourced software licensed under the MIT license.
Built with Laravel, Filament, Tailwind CSS, and Alpine.js.




