A production-oriented monorepo for selling, licensing, updating, and securely distributing desktop software.
- Public software store built with Next.js, TypeScript, and Tailwind CSS.
- Customer portal for licenses, downloads, devices, billing, invoices, support, and notifications.
- Admin panel for products, builds, release workflows, customers, payments, licenses, devices, support, legal content, analytics, audit logs, and settings.
- FastAPI backend with PostgreSQL, Redis, Celery, Alembic, and MinIO-compatible storage.
- License server with device binding, entitlements, feature flags, offline tokens, policy rules, abuse detection, and asymmetric signing.
- Update server with signed manifests, release rollback, compatibility checks, channels, checksums, and platform-specific builds.
- Razorpay and PayPal payment architecture with strict webhook verification and invoice records.
- Documentation for setup, deployment, desktop integration, payments, backups, and roadmap.
- Copy
.env.exampleto.envand replace secrets before real use. - Start services:
docker compose up --build- Run migrations and seed data:
docker compose exec backend alembic upgrade head
docker compose exec backend python -m app.seed- Open:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000/docs
- MinIO console: http://localhost:9011
- Redis host port:
6380maps to container port6379
If the frontend ever looks unstyled after local builds, restart the frontend container. Docker Compose keeps the container .next cache separate from the host to avoid Windows/Linux build-cache conflicts.
Default seed accounts:
- Admin:
admin@example.com/AdminPass123! - Customer:
customer@example.com/CustomerPass123!
With Docker running and seed data loaded:
cd frontend
npm run qa:api
npm run qa:browser
npm run build
cd ../backend
python -B -m pytest tests -p no:cacheproviderThe browser QA command launches Microsoft Edge/Chromium headlessly, visits public, customer, and admin routes, and fails on HTTP errors, missing stylesheets, console warnings/errors, page errors, or failed asset requests.
Documentation should be updated with every implementation milestone. Git commits should be made after each meaningful update with clear messages.
See docs/ for detailed architecture and operations guides.
See docs/strict-completion-pass.md for the latest verified flow-completion report and remaining production-launch gaps.