Initial commit

This commit is contained in:
Ronald Huynen
2026-03-23 21:37:59 +01:00
commit 2547717edb
2193 changed files with 972171 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
<x-guest-layout>
<x-jetstream.authentication-card>
<x-slot name="logo">
<x-jetstream.application-mark class="hidden md:block md:h-20 xl:h-28 w-auto md:mt-3" />
</x-slot>
<div class="mb-4 text-sm text-theme-secondary">
{{ __('This is a secure area of the application. Please confirm your password before continuing.') }}
</div>
<x-jetstream.validation-errors class="mb-4" />
<form method="POST" action="{{ route('password.confirm') }}">
@csrf
<div>
<x-jetstream.label for="password" value="{{ __('Password') }}" />
<x-jetstream.input id="password" class="block mt-1 w-full" type="password" name="password" required autocomplete="current-password" autofocus />
</div>
<div class="flex justify-end mt-4">
<x-jetstream.button class="ml-4">
{{ __('Confirm') }}
</x-jetstream.button>
</div>
</form>
</x-jetstream.authentication-card>
</x-guest-layout>

View File

@@ -0,0 +1,34 @@
<x-guest-layout>
<x-jetstream.authentication-card>
<x-slot name="logo">
<x-jetstream.application-mark class="hidden md:block md:h-20 xl:h-28 w-auto md:mt-3" />
</x-slot>
<div class="mb-4 text-sm text-theme-secondary">
{{ __('Forgot the profile\'s password? No problem. Just let us know the email address of this profile and we will email a password reset link that will allow you to choose a new one.') }}
</div>
@if (session('status'))
<div class="mb-4 font-medium text-sm text-green-600">
{{ session('status') }}
</div>
@endif
<x-jetstream.validation-errors class="mb-4" />
<form method="POST" action="{{ route('non-user.password.email', ['profileType' => $profileType]) }}">
@csrf
<div class="block">
<x-jetstream.label for="email" value="{{ __('Email') }}" />
<x-jetstream.input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus />
</div>
<div class="flex items-center justify-end mt-4">
<x-jetstream.button>
{{ __('Email Password Reset Link') }}
</x-jetstream.button>
</div>
</form>
</x-jetstream.authentication-card>
</x-guest-layout>

View File

@@ -0,0 +1,34 @@
<x-guest-layout>
<x-jetstream.authentication-card>
<x-slot name="logo">
<x-jetstream.application-mark class="hidden md:block md:h-20 xl:h-28 w-auto md:mt-3" />
</x-slot>
<div class="mb-4 text-sm text-theme-secondary">
{{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }}
</div>
@if (session('status'))
<div class="mb-4 font-medium text-sm text-green-600">
{{ session('status') }}
</div>
@endif
<x-jetstream.validation-errors class="mb-4" />
<form method="POST" action="{{ route('password.email') }}">
@csrf
<div class="block">
<x-jetstream.label for="email" value="{{ __('Email') }}" />
<x-jetstream.input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus />
</div>
<div class="flex items-center justify-end mt-4">
<x-jetstream.button>
{{ __('Email Password Reset Link') }}
</x-jetstream.button>
</div>
</form>
</x-jetstream.authentication-card>
</x-guest-layout>

View File

