{"version":1,"pages":[{"id":"-MAjqmBFNCQIIAw0XBeX","title":"What is TALL Stack","pathname":"/","siteSpaceId":"sitesp_ktgTR","description":""},{"id":"-MAuWTl_5ABsGgC8RTUn","title":"Tailwind Resources","pathname":"/tailwind/tailwind-resources","siteSpaceId":"sitesp_ktgTR","description":"Collection of useful links and tutorials","breadcrumbs":[{"label":"Tailwind"}]},{"id":"-MErCnrkkRO1z28lL1qE","title":"Swinging Bell Notification Icon","pathname":"/tailwind/swinging-bell-notification-icon","siteSpaceId":"sitesp_ktgTR","description":"Create an animated notification bell with Tailwind","breadcrumbs":[{"label":"Tailwind"}]},{"id":"l5VbGf5iJc1pxUJWrnbx","title":"Styled Unordered Lists","pathname":"/tailwind/styled-unordered-lists","siteSpaceId":"sitesp_ktgTR","description":"use marker: to add colored discs","breadcrumbs":[{"label":"Tailwind"}]},{"id":"-MAubav5LtgGiJZUXbdH","title":"Alpine Resources","pathname":"/alpine-resources","siteSpaceId":"sitesp_ktgTR","description":"Useful Alpine resources"},{"id":"-MAkGWVRhaj2KTx23T7N","title":"Tabbed Content Using Alpine JS","pathname":"/tabbed-content-using-alpine-js","siteSpaceId":"sitesp_ktgTR","description":"Create tabbed page content with anchors to directly open any tab"},{"id":"-MAuNNPUcDhVBJeAIwbY","title":"Checkbox component with SVG tick","pathname":"/checkbox-component-with-svg-tick","siteSpaceId":"sitesp_ktgTR","description":"Styling a checkbox by swapping out SVGs"},{"id":"-MCLI_VLw2e1wj4-6hf1","title":"Dropdown animation","pathname":"/dropdown-animation","siteSpaceId":"sitesp_ktgTR","description":"Dropdown menu effect using Tailwind and Alpine"},{"id":"ru84DMpW9aD3jcqMnXGe","title":"Create a Sliding Puzzle Captcha","pathname":"/create-a-sliding-puzzle-captcha","siteSpaceId":"sitesp_ktgTR","description":"An alternative to Google Recaptcha"},{"id":"-ML-pzNdrJVh9GeRfSEU","title":"Tabler Icons Component","pathname":"/laravel/tabler-icons-component","siteSpaceId":"sitesp_ktgTR","description":"Simple Laravel 7+ component to display one of the Tabler icon set","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MHBxCwd7U-J_F-22NaR","title":"Password-less Login with Laravel 8+","pathname":"/laravel/passwordless-login","siteSpaceId":"sitesp_ktgTR","description":"Create a pass-phrase or 'magic-link' login system for Laravel 8 and Jetstream","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MHKw2nK3GWjWsV9U6Qm","title":"Password-less Login with Magic Link in Laravel 8","pathname":"/laravel/password-less-login-with-magic-link-in-laravel-8","siteSpaceId":"sitesp_ktgTR","description":"Provide users with a secure URL that automatically logs them in","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MB5VuFML9F8sX5ay4QJ","title":"Laravel Resources","pathname":"/laravel/laravel-resources","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Laravel"}]},{"id":"Xl1RNBolW2q75GULF9Z1","title":"Laravel Breeze Login Conditional Redirect","pathname":"/laravel/laravel-breeze-login-conditional-redirect","siteSpaceId":"sitesp_ktgTR","description":"When you want to redirect a user after login according to their role, and using Laravel Breeze","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MGydq2NO9cE1JhQd1rv","title":"Jetstream Login Conditional Redirect","pathname":"/laravel/laravel-8-conditional-login-redirects","siteSpaceId":"sitesp_ktgTR","description":"How to provide different redirects at login when using Laravel Fortify and Jetstream","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MAkJgdbah93UWkuZfai","title":"Simplify Laravel CRUD Controllers","pathname":"/laravel/simplify-laravel-crud-controllers","siteSpaceId":"sitesp_ktgTR","description":"Reusing the same form for create and update","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MAzVLbb-PZ_DezHXYUu","title":"CSRF and expired login forms","pathname":"/laravel/csrf-and-expired-login-forms","siteSpaceId":"sitesp_ktgTR","description":"How to handle a page with a login form that will expire","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MHIuBU3JzhJDkdQlzMi","title":"CSRF and expired logout forms","pathname":"/laravel/csrf-and-expired-logout-forms","siteSpaceId":"sitesp_ktgTR","description":"Prevent users seeing a 419 Page Expired when logging out","breadcrumbs":[{"label":"Laravel"}]},{"id":"hzlITP1WKjINYBWzKAuR","title":"Add your own logo to Laravel Mail","pathname":"/laravel/add-your-own-logo-to-laravel-mail","siteSpaceId":"sitesp_ktgTR","description":"Amending the template is easy to add your logo to the mail header","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MHRpi3GpRm0MpNnfzy9","title":"Specify a different mail theme for Notifications","pathname":"/laravel/specify-a-different-mail-theme-for-notifications","siteSpaceId":"sitesp_ktgTR","description":"Where to place a custom mail theme in Laravel","breadcrumbs":[{"label":"Laravel"}]},{"id":"QbuxOSueCWJsxSzp1AsE","title":"Show custom page when email verification link expired","pathname":"/laravel/show-custom-page-when-email-verification-link-expired","siteSpaceId":"sitesp_ktgTR","description":"Using Laravel 10 with Breeze + Blade starter kit","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MBZIe7EWZlIUAkr9HU8","title":"Using a mutator to save currency","pathname":"/laravel/using-a-mutator-to-save-currency","siteSpaceId":"sitesp_ktgTR","description":"When user enters Pounds & Pence or Dollars & Cents","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MBsnQ8LZ42A8tCTMgyL","title":"Using Spatie Valuestore to hold frequently accessed settings","pathname":"/laravel/using-spatie-valuestore-to-hold-frequently-accessed-settings","siteSpaceId":"sitesp_ktgTR","description":"Domain specific settings","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MCOd7pR-kDK-tPkFbcI","title":"Using the old() helper","pathname":"/laravel/using-the-old-helper","siteSpaceId":"sitesp_ktgTR","description":"Populate a form with user's previous entry, or default data","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MDZaPrWcoGlOOgfZs7_","title":"Alternatives to using Eloquent Accessor","pathname":"/laravel/alternatives-to-using-eloquent-accessor","siteSpaceId":"sitesp_ktgTR","description":"Using computed columns in MySQL","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MTaCoJddG3o8Y_FK_W8","title":"UpdateOrCreate may not update timestamp","pathname":"/laravel/updateorcreate-may-not-update-timestamp","siteSpaceId":"sitesp_ktgTR","description":"When the record is identical, the updated_at timestamp is not changed","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MSxMCXLvs3a88SOSViH","title":"Use of lockForUpdate()","pathname":"/laravel/use-of-lockforupdate","siteSpaceId":"sitesp_ktgTR","description":"Locking the database between read and update of a database record","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MFeRyLviFj5MBCCR4-v","title":"Using S3","pathname":"/laravel/using-s3","siteSpaceId":"sitesp_ktgTR","description":"Various tips for working with S3 storage from your Laravel application","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MSxC6Q5cd6KX_1izDkH","title":"Super Simple User Based Feature Flags","pathname":"/laravel/super-simple-user-based-feature-flags","siteSpaceId":"sitesp_ktgTR","description":"Through a simple addition to the user model we can enable application features for specific users only","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MH37DwP9c7m0185Rdt6","title":"Installing a Specific Version of Laravel","pathname":"/laravel/installing-a-specific-version-of-laravel","siteSpaceId":"sitesp_ktgTR","description":"Use Composer to setup a project in an earlier version of Laravel","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MLD5MlQaP71gl3FFYaT","title":"Versioning your Laravel Project","pathname":"/laravel/versioning-your-laravel-project","siteSpaceId":"sitesp_ktgTR","description":"Create a string which pulls information from your Git history","breadcrumbs":[{"label":"Laravel"}]},{"id":"pGOROZ5mhQJo7un97fLC","title":"CSS Cache Busting with your Git Commit SHA","pathname":"/laravel/css-cache-busting-with-your-git-commit-sha","siteSpaceId":"sitesp_ktgTR","description":"When not using MIX and its versions","breadcrumbs":[{"label":"Laravel"}]},{"id":"qhy3OJT5oXfdQ9SbYdB1","title":"Adding column to Database Notifications table","pathname":"/laravel/adding-column-to-database-notifications-table","siteSpaceId":"sitesp_ktgTR","description":"When you need additional scope on notifications","breadcrumbs":[{"label":"Laravel"}]},{"id":"-Met3Dj6fE476K_uELuO","title":"Find nearby locations using the Haversine formula in Eloquent query","pathname":"/laravel/find-nearby-locations-using-the-haversine-formula-in-eloquent-query","siteSpaceId":"sitesp_ktgTR","description":"Uses the haversine formula to find all DB records with a location within a specified radius","breadcrumbs":[{"label":"Laravel"}]},{"id":"oKj9cNmz4A6sLlLVSNfG","title":"Using Queues on Shared Hosting with Laravel","pathname":"/laravel/using-queues-on-shared-hosting-with-laravel","siteSpaceId":"sitesp_ktgTR","description":"When all you have is CRON","breadcrumbs":[{"label":"Laravel"}]},{"id":"9BQxFYc2hOT0O7HEL8Ai","title":"Create Guaranteed Unique Invoice Number in Laravel","pathname":"/laravel/create-guaranteed-unique-invoice-number-in-laravel","siteSpaceId":"sitesp_ktgTR","description":"Not as simple as it may sound.  How to avoid problems from race conditions.","breadcrumbs":[{"label":"Laravel"}]},{"id":"911Dx2qoOQkOMYEXSoea","title":"Send Notification to all team members","pathname":"/laravel/send-notification-to-all-team-members","siteSpaceId":"sitesp_ktgTR","description":"When one email should be sent using routeNotificationForMail","breadcrumbs":[{"label":"Laravel"}]},{"id":"nK9GyHvLx8N6egxBQPvW","title":"Protect Staging site with Basic Auth","pathname":"/laravel/protect-staging-site-with-basic-auth","siteSpaceId":"sitesp_ktgTR","description":"When you don't want public sites crawling","breadcrumbs":[{"label":"Laravel"}]},{"id":"SnSGOruG1RpQj1CIbbI3","title":"Working with Enums","pathname":"/laravel/working-with-enums","siteSpaceId":"sitesp_ktgTR","description":"Tips and handy utilities for working with enums in your Laravel project","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MAkY7ybugYL3JETFAFo","title":"PHP DateTime formatting cribsheet","pathname":"/laravel/php-datetime-formatting-cribsheet","siteSpaceId":"sitesp_ktgTR","description":"Describes the placeholders you can use when formatting dates in PHP or with Carbon","breadcrumbs":[{"label":"Laravel"}]},{"id":"-MGD4jEZMC-5JoVzBDLp","title":"Livewire Resources","pathname":"/livewire/livewire-resources","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Livewire"}]},{"id":"3ZoSnznGbRLBGYh6vvlB","title":"Naming Livewire Components","pathname":"/livewire/naming-livewire-components","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Livewire"}]},{"id":"-MBsf_4gKlcCmCj46Cco","title":"Dynamic Cascading Dropdown with Livewire","pathname":"/livewire/dynamic-cascading-dropdown-with-livewire","siteSpaceId":"sitesp_ktgTR","description":"When one dropdown depends on what was selected in another","breadcrumbs":[{"label":"Livewire"}]},{"id":"-MFeihI_nkaEShmK74uI","title":"Hiding a button after click","pathname":"/livewire/hiding-a-button-after-click","siteSpaceId":"sitesp_ktgTR","description":"Livewire can handle loading states in the browser to provide responsive feedback","breadcrumbs":[{"label":"Livewire"}]},{"id":"-MBxqDeQkmkJm1QE1vHi","title":"Working with Javascript Components","pathname":"/livewire/working-with-javascript-components","siteSpaceId":"sitesp_ktgTR","description":"Updating Livewire using Bootstrap DatePicker","breadcrumbs":[{"label":"Livewire"}]},{"id":"-MEg51uQCmHav9we5oAp","title":"SweetAlert2 with Livewire","pathname":"/livewire/sweetalert2-with-livewire","siteSpaceId":"sitesp_ktgTR","description":"Use SweetAlert2 to display animated popup alert following Livewire action","breadcrumbs":[{"label":"Livewire"}]},{"id":"v1Ix6Oggw9gCuF2iBjBw","title":"Select Multiple or Checkboxes","pathname":"/livewire/select-multiple-or-checkboxes","siteSpaceId":"sitesp_ktgTR","description":"How to set the values from existing data","breadcrumbs":[{"label":"Livewire"}]},{"id":"-MF_molm0WXbFOGsouCy","title":"Clearing checkboxes in Livewire","pathname":"/livewire/clearing-checkboxes","siteSpaceId":"sitesp_ktgTR","description":"When setting empty array does not clear checkboxes","breadcrumbs":[{"label":"Livewire"}]},{"id":"-MFj4sSi7ftYHwb714Q6","title":"Livewire File Uploads Using S3","pathname":"/livewire/livewire-file-uploads-using-s3","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Livewire"}]},{"id":"-MKv1ZuzLymAdFTprjXi","title":"Simple Log File Viewer","pathname":"/livewire/simple-log-file-viewer","siteSpaceId":"sitesp_ktgTR","description":"Display log files in your application using Livewire and Alpine","breadcrumbs":[{"label":"Livewire"}]},{"id":"-MKlBDbkNWcexo4kTEMI","title":"Testing resources","pathname":"/related-resources/testing-resources","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Related Resources"}]},{"id":"-MF4tPNy3W7G26Q7YIwL","title":"When Composer runs out of memory","pathname":"/related-resources/when-composer-runs-out-of-memory","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Related Resources"}]},{"id":"-ML2M0WegMjQSzqBosto","title":"Deployment","pathname":"/related-resources/deployment","siteSpaceId":"sitesp_ktgTR","description":"articles to help get your project on-line","breadcrumbs":[{"label":"Related Resources"}]},{"id":"-MNJQSPmQjKqyJEtvVoy","title":"Security","pathname":"/related-resources/security","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Related Resources"}]},{"id":"-MJ1rTg6d8CrwtHN5L-T","title":"Scheduler & Cron tips","pathname":"/related-resources/scheduler-and-cron-tips","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Related Resources"}]},{"id":"-MKUdeqIYHJTkooinFi7","title":"LastPass tips","pathname":"/related-resources/lastpass-tips","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Related Resources"}]},{"id":"-MF0UOFTLRX5dx4PO4-K","title":"Using Git","pathname":"/related-resources/using-git","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Related Resources"}]},{"id":"-MFe1VMkRbGjzxqPiCYW","title":"VSCode Tips","pathname":"/related-resources/vscode-tips","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Related Resources"}]},{"id":"-MFiyjrphZsQkSzO00kO","title":"Markdown","pathname":"/related-resources/markdown","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Related Resources"}]},{"id":"ygvUXsh2FAIaYMroJDhC","title":"Cpanel resources","pathname":"/related-resources/cpanel-resources","siteSpaceId":"sitesp_ktgTR","description":"","breadcrumbs":[{"label":"Related Resources"}]}]}