I would describe Astro as a static site generator at is core. You write code with the optional use of templates, which are then later transformed to real optimized HTML pages. However, this description would be a little bit unfair for the framework as it can do more. Astro can render interactive parts of pages in addition to true static page HTML generation. But how to display interactive elements in static files? This question plagues the web community for a very long time.
The quest for interactivity
Multipage applications are the traditional way of doing things in the web. In the old days, you wanted to avoid to run code on the client because of the slow and complicated execution. Multipage applications often come bundled with a backend server. When the user visits the site, the server generates the HTML page with the most recent content. Also, you can do all sorts of data fetching from the database and user authentication on the server.
Dynamic to static
Islands and their use
Furthermore, Astro offers a very interesting feature for blogs: creating pages with Markdown. This allows you to simply create a new Markdown file for a single page, which is then converted to HTML in the build process.
So, what is Astro? I would describe it in its current form as a static site generator with fantastic possibilities for interactivity. Astro can also do server side rendering and many other features. But still, the core is semi-dynamic sites. This is where Astro can shine.