@@ -0,0 +1,125 @@
@php
if (request()->has('redirect')) {
session(['url.intended' => request()->query('redirect')]);
}
@endphp
<x-guest-layout>
<x-jetstream.authentication-card>
<x-slot name="logo">
<x-jetstream.application-mark class="hidden md:block md:h-20 xl:h-28 w-auto md:mt-3" />
</x-slot>
@if(isMaintenanceMode() || session('maintenance_mode_active'))
<div class="mb-6 rounded-md bg-gray-50 border border-gray-300 p-4">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd" />
</svg>
</div>
<div class="ml-3">
<h3 class="text-sm font-medium text-gray-800">
{{ __('Site under maintenance') }}
</h3>
<div class="mt-2 text-sm text-gray-600">
<p>
{{ __('The site is currently undergoing maintenance, and login is temporarily unavailable. Thank you for your patience.') }}
</p>
</div>
</div>
</div>
</div>
@endif
@if ($errors->any())
<div class="mb-4">
@if(session('maintenance_mode_active'))
{{-- Show maintenance error without "Whoops!" heading --}}
<div class="rounded-md bg-red-50 border border-red-200 p-4">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-red-400" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z" clip-rule="evenodd" />
</svg>
</div>
<div class="ml-3">
<div class="text-sm text-red-800">
@foreach ($errors->all() as $error)
<p>{{ $error }}</p>
@endforeach
</div>
</div>
</div>
</div>
@else
{{-- Show standard validation errors with "Whoops!" heading --}}
<x-jetstream.validation-errors />
@endif
</div>
@endif
@if (session('status'))
<div class="mb-4 font-medium text-sm text-green-600">
{{ session('status') }}
</div>
@endif
<form method="POST" action="{{ route('login') }}">
@csrf
<div>
<x-jetstream.label for="name" value="{!! __('Email or username') !!}" />
<x-jetstream.input id="name" class="block mt-1 w-full" type="text" name="name" value="{{ old('name', request()->input('name')) }}" required autofocus autocomplete="username" />
</div>
<div class="mt-4" x-data="{ showPassword: false }">
<x-jetstream.label for="password" value="{{ __('Password') }}" />
<div class="relative">
<x-jetstream.input id="password" class="block mt-1 w-full pr-10" ::type="showPassword ? 'text' : 'password'" name="password" required autocomplete="current-password" />
<div class="absolute inset-y-0 right-0 pr-3 flex items-center text-sm leading-5">
<button type="button" @click="showPassword = !showPassword" class="ring-opacity-70 hover:opacity-90 focus:outline-none focus:text-theme-primary">
<template x-if="showPassword">
<x-icon name="eye" class="h-5 w-5" />
</template>
<template x-if="!showPassword">
<x-icon name="eye-slash" class="h-5 w-5 opacity-70" />
</template>
</button>
</div>
</div>
</div>
<div class="flex items-center justify-end mt-8 mb-8">
@if (Route::has('password.request'))
<a class="underline text-sm text-theme-primary hover:text-theme-primary" href="{{ route('password.request') }}">
{{ __('Forgot your password?') }}
</a>
@endif
<x-jetstream.button class="ml-4">
{{ __('Log in') }}
</x-jetstream.button>
</div>
</form>
</x-jetstream.authentication-card>
@push('scripts')
<script>
// Check if there's a redirect parameter in the URL
const urlParams = new URLSearchParams(window.location.search);
const redirectUrl = urlParams.get('redirect');
if (redirectUrl) {
// Send to server to store in session
fetch('{{ route("store-intended-url") }}', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
body: JSON.stringify({ url: redirectUrl })
});
}
</script>
@endpush
</x-guest-layout>

View File

@@ -0,0 +1,94 @@
<x-guest-layout>
<x-jetstream.authentication-card>
<x-slot name="logo">
<x-jetstream.application-mark class="hidden md:block md:h-20 xl:h-28 w-auto md:mt-3" />
</x-slot>
<x-jetstream.section-title>
<x-slot name="title">{{ __('Please introduce yourself in a few sentences') }}</x-slot>
<x-slot name="description">
<div class="my-4">{{ __('Other Timebankers like to know who you are before they start their first exchange with you.') }}</div>
<div class="my-4">{{ __('Explaining why you like to be part of our time economy can also help with getting new exhanges.') }}</div>
<!--- Stepper --->
<h1 class="mt-12 text-theme-secondary">{{ __('Step 2 of 3') }}</h1>
<div class="mb-10 mt-2 relative inset-x-0 bottom-0 h-4 rounded-full overflow-hidden">
<div class=" w-full h-full bg-theme-surface absolute "></div>
<div class=" h-full bg-theme-secondary absolute" style="width:66%"></div>
</div>
</x-slot>
</x-jetstream.section-title>
<div class="mt-5 md:mt-0 md:col-span-2">
<x-jetstream.validation-errors class="mb-4" />
<!---- Right section --->
<div class="px-4 py-5 bg-theme-background sm:p-6 shadow sm:rounded-tl-md sm:rounded-tr-md">
<div class="mt-0 text-2xl">
{{ __('') }}
</div>
<div class="grid grid-cols-6 gap-6">
<div class="col-span-6 sm:col-span-4">
<form method="POST" action="{{ route('register-step2.create') }}" enctype="multipart/form-data">
@csrf
<div class="mt-4">
<x-jetstream.label for="photo" value="{{ __('Profile photo') }}" />
<input type="file" name="photo" />
</div>
<div class="mt-4">
<x-jetstream.label for="about" value="{{ __('Short intro about yourself') }}" />
<x-jetstream.input id="about" class="block mt-1 w-full" type="text" name="about" :value="old('about')" required autofocus autocomplete="about" />
</div>
<div class="mt-4">
<x-jetstream.label for="motivation" value="{{ __('Why do you like to joinTimebank.cc?') }}" />
<x-jetstream.input id="motivation" class="block mt-1 w-full" type="text" name="motivation" :value="old('motivation')" required autofocus autocomplete="motivation" />
</div>
<div class="mt-4">
<x-jetstream.label for="date_of_birth" value="{{ __('Date of birth') }}" />
<x-jetstream.input id="date_of_birth" class="block mt-1 w-full" type="text" name="date_of_birth" :value="old('date_of_birth')" required autofocus autocomplete="date_of_birth" />
</div>
@if (Laravel\Jetstream\Jetstream::hasTermsAndPrivacyPolicyFeature())
<div class="mt-4">
<x-jetstream.label for="terms">
<div class="flex items-center">
<x-jetstream.checkbox name="terms" id="terms" />
<div class="ml-2">
{!! __('I agree to the :terms_of_service and :privacy_policy', [
'terms_of_service' => '<a target="_blank" href="'.route('app.terms.show').'" class="underline text-sm text-theme-primary hover:text-theme-primary">'.__('Terms of Service').'</a>',
'privacy_policy' => '<a target="_blank" href="'.route('policy.show').'" class="underline text-sm text-theme-primary hover:text-theme-primary">'.__('Privacy Policy').'</a>',
]) !!}
</div>
</div>
</x-jetstream.label>
</div>
@endif
</div>
</div>
<div class="flex items-center justify-end mt-4">
<x-jetstream.button class="ml-4">
{{ __('Register') }}
</x-jetstream.button>
</div>
</form>
</div>
</div>
</x-jetstream.authentication-card>
</x-guest-layout>

