diff --git a/README.md b/README.md
index 7791983..d1f2386 100644
--- a/README.md
+++ b/README.md
@@ -196,7 +196,8 @@ The registration APIs (`/api/register`, `/api/upload`) check the same switch on
Edit [`src/config/payment.ts`](src/config/payment.ts). The fee must match `REGISTRATION_FEE_INR` in
[`src/lib/security.ts`](src/lib/security.ts), which is what the server records. Then regenerate
`public/assets/upi-qr.svg` from the new `UPI_PAY_LINK` as a single byte-mode segment (see the comment in
-`payment.ts`), and scan it to check before deploying.
+`payment.ts`), and scan it to check before deploying. Until the organisers send the real QR, `upi-qr.svg` is a
+"coming soon" placeholder.
### Add gallery photos
diff --git a/public/assets/upi-qr.svg b/public/assets/upi-qr.svg
index adab88a..3b84f39 100644
--- a/public/assets/upi-qr.svg
+++ b/public/assets/upi-qr.svg
@@ -1 +1 @@
-
+
diff --git a/src/config/payment.ts b/src/config/payment.ts
index 992db4c..2b96656 100644
--- a/src/config/payment.ts
+++ b/src/config/payment.ts
@@ -4,7 +4,10 @@
* The server never reads these: POST /api/register always records REGISTRATION_FEE_INR from src/lib/security.ts.
* Keep REGISTRATION_FEE in step with it (a unit test checks they match).
*
- * public/assets/upi-qr.svg encodes UPI_PAY_LINK. If the UPI ID, payee name or fee changes, regenerate it from the new
+ * public/assets/upi-qr.svg is currently a non-scannable "PAYMENT QR / COMING SOON" placeholder; the organisers will
+ * supply the real QR (and its UPI ID and payee name, which must replace the values below) before registrations open.
+ *
+ * The real QR must encode UPI_PAY_LINK. If the UPI ID, payee name or fee changes, regenerate it from the new
* link as ONE byte-mode segment, error correction M, e.g. with the `qrcode` package:
* QRCode.toString([{ data: UPI_PAY_LINK, mode: 'byte' }], { type: 'svg', errorCorrectionLevel: 'M', margin: 1,
* color: { dark: '#0c0b0aff', light: '#ECE8DFff' } })