A modern, full-stack Laravel + Vue.js starter kit with TypeScript, Tailwind CSS v4, and shadcn-vue components.
- Backend: Laravel 12 with PHP 8.2+
- Frontend: Vue.js 3 with TypeScript
- Styling: Tailwind CSS v4 with CSS Variables
- UI Components: shadcn-vue (New York style)
- Enhanced Components: Inspira UI for advanced animations and interactions
- Theme System: TweakCN themes for consistent design patterns
- Icons: Lucide Vue Next
- Build Tool: Vite 7 with SSR support
- Testing: Pest PHP for backend testing
- Media Management: Spatie Laravel MediaLibrary
- Modern Landing Page: Hero section with particle effects, features, testimonials, and CTA
- Dashboard Components: Stats overview, recent activity, quick actions, system status
- Avatar Upload: Instant file upload with image conversions and fallback generation
- Responsive Design: Mobile-first approach with adaptive layouts
- Dark/Light Mode: System preference detection with manual toggle
- Component Library: 40+ shadcn-vue components pre-configured
- Advanced Animations: Inspira UI components for enhanced user interactions
- Consistent Theming: TweakCN theme patterns across all components
- Animation: tw-animate-css for smooth interactions
- Traditional Auth: Email/password login and registration with first_name/last_name
- Social Login: Google, Facebook, and GitHub OAuth integration
- Email Verification: Built-in email verification system
- Password Reset: Secure password reset functionality
- Session Management: Laravel's built-in session handling
- CSRF Protection: Automatic CSRF token validation
- TypeScript: Full type safety across the stack
- Code Quality: ESLint, Prettier, and Laravel Pint
- Hot Reload: Instant development feedback with Vite
- Path Aliases: Clean imports with
@/aliases - Concurrency: Multi-process development with one command
- SSR Ready: Server-side rendering support
- PHP 8.2 or higher
- Node.js 18 or higher
- Composer
- Database (MySQL, PostgreSQL, SQLite)
-
Clone the repository
git clone git@github.com:creolab/creo-starter.git cd creo-starter -
Install dependencies
composer install npm install
-
Environment setup
cp .env.example .env php artisan key:generate
-
Database setup
# Configure your database in .env, then: php artisan migrate --seed -
Start development
composer run dev
This single command starts:
- Laravel development server (port 8000)
- Queue worker
- Log monitoring
- Vite dev server with HMR
Configure OAuth applications and add credentials to your .env:
# Google OAuth
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=http://localhost:8000/auth/google/callback
# Facebook OAuth
FACEBOOK_CLIENT_ID=your_facebook_client_id
FACEBOOK_CLIENT_SECRET=your_facebook_client_secret
FACEBOOK_REDIRECT_URI=http://localhost:8000/auth/facebook/callback
# GitHub OAuth
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
GITHUB_REDIRECT_URI=http://localhost:8000/auth/github/callbackFor detailed setup instructions, see SOCIAL_LOGIN_SETUP.md.
creo-starter/
βββ app/
β βββ Http/Controllers/Auth/ # Authentication controllers
β β βββ SocialLoginController.php
β β βββ ...
β βββ Http/Controllers/Settings/ # Settings controllers
β β βββ AvatarController.php # Avatar upload handling
β β βββ ...
β βββ Models/
β βββ User.php # User model with MediaLibrary integration
βββ resources/
β βββ js/
β β βββ components/
β β β βββ auth/ # Authentication components
β β β βββ dashboard/ # Dashboard components
β β β βββ homepage/ # Landing page components
β β β βββ ui/ # shadcn-vue components
β β β βββ AvatarUpload.vue # Avatar upload component
β β β βββ UserAvatar.vue # User avatar display component
β β βββ layouts/ # Layout components
β β βββ pages/ # Page components
β β βββ composables/ # Vue composables
β βββ css/
β βββ app.css # Tailwind v4 configuration
β βββ themes/ # Theme definitions
βββ routes/
β βββ web.php # Web routes
β βββ auth.php # Authentication routes
β βββ settings.php # Settings routes
βββ tests/ # Pest PHP tests
- StatsOverview: Revenue, subscriptions, sales metrics with trend indicators
- RecentActivity: User activity feed with avatars and real-time updates
- QuickActions: Common admin actions with responsive grid layout
- SystemStatus: Real-time system health monitoring with progress bars
- HomepageHeader: Navigation with theme switcher and dynamic auth links
- HeroSection: Landing page hero with gradient backgrounds, particle effects, and CTAs
- FeaturesSection: Product feature showcase with hover animations
- TestimonialsSection: Customer testimonials with avatar integration
- CTASection: Final call-to-action with compelling messaging
- SocialLoginButtons: Google, Facebook, GitHub login with neutral styling
- AvatarUpload: Instant file upload with drag-and-drop support
- UserAvatar: Smart avatar display with fallback generation
- Responsive auth forms with validation and error handling
- Password reset flows with email verification
- Profile Settings: First name, last name, email management
- Avatar Management: Upload, crop, and remove profile pictures
- Password Change: Secure password update functionality
- Account Deletion: Soft delete with confirmation flows
- Instant Upload: Files upload immediately when selected
- Image Conversions: Automatic thumbnail generation (150x150, 50x50)
- Format Support: JPEG, PNG, GIF, WebP up to 2MB
- Fallback Avatars: Generated from user initials using UI Avatars
- Real-time Updates: Avatar changes reflect immediately across the app
<!-- Avatar Upload Component -->
<AvatarUpload :user="currentUser" />
<!-- Avatar Display Component -->
<UserAvatar :user="user" size="large" show-name />// User model with MediaLibrary
class User extends Authenticatable implements HasMedia
{
use InteractsWithMedia;
public function registerMediaCollections(): void
{
$this->addMediaCollection('avatar')
->singleFile()
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp']);
}
public function registerMediaConversions(?Media $media = null): void
{
$this->addMediaConversion('thumb')
->width(150)->height(150);
$this->addMediaConversion('small')
->width(50)->height(50);
}
}# Development
composer run dev # Start all services
php artisan serve # Laravel server only
php artisan migrate:fresh --seed
# Code quality
./vendor/bin/pint # Format PHP code
php artisan test # Run tests
# Media Library
php artisan storage:link # Link storage for media files
# Production
php artisan optimize # Optimize for production# Development
npm run dev # Vite dev server
npm run build:ssr # Build with SSR
# Code quality
npm run lint # ESLint
npm run format # Prettier
npm run format:check # Check formattingThe project uses Pest PHP for elegant testing:
php artisan test # Run all tests
php artisan test --coverage # With coverage
php artisan test --filter Auth # Specific tests
php artisan test --filter Avatar # Avatar upload testsTest categories:
- Feature Tests: Authentication, dashboard, settings, avatar upload
- Unit Tests: Individual component testing
The project uses the latest Tailwind CSS v4 with:
- CSS Variables: Full theme customization
- No Config File: Configuration in
app.css - Design Tokens: Consistent spacing and colors
- Dark Mode: Automatic system detection
Pre-configured with:
- New York Style: Clean, modern aesthetic
- TypeScript: Full type safety
- Customizable: Easy theme modifications
- Accessible: ARIA compliant components
Enhanced components with advanced animations:
- Particle Backgrounds: Interactive particle systems for hero sections
- Advanced Animations: Smooth micro-interactions
- Performance Optimized: Efficient canvas-based animations
- Theme Aware: Automatically adapts to light/dark modes
Consistent design patterns from TweakCN:
- Color Palettes: Carefully curated color schemes
- Component Variations: Alternative styling options
- Design Systems: Cohesive visual patterns
- Responsive Layouts: Mobile-first design principles
// Use the appearance composable
import { useAppearance } from '@/composables/useAppearance'
const { appearance, updateAppearance } = useAppearance()
// Set theme: 'light', 'dark', or 'system'
updateAppearance('dark')components.json- shadcn-vue configurationvite.config.ts- Build configurationtsconfig.json- TypeScript settingsresources/css/app.css- Tailwind v4 configconfig/services.php- OAuth providers
APP_NAME=Creo
APP_ENV=local
APP_URL=http://localhost:8000
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=creo_starter
# Storage configuration for media files
FILESYSTEM_DISK=local
# Social login credentials (see setup guide)
GOOGLE_CLIENT_ID=
FACEBOOK_CLIENT_ID=
GITHUB_CLIENT_ID=-- Core user fields
id, email, email_verified_at, password, remember_token
first_name, last_name -- Separate name fields
-- Social login integration
facebook_id, google_id, github_id (nullable, indexed)
-- Timestamps
created_at, updated_at-- File storage and metadata
id, model_type, model_id, uuid, collection_name
name, file_name, mime_type, disk, conversions_disk
size, manipulations, custom_properties, generated_conversions
responsive_images, order_column, created_at, updated_atnpm run build:ssr # Build frontend with SSR
php artisan optimize # Optimize Laravel
php artisan storage:link # Link storage directory- Vercel: Optimized for seamless deployment
- Netlify: Static site generation support
- Laravel Forge: Traditional Laravel hosting with media storage
- Docker: Container-ready setup
For production, configure cloud storage:
# AWS S3 Configuration
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=your_key
AWS_SECRET_ACCESS_KEY=your_secret
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=your_bucket- β Avatar Upload System: Instant file upload with MediaLibrary integration
- β User Name Structure: Separated into first_name and last_name fields
- β Enhanced Components: Improved UserAvatar and AvatarUpload components
- β Better Registration: Side-by-side first/last name fields
- β Type Safety: Updated TypeScript definitions for new user structure
- β Social Authentication: Google, Facebook, GitHub OAuth
- β Smart User Linking: Existing email accounts automatically linked
- β Neutral UI: Consistent social login button styling
- β Responsive Design: Mobile-optimized authentication flows
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- PHP: Laravel Pint (PSR-12)
- TypeScript/Vue: ESLint + Prettier
- Commits: Conventional commit messages
This project is open-sourced software licensed under the MIT license.
Built with these amazing technologies:
- Laravel - The PHP framework for web artisans
- Vue.js - The progressive JavaScript framework
- Inertia.js - The modern monolith
- Tailwind CSS - Utility-first CSS framework
- shadcn-vue - Beautiful Vue components
- Inspira UI - Advanced component animations and interactions
- TweakCN - Consistent design themes and patterns
- Lucide - Beautiful & consistent icons
- Vite - Next generation frontend tooling
- Spatie MediaLibrary - File management
Documentation β’ Issues β’ Discussions
Made with β€οΈ by the Creo team