Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Introduction to FRAME

Welcome to the FRAME documentation. This page provides a general overview of what FRAME is, how it is structured, and the benefits of its architecture.

FRAME is a modern, highly scalable monorepo designed to accelerate the development of web applications, backend services, and AI-powered tools. By adopting a monorepo approach, FRAME ensures consistency across the ecosystem, making it easier to build and evolve complex products through efficient code sharing, development tooling, strict typing, and a preconfigured testing suite.

  1. End-to-end strict typing
  2. Context for artificial intelligence
  3. First-class developer experience
  4. High-level testing

The monorepo is built on cutting-edge tooling such as Turborepo (for efficient monorepo task management) and pnpm (for safe, efficient dependency management).

FRAME’s structure is primarily divided into two large blocks: Applications (apps/) and Packages (packages/).

This is where user-facing applications live. FRAME includes several applications optimized for different use cases:

  • Next.js (apps/next): The main frontend portal or dynamic web application. Built with the Next.js App Router (React 19), it provides SSR, strong performance, and a structured design.
  • NestJS (apps/nest): The ecosystem’s primary backend. Built on NestJS, it handles robust business logic, authentication, secure database connections, and integrations with external services.
  • Astro (apps/astro): Starlight documentation portal template for FRAME-derived projects.
  • Docs site (docs/): This site — monorepo documentation powered by Astro and Starlight, loading guides from each package’s docs/ folder.

Packages encapsulate logic, components, and configuration consumed by one or more applications, promoting a DRY (Don’t Repeat Yourself) approach. Some of the most important ones are:

  • @frame/core: The core of pure configuration and utilities for the ecosystem. It ensures consistent validations using Zod schemas.
  • @frame/models: Manages database models (PostgreSQL), schemas, and migrations with Drizzle ORM. It centralizes data definitions so the backend and frontend share the same TypeScript types and Zod schemas.
  • @frame/auth: SDK for the full authentication flow, sessions, and access control, implemented with Better Auth.
  • @frame/mail: SDK for sending email and rendering transactional email templates built with React Email.
  • @frame/cli: CLI for initializing environments and managing secrets.
  1. Strict Typing (Type Safety): By sharing the same models (@frame/models) and utilities (@frame/core), any change in the database or backend API is immediately reflected as a TypeScript compile error in the frontend when incompatibilities exist, ensuring seamless integration.
  2. Single Source of Truth: TypeScript, ESLint (Oxlint), Vitest, and Prettier (Oxfmt) configurations are unified, guaranteeing the same code-quality standards across every part of the project.
  3. Massive Code Reuse: Instead of reimplementing form validation, you extract the Zod schema from @frame/models.
  4. Agile Development and Testing: The entire infrastructure ships with Vitest and Playwright configured. Turborepo runs all tests and project builds in parallel with caching, avoiding unnecessary wait times.

FRAME is not merely a collection of applications; it is an architecture designed to scale systems to enterprise level while preserving development agility.