The bilingual (NL/FR) website for De Harmonie, a community centre for seniors in Brussels' Noordwijk neighbourhood. Visitors browse upcoming activities, read the weekly menu, and register for events; staff manage everything through a Filament admin panel.
- Laravel 13 with Livewire 3 for the public site
- Filament 4 for the admin panel at
/admin - Tailwind CSS v4 + Vite for the frontend
- MySQL for storage, Spatie Media Library for image uploads
- PHPUnit for the test suite
The project is designed for Laravel Herd (macOS), which serves it at https://deharmonie.test over HTTPS.
git clone https://github.com/fritsbits/deharmonie.git
cd deharmonie
composer install
npm install
cp .env.example .env
php artisan key:generate
# Create a MySQL database called `harmonie`, then:
php artisan migrate --seed
npm run devDefault DB connection assumes MySQL on 127.0.0.1:3306 with user root and no password (matches DBngin defaults). Adjust .env if your setup differs.
# Run the test suite
php artisan test
# Run a single test
php artisan test --filter=test_homepage_shows_published_activities
# Reset and reseed the database
php artisan migrate:fresh --seed
# Format PHP
vendor/bin/pint
# Build production assets
npm run build- Bilingual routing: NL and FR routes live under symmetric
/nland/frprefixes. The bare root/hitsLocaleController::detect, which redirects to the visitor's preferred locale. TheSetLocalemiddleware infers the locale from the first URL segment — no parameter, no alias. Seeroutes/web.php. - Dutch table names:
ActiviteitandDeelnameverzoekdeclare explicit$tableproperties because Laravel's auto-pluralisation breaks Dutch nouns. - Locale-aware accessors on the
Activiteitmodel (getTitelAttribute,getBeschrijvingAttribute,getNoticeAttribute) return the NL or FR field based onapp()->getLocale(). - CMS is the source of truth: seeders in
database/seeders/are insert-only (insertOrIgnore/firstOrCreate) so re-running them never overwrites admin edits. SeeCLAUDE.mdfor the full content workflow.
MIT — see LICENSE.