Welcome to the community.
Generally as a beginner in Panel I would start by getting the functionality and content in place. It is much easier with some experience and the content in place to take a step back and design+architect your application.
As a “beginner” in Panel I would pick a prebuilt template. And the Fast templates are the most mature ones, so I would go with one of those, for example FastListTemplate
Widget for top menu
Again if you are a beginner I would use something built into Panel like the MenuButton.
But if you are using the FastTemplates you can also add a html based menu to the sidebar as I do at awesome-panel.org awesome-panel/awesome_panel/config at a7132ee906f5047e03403e3836e9c0371bcbe9b2 · MarcSkovMadsen/awesome-panel · GitHubinit.py#L104
You might also be able to find a good menu component or example somewhere and then integrate it with Panel using ReactiveHTML.
Difference between FastGridTemplate and using GridSpec?
The layout of the FastGridTemplate is static once it has been rendered initially. You cannot change it later. Then it also adds a “maximize” button to each item in the grid and some fast styling. It also saves the users layout when ever its changed and stores it in the browsers local storage. So it has lots of functionality but is static.
The GridSpec is dynamic and can be changed based on user interaction. For example you can have a user use a slider to determine the number of columns or rows dynamically in the GridSpec.
Reference for multipage apps
My site https://awesome-panel.org is a Panel multipage app. It might add a bit more complexity than you want because I want each app to automatically add a top card with information about the app.
Share variable state
You can share variable state across users/ session using
pn.state.cache. Its a simple dictionary you can use.
Personally I use DiskCache a lot to persist dataframes etc either for ever or for some time to live.
A very powerful way to save the state of a single users session is to use
pn.state.location. With that you can sync widgets to url parameters. Its so nice to be able to bookmark an app with a specific state and even send a link for colleagues to check out the exact view. There is an example here Sync Location
panel serve *.py
--glob. That should make it expand the glob
You can deploy Panel in the same places as Bokeh and Streamlit can be deployed. They all use web sockets. Most deployment options support that, but sometimes you will have to turn it on.
Here is a great blog post by @sophiamyang about deployment to Google App Engine.
Deploy a Python Visualization Panel App to Google Cloud App Engine | by Sophia Yang.
Sample app to study
Its a great question. You might be able to find some in the awesome-list. But you might also be able to find some by browsing the twitter feed of Panel.
But I see this request once in a while and maybe it was something for Panel to provide one day @philippjfr ?
The best advice I can give is to try it out. When you run into issues then break your questions into minimum, reproducible code examples and ask here in Discourse. I’m sure some one will help.