Status: ✅ MVP Complete - Ready for Deployment
A comprehensive platform connecting homeowners with verified craftsmen (Handwerker) in Germany.
This platform solves a critical problem in Germany: finding reliable, available craftsmen for home repairs and renovations. With average wait times of 6-12 months and difficulty finding available professionals, both homeowners and craftsmen lose out.
For Homeowners: Find and book verified craftsmen quickly, track work progress, and pay securely.
For Craftsmen: Get more customers, manage bookings efficiently, and receive payments automatically.
- Search & Filter: Find craftsmen by trade, location, rating, and hourly rate
- View Profiles: See detailed craftsman profiles with portfolios, ratings, and reviews
- Book Online: Request bookings with job details and preferred dates
- Track Progress: Monitor booking status from pending to completion
- In-App Messaging: Communicate directly with craftsmen
- Rate & Review: Leave detailed feedback after job completion
- Secure Payments: Pay through Stripe with platform protection
- Professional Profile: Company info, bio, hourly rate, service areas, and portfolio
- Job Management: Accept/reject booking requests, set schedules
- Calendar System: Manage availability and upcoming jobs
- Portfolio Showcase: Upload photos of completed work
- Customer Communication: Message homeowners directly
- Automated Payments: Receive payouts automatically after job completion
- Reputation Building: Collect reviews and build ratings
- User Authentication: Secure JWT-based authentication for both roles
- Dual User Roles: Separate interfaces for homeowners and craftsmen
- Search & Discovery: Advanced filtering by trade, location, price, and rating
- Booking Lifecycle: Complete workflow from request to payment
- Review System: Verified reviews with detailed ratings
- Messaging: Real-time communication within bookings
- Stripe Payments: Integrated payment processing with Stripe Connect
- Payment Escrow: Secure payment holding until job completion
- Automated Payouts: Automatic transfers to craftsmen after completion
- Verification System: Document upload and Handwerkskammer verification
- Commission System: Automatic 12% platform fee calculation
- GDPR Compliant: Built for German market compliance
- Framework: FastAPI 0.109
- Language: Python 3.11
- Database: PostgreSQL 15 (async with SQLAlchemy 2.0)
- Cache: Redis 7
- Authentication: JWT with bcrypt password hashing
- Payments: Stripe Connect
- Email: SMTP (Gmail/SendGrid)
- Deployment: Docker & Docker Compose
- Containerization: Docker
- Orchestration: Docker Compose
- Web Server: Nginx (reverse proxy)
- SSL: Let's Encrypt (certbot)
- Hosting: Hetzner Cloud VPS (€5.83/month)
- Python 3.11+
- Docker & Docker Compose
- PostgreSQL 15
- Redis 7
# Clone repository
git clone https://github.com/dmankovsky/handwerker-platform.git
cd handwerker-platform
# Create environment file
cp .env.example .env
# Update .env with your configuration
# - Generate SECRET_KEY: python -c "import secrets; print(secrets.token_urlsafe(32))"
# - Add your Gmail App Password for SMTP
nano .env
# Start services with Docker
docker-compose up -d
# Wait for services to start
sleep 15
# Initialize database
docker-compose exec app python -m app.core.init_db
# Check services are running
docker-compose ps- API: http://localhost:8000
- Interactive API Docs: http://localhost:8000/docs
- Alternative Docs: http://localhost:8000/redoc
- Health Check: http://localhost:8000/health
POST /api/auth/register- Register new user (homeowner/craftsman)POST /api/auth/login- Login with email/passwordGET /api/auth/me- Get current user info
POST /api/craftsman/profile- Create craftsman profileGET /api/craftsman/profile/me- Get my profilePUT /api/craftsman/profile- Update profileGET /api/craftsman/search- Search craftsmen with filtersGET /api/craftsman/{id}- Get craftsman profilePOST /api/craftsman/trades- Add tradePOST /api/craftsman/service-areas- Add service areaPOST /api/craftsman/portfolio- Add portfolio item
POST /api/bookings/- Create booking requestGET /api/bookings/- Get my bookingsGET /api/bookings/{id}- Get booking detailsPUT /api/bookings/{id}/accept- Accept booking (craftsman)PUT /api/bookings/{id}/reject- Reject booking (craftsman)PUT /api/bookings/{id}/start- Start workPUT /api/bookings/{id}/complete- Complete workPUT /api/bookings/{id}/cancel- Cancel booking
POST /api/reviews/- Create reviewGET /api/reviews/craftsman/{id}- Get craftsman reviewsGET /api/reviews/booking/{id}- Get booking reviewPUT /api/reviews/{id}- Update reviewPOST /api/reviews/{id}/respond- Respond to review (craftsman)
POST /api/messages/- Send messageGET /api/messages/threads- Get all message threadsGET /api/messages/booking/{id}- Get booking messagesPUT /api/messages/{id}/read- Mark message as readGET /api/messages/unread-count- Get unread count
Full API documentation: See API_DOCUMENTATION.md
- Commission: 12% fee on completed bookings
- Premium Craftsman Tier: €29/month for:
- Priority in search results
- Enhanced profile features
- Lower commission rate (10%)
- Advanced analytics
- Free: Create profile, receive booking requests
- Commission: 12% per completed job
- Premium: €29/month + 10% commission
- TAM: 41M households in Germany
- Craftsmen: ~1M registered professionals
- Market Size: €400B annual home improvement spending
- Average wait time: 6-12 months for appointments
| Metric | Year 1 | Year 2 | Year 3 |
|---|---|---|---|
| Craftsmen | 100 | 500 | 2,000 |
| Bookings/Month | 500 | 2,500 | 10,000 |
| Avg. Booking | €1,000 | €1,000 | €1,000 |
| Monthly Revenue | €5,000 | €25,000 | €100,000 |
| Annual Revenue | €60K | €300K | €1.2M |
- User: Authentication and profile (homeowner/craftsman/admin)
- CraftsmanProfile: Business information, rates, verification
- Trade: Trades offered by craftsman (electrician, plumber, etc.)
- ServiceArea: Geographic coverage (postal codes, cities)
- Portfolio: Work examples with photos
- Booking: Job requests and scheduling
- Review: Ratings and feedback
- Payment: Transaction tracking with Stripe
- Message/MessageThread: In-app communication
Follow the comprehensive deployment guide: DEPLOYMENT_GUIDE.md
Estimated time: 2-3 hours Monthly cost: €6.66 (VPS + domain)
# 1. Create Hetzner CX21 server
# 2. SSH into server
ssh root@YOUR_SERVER_IP
# 3. Run deployment script
curl -sSL https://raw.githubusercontent.com/dmankovsky/handwerker-platform/main/deploy.sh | bash
# 4. Configure domain and SSL
# See DEPLOYMENT_GUIDE.md for detailshandwerker-platform/
├── app/
│ ├── api/ # API endpoints
│ │ ├── auth.py # Authentication
│ │ ├── craftsman.py # Craftsman profiles
│ │ ├── booking.py # Booking management
│ │ ├── review.py # Reviews and ratings
│ │ └── message.py # Messaging
│ ├── core/ # Core functionality
│ │ ├── config.py # Configuration
│ │ ├── database.py # Database setup
│ │ ├── security.py # Auth utilities
│ │ └── init_db.py # DB initialization
│ ├── models/ # Database models
│ │ ├── user.py
│ │ ├── craftsman.py
│ │ ├── booking.py
│ │ ├── review.py
│ │ ├── payment.py
│ │ └── message.py
│ ├── schemas/ # Pydantic schemas
│ │ ├── user.py
│ │ ├── craftsman.py
│ │ ├── booking.py
│ │ ├── review.py
│ │ └── message.py
│ └── main.py # FastAPI application
├── alembic/ # Database migrations
├── tests/ # Unit and integration tests
├── docker-compose.yml # Docker services
├── Dockerfile # Application container
├── requirements.txt # Python dependencies
├── .env.example # Environment template
└── README.md # This file
# Run all tests
docker-compose exec app pytest
# Run specific test file
docker-compose exec app pytest tests/test_auth.py
# Run with coverage
docker-compose exec app pytest --cov=app# Create new migration
docker-compose exec app alembic revision --autogenerate -m "description"
# Apply migrations
docker-compose exec app alembic upgrade head
# Rollback migration
docker-compose exec app alembic downgrade -1# All services
docker-compose logs -f
# Specific service
docker-compose logs -f app
# Last 100 lines
docker-compose logs --tail=100 app- User authentication (homeowner + craftsman)
- Craftsman profiles with trades and service areas
- Search and filtering
- Booking system with lifecycle management
- Reviews and ratings
- In-app messaging
- Database models and API endpoints
- Docker deployment setup
- ✅ Stripe Connect integration
- ✅ Payment intent system with escrow
- ✅ Automated payouts to craftsmen
- ✅ Handwerkskammer verification system
- ✅ Document upload for verification
- ✅ Email notification system
- ✅ Real-time notifications (WebSocket)
- ✅ Multi-language support (German + English)
- Frontend web application (React)
- Mobile apps (React Native)
- Calendar integration
- SMS notifications
- Advanced analytics dashboard
- Performance optimization
- Caching strategies
- Rate limiting
- Admin panel
- Dispute resolution system
- Insurance integration
- Marketing automation
Contributions are welcome! Please follow these steps:
- 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
- Follow PEP 8 for Python code
- Use type hints
- Write docstrings for functions
- Keep functions small and focused
- Write tests for new features
This project is licensed under the MIT License - see the LICENSE file for details.
For questions, issues, or suggestions:
- GitHub Issues: https://github.com/dmankovsky/handwerker-platform/issues
- Email: support@handwerker-platform.de
- Developer: @dmankovsky
Part of the German IT solutions suite:
-
Termin-Notify: Automated appointment notifications for German government services
- Repository: https://github.com/dmankovsky/termin-notify
- Status: Production-ready
-
Handwerker Platform: This project
- Repository: https://github.com/dmankovsky/handwerker-platform
- Status: MVP complete
- Built with FastAPI
- Database with PostgreSQL
- Payments by Stripe
- Deployed on Hetzner Cloud
Ready to connect craftsmen with customers in Germany! 🇩🇪 🔨
For deployment instructions, see DEPLOYMENT_GUIDE.md. For API documentation, see API_DOCUMENTATION.md.