Make GitLab a PWA
We should aim to make GitLab a PWA!
Started here: https://gitlab.com/gitlab-org/gitlab-ce/issues/18669#note_32135215
This may not be as simple as a hybrid app, it might not even be as simple as having a very good mobile dev put together a native app but the biggest win IMO is that the work to make GitLab a valid PWA is work that is maintained within one code base and therefore is code that improves the experience for everyone using that software, no matter what device they're on. For example, sure, desktops don't have a "home screen", so they might not be able to have that benefit, but they would still benefit from the high performance standards of a PWA and modern patterns like offline support and service workers.
I decided to convert the checklist (https://developers.google.com/web/progressive-web-apps/checklist) to a GFM tasklist.
Key: - [ ] [title] | [further description]
-
Site is served over HTTPS | Use Lighthouse to verify Served over HTTPS
-
Pages are responsive on tablets & mobile devices | Use Lighthouse to verify Yes to all of Design is mobile-friendly, although manually checking can also be helpful. Check the Mobile Friendly Test
-
The start URL (at least) loads while offline | Use Lighthouse to verify URL responds with a 200 when offline.
-
Metadata provided for Add to Home screen | Use Lighthouse to verify User can be prompted to Add to Home screen is all Yes.
-
First load fast even on 3G | Use Lighthouse on a Nexus 5 (or similar) to verify time to interactive <10s for first visit on a simulated 3G network.
-
Site works cross-browser | Test site in Chrome, Edge, Firefox and Safari
-
Page transitions don't feel like they block on the network
-
Each page has a URL | Ensure individual pages are deep linkable via the URLs and that URLs are unique for the purpose of shareability on social media by testing with individual pages can be opened and directly accessed via new browser windows.
-
Site's content is indexed by Google | Use the Fetch as Google tool to preview how Google will see your site when it is crawled.
-
Schema.org metadata is provided where appropriate
-
Social metadata is provided where appropriate | Open a representative page in Facebook's crawler and ensure it looks reasonable. Check that Twitter Cards meta data is present (for example ) if you feel it would be appropriate.
-
Canonical URLs are provided when necessary
-
Pages use the History API | For single page apps, ensure the site doesn't use fragment identifiers. For example everything after the #! in https://example.com/#!user/26601.
-
Content doesn't jump as the page loads | Load various pages in the PWA and ensure content or UI doesn't "jump" as the page loads.
-
Pressing back from a detail page retains scroll position on the previous list page | Find a list view in the app. Scroll down. Tap an item to enter the detail page. Scroll around on the detail page. Press back and ensure the list view is scrolled to the same place it was at before the detail link/button was tapped.
-
When tapped, inputs aren't obscured by the on screen keyboard | Find a page with text inputs. Scroll to put the text input as low on the screen as you can make it. Tap the input and verify it is not covered when the keyboard appears.
-
Content is easily sharable from standalone or full screen mode | Ensure from standalone mode (after adding the app to your home screen) that you are able to share content, if appropriate, from within the app's UI.
-
Site is responsive across phone, tablet and desktop screen sizes | View the PWA on small, medium and large screens and ensure it works reasonably on all.
-
Any app install prompts are not used excessively | Check the PWA doesn't use an app install interstitial when loaded
-
The Add to Home Screen prompt is intercepted | Check the browser doesn't display the A2HS at an inopportune moment, such as when the user is in the middle of a flow that shouldn't be interrupted, or when another prompt is already displayed on the screen.
-
First load very fast even on 3G | Use Lighthouse on a Nexus 5 (or similar) to verify time to interactive <5s for first visit on a simulated 3G network (as opposed to the 10s goal for baseline PWAs)
-
Site uses cache-first networking | Set the network emulation to the slowest setting and browse around the app. Then, set the network emulation to offline and browse around. The app should not feel faster when offline than on a slow connection.
-
Site appropriately informs the user when they're offline | Emulate an offline network and verify the PWA provides an indication that you are offline.
-
Provide context to the user about how notifications will be used | Visit the site, and find the push notifications opt-in flow When you are shown the permission request by the browser, ensure that context has been provided explaining what the site wants the permission for. If the site is requesting for the permission on page load, ensure it provides very clear context simultaneously for why the user should enable push notifications.
-
UI encouraging users to turn on Push Notifications must not be overly aggressive. | Visit the site and find the push notifications opt in flow. Ensure that if you dismiss or decline to turn on push notifications that the site does not re-prompt in the same way within the same session.
-
Site dims the screen when permission request is showing | Visit the site and find the push notifications opt-in flow. When Chrome is showing the permission request, ensure that the page is "dimming" (placing a dark overlay over) all content not relevant to explaining why the site needs push notifications.
-
Push notifications must be timely, precise and relevant | Enable push notifications from the site and ensure the use cases they're using the push notifications for are: Timely — A timely notification is one that appears when users want it and when it matters to them. Precise — A precise notification is one that has specific information that can be acted on immediately. Relevant — A relevant message is one about people or subjects that the user cares about.
-
Provides controls to enable and disable notifications | Enable push notifications from the site. Ensure there is some place on the site that allows you to manage your notifications permissions or disable them.
-
User is logged in across devices via Credential Management API
-
User can pay easily via native UI from Payment Request API.