For in-house solutions (or solutions where you have full control over the device) you can do it without NFC api in browsers (at least until it is available).
You will need to install Tasker app (paid, about 3 USD), which can create NFC read trigger, which then can open url like yourapp.com/{nfc_uid}. If YourApp is installed as PWA, you can select to open the url in the app instead of browser. This way it will look like the PWA is reading the NFC tag.
To make it work:
1. Install Tasker
2. Add new -> Event -> Network -> NFC Tag. Leave field blank and confirm (or just press back button)
3. Add new Task to this trigger: System -> Send intent
Action: android.intent.action.VIEW
Data: http://yourapp.com/%nfc_id
Extra: com.android.browser.application_id:yourapp
Target: Activity
4. Save
The reason we are not doing it using Task "Open url" is because we do not want to open new tab each time it is triggered.
If you have everything right and you scan NFC tag, your app should load with the NFC UID in url.