Choosing a Stack: Astro, FastAPI, PostgreSQL

Choosing technologies is one of the first decisions that defines everything that follows. For Steforge, the stack was chosen based on several criteria: simplicity, performance, maturity, and suitability for solo development.

Public Layer: Astro

The blog and product showcase are static content. Here, React is not needed, Next.js is not needed, and server-side rendering on every request is unnecessary.

Astro fits perfectly:

  • Content Collections — typed content with validation
  • MDX — interactive components right in the articles
  • Static Generation — fast loading, minimal hosting
  • Island Architecture — JavaScript only where needed

Two domains (steforge.ru and steforge.com) are built from a single project with language filtering.

System Layer: FastAPI + PostgreSQL

User dashboard, billing, application catalog — this is already backend. Here, the choice fell on Python:

  • FastAPI — fast, typed, asynchronous
  • SQLAlchemy Async — ORM with async/await support
  • Alembic — database migrations
  • PostgreSQL — reliable DBMS, storage in Russia

Why Not Monolith

Each MVP in the ecosystem is a separate service. This is a conscious decision:

  • One failed MVP does not bring down the others
  • Each service can be updated independently
  • Easier to control expenses for each product

The Gateway routes traffic, while auth and billing are centralized.

Proxy Layer

All outgoing calls to external APIs go through api-broker. This allows:

  • Filtering payload before sending
  • Masking personal data
  • Logging call metadata
  • Managing providers centrally

For more details about the proxy, visit the product page API Proxy.