You get a lot of features, but not all of them. We've just fully migrated a web app to a native app. Reasons:
1. Camera is an absolute pain on web - you can take photos, but when you want to deal with things like EXIF data, cropping, zoom, and every device has multiple front cameras now.
2. File systems are a pain. Where does it go when you download? Are you planning on using a cache? Offline database? OK, great, your hack works. Now try again with the new Android 10 scoped storage.
3. Can't easily handle things like calls.
4. RAM usage by browsers can be massive, this is part of the reason for the lag.
5. App Store optimization is easier and more effective than SEO. You can create a shell around your app, sure but you still should upload it and you have to go through quality control processes.
6. DOM manipulation and UI is much harder than on native. If you're using a template, it works, but if you want custom UI, it's a lot easier to control on an app. Even small things like toasts. CSS is hard enough on desktop, try web browsers. And then create a "back stack" on top of your app.
7. You can use something like Cordova, but bits and pieces go obsolete every few months. And making Cordova plugins is an absolute nightmare. I did something in 3 days native recently which I couldn't do in 3 weeks previously.
8. Multithreading, e.g. an app that supports chat or a download queue.
Pros of web app:
1. Prototypes and MVPs are a lot faster. npm has most utilities. And there's custom templates for everything.
2. It's easier to integrate other web functionality, e.g. Facebook posts and TikTok.
3. Architecture is "flat" on a SPA. So you can access something 3 pages back easily, or do something like change data on every page. Whereas native architecture often has several layers. Duck typing is a nice feature.