View File

@@ -0,0 +1,60 @@
<x-guest-layout>
<x-jetstream.authentication-card>
<x-slot name="logo">
<x-jetstream.application-mark class="hidden md:block md:h-20 xl:h-28 w-auto md:mt-3" />
</x-slot>
<x-jetstream.validation-errors class="mb-4" />
<form method="POST" action="{{ route('register') }}">
@csrf
<div>
<x-jetstream.label for="name" value="{{ __('Name') }}" />
<x-jetstream.input id="name" class="block mt-1 w-full" type="text" name="name" :value="old('name')" required autofocus autocomplete="name" />
</div>
<div class="mt-4">
<x-jetstream.label for="email" value="{{ __('Email') }}" />
<x-jetstream.input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required />
</div>
<div class="mt-4">
<x-jetstream.label for="password" value="{{ __('Password') }}" />
<x-jetstream.input id="password" class="block mt-1 w-full" type="password" name="password" required autocomplete="new-password" />
</div>
<div class="mt-4">
<x-jetstream.label for="password_confirmation" value="{{ __('Confirm Password') }}" />
<x-jetstream.input id="password_confirmation" class="block mt-1 w-full" type="password" name="password_confirmation" required autocomplete="new-password" />
</div>
@if (Laravel\Jetstream\Jetstream::hasTermsAndPrivacyPolicyFeature())
<div class="mt-4">
<x-jetstream.label for="terms">
<div class="flex items-center">
<x-jetstream.checkbox name="terms" id="terms" />
<div class="ml-2">
{!! __('I agree to the :terms_of_service and :privacy_policy', [
'terms_of_service' => '<a target="_blank" href="'.route('app.terms.show').'" class="underline text-sm text-gray-600 hover:text-gray-900">'.__('Terms of Service').'</a>',
'privacy_policy' => '<a target="_blank" href="'.route('policy.show').'" class="underline text-sm text-gray-600 hover:text-gray-900">'.__('Privacy Policy').'</a>',
]) !!}
</div>
</div>
</x-jetstream.label>
</div>
@endif
<div class="flex items-center justify-end mt-4">
<a class="underline text-sm text-gray-600 hover:text-gray-900" href="{{ route('login') }}">
{{ __('Already registered?') }}
</a>
<x-jetstream.button class="ml-4">
{{ __('Register') }}
</x-jetstream.button>
</div>
</form>
</x-jetstream.authentication-card>
</x-guest-layout>

View File

@@ -0,0 +1,6 @@
<x-guest-layout>
<div class="flex items-center justify-center min-h-screen">
<!-- Registration Livewire Component (contains modals) -->
@livewire('registration')
</div>
</x-guest-layout>

View File

@@ -0,0 +1,63 @@
<x-guest-layout>
<x-jetstream.authentication-card>
<x-slot name="logo">
<x-jetstream.application-mark class="hidden md:block md:h-20 xl:h-28 w-auto md:mt-3" />
</x-slot>
<x-jetstream.validation-errors class="mb-4" />
<form method="POST" action="{{ route('non-user.password.update', ['profileType' => $profileType]) }}">
@csrf
<input type="hidden" name="token" value="{{ $token }}">
<input type="hidden" name="profileType" value="{{ $profileType }}">
<div class="block">
<x-jetstream.label for="email" value="{{ __('Email') }}" />
<x-jetstream.input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email', $email)" required autofocus />
</div>
<div class="mt-4" x-data="{ showPassword: false }">
<x-jetstream.label for="password" value="{{ __('Password') }}" />
<div class="relative">
<x-jetstream.input id="password" class="block mt-1 w-full pr-10" ::type="showPassword ? 'text' : 'password'" name="password" required autocomplete="new-password" />
<div class="absolute inset-y-0 right-0 pr-3 flex items-center text-sm leading-5">
<button type="button" @click="showPassword = !showPassword" class="text-theme-muted hover:text-theme-primary focus:outline-none focus:text-theme-primary ring-opacity-70 hover:opacity-90">
<template x-if="showPassword">
<x-icon name="eye" class="h-5 w-5" />
</template>
<template x-if="!showPassword">
<x-icon name="eye-slash" class="h-5 w-5 opacity-70" />
</template>
</button>
</div>
</div>
</div>
<div class="mt-4" x-data="{ showPassword: false }">
<x-jetstream.label for="password_confirmation" value="{{ __('Confirm Password') }}" />
<div class="relative">
<x-jetstream.input id="password_confirmation" class="block mt-1 w-full pr-10" ::type="showPassword ? 'text' : 'password'" name="password_confirmation" required autocomplete="new-password" />
<div class="absolute inset-y-0 right-0 pr-3 flex items-center text-sm leading-5">
<button type="button" @click="showPassword = !showPassword" class="text-theme-muted hover:text-theme-primary focus:outline-none focus:text-theme-primary ring-opacity-70 hover:opacity-90">
<template x-if="showPassword">
<x-icon name="eye" class="h-5 w-5" />
</template>
<template x-if="!showPassword">
<x-icon name="eye-slash" class="h-5 w-5 opacity-70" />
</template>
</button>
</div>
</div>
</div>
<div class="flex items-center justify-end mt-4">
<x-jetstream.button>
{{ __('Reset password') }}
</x-jetstream.button>
</div>
</form>
</x-jetstream.authentication-card>
</x-guest-layout>

View File

@@ -0,0 +1,61 @@
<x-guest-layout>
<x-jetstream.authentication-card>
<x-slot name="logo">
<x-jetstream.application-mark class="hidden md:block md:h-20 xl:h-28 w-auto md:mt-3" />
</x-slot>
<x-jetstream.validation-errors class="mb-4" />
<form method="POST" action="{{ route('password.update') }}">
@csrf
<input type="hidden" name="token" value="{{ $request->route('token') }}">
<div class="block">
<x-jetstream.label for="email" value="{{ __('Email') }}" />
<x-jetstream.input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email', $request->email)" required autofocus />
</div>
<div class="mt-4" x-data="{ showPassword: false }">
<x-jetstream.label for="password" value="{{ __('Password') }}" />
<div class="relative">
<x-jetstream.input id="password" class="block mt-1 w-full pr-10" ::type="showPassword ? 'text' : 'password'" name="password" required autocomplete="new-password" />
<div class="absolute inset-y-0 right-0 pr-3 flex items-center text-sm leading-5">
<button type="button" @click="showPassword = !showPassword" class="text-theme-muted hover:text-theme-primary focus:outline-none focus:text-theme-primary">
<template x-if="!showPassword">
<x-icon name="eye" class="h-5 w-5" />
</template>
<template x-if="showPassword">
<x-icon name="eye-slash" class="h-5 w-5" />
</template>
</button>
</div>
</div>
</div>
<div class="mt-4" x-data="{ showPassword: false }">
<x-jetstream.label for="password_confirmation" value="{{ __('Confirm Password') }}" />
<div class="relative">
<x-jetstream.input id="password_confirmation" class="block mt-1 w-full pr-10" ::type="showPassword ? 'text' : 'password'" name="password_confirmation" required autocomplete="new-password" />
<div class="absolute inset-y-0 right-0 pr-3 flex items-center text-sm leading-5">
<button type="button" @click="showPassword = !showPassword" class="text-theme-muted hover:text-theme-primary focus:outline-none focus:text-theme-primary">
<template x-if="!showPassword">
<x-icon name="eye" class="h-5 w-5" />
</template>
<template x-if="showPassword">
<x-icon name="eye-slash" class="h-5 w-5" />
</template>
</button>
</div>
</div>
</div>
<div class="flex items-center justify-end mt-4">
<x-jetstream.button>
{{ __('Reset password') }}
</x-jetstream.button>
</div>
</form>
</x-jetstream.authentication-card>
</x-guest-layout>

View File

@@ -0,0 +1,57 @@
t<x-guest-layout>
<x-jetstream.authentication-card>
<x-slot name="logo">
<x-jetstream.application-mark class="hidden md:block md:h-20 xl:h-28 w-auto md:mt-3" />
</x-slot>
<div x-data="{ recovery: false }">
<div class="mb-4 text-sm text-theme-secondary" x-show="! recovery">
{{ __('Please confirm access to your account by entering the authentication code provided by your authenticator application.') }}
</div>
<div class="mb-4 text-sm text-theme-secondary" x-show="recovery">
{{ __('Please confirm access to your account by entering one of your emergency recovery codes.') }}
</div>
<x-jetstream.validation-errors class="mb-4" />
<form method="POST" action="{{ route('two-factor.login') }}">
@csrf
<div class="mt-4" x-show="! recovery">
<x-jetstream.label for="code" value="{{ __('Code') }}" />
<x-jetstream.input id="code" class="block mt-1 w-full" type="text" inputmode="numeric" name="code" autofocus x-ref="code" autocomplete="one-time-code" />
</div>
<div class="mt-4" x-show="recovery">
<x-jetstream.label for="recovery_code" value="{{ __('Recovery Code') }}" />
<x-jetstream.input id="recovery_code" class="block mt-1 w-full" type="text" name="recovery_code" x-ref="recovery_code" autocomplete="one-time-code" />
</div>
<div class="flex items-center justify-end mt-4">
<button type="button" class="text-sm text-theme-secondary hover:text-theme-primary underline cursor-pointer"
x-show="! recovery"
x-on:click="
recovery = true;
$nextTick(() => { $refs.recovery_code.focus() })
">
{{ __('Use a recovery code') }}
</button>
<button type="button" class="text-sm text-theme-secondary hover:text-theme-primary underline cursor-pointer"
x-show="recovery"
x-on:click="
recovery = false;
$nextTick(() => { $refs.code.focus() })
">
{{ __('Use an authentication code') }}
</button>
<x-jetstream.button class="ml-4">
{{ __('Log in') }}
</x-jetstream.button>
</div>
</form>
</div>
</x-jetstream.authentication-card>
</x-guest-layout>

View File

@@ -0,0 +1,53 @@
<x-app-layout>
<div class="min-h-screen flex flex-col justify-center items-center py-6 relative overflow-hidden">
<!-- Background Image -->
<div class="absolute inset-0 z-0">
@livewire('welcome.login-landing-post', ['type' => 'SiteContents\Welcome\Landing' ?? null, 'random' => true, 'limit' => 1])
</div>
<!-- Verification Card -->
<div class="mx-8 sm:max-w-md px-12 py-6 bg-theme-background dark:bg-theme-secondary backdrop-blur-sm shadow-2xl rounded-lg z-20 relative">
<div class="flex justify-center mb-8">
<x-jetstream.application-mark class="h-20 xl:h-28 w-auto" />
</div>
<div class="mb-4 text-sm text-theme-secondary">
{{ __('Before continuing, could you verify your email address by clicking on the link we just emailed to you? If you didn\'t receive the email, we will gladly send you another.') }}
</div>
@if (session('status') == 'verification-link-sent')
<div class="mb-4 font-medium text-sm text-green-600">
{{ __('A new verification link has been sent to the email address you provided in your profile settings.') }}
</div>
@endif
<div class="mt-4 mb-4 flex flex-col gap-4">
<form method="POST" action="{{ route('verification.send') }}" class="flex justify-center">
@csrf
<div>
<x-jetstream.button type="submit">
{{ __('Resend Verification Email') }}
</x-jetstream.button>
</div>
</form>
<div class="flex flex-col gap-2">
<a
href="{{ LaravelLocalization::localizeURL(route('profile.settings')) }}"
class="underline text-sm text-theme-secondary hover:text-theme-primary"
>
{{ __('Edit Profile') }}</a>
<form method="POST" action="{{ route('logout') }}" class="inline">
@csrf
<button type="submit" class="underline text-sm text-theme-secondary hover:text-theme-primary">
{{ __('Log out') }}
</button>
</form>
</div>
</div>
</div>
</div>
</x-app-layout>