352 lines
7.5 KiB
Markdown
352 lines
7.5 KiB
Markdown
|
|
# 🎨 SkyArtShop - Production-Ready Architecture
|
||
|
|
|
||
|
|
**Modern, scalable full-stack web application with proper separation of concerns.**
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🏗️ Architecture Overview
|
||
|
|
|
||
|
|
```
|
||
|
|
SkyArtShop/
|
||
|
|
├── frontend/ # React + TypeScript + Vite
|
||
|
|
├── backend/ # Node.js + Express + Prisma
|
||
|
|
├── docs/ # Architecture documentation
|
||
|
|
└── setup.sh # Quick start script
|
||
|
|
```
|
||
|
|
|
||
|
|
### Frontend Stack
|
||
|
|
|
||
|
|
- **React 18** - Modern UI library
|
||
|
|
- **TypeScript** - Type safety
|
||
|
|
- **Vite** - Lightning-fast build tool
|
||
|
|
- **React Router** - Client-side routing
|
||
|
|
- **Axios** - HTTP client with interceptors
|
||
|
|
- **Tailwind CSS** - Utility-first styling
|
||
|
|
|
||
|
|
### Backend Stack
|
||
|
|
|
||
|
|
- **Node.js + Express** - Web server
|
||
|
|
- **TypeScript** - Type safety
|
||
|
|
- **Prisma ORM** - Type-safe database access
|
||
|
|
- **PostgreSQL** - Production database
|
||
|
|
- **JWT** - Authentication
|
||
|
|
- **Zod** - Request validation
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Quick Start
|
||
|
|
|
||
|
|
### Automated Setup (Recommended)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
./setup.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### Manual Setup
|
||
|
|
|
||
|
|
#### 1. Install Dependencies
|
||
|
|
|
||
|
|
**Frontend:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd frontend
|
||
|
|
npm install
|
||
|
|
```
|
||
|
|
|
||
|
|
**Backend:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd backend
|
||
|
|
npm install
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 2. Configure Environment
|
||
|
|
|
||
|
|
**Backend:** Update `backend/.env`:
|
||
|
|
|
||
|
|
```env
|
||
|
|
PORT=3000
|
||
|
|
DATABASE_URL="postgresql://user:password@localhost:5432/skyartshop"
|
||
|
|
JWT_SECRET=your-secret-key
|
||
|
|
CORS_ORIGIN=http://localhost:5173
|
||
|
|
```
|
||
|
|
|
||
|
|
**Frontend:** Update `frontend/.env`:
|
||
|
|
|
||
|
|
```env
|
||
|
|
VITE_API_URL=http://localhost:3000/api
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 3. Set Up Database
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd backend
|
||
|
|
npx prisma generate
|
||
|
|
npx prisma migrate dev
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 4. Start Development Servers
|
||
|
|
|
||
|
|
**Terminal 1 - Backend:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd backend
|
||
|
|
npm run dev
|
||
|
|
# Runs on http://localhost:3000
|
||
|
|
```
|
||
|
|
|
||
|
|
**Terminal 2 - Frontend:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd frontend
|
||
|
|
npm run dev
|
||
|
|
# Runs on http://localhost:5173
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📁 Project Structure
|
||
|
|
|
||
|
|
### Frontend Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
frontend/
|
||
|
|
├── src/
|
||
|
|
│ ├── @types/ # TypeScript definitions
|
||
|
|
│ ├── api/ # API client & endpoints
|
||
|
|
│ ├── assets/ # Images, fonts, icons
|
||
|
|
│ ├── components/ # Reusable UI components
|
||
|
|
│ ├── hooks/ # Custom React hooks
|
||
|
|
│ ├── pages/ # Page components (routes)
|
||
|
|
│ ├── routes/ # Router configuration
|
||
|
|
│ ├── templates/ # Page layouts
|
||
|
|
│ ├── themes/ # Design system
|
||
|
|
│ ├── utils/ # Helper functions
|
||
|
|
│ ├── validators/ # Form validation
|
||
|
|
│ ├── app.tsx # Root component
|
||
|
|
│ └── main.tsx # Entry point
|
||
|
|
├── index.html
|
||
|
|
├── vite.config.ts
|
||
|
|
├── tailwind.config.ts
|
||
|
|
└── package.json
|
||
|
|
```
|
||
|
|
|
||
|
|
### Backend Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
backend/
|
||
|
|
├── prisma/
|
||
|
|
│ └── schema.prisma # Database schema
|
||
|
|
├── src/
|
||
|
|
│ ├── @types/ # TypeScript definitions
|
||
|
|
│ ├── config/ # App configuration
|
||
|
|
│ ├── controllers/ # Request handlers
|
||
|
|
│ ├── services/ # Business logic
|
||
|
|
│ ├── models/ # Data access layer
|
||
|
|
│ ├── routes/ # API endpoints
|
||
|
|
│ ├── middlewares/ # Express middleware
|
||
|
|
│ ├── validators/ # Request validation
|
||
|
|
│ ├── helpers/ # Utility functions
|
||
|
|
│ └── server.ts # Entry point
|
||
|
|
├── tsconfig.json
|
||
|
|
└── package.json
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📚 Documentation
|
||
|
|
|
||
|
|
- **[ARCHITECTURE.md](docs/ARCHITECTURE.md)** - Complete architecture guide with examples
|
||
|
|
- **[STRUCTURE_COMPLETE.md](docs/STRUCTURE_COMPLETE.md)** - Structure comparison & overview
|
||
|
|
- **[frontend/readme.md](frontend/readme.md)** - Frontend documentation
|
||
|
|
- **[backend/readme.md](backend/readme.md)** - Backend documentation
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 Key Features
|
||
|
|
|
||
|
|
### ✅ Frontend Features
|
||
|
|
|
||
|
|
- Type-safe API client with automatic auth token injection
|
||
|
|
- Custom hooks for authentication and data fetching
|
||
|
|
- Protected routes with automatic redirect
|
||
|
|
- Centralized theming and design system
|
||
|
|
- Form validation matching backend schemas
|
||
|
|
- Utility functions for formatting and validation
|
||
|
|
|
||
|
|
### ✅ Backend Features
|
||
|
|
|
||
|
|
- Layered architecture (Controllers → Services → Models)
|
||
|
|
- JWT authentication with middleware
|
||
|
|
- Global error handling with consistent responses
|
||
|
|
- Request validation with Zod schemas
|
||
|
|
- Prisma ORM with type-safe queries
|
||
|
|
- Security middleware (Helmet, CORS, Compression)
|
||
|
|
- Request logging for debugging
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 How to Add a New Feature
|
||
|
|
|
||
|
|
See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for a complete step-by-step guide on adding the "Wishlist" feature.
|
||
|
|
|
||
|
|
### Quick Overview
|
||
|
|
|
||
|
|
**Backend:**
|
||
|
|
|
||
|
|
1. Update Prisma schema
|
||
|
|
2. Create service (business logic)
|
||
|
|
3. Create controller (request handler)
|
||
|
|
4. Add routes
|
||
|
|
5. Add validation
|
||
|
|
|
||
|
|
**Frontend:**
|
||
|
|
|
||
|
|
1. Add TypeScript types
|
||
|
|
2. Create API client methods
|
||
|
|
3. Create custom hook (optional)
|
||
|
|
4. Use in components
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔐 Security
|
||
|
|
|
||
|
|
- JWT authentication on protected endpoints
|
||
|
|
- Password hashing with bcrypt
|
||
|
|
- Input validation with Zod
|
||
|
|
- Security headers with Helmet
|
||
|
|
- CORS configured for specific origins
|
||
|
|
- SQL injection prevention via Prisma
|
||
|
|
- Client-side route protection
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🧪 Testing
|
||
|
|
|
||
|
|
### Frontend
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd frontend
|
||
|
|
npm run test:unit # Component tests
|
||
|
|
npm run test:integration # Hook tests
|
||
|
|
npm run test:e2e # End-to-end tests
|
||
|
|
```
|
||
|
|
|
||
|
|
### Backend
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd backend
|
||
|
|
npm run test:unit # Service tests
|
||
|
|
npm run test:integration # Route tests
|
||
|
|
npm run test:api # API tests
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚢 Deployment
|
||
|
|
|
||
|
|
### Frontend (Vercel/Netlify)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd frontend
|
||
|
|
npm run build
|
||
|
|
# Deploy dist/ folder
|
||
|
|
```
|
||
|
|
|
||
|
|
### Backend (Railway/Heroku/AWS)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd backend
|
||
|
|
npm run build
|
||
|
|
# Set environment variables
|
||
|
|
# Run: npm start
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🛠️ Development Scripts
|
||
|
|
|
||
|
|
### Frontend
|
||
|
|
|
||
|
|
```bash
|
||
|
|
npm run dev # Start dev server
|
||
|
|
npm run build # Production build
|
||
|
|
npm run preview # Preview production build
|
||
|
|
npm run lint # Run linter
|
||
|
|
```
|
||
|
|
|
||
|
|
### Backend
|
||
|
|
|
||
|
|
```bash
|
||
|
|
npm run dev # Start dev server (hot reload)
|
||
|
|
npm run build # Compile TypeScript
|
||
|
|
npm start # Run production server
|
||
|
|
npm run prisma:generate # Generate Prisma client
|
||
|
|
npm run prisma:migrate # Run migrations
|
||
|
|
npm run prisma:studio # Open Prisma Studio
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Tech Stack Summary
|
||
|
|
|
||
|
|
| Layer | Technology | Purpose |
|
||
|
|
|-------|-----------|---------|
|
||
|
|
| **Frontend** | React 18 | UI framework |
|
||
|
|
| | TypeScript | Type safety |
|
||
|
|
| | Vite | Build tool |
|
||
|
|
| | React Router | Routing |
|
||
|
|
| | Axios | HTTP client |
|
||
|
|
| | Tailwind CSS | Styling |
|
||
|
|
| **Backend** | Node.js + Express | Server |
|
||
|
|
| | TypeScript | Type safety |
|
||
|
|
| | Prisma | ORM |
|
||
|
|
| | PostgreSQL | Database |
|
||
|
|
| | JWT | Authentication |
|
||
|
|
| | Zod | Validation |
|
||
|
|
| **DevOps** | Git | Version control |
|
||
|
|
| | npm | Package management |
|
||
|
|
| | ESLint/Biome | Code quality |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 💡 Why This Architecture?
|
||
|
|
|
||
|
|
✅ **Scalable**: Clear separation enables independent scaling
|
||
|
|
✅ **Maintainable**: Each file has a single, clear responsibility
|
||
|
|
✅ **Testable**: Layers can be tested in isolation
|
||
|
|
✅ **Team-Friendly**: Multiple developers work without conflicts
|
||
|
|
✅ **Production-Ready**: Security, error handling, logging built-in
|
||
|
|
✅ **Type-Safe**: TypeScript catches bugs before runtime
|
||
|
|
✅ **Industry Standard**: Follows best practices from top companies
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🤝 Contributing
|
||
|
|
|
||
|
|
1. Create feature branch: `git checkout -b feature/name`
|
||
|
|
2. Follow folder structure conventions
|
||
|
|
3. Add tests for new features
|
||
|
|
4. Update documentation
|
||
|
|
5. Submit pull request
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📞 Support
|
||
|
|
|
||
|
|
- **Documentation**: See `docs/` folder
|
||
|
|
- **Issues**: Check existing issues or create new one
|
||
|
|
- **Questions**: Review architecture docs first
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📄 License
|
||
|
|
|
||
|
|
[Your License Here]
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Built with ❤️ using modern web technologies**
|
||
|
|
|
||
|
|
🎉 **Happy coding!**
|