A Laravel + Socialite + Vite + Vue 3 + TailwindCSS SPA Boilerplate. Laravel with user authentication, registration with email verification, social media authentication, password recovery, user management, and roles/permissions management. Uses official TailwindCSS. While the front end is part of this repository it is a completely separated Vue 3 front end compiled using ViteJS.
- Laravel 11.x
- Laravel Sanctum
- Socialite
- Vite
- Vue 3
- TailwindCSS (w/
@tailwindcss/forms
and@tailwindcss/aspect-ratio
) - Vue Router
- Pinia
- Axios
- Vue I18n
- Headless UI
- Heroicons
- Font Awesome 6
- ESLint with Prettier
- Users Area
- Admin Area
- About Page
- Terms Page
- Users Managemenet
- User Impersonation
- User Data Download
- User Account Self Deletion.
- Manage Social Media Logins through GUI
- Roles Management
- Permissions Management
- Google Analytics (optional)
- Social Authentication with Facebook, Twitter, Instagram, GitHub, TikTok, Google, YouTube, Microsoft, Twitch, and Apple
- Optional Sentry.io Laravel Monitoring
- Optional Sentry.io VueJs Monitoring
The following Sanctum features are implemented in this Vue SPA:
- ✅ Laravel 11
- ✅ Vue 3
- ✅ VueRouter
- ✅ Pinia
- ✅ Vue I18n Multi-Language
- ✅ Login
- ✅ Password Reset
- ✅ Registration
- ✅ Admin Panel
- ✅ Profile Management
- ✅ User Management
- ✅ Roles Management
- ✅ Permissions Management
- ✅ Password Change
- ✅ E-Mail Verification
- ✅ Posts Management
- ✅ Frontend Blog
- ✅ TailwindCSS
- ✅ Browser Sessions - Other Device Logout
- ✅ User Activity Logs
- Run
git clone https://github.com/jeremykenedy/laravel-spa.git laravel-spa
- Create a MySQL database for the project
mysql -u root -p
, if using Vagrant:mysql -u homestead -psecret
create database laravelSpa;
\q
- From the projects root run
cp .env.example .env
- Configure your
.env
file (VERY IMPORTANT) - Run
composer install
from the projects root folder - From the projects root folder run
sudo chmod -R 755 ../laravel-spa
- From the projects root folder run
php artisan key:generate
- From the projects root folder run
php artisan migrate
- From the projects root folder run
composer dump-autoload
- From the projects root folder run
php artisan db:seed
- Compile the front end assets with npm steps or yarn steps.
- From the projects root folder run
npm install
- From the projects root folder run
npm run dev
ornpm run build
- You can lint assets with
npm run lint
- You can clean the syntax with
npm run clean
- From the projects root folder run
yarn install
- From the projects root folder run
yarn run dev
oryarn run build
- You can lint assets with
yarn run lint
- You can clean the syntax with
yarn run clean
- From the projects root folder run
php artisan config:cache
Password | |
---|---|
superadmin@superadmin.com | password |
admin@admin.com | password |
user@user.com | password |
- Facebook API (Will work with local dev callback)
- Twitter API
- Instagram API
- GitHub API (Will work with local dev callback)
- YouTube API
- Google API
- LinkedIn API (Will work with local dev callback)
- Twitch API (Will work with local dev callback)
- Microsoft API
- TikTok API
- Apple API
- ZoHo API (Will work with local dev callback)
- StackExchange API (Will work with local dev callback)
- GitLab API (Will work with local dev callback)
- Reddit API Register (Will work with local dev callback)
- Snapchat API
- Meetup API
- Atlassian
- See full list of providers: https://socialiteproviders.github.io
LaravelSpa
├── .editorconfig
├── .env.example
├── .eslintrc.js
├── .eslintrc.json
├── .gitattributes
├── .github
│ ├── FUNDING.yml
│ ├── dependabot.yml
│ ├── labeler.yml
│ └── workflows
│ ├── build-changelog.yml
│ ├── codacy.yml
│ ├── codeql.yml
│ ├── dependency-review.yml
│ ├── deploy.yml
│ ├── gitguardian.yml
│ ├── greetings.yml
│ ├── labeler.yml
│ ├── laravel.yml
│ ├── node.js.yml
│ ├── php.yml
│ ├── sentry.yml
│ └── stale.yml
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── .scripts
│ └── deploy.sh
├── .styleci.yml
├── LICENSE
├── README.md
├── SECURITY.md
├── app
│ ├── Console
│ │ └── Kernel.php
│ ├── Exceptions
│ │ ├── Handler.php
│ │ └── SocialProviderDeniedException.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Admin
│ │ │ │ ├── AppSettingsController.php
│ │ │ │ ├── DashboardController.php
│ │ │ │ └── ServerInfoController.php
│ │ │ ├── Api
│ │ │ │ ├── ActivityLogController.php
│ │ │ │ ├── BrowserSessionController.php
│ │ │ │ ├── CategoryController.php
│ │ │ │ ├── PermissionsController.php
│ │ │ │ ├── PostController.php
│ │ │ │ ├── ProfileController.php
│ │ │ │ ├── RolesController.php
│ │ │ │ ├── UserController.php
│ │ │ │ └── UsersController.php
│ │ │ ├── Auth
│ │ │ │ ├── AuthenticatedSessionController.php
│ │ │ │ ├── ConfirmPasswordController.php
│ │ │ │ ├── ForgotPasswordController.php
│ │ │ │ ├── ImpersonateController.php
│ │ │ │ ├── LoginController.php
│ │ │ │ ├── PasswordController.php
│ │ │ │ ├── RegisterController.php
│ │ │ │ ├── ResetPasswordController.php
│ │ │ │ ├── SocialiteController.php
│ │ │ │ └── VerificationController.php
│ │ │ ├── Controller.php
│ │ │ └── HomeController.php
│ │ ├── Kernel.php
│ │ ├── Middleware
│ │ │ ├── Authenticate.php
│ │ │ ├── EncryptCookies.php
│ │ │ ├── PreventRequestsDuringMaintenance.php
│ │ │ ├── RedirectIfAuthenticated.php
│ │ │ ├── TrimStrings.php
│ │ │ ├── TrustHosts.php
│ │ │ ├── TrustProxies.php
│ │ │ ├── ValidateSignature.php
│ │ │ └── VerifyCsrfToken.php
│ │ ├── Requests
│ │ │ ├── Admin
│ │ │ │ ├── AdminDashboardRequest.php
│ │ │ │ ├── ShowAppSettingsRequest.php
│ │ │ │ ├── ShowServerInfoRequest.php
│ │ │ │ └── UpdateAppSettingsRequest.php
│ │ │ ├── Auth
│ │ │ │ ├── LoginRequest.php
│ │ │ │ └── RegisterRequest.php
│ │ │ ├── Categories
│ │ │ │ ├── DeleteCategoryRequest.php
│ │ │ │ ├── RestoreCategoryRequest.php
│ │ │ │ ├── ShowCategoryRequest.php
│ │ │ │ ├── StoreCategoryRequest.php
│ │ │ │ └── UpdateCategoryRequest.php
│ │ │ ├── Permissions
│ │ │ │ ├── CreatePermissionRequest.php
│ │ │ │ ├── GetPermissionsRequest.php
│ │ │ │ └── UpdatePermissionRequest.php
│ │ │ ├── Posts
│ │ │ │ ├── DeletePostRequest.php
│ │ │ │ ├── RestorePostRequest.php
│ │ │ │ ├── ShowPostRequest.php
│ │ │ │ ├── StorePostRequest.php
│ │ │ │ └── UpdatePostRequest.php
│ │ │ ├── Roles
│ │ │ │ ├── CreateRoleRequest.php
│ │ │ │ ├── GetUserRolesRequest.php
│ │ │ │ └── UpdateRoleRequest.php
│ │ │ ├── StoreRoleRequest.php
│ │ │ ├── StoreUserRequest.php
│ │ │ ├── UpdateProfileRequest.php
│ │ │ ├── User
│ │ │ └── Users
│ │ │ ├── CreateUserRequest.php
│ │ │ ├── DeleteUserRequest.php
│ │ │ ├── ImpersonateUserRequest.php
│ │ │ ├── LeaveImpersonateUserRequest.php
│ │ │ ├── RestoreUserRequest.php
│ │ │ ├── UpdateUserRequest.php
│ │ │ ├── VerifyUserRequest.php
│ │ │ └── ViewUserRequest.php
│ │ └── Resources
│ │ ├── ActivityLogs
│ │ │ ├── ActivityLogResource.php
│ │ │ └── ActivityLogsCollection.php
│ │ ├── Categories
│ │ │ ├── CategoryResource.php
│ │ │ └── GategoriesCollection.php
│ │ ├── Permissions
│ │ │ ├── PermissionResource.php
│ │ │ └── PermissionsCollection.php
│ │ ├── Posts
│ │ │ ├── PostResource.php
│ │ │ └── PostsCollection.php
│ │ ├── Roles
│ │ │ ├── RoleResource.php
│ │ │ └── RolesCollection.php
│ │ └── Users
│ │ ├── UserResource.php
│ │ └── UsersCollection.php
│ ├── Jobs
│ │ └── PersonalDataExportJob.php
│ ├── Mail
│ │ └── ExceptionOccured.php
│ ├── Models
│ │ ├── Category.php
│ │ ├── CategoryPost.php
│ │ ├── Impersonation.php
│ │ ├── Permission.php
│ │ ├── Post.php
│ │ ├── Role.php
│ │ ├── Setting.php
│ │ ├── SocialiteProvider.php
│ │ └── User.php
│ ├── Notifications
│ │ ├── PersonalDataExportedNotification.php
│ │ ├── ResetPasswordNotification.php
│ │ ├── SendActivationEmail.php
│ │ ├── SendGoodbyeEmail.php
│ │ ├── SendPasswordResetEmail.php
│ │ └── VerifyEmailNotification.php
│ ├── Providers
│ │ ├── AppServiceProvider.php
│ │ ├── AuthServiceProvider.php
│ │ ├── BroadcastServiceProvider.php
│ │ ├── EventServiceProvider.php
│ │ ├── RouteServiceProvider.php
│ │ └── ViewComposerServiceProvider.php
│ ├── Services
│ │ └── AppleToken.php
│ ├── Traits
│ │ ├── AppSettingsTrait.php
│ │ └── SocialiteProvidersTrait.php
│ └── View
│ └── Composers
│ ├── GaComposer.php
│ └── GaEnabledComposer.php
├── artisan
├── bootstrap
│ ├── app.php
│ ├── cache
│ │ ├── .gitignore
│ │ ├── packages.php
│ │ └── services.php
│ └── ssr
├── composer.json
├── composer.lock
├── config
│ ├── activitylog.php
│ ├── app.php
│ ├── auth.php
│ ├── broadcasting.php
│ ├── browser-sessions.php
│ ├── cache.php
│ ├── cors.php
│ ├── database.php
│ ├── debugbar.php
│ ├── exceptions.php
│ ├── filesystems.php
│ ├── hashing.php
│ ├── laravel-https.php
│ ├── laravel-page-speed.php
│ ├── laravelpwa.php
│ ├── logging.php
│ ├── mail.php
│ ├── media-library.php
│ ├── personal-data-export.php
│ ├── queue.php
│ ├── request-docs.php
│ ├── roles.php
│ ├── sanctum.php
│ ├── sentry.php
│ ├── services.php
│ ├── session.php
│ ├── settings.php
│ ├── sitemap.php
│ ├── users.php
│ └── view.php
├── database
│ ├── .gitignore
│ ├── factories
│ │ └── UserFactory.php
│ ├── migrations
│ │ ├── 0001_01_01_000000_create_users_table.php
│ │ ├── 0001_01_01_000001_create_cache_table.php
│ │ ├── 0001_01_01_000002_create_jobs_table.php
│ │ ├── 2014_10_00_000000_create_settings_table.php
│ │ ├── 2014_10_00_000001_add_group_column_on_settings_table.php
│ │ ├── 2014_10_12_100000_create_password_resets_table.php
│ │ ├── 2016_01_15_105324_create_roles_table.php
│ │ ├── 2016_01_15_114412_create_role_user_table.php
│ │ ├── 2016_01_26_115212_create_permissions_table.php
│ │ ├── 2016_01_26_115523_create_permission_role_table.php
│ │ ├── 2016_02_09_132439_create_permission_user_table.php
│ │ ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│ │ ├── 2022_09_30_181156_create_posts_table.php
│ │ ├── 2022_09_30_181227_create_categories_table.php
│ │ ├── 2022_11_28_073632_create_socialite_providers_table.php
│ │ ├── 2022_12_06_061947_create_impersonations_table.php
│ │ ├── 2023_10_02_010617_create_category_post_table.php
│ │ ├── 2023_10_02_175025_create_media_table.php
│ │ ├── 2024_11_25_022836_create_permission_tables.php
│ │ ├── 2025_01_23_093055_create_activity_log_table.php
│ │ ├── 2025_01_23_093056_add_event_column_to_activity_log_table.php
│ │ └── 2025_01_23_093057_add_batch_uuid_column_to_activity_log_table.php
│ └── seeders
│ ├── AppSettingsSeeder.php
│ ├── ConnectRelationshipsSeeder.php
│ ├── DatabaseSeeder.php
│ ├── PermissionTableSeeder.php
│ ├── PermissionsTableSeeder.php
│ ├── RolesTableSeeder.php
│ └── UsersTableSeeder.php
├── eslint.config.js
├── lang
│ └── en
│ ├── auth.php
│ ├── emails.php
│ ├── pagination.php
│ ├── passwords.php
│ └── validation.php
├── package-lock.json
├── package.json
├── phpunit.xml
├── postcss.config.js
├── prettier.config.js
├── public
│ ├── .htaccess
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ ├── apple-touch-icon.png
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── favicon.png
│ ├── images
│ │ └── placeholder.jpg
│ ├── index.php
│ ├── robots.txt
│ ├── serviceworker.js
│ ├── site.webmanifest
│ └── sw.js
├── resources
│ ├── css
│ │ ├── app.css
│ │ └── normalize.css
│ ├── img
│ │ ├── 404.png
│ │ ├── favicon
│ │ │ ├── android-chrome-192x192.png
│ │ │ ├── android-chrome-512x512.png
│ │ │ ├── apple-touch-icon.png
│ │ │ ├── favicon-16x16.png
│ │ │ ├── favicon-32x32.png
│ │ │ ├── favicon.ico
│ │ │ ├── favicon.png
│ │ │ └── site.webmanifest
│ │ ├── fonts
│ │ │ ├── Leckerli_One
│ │ │ │ ├── LeckerliOne-Regular.ttf
│ │ │ │ └── OFL.txt
│ │ │ ├── Nunito
│ │ │ │ ├── Nunito-Italic-VariableFont_wght.ttf
│ │ │ │ ├── Nunito-VariableFont_wght.ttf
│ │ │ │ ├── OFL.txt
│ │ │ │ ├── README.txt
│ │ │ │ └── static
│ │ │ │ ├── Nunito-Black.ttf
│ │ │ │ ├── Nunito-BlackItalic.ttf
│ │ │ │ ├── Nunito-Bold.ttf
│ │ │ │ ├── Nunito-BoldItalic.ttf
│ │ │ │ ├── Nunito-ExtraBold.ttf
│ │ │ │ ├── Nunito-ExtraBoldItalic.ttf
│ │ │ │ ├── Nunito-ExtraLight.ttf
│ │ │ │ ├── Nunito-ExtraLightItalic.ttf
│ │ │ │ ├── Nunito-Italic.ttf
│ │ │ │ ├── Nunito-Light.ttf
│ │ │ │ ├── Nunito-LightItalic.ttf
│ │ │ │ ├── Nunito-Medium.ttf
│ │ │ │ ├── Nunito-MediumItalic.ttf
│ │ │ │ ├── Nunito-Regular.ttf
│ │ │ │ ├── Nunito-SemiBold.ttf
│ │ │ │ └── Nunito-SemiBoldItalic.ttf
│ │ │ └── Quicksand
│ │ │ ├── OFL.txt
│ │ │ ├── Quicksand-VariableFont_wght.ttf
│ │ │ ├── README.txt
│ │ │ └── static
│ │ │ ├── Quicksand-Bold.ttf
│ │ │ ├── Quicksand-Light.ttf
│ │ │ ├── Quicksand-Medium.ttf
│ │ │ ├── Quicksand-Regular.ttf
│ │ │ └── Quicksand-SemiBold.ttf
│ │ ├── login.png
│ │ ├── login.webp
│ │ ├── plugs.png
│ │ └── vendor-logos
│ │ ├── vultr-1.webp
│ │ ├── vultr-2.png
│ │ ├── zoho-monocrome-black.png
│ │ └── zoho-monocrome-white.png
│ ├── js
│ │ ├── app.js
│ │ ├── bootstrap.js
│ │ ├── components
│ │ │ ├── LocaleSwitcher.vue
│ │ │ ├── ToggleDarkMode.vue
│ │ │ ├── admin
│ │ │ │ ├── CreateComp.vue
│ │ │ │ ├── EditComp.vue
│ │ │ │ └── IndexComp.vue
│ │ │ ├── auth
│ │ │ │ └── SocialiteLogins.vue
│ │ │ ├── common
│ │ │ │ ├── AdminMiniCard.vue
│ │ │ │ ├── AppButton.vue
│ │ │ │ ├── AppDeleteModal.vue
│ │ │ │ ├── AppModal.vue
│ │ │ │ ├── AppSwitch.vue
│ │ │ │ ├── AppTable.vue
│ │ │ │ ├── CKEditorComponent.vue
│ │ │ │ ├── CircleSvg.vue
│ │ │ │ ├── DropZone.vue
│ │ │ │ ├── ErrorsNotice.vue
│ │ │ │ ├── ImpersonateUser.vue
│ │ │ │ ├── LeaveImpersonation.vue
│ │ │ │ ├── LoadingCircle.vue
│ │ │ │ ├── NoRecordsCTA.vue
│ │ │ │ ├── PaginationComp.vue
│ │ │ │ ├── PerPage.vue
│ │ │ │ ├── SocialMediaLoginStatus.vue
│ │ │ │ ├── SocialMediaLoginStatusItem.vue
│ │ │ │ ├── SuccessNotice.vue
│ │ │ │ ├── TextEditorComponent.vue
│ │ │ │ ├── TinyMCEditor.vue
│ │ │ │ └── UmoEditor.vue
│ │ │ ├── form
│ │ │ │ ├── AppPasswordInput.vue
│ │ │ │ ├── AppSettingTextInput.vue
│ │ │ │ ├── AppSettingTextarea.vue
│ │ │ │ ├── AppSettingToggle.vue
│ │ │ │ └── AppTextInput.vue
│ │ │ ├── includes
│ │ │ │ ├── AdminBreadcrumb.vue
│ │ │ │ ├── AdminBreadcrumbContainer.vue
│ │ │ │ ├── AdminBreadcrumbSep.vue
│ │ │ │ ├── AdminNavBarLink.vue
│ │ │ │ ├── AdminNavbar.vue
│ │ │ │ ├── AdminSidebar.vue
│ │ │ │ ├── AdminSidebarLink.vue
│ │ │ │ ├── AppFooter.vue
│ │ │ │ ├── AppNav.vue
│ │ │ │ ├── BreadcrumbOld.vue
│ │ │ │ └── NavLink.vue
│ │ │ ├── loaders
│ │ │ │ └── AnimatedTableLoader.vue
│ │ │ ├── plugs
│ │ │ │ ├── BmcButtons.vue
│ │ │ │ ├── GHButton.vue
│ │ │ │ ├── GHButtons.vue
│ │ │ │ ├── OctoCat.vue
│ │ │ │ ├── PatreonButton.vue
│ │ │ │ └── VultrReferral.vue
│ │ │ ├── roles
│ │ │ │ ├── PermissionFormModal.vue
│ │ │ │ ├── RoleFormModal.vue
│ │ │ │ └── RolesBadges.vue
│ │ │ └── users
│ │ │ ├── UserForm.vue
│ │ │ └── UserFormModal.vue
│ │ ├── composables
│ │ │ ├── activityLogs.js
│ │ │ ├── auth.js
│ │ │ ├── categories.js
│ │ │ ├── darkmode.js
│ │ │ ├── posts.js
│ │ │ ├── profile.js
│ │ │ ├── roles.js
│ │ │ └── users.js
│ │ ├── lang
│ │ │ ├── bn.json
│ │ │ ├── en.json
│ │ │ ├── es.json
│ │ │ ├── fr.json
│ │ │ ├── pt-BR.json
│ │ │ └── zh-CN.json
│ │ ├── layouts
│ │ │ ├── AdminLayout.vue
│ │ │ ├── AuthenticatedLayout.vue
│ │ │ ├── ErrorLayout.vue
│ │ │ └── GuestLayout.vue
│ │ ├── plugins
│ │ │ └── i18n.js
│ │ ├── routes
│ │ │ ├── index.js
│ │ │ ├── middleware.js
│ │ │ └── routes.js
│ │ ├── services
│ │ │ ├── ability.js
│ │ │ ├── analytics.js
│ │ │ ├── asteroids.js
│ │ │ ├── common.js
│ │ │ ├── excanvas.js
│ │ │ ├── s-code.js
│ │ │ ├── s-code.min.js
│ │ │ └── utilities.js
│ │ ├── store
│ │ │ ├── auth.js
│ │ │ ├── index.js
│ │ │ ├── lang.js
│ │ │ ├── sidebar.js
│ │ │ └── toast.js
│ │ ├── validation
│ │ │ └── rules.js
│ │ └── views
│ │ ├── admin
│ │ │ ├── ActivityLog.vue
│ │ │ ├── AdminPage.vue
│ │ │ ├── AppSettings.vue
│ │ │ ├── BrowserSessions.vue
│ │ │ ├── DashboardPage.vue
│ │ │ ├── PermissionsPage.vue
│ │ │ ├── PhpInfo.vue
│ │ │ ├── RolesPage.vue
│ │ │ ├── UsersPage.vue
│ │ │ ├── categories
│ │ │ │ ├── CategoryIndex.vue
│ │ │ │ ├── CreateCategory.vue
│ │ │ │ └── EditCategory.vue
│ │ │ └── posts
│ │ │ ├── AdminCreatePost.vue
│ │ │ ├── AdminEditPost.vue
│ │ │ └── AdminPostsIndex.vue
│ │ ├── auth
│ │ │ ├── Verify.vue
│ │ │ └── passwords
│ │ │ ├── ConfirmPage.vue
│ │ │ ├── RequestReset.vue
│ │ │ └── ResetPage.vue
│ │ ├── category
│ │ │ └── CatPostsPage.vue
│ │ ├── errors
│ │ │ └── NotFound.vue
│ │ ├── home
│ │ │ └── HomePage.vue
│ │ ├── kiosk
│ │ ├── login
│ │ │ └── LoginPage.vue
│ │ ├── misc
│ │ │ ├── AboutPage.vue
│ │ │ ├── PricingPage.vue
│ │ │ ├── SupportPage.vue
│ │ │ └── TermsPage.vue
│ │ ├── pages
│ │ │ └── user-settings
│ │ │ ├── AccountAuthentication.vue
│ │ │ ├── AccountData.vue
│ │ │ ├── AccountPage.vue
│ │ │ ├── PasswordPage.vue
│ │ │ ├── ProfilePage.vue
│ │ │ ├── SettingsNav.vue
│ │ │ ├── SettingsNavLink.vue
│ │ │ ├── SettingsPage.vue
│ │ │ └── UserDownloadData.vue
│ │ ├── posts
│ │ │ ├── PublicIndex.vue
│ │ │ └── PublicPostDetails.vue
│ │ ├── register
│ │ │ └── RegisterPage.vue
│ │ └── templates
│ │ ├── Bare.vue
│ │ └── Blank.vue
│ ├── lang
│ ├── pwa
│ │ ├── serviceworker.js
│ │ └── sw.js
│ └── views
│ ├── app.blade.php
│ ├── auth
│ │ ├── login.blade.php
│ │ ├── passwords
│ │ │ ├── confirm.blade.php
│ │ │ ├── email.blade.php
│ │ │ └── reset.blade.php
│ │ ├── register.blade.php
│ │ └── verify.blade.php
│ ├── home.blade.php
│ ├── layouts
│ │ ├── app.blade.php
│ │ └── master.blade.php
│ └── socialite
│ ├── callback.blade.php
│ └── denied.blade.php
├── routes
│ ├── api.php
│ ├── channels.php
│ ├── console.php
│ └── web.php
├── tailwind.config.js
├── tailwindcss-perspective.js
├── vite.config.js
└── vue.config.js
105 directories, 437 files
- Tree command can be installed using brew:
brew install tree
- File tree generated using command
tree -a -I '.git|node_modules|vendor|build|storage|tests|.DS_Store|.env'
Laravel-Spa is licensed under the MIT license. Enjoy!