Snapshot of main at 9f39a6e1e (2026-11-02)
This commit is contained in:
commit
6ccf1792d7
2580 files changed
+1040202
No files matched your search
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Amsterdam, Brussels and Lisbon') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\AmstBrusLisb' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,61 @@
|
||||
@php
|
||||
abort_unless(timebank_config('android_app.enabled', true), 404);
|
||||
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
|
||||
$fallbackTexts = [
|
||||
'en' => 'The :platform Android app lets you quickly access your account using biometric login. Check your balance, make payments, chat with other members, and get push notifications — all from your phone. Download the APK below to install the app directly on your Android device.',
|
||||
'nl' => 'De :platform Android-app geeft je snel toegang tot je account via biometrische login. Bekijk je saldo, doe betalingen, chat met andere leden en ontvang pushmeldingen — allemaal vanaf je telefoon. Download de APK hieronder om de app direct op je Android-apparaat te installeren.',
|
||||
'fr' => 'L\'application Android :platform te permet d\'accéder rapidement à ton compte grâce à la connexion biométrique. Consulte ton solde, effectue des paiements, discute avec d\'autres membres et reçois des notifications push — tout depuis ton téléphone. Télécharge l\'APK ci-dessous pour installer l\'application directement sur ton appareil Android.',
|
||||
'de' => 'Die :platform Android-App ermöglicht dir den schnellen Zugriff auf dein Konto per biometrischem Login. Sieh deinen Kontostand ein, tätige Zahlungen, chatte mit anderen Mitgliedern und erhalte Push-Benachrichtigungen – alles von deinem Telefon aus. Lade die APK unten herunter, um die App direkt auf deinem Android-Gerät zu installieren.',
|
||||
'es' => 'La app Android de :platform te permite acceder rápidamente a tu cuenta mediante inicio de sesión biométrico. Consulta tu saldo, realiza pagos, chatea con otros miembros y recibe notificaciones push — todo desde tu teléfono. Descarga el APK a continuación para instalar la app directamente en tu dispositivo Android.',
|
||||
];
|
||||
|
||||
$locale = app()->getLocale();
|
||||
$fallbackText = str_replace(':platform', platform_name(), $fallbackTexts[$locale] ?? $fallbackTexts['en']);
|
||||
|
||||
$apkUrl = \App\Http\Controllers\AppVersionController::latest()['apkUrl'];
|
||||
|
||||
$hasPost = \App\Models\Post::whereHas('category', fn($q) => $q->where('type', 'SiteContents\Static\AndroidApp'))
|
||||
->whereHas('translations', fn($q) => $q
|
||||
->where('locale', 'like', $locale . '%')
|
||||
->whereDate('from', '<=', now())
|
||||
->where(fn($q2) => $q2->whereDate('till', '>', now())->orWhereNull('till'))
|
||||
)->exists();
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Android app') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@if($hasPost)
|
||||
@livewire('static-post', [
|
||||
'type' => 'SiteContents\Static\AndroidApp',
|
||||
'limit' => timebank_config('posts.static.android-app.limit'),
|
||||
'hideAuthor' => timebank_config('posts.static.android-app.hideAuthor'),
|
||||
])
|
||||
@endif
|
||||
|
||||
{{-- Fallback text (when no post) and Download APK button (always shown) --}}
|
||||
<div class="overflow-hidden bg-theme-background shadow-xl sm:rounded-lg mb-3">
|
||||
<div class="px-3 sm:px-0">
|
||||
<div class="max-w-4xl mx-auto my-12 p-4">
|
||||
@if(!$hasPost)
|
||||
<p class="text-theme-primary mb-8">{{ $fallbackText }}</p>
|
||||
@endif
|
||||
<div class="flex justify-center">
|
||||
<a href="{{ $apkUrl }}" download>
|
||||
<x-jetstream.button>
|
||||
{{ __('Download APK') }}
|
||||
</x-jetstream.button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-component>
|
||||
@@ -0,0 +1,17 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Events') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\Events' ?? null, 'limit' => timebank_config('posts.static.events.limit'), 'hideAuthor' => timebank_config('posts.static.events.hideAuthor')])
|
||||
@livewire('event-calendar-post', ['type' => 'App\Models\Meeting' ?? null, 'limit' => timebank_config('posts.static.events.limit'), 'hideAuthor' => timebank_config('posts.static.events.hideAuthor')])
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('FAQ') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\Faq' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Getting started') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\GettingStarted' ?? null, 'limit' => 1 ])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('History') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\History' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')] )
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,16 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Lekkernassûh') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\Lekkernassuh' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')])
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</x-dynamic-component>
|
||||
@@ -0,0 +1,40 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Chat messenger') }}
|
||||
</x-slot>
|
||||
|
||||
@auth
|
||||
@if(userHasMultipleProfiles() && session('activeProfileName'))
|
||||
@php
|
||||
$photoUrl = session('activeProfilePhoto') ? \Illuminate\Support\Facades\Storage::url(session('activeProfilePhoto')) : null;
|
||||
$translatedRole = session('activeProfileRoleLabel') ? __(session('activeProfileRoleLabel')) : null;
|
||||
@endphp
|
||||
<div style="background-color: #f3f4f6; border-bottom: 1px solid #e5e7eb; padding: 12px 16px;">
|
||||
<div style="max-width: 100%; margin: 0 auto; display: flex; align-items: center; gap: 12px;">
|
||||
@if($photoUrl)
|
||||
<img src="{{ $photoUrl }}" alt="{{ session('activeProfileName') }}" style="width: 40px; height: 40px; border-radius: 50%; object-fit: cover; flex-shrink: 0; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">
|
||||
@endif
|
||||
<div style="flex: 1;">
|
||||
<div style="color: #6b7280; font-size: 12px; margin-bottom: 2px;">{{ __('You are now acting as') }}</div>
|
||||
<div style="display: flex; align-items: center; gap: 8px;">
|
||||
<span style="font-weight: 600; color: #111827; font-size: 14px;">{{ session('activeProfileName') }}</span>
|
||||
@if($translatedRole)
|
||||
<span style="font-size: 11px; color: #6b7280; background-color: #e5e7eb; padding: 2px 8px; border-radius: 4px;">{{ $translatedRole }}</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@endauth
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\Messenger' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,25 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Open source') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', [
|
||||
'type' => 'SiteContents\Static\OpenSource' ?? null,
|
||||
'limit' => timebank_config('posts.static.open-source.limit'),
|
||||
'hideAuthor' => timebank_config('posts.static.open-source.hideAuthor'),
|
||||
'versionInfo' => [
|
||||
'version' => config('app.name') . ' ' . config('app.version'),
|
||||
'release_date' => config('app.release_date'),
|
||||
'licence' => 'AGPL v3',
|
||||
'changelog_url' => config('app.changelog_url'),
|
||||
],
|
||||
])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Organizations') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\Organizations' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Our philosophy') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\Philosophy' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Press and media') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\Press' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.hideAuthor')])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,17 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ platform_principles() }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\Principles' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')])
|
||||
|
||||
@livewire('accept-principles')
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,30 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Privacy policy') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\PrivacyPolicy' ?? null, 'limit' => 1])
|
||||
|
||||
<div class="overflow-hidden bg-theme-background shadow-xl sm:rounded-lg mb-3">
|
||||
<div class="px-3 sm:px-0">
|
||||
<div class="max-w-4xl mx-auto my-12 p-4">
|
||||
<p class="text-theme-primary dark:text-theme-muted">
|
||||
{{ __('This is a condensed version of the') }}
|
||||
<a href="{{ route('static-privacy-download') }}"
|
||||
class="font-medium text-theme-primary hover:text-theme-primary-hover underline dark:text-white"
|
||||
download>
|
||||
{{ __('full privacy policy') }}
|
||||
</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-component>
|
||||
@@ -0,0 +1,30 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Report an error') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="mx-auto max-w-7xl py-6 sm:px-6 lg:px-8">
|
||||
<div class="md:grid md:grid-cols-3 md:gap-6">
|
||||
{{-- Left sidebar with static content --}}
|
||||
<div class="md:col-span-1">
|
||||
<div class="px-3 sm:px-0">
|
||||
@livewire('side-post', [
|
||||
'type' => 'SiteContents\Static\ReportError' ?? null,
|
||||
'sticky' => true,
|
||||
'fallbackTitle' => __('Found a bug or technical issue?'),
|
||||
'fallbackDescription' => __('Let us know about any errors or website issues. Thank you for your feedback!')
|
||||
])
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Right side with contact form --}}
|
||||
<div class="mt-5 md:col-span-2 md:mt-0">
|
||||
@livewire('contact-form', ['context' => 'report-error'])
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-component>
|
||||
@@ -0,0 +1,30 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Report an issue') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="mx-auto max-w-7xl py-6 sm:px-6 lg:px-8">
|
||||
<div class="md:grid md:grid-cols-3 md:gap-6">
|
||||
{{-- Left sidebar with static content --}}
|
||||
<div class="md:col-span-1">
|
||||
<div class="px-3 sm:px-0">
|
||||
@livewire('side-post', [
|
||||
'type' => 'SiteContents\Static\ReportIssue' ?? null,
|
||||
'sticky' => true,
|
||||
'fallbackTitle' => __('Notice something wrong?'),
|
||||
'fallbackDescription' => __('Report misuse of our non-profit currency, inappropriate behavior, or website issues. We\'ll look into it! Your feedback is essential for improving our platform for all.')
|
||||
])
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Right side with contact form --}}
|
||||
<div class="mt-5 md:col-span-2 md:mt-0">
|
||||
@livewire('contact-form', ['context' => 'report-issue'])
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-component>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Economics and research') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\EconomicsAndResearch' ?? null, 'limit' => timebank_config('posts.static.economics-and-research.limit'), 'hideAuthor' => timebank_config('posts.static.economics-and-research.hideAuthor', false)])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Meet the team') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\Team' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('The Hague') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\TheHague' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ trans_with_platform('@PLATFORM_NAME_SHORT@ organization') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\TimebankOrganization' ?? null, 'limit' => timebank_config('posts.static.timebank-organization.limit'), 'hideAuthor' => timebank_config('posts.static.timebank-organization.hideAuthor')])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
@@ -0,0 +1,15 @@
|
||||
@php
|
||||
$layout = Auth::check() ? 'app-layout' : 'guest-layout';
|
||||
@endphp
|
||||
|
||||
<x-dynamic-component :component="$layout">
|
||||
<x-slot name="header">
|
||||
{{ __('Work with us') }}
|
||||
</x-slot>
|
||||
|
||||
<div class="py-6">
|
||||
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||
@livewire('static-post', ['type' => 'SiteContents\Static\WorkWithUs' ?? null, 'limit' => timebank_config('posts.static.press-media.limit'), 'hideAuthor' => timebank_config('posts.static.press-media.limit')])
|
||||
</div>
|
||||
</div>
|
||||
</x-dynamic-layout>
|
||||
Reference in new issue
Block a user