A mobile-first PWA platform connecting foreign tourists and small Thai vendors through QR-driven store access, Omise payment integration, and PIN pickup verification.
- Backend: Python, Django, Django REST Framework, PostgreSQL, JWT authentication
- Frontend: Next.js, Tailwind CSS, PWA support
- Payments: Omise integration with tokenized charge flow
- Roles: Tourist, Vendor, Admin
backend/- Django API and payment integrationfrontend/- React/Next.js PWA UI
- Create
.envfrom.env.example - Install dependencies
cd backend python -m venv venv venv\Scripts\activate pip install -r requirements.txt
- Run migrations
python manage.py migrate
- Create superuser
python manage.py createsuperuser
- Start development server
python manage.py runserver
- Install dependencies
cd frontend npm install - Start development server
npm run dev
- Build and start containers
docker compose up --build
- Backend API:
http://localhost:8000 - Frontend PWA:
http://localhost:3000
POST /api/auth/register/tourist/POST /api/auth/register/vendor/POST /api/auth/login/POST /api/auth/refresh/GET /api/store/vendor/{vendor_id}/GET /api/store/products/POST /api/store/products/GET /api/store/orders/POST /api/store/orders/POST /api/payments/charge/POST /api/payments/webhook/
- Omise card data is tokenized in the frontend, and the backend only stores charge IDs and statuses.
- Vendor QR code paths are generated as
/store/{vendor_id}. - PIN verification is implemented on the order endpoint and updates order status to
COMPLETED.