An experimental secondhand-book marketplace MVP. It is published as a code portfolio and is not a production service.
Midmann is a record of an early attempt to build too much infrastructure for an MVP. Its implementation is more complex than the problem required. I am publishing it rather than hiding it: the work is real, the mistakes are useful, and they have made me more deliberate about trade-offs in later projects.
- Frontend: React TypeScript (Vite) served via Nginx
- Backend: Actix-web (Rust)
- Database: PostgreSQL × 4 (user_credential, inventory, order, financial)
- File storage: MinIO
cp .env.example .env
docker compose up --build
| Service | Internal host | Port |
|---|---|---|
| Frontend (Nginx) | frontend | 80 |
| Backend (Actix) | backend | 8080 |
| DB — user_credential | postgres_user_credential | 5432 |
| DB — inventory | postgres_inventory | 5432 |
| DB — order | postgres_order | 5432 |
| DB — financial | postgres_financial | 5432 |
| MinIO | minio | 9000 |
No credentials, administrator account, AI-agent workspace, or large test dataset is included in this repository. The book-cover test corpus and Thai-address reference data were intentionally excluded from version control. Playwright listing tests automatically skip when the optional book dataset is unavailable.
Use the provided .env.example only as a local configuration template; create .env with unique values before starting the stack. The database-only compose files likewise require POSTGRES_PASSWORD in their environment.