A modern e-commerce platform celebrating handmade artistry
Live Demo β’ Features β’ Installation β’ Documentation
Crafted is a full-featured e-commerce platform built with Symfony 8 as a school project, designed to connect artisans with customers who appreciate authentic, handmade products. The platform demonstrates modern web development practices by bridging traditional craftsmanship concepts with cutting-edge technology.
This academic project showcases the implementation of a complete e-commerce solution with user authentication, order management, admin dashboard, and email notifications.
- Product Catalog - Browse handcrafted items with advanced filtering by category and artisan
- Shopping Cart - Real-time cart management with AJAX updates
- Secure Checkout - Complete order processing with email confirmations
- User Authentication - Registration, login with email verification
- Order Management - View order history, track status, and cancel pending orders
- User Profile - Manage account details, change password, and email
- Contact Form - Direct communication with validation and subject selection
- Returns System - Easy return request process
- Toast Notifications - Clean, non-intrusive feedback system
- Dashboard - Comprehensive overview of products, categories, and artisans
- Product Management - Full CRUD operations with image uploads
- Category Management - Organize products into categories
- Artisan Management - Manage artisan profiles and their stores
- Order Management - View, update status, and manage orders
- Batch Operations - Update multiple order statuses simultaneously
- Email Notifications - Automated order confirmation and status update emails
- Email Verification - Secure account activation system
- Password Hashing - Industry-standard password security
- CSRF Protection - Form security tokens
- Role-Based Access - Admin and user role management
- Account Deletion - Secure account removal with order validation
- Responsive Design - Mobile-first approach with Tailwind CSS
- Modern UI - Clean, elegant interface with smooth animations
- Toast Notifications - User-friendly feedback system
- Password Visibility Toggle - Enhanced form usability
- Form Validation - Client and server-side validation
- Loading States - Visual feedback for async operations
- Framework: Symfony 8.0
- Language: PHP 8.4
- Database: PostgreSQL 18 (Supabase)
- ORM: Doctrine ORM 3.5
- Email: Symfony Mailer with Gmail SMTP
- Validation: Symfony Validator
- Security: Symfony Security Bundle
- CSS Framework: Tailwind CSS 3.0
- JavaScript: Vanilla JS with Stimulus
- Build Tool: Webpack Encore
- Icons: SVG icons
- Fonts: System fonts
- Package Manager: Composer & npm
- Database Migrations: Doctrine Migrations
- Fixtures: Doctrine Fixtures
- Testing: PHPUnit
- Code Quality: PHP CS Fixer
- PHP 8.4 or higher
- Composer
- Node.js & npm
- PostgreSQL 18
- Symfony CLI (optional but recommended)
-
Clone the repository
git clone git@github.com:Yushi5058/crafted_symfony.git cd crafted_symfony -
Install PHP dependencies
composer install
-
Install JavaScript dependencies
npm install
-
Configure environment variables
cp .env .env.local
Edit
.env.localand configure:DATABASE_URL="postgresql://user:password@host:port/database" MAILER_DSN=smtp://email@gmail.com:app_password@smtp.gmail.com:587?encryption=tls
-
Create database and run migrations
php bin/console doctrine:database:create php bin/console doctrine:migrations:migrate
-
Load fixtures (optional)
php bin/console doctrine:fixtures:load
-
Build assets
npm run build # or for development with watch mode npm run watch -
Start the development server
symfony server:start # or php -S localhost:8000 -t public/ -
Create admin account
php bin/console app:create-admin
Visit http://localhost:8000 to see the application!
crafted_symfony/
βββ assets/ # Frontend assets (JS, CSS)
βββ bin/ # Executable scripts
βββ config/ # Configuration files
β βββ packages/ # Bundle configurations
β βββ routes/ # Routing configurations
βββ migrations/ # Database migrations
βββ public/ # Public web directory
β βββ images/ # Static images
β βββ index.php # Front controller
βββ src/
β βββ Command/ # Console commands
β βββ Controller/ # Application controllers
β βββ Entity/ # Doctrine entities
β βββ Form/ # Form types
β βββ Repository/ # Database repositories
β βββ Security/ # Security components
β βββ Service/ # Business logic services
βββ templates/ # Twig templates
β βββ admin/ # Admin panel views
β βββ cart/ # Shopping cart views
β βββ catalog/ # Product catalog views
β βββ checkout/ # Checkout process views
β βββ emails/ # Email templates
β βββ home/ # Homepage views
β βββ profile/ # User profile views
β βββ shared/ # Shared components
βββ tests/ # Test files
βββ var/ # Cache, logs, sessions
βββ vendor/ # Composer dependencies
- User - Customer and admin accounts
- Product - Handcrafted items for sale
- Category - Product categorization
- Artisan - Craftspeople information
- Order - Customer orders
- OrderItem - Individual items in orders
- CancelledOrder - Archive of cancelled orders
# Create admin user
php bin/console app:create-admin
# Reset admin password
php bin/console app:reset-admin-password
# Clear cache
php bin/console cache:clear
# Run migrations
php bin/console doctrine:migrations:migrate
# Load fixtures
php bin/console doctrine:fixtures:load
# Build assets
npm run build
# Watch assets for changes
npm run watch- Order Lifecycle: pending β processing β shipped β delivered
- Cancellation: Users can cancel pending/processing orders
- Email Notifications: Automated emails for order confirmation and status updates
- Admin Controls: Batch status updates and individual order management
- Registration: New users receive verification emails
- Profile Changes: Email changes require re-verification
- Resend Option: Users can request new verification emails
- Secure Tokens: Time-limited verification tokens
- AJAX Updates: Real-time cart modifications without page reload
- Session Storage: Cart persists across sessions
- Stock Validation: Prevents ordering out-of-stock items
- Visual Feedback: Toast notifications for cart actions
- Password Hashing: Bcrypt algorithm
- CSRF Protection: All forms protected
- Email Verification: Required for orders
- Role-Based Access: Admin-only routes
- SQL Injection Prevention: Doctrine ORM parameterized queries
- XSS Protection: Twig auto-escaping
Crafted follows a modern, minimalist design approach:
- Color Palette: Warm terracotta (#E76F51) and charcoal (#2E2E2E)
- Typography: Clean, readable fonts
- Spacing: Generous whitespace for clarity
- Animations: Subtle transitions for smooth UX
- Accessibility: Semantic HTML and ARIA labels
The application uses Gmail SMTP for sending emails. To configure:
- Enable 2-factor authentication on your Gmail account
- Generate an App Password
- Update
.env.local:MAILER_DSN=smtp://your-email@gmail.com:your-app-password@smtp.gmail.com:587?encryption=tls
This is a school project. Contributions and feedback are welcome for educational purposes!
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is for educational purposes only.
- Symfony community for the framework
- Tailwind CSS for the utility-first CSS framework
- All artisans who inspire this platform
- Open-source contributors
- Our teachers and classmates for their support
Crafted - Where tradition meets